RAG 구성 with docker
환경 정의
환경 변수
>>> CHROMA_IP = '***'
>>> CHROMA_PORT = 8000
>>> OLLAMA_IP = '***'
>>> OLLAMA_PORT = 11434
>>> LLM_MODEL = 'llama3.1'
- ollama / chromadb 모두 docker로 구성됨
Vector store 구성 및 Document embedding
Chromadb client 정의
>>> import chromadb
>>> clientChroma = chromadb.HttpClient(host=CHROMA_IP, port=CHROMA_PORT)
>>> print(clientChroma.list_collections())
- chromadb 접속을 위한 client 정의
- list_collections() = collections 현황 조회 → 처음에는 아무것도 없음 (result = list 형태)
ollama embedding function 정의
>>> from chromadb.utils.embedding_functions import OllamaEmbeddingFunction
>>> embedfuncChroma = OllamaEmbeddingFunction(
url= f"http://{OLLAMA_IP}:{OLLAMA_PORT}/api/embeddings",
model_name = LLM_MODEL
)
- ollama에서 사용하는 embedding function
- llama3.1
chromadb에서 collection 신규 생성
>>> objCollection = clientChroma .create_collection(name="collection")
- 'collection' 이름으로 생성
collection 항목 추가
>>> objCollection = clientChroma .get_collection(name="collection", embedding_function= embedfuncChroma)
>>> objCollection .add(ids=["1"], documents="My name is Ivan and I love my wife.")
>>> objCollection .peek()
- collection에 신규 항목 (Documents) 추가
RAG를 통한 vector store searching
저장된 vector store에서 search 수행
>>> query = 'what is your name?'
>>> embedfuncOllama = OllamaEmbeddings(
model=LLM_MODEL,
base_url = f"http://{OLLAMA_IP}:{OLLAMA_PORT}"
)
>>> chromaDB = Chroma(
client= clientChroma ,
collection_name = 'collection',
embedding_function = embedding_function
)
>>> doc = chromaDB .similarity_search_with_score(query)
>>> doc
>>> max_similarity_doc = min(doc, key=lambda x: x[1])[0].page_content
>>> max_similarity_doc
- embedding function 정의하여 chromadb에서 해당 function으로 query의 유사도 검색 수행 → 가장 높은 순위의 것을 가져옴
LLM 요청
RAG 결과로 가져온 document와 query를 LLM에 요청
>>> clientOllama = ollama.Client(host = f"http://{OLLAMA_IP}:{OLLAMA_PORT}")
>>> output = clientOllama.generate(
model=LLM_MODEL,
prompt=f"Using the data:{max_similarity_doc}. Respond to this Prompt: {query}. If data doesn't have an appropriate value to answer the question in the prompt, answer 'I can't answer the question"
)
정리
저장되었던 collection 정리
>>> clientOllama.delete_collection(name="collection")
>>> clientOllama.list_collections()
'ML&DL and LLM' 카테고리의 다른 글
Try it (0) | 2025.01.17 |
---|---|
LangChain - 2.6 Retrievers (0) | 2024.04.03 |
LangChain - 2.5 Vector stores GetStarted (0) | 2024.04.02 |
LangChain - 2.3 Text Splitter (0) | 2024.04.02 |
LangChain - 2.2 Document loaders (0) | 2024.04.01 |