dongchan21 commited on
Commit
efc925f
ยท
verified ยท
1 Parent(s): b1810bf

Upload 2 files

Browse files
Files changed (2) hide show
  1. question_agent.py +36 -0
  2. 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"