Spaces:
Runtime error
Runtime error
Upload 2 files
Browse files- question_agent.py +36 -0
- rag_agent.py +23 -0
question_agent.py
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from services.llm_service import generate_questions_from_context
|
| 2 |
+
from services.vector_service import search_similar_docs
|
| 3 |
+
|
| 4 |
+
# return type: dict
|
| 5 |
+
# example output: {"category": "์ํ ์ถ์ฒ / ๋น๊ต", "suggested_questions": ["ISA ๊ณ์ข๋ ๊ฐ์ธ์ข
ํฉ์์ฐ๊ด๋ฆฌ๊ณ์ข๋ก, ...", ..., "..."]}
|
| 6 |
+
def suggest_questions(user_message, user_profile):
|
| 7 |
+
print(f"\n๐ ์ง๋ฌธ ์ถ์ฒ ์์: '{user_message}'")
|
| 8 |
+
|
| 9 |
+
# 1๏ธโฃ ๋ฒกํฐ DB์์ ์ ์ฌ ๋ฌธ์ ๊ฒ์
|
| 10 |
+
similar_docs = search_similar_docs(user_message, top_k=5)
|
| 11 |
+
print(f"๐ ๋ฒกํฐ DB์์ {len(similar_docs)}๊ฐ ์ ์ฌ ๋ฌธ์ ๊ฒ์")
|
| 12 |
+
|
| 13 |
+
if not similar_docs:
|
| 14 |
+
print("โ ๏ธ ๋ฒกํฐ DB์์ ๊ด๋ จ ๋ฌธ์๋ฅผ ์ฐพ์ ์ ์์")
|
| 15 |
+
return {
|
| 16 |
+
"category": "์ผ๋ฐ",
|
| 17 |
+
"suggested_questions": [
|
| 18 |
+
"์ฃ์กํฉ๋๋ค. ํด๋น ์ฃผ์ ์ ๋ํ ์ ๋ณด๊ฐ ๋ถ์กฑํฉ๋๋ค.",
|
| 19 |
+
"๋ค๋ฅธ ๊ธ์ต ๊ด๋ จ ์ฃผ์ ๋ก ์ง๋ฌธํด์ฃผ์ธ์."
|
| 20 |
+
]
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
# 2๏ธโฃ ๊ฒ์๋ ๋ฌธ์ ๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก LLM์ด ์ง๋ฌธ ์์ฑ
|
| 24 |
+
suggested_questions = generate_questions_from_context(
|
| 25 |
+
user_message,
|
| 26 |
+
user_profile,
|
| 27 |
+
similar_docs
|
| 28 |
+
)
|
| 29 |
+
print(f"โจ ๋ฒกํฐ DB ๊ธฐ๋ฐ ์ง๋ฌธ {len(suggested_questions)}๊ฐ ์์ฑ")
|
| 30 |
+
for i, q in enumerate(suggested_questions, 1):
|
| 31 |
+
print(f" โ
[{i}] {q}")
|
| 32 |
+
|
| 33 |
+
return {
|
| 34 |
+
"category": "์ํ ์ถ์ฒ / ๋น๊ต",
|
| 35 |
+
"suggested_questions": suggested_questions[:3]
|
| 36 |
+
}
|
rag_agent.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from services.vector_service import search_similar_docs
|
| 2 |
+
from services.llm_service import generate_answer
|
| 3 |
+
|
| 4 |
+
def answer_question(question, user_profile=None):
|
| 5 |
+
# 1๏ธโฃ Vector DB์์ ๊ด๋ จ ๋ฌธ์ ๊ฒ์
|
| 6 |
+
docs = search_similar_docs(question, top_k=3)
|
| 7 |
+
if not docs:
|
| 8 |
+
return {"answer": "ํ์ฌ ๊ด๋ จ ์ ๋ณด๊ฐ ๋ถ์กฑํฉ๋๋ค. ๋ค๋ฅธ ์ง๋ฌธ์ ํด๋ณด์๊ฒ ์ด์?"}
|
| 9 |
+
|
| 10 |
+
# 2๏ธโฃ ๋ฌธ๋งฅ ๊ธฐ๋ฐ ๋ต๋ณ ์์ฑ
|
| 11 |
+
context = "\n".join([d["content"] for d in docs])
|
| 12 |
+
answer = generate_answer(question, context, user_profile)
|
| 13 |
+
|
| 14 |
+
return {
|
| 15 |
+
"answer": answer,
|
| 16 |
+
"source_docs": [d["source"] for d in docs]
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
def detect_intent(question):
|
| 20 |
+
if any(word in question for word in ["๋", "๋ฎ", "๋น๊ต", "๋ง", "์ "]):
|
| 21 |
+
return "numeric_query"
|
| 22 |
+
else:
|
| 23 |
+
return "semantic_query"
|