49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
# rag_chain.py
|
|
import os
|
|
import weaviate
|
|
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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" # 필요할 경우
|
|
}
|
|
)
|
|
|
|
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)
|