xueyiming 23 stundas atpakaļ
vecāks
revīzija
62a734b339
1 mainītis faili ar 26 papildinājumiem un 4 dzēšanām
  1. 26 4
      applications/utils/chat/rag_chat_agent.py

+ 26 - 4
applications/utils/chat/rag_chat_agent.py

@@ -1,3 +1,4 @@
+import asyncio
 from typing import List
 
 from applications.config import Chunk
@@ -145,11 +146,20 @@ class RAGChatAgent:
     @staticmethod
     def split_query_prompt(query):
         prompt = f"""
-        请将以下问题拆解成最多3个宽泛的子问题。要求:
+        你是一个信息检索助理,负责把用户的问题拆解为“更宽泛但仍同类、且彼此不重叠”的子问题,用于召回多样证据。
 
-        1. 子问题应该围绕原始问题本身展开,但需要更宽泛,避免过于细化。
-        2. 每个子问题应关注原始问题的核心内容,但从不同的角度、层面或维度去思考。
-        3. 子问题要求和原问题同属同一类别
+        【目标】
+        - 生成 1–3 个“更宽泛”的子问题(broad questions),它们应与原问题同一类别/主题,但从不同角度扩展;避免把原问题切得更细(avoid over-specific)。
+        - 子问题之间尽量覆盖不同维度(例如:背景/原理、影响/应用、比较/趋势、方法/评估 等),减少语义重叠(≤20% 相似度)。
+
+        【必须遵守】
+        1) 与原问题同类:如果原问题是技术/科普/对比/流程类,子问题也应保持同类语气与目标。
+        2) 更宽泛:去掉过细的限制(具体数值/版本/人名/时间点/实现细节),但保留主题核心。
+        3) 去重与互补:不要改写成近义句;每个子问题关注的面不同(角度、层面或受众不同)。
+        4) 可检索性:避免抽象空话;每个子问题都应是可用于检索/召回的良好查询。
+        5) 数量自适应:若无法合理扩展到 3 个,就输出 1–2 个;不要为了凑数而重复。
+        6) 语言一致:与原问题同语言输出(中文入→中文出;英文入→英文出)。
+        7) 仅输出 JSON,严格符合下述 schema;不要输出额外文字或注释。
 
         原始问题:
         {query}
@@ -172,3 +182,15 @@ class RAGChatAgent:
             model="DeepSeek-V3", prompt=prompt, output_type="json"
         )
         return response
+
+
+# 你需要确保这个方法是异步执行的
+async def main():
+    rag_chat_agent = RAGChatAgent()
+    # 使用 await 调用异步方法
+    split_query = await rag_chat_agent.split_query('在小红书创作图文帖子,收集与“打工人精神状态”相关的网络流行梗和表情包素材的方法或手段是什么?需要使用什么App/软件/网站等工具来做到?')
+    print(split_query)
+
+if __name__ == '__main__':
+    # 使用 asyncio.run 来运行主方法
+    asyncio.run(main())