# rag_chain.py import os import weaviate from weaviate.auth import AuthApiKey from weaviate.classes.init import Auth from langchain.vectorstores import Weaviate from langchain.chains import RetrievalQA from langchain.chat_models import ChatOpenAI from langchain.embeddings import OpenAIEmbeddings def build_rag_chain(): # 1. Weaviate 클라이언트 auth_config = weaviate.AuthApiKey(api_key="01jryrcctd8c8vxbj4bs2ywrgs") # client = weaviate.connect_to_weaviate_cloud(cluster_url="http://183.111.96.67:32668", # auth_credentials=Auth.api_key("01jryrcctd8c8vxbj4bs2ywrgs"), # headers={ # "X-OpenAI-Api-Key": "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" # 필요할 경우 # }) # client = weaviate.Client( # url="http://183.111.96.67:32668", # 예: "http://183.111.96.67:32668" # auth_client_secret=Auth.api_key("01jryrcctd8c8vxbj4bs2ywrgs"), # 필요 없으면 제거 # additional_headers={ # "X-OpenAI-Api-Key": "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" # 필요할 경우 # } # ) client = weaviate.connect_to_custom( http_host="183.111.96.67", http_port=32668, auth_credentials=AuthApiKey("01jryrcctd8c8vxbj4bs2ywrgs"), # 인증이 필요 없으면 생략 가능 headers={"X-OpenAI-Api-Key": "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"} # 필요시 ) if client.is_ready(): print("Weaviate 연결 성공!") else: print("연결 실패. 서버 상태를 확인하세요.") # 2. 벡터스토어 vectorstore = Weaviate( client=client, index_name="LangDocs", text_key="text", embedding=OpenAIEmbeddings() ) # 3. HuggingFace LLM (예: mistralai/Mistral-7B-Instruct-v0.2) llm = ChatOpenAI(temperature=0) retriever = vectorstore.as_retriever() # 4. RetrievalQA chain 구성 return RetrievalQA.from_chain_type(llm=llm, retriever=retriever)