본문 바로가기

ML&DL and LLM

(Docker) ollama + chroma로 RAG 구성

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