Skip to content

Commit 0d244bb

Browse files
authored
Feat: QnA 에이전트에 RAGSystem 직접 적용
integrate qna_graph
2 parents 50f992c + 281ef9c commit 0d244bb

1 file changed

Lines changed: 15 additions & 57 deletions

File tree

core/qna/agent/qna_agent.py

Lines changed: 15 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,25 @@
1-
from typing import List, Dict, Any
2-
3-
from langchain_core.messages import SystemMessage
4-
from langchain_openai import OpenAIEmbeddings
5-
61
from core.shared.states.states import CustomsAgentState
7-
from core.shared.utils.llm import get_llm
2+
from core.qna.main import RAGSystem
83

9-
# RAG 에이전트용 더미 데이터베이스
10-
class CustomsRAG:
11-
def __init__(self, vector_db_path: str = "customs_faiss.index", csv_path: str = "customs_data.csv"):
12-
"""
13-
FAISS 벡터DB와 CSV 데이터를 로드합니다.
14-
실제 구현에서는 이미 생성된 벡터DB를 로드한다고 가정
15-
"""
16-
self.embeddings = OpenAIEmbeddings()
17-
# 더미로 설정 - 실제로는 faiss.read_index(vector_db_path)
18-
self.vector_db = None
19-
self.documents = [] # 실제로는 CSV에서 로드
20-
21-
# 더미 데이터
22-
self.dummy_documents = [
23-
{"content": "관세는 외국 상품을 수입할 때 부과되는 세금입니다.", "category": "관세기본"},
24-
{"content": "통관은 물품이 세관을 통과하는 절차입니다.", "category": "통관절차"},
25-
{"content": "FTA 협정국에서 수입하는 경우 관세 혜택을 받을 수 있습니다.", "category": "FTA"},
26-
]
27-
28-
def search_similar_documents(self, query: str, k: int = 3) -> List[Dict[str, Any]]:
29-
"""유사한 문서를 검색합니다."""
30-
# 실제로는 FAISS 검색을 수행
31-
# query_vector = self.embeddings.embed_query(query)
32-
# scores, indices = self.vector_db.search(query_vector, k)
33-
34-
# 더미 검색 결과
35-
return self.dummy_documents[:k]
36-
374
def qna_agent(state: CustomsAgentState) -> CustomsAgentState:
38-
"""QNA RAG 에이전트"""
39-
rag = CustomsRAG()
40-
llm = get_llm()
41-
42-
# 유사 문서 검색
43-
similar_docs = rag.search_similar_documents(state["query"])
5+
"""QNA RAG 에이전트 - 실제 RAG 시스템 사용"""
446

45-
# 검색된 문서들을 컨텍스트로 구성
46-
context = "\n".join([f"- {doc['content']}" for doc in similar_docs])
7+
# RAG 시스템 초기화 및 데이터베이스 설정
8+
rag_system = RAGSystem()
9+
rag_system.setup_database()
4710

48-
rag_prompt = f"""
49-
다음 관세청 관련 정보를 참고하여 사용자의 질문에 정확하고 도움이 되는 답변을 제공해주세요.
50-
51-
참고 정보:
52-
{context}
53-
54-
사용자 질문: {state["query"]}
55-
56-
답변:
57-
"""
11+
# RAG 시스템을 사용하여 답변 생성
12+
answer = rag_system.search_and_generate(
13+
query=state["query"],
14+
top_k=5,
15+
show_details=False
16+
)
5817

59-
result = llm.invoke([SystemMessage(content=rag_prompt)])
60-
61-
state["final_response"] = result.content
18+
state["final_response"] = answer
6219
state["intermediate_results"]["qna"] = {
63-
"retrieved_docs": similar_docs,
64-
"response": result.content
20+
"response": answer,
21+
"query": state["query"]
6522
}
6623

24+
6725
return state

0 commit comments

Comments
 (0)