-
앞서 간단한 예제를 통해 어떤 형식으로 PDF 파일을 읽어 질의하는지 확인했습니다. 이제 실제 벡터 DB를 구축하고 그걸 읽어 질의에 답변하는 코드를 작성해보겠습니다. 1. DB 구축 및 저장 PDF 파일을 읽어와 chroma_db라는 로컬 폴더를 만들고 그 안에 벡터 데이터를 영구 저장합니다. # ingest.py import os from langchain_community.document_loaders import PyPDFLoader from langchain_ollama import OllamaEmbeddings from langchain_chroma import […]
-
이제 실제 pdf 파일을 기반으로 AI가 답변하는 완전한 로컬 RAG(Retrieval-Augmented Generation) 파이프라인의 전체 소스 코드를 작성해보겠습니다. 코드를 작성하기 전에 Qwen을 실행하여 ‘Roborock Qrevo Curv 2 Flow’ 모델의 로봇청소기와 관련된 질문을 하겠습니다. 해당 로봇 청소기는 신제품이라 Qwen3 모델에 학습은 되지 않았을 겁니다. % ollama run qwen3:8b >>> 'Roborock Qrevo Curv 2 Flow' 제품에서 롤러가 하는 역할은? […]
-
여러 자료(여기서는 PDF 문서로 할 예정)를 읽어 벡터 데이터베이스(Vector DB)로 가공하기 위해 필요한 파이썬 개발 환경 및 필수 패키지 설치 단계를 설명합니다. 1. 파이썬 가상환경(venv) 생성 및 활성화 다양한 파이썬 프로젝트를 진행할 때 패키지 버전 충돌을 방지하기 위해, 독립된 가상환경으로 하는 것이 편하다. % mkdir local-rag-project % cd local-rag-project % /opt/homebrew/bin/python3 -m venv venv % […]
-
로컬 LLM 환경을 구축하기 위해 연구하며 정리한 문서 입니다. 구축 환경은 Apple Mac mini M4(RAM:16GB) 입니다. 외부 인공지능 API(OpenAI 등)를 사용하지 않고, 100% 로컬 환경에서 구동되는 RAG(Retrieval-Augmented Generation) 시스템을 만들기 위한 Ollama 설치 및 초기 환경 설정 방법을 설명합니다. 1. Homebrew로 Ollama 설치 및 실행하기 macOS의 패키지 매니저인 Homebrew를 사용하면 터미널 명령어 한 줄로 Ollama를 […]
-
파이썬 스크립트를 작성하다 보면 내가 보낸 Request의 User-Agent를 확인해야 하는 경우가 있다. 이때 유용하게 활용할 수 있을것으로 보인다. import httpx response = httpx.get("https://httpbin.org/user-agent") print(response.json())
-
크롤링을 하다보면 팝업창을 제어해야 하는 경우가 많다. 이러한 팝업창의 ‘확인’ 버튼을 눌러주지 않으면 더이상 진행이 되지 않아 크롤링에 문제가 생긴다. 1. 일반적인 팝업창 일반적인 팝업창은 아래 예시 코드와 같이 팝업창 발생시 핸들러가 동작해 제어토록 한다. with sync_playwright() as playwright: browser = playwright.chromium.launch() page = context.new_page() # dialog 이벤트 핸들러 등록 def on_dialog(dialog): print(f'[+] 팝업 내용 […]
-
한동안 크롤링 스크립트를 잘 운영하다 어느날부터 아래와 같은 에러가 발생. File "/home/pi/apti/lib/driver_open_close.py", line 23, in open_Driver driver = webdriver.Chrome(service=service, options=options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/pi/.venv/lib/python3.11/site-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__ super().__init__( File "/home/pi/.venv/lib/python3.11/site-packages/selenium/webdriver/chromium/webdriver.py", line 66, in __init__ super().__init__(command_executor=executor, options=options) File "/home/pi/.venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 250, in __init__ self.start_session(capabilities) File "/home/pi/.venv/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 342, in start_session response = self.execute(Command.NEW_SESSION, caps)["value"] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File […]
-
웹 크롤링 시 Selenium과 requests에서 상호 쿠키를 사용할 필요가 있다. 아래 코드로 셀레니움으로 로그인 및 쿠키를 저장하고 활용해보자. from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from webdriver_manager.chrome import ChromeDriverManager import requests import time import pickle def open_Driver(): options = Options() options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) […]
-
1. 크롬드라이버 설치 pi@raspberrypi:~ $ sudo apt-get install chromium-chromedriver 2. 가상환경 생성 pi@raspberrypi:~ $ python -m venv .venv pi@raspberrypi:~ $ source .venv/bin/activate 3. 셀레니움, BeautifulSoup4 설치 (.venv) pi@raspberrypi:~ $ pip install –upgrade pip (.venv) pi@raspberrypi:~ $ pip install selenium (.venv) pi@raspberrypi:~ $ pip install bs4 이제 아래 코드를 실행해서 ‘Google’ 이라고 나오는지 확인한다. from selenium […]
-
블로그를 Cafe24 웹호스팅에서 Amazon lightsail로 이전했습니다. 이전하며 아래 부분이 놀라웠고 공부하는셈 치고 좀 더 써봐야겠습니다. 1. 클릭 몇번으로 워드프레스 설치가 그냥 되는구나? 2. 月 $3.5면 커피 한잔 값인데? (月 $5 짜리로 해야 워드프레스가 무리 없이 돌아가더라…) 3. 간단한 명령어로 SSL 설정(Let’s Encrypt), 게다가 주기적으로 인증서 갱신까지 자동으로?