This commit is contained in:
@@ -16,8 +16,8 @@ from ..main_graph.main_graph_builder import build_react_main_graph
|
||||
from ..main_graph.tools.graph_tools import AVAILABLE_TOOLS, TOOLS_BY_NAME
|
||||
from ..main_graph.config import set_stream_writer
|
||||
from ..main_graph.utils.rag_initializer import init_rag_tool
|
||||
from ..core.intent_classifier import get_intent_classifier
|
||||
from ..logger import debug, info, warning, error
|
||||
from backend.app.core.intent_classifier import get_intent_classifier
|
||||
from backend.app.logger import debug, info, warning, error
|
||||
from ..main_graph.state import MainGraphState, CurrentAction
|
||||
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"""
|
||||
|
||||
from typing import List, Dict, Any
|
||||
from ..logger import error # 保持兼容,或者替换为 logger
|
||||
from backend.app.logger import error # 保持兼容,或者替换为 logger
|
||||
|
||||
class ThreadHistoryService:
|
||||
"""线程历史查询服务"""
|
||||
|
||||
@@ -3,9 +3,10 @@ from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
|
||||
|
||||
def create_system_prompt(tools: list = None) -> ChatPromptTemplate:
|
||||
"""
|
||||
创建系统提示模板,可选择动态注入工具描述。
|
||||
创建系统提示模板,整合多子系统能力、检索策略与回答规范。
|
||||
"""
|
||||
tools_section = ""
|
||||
# 构造工具描述
|
||||
tools_section = "无可用工具"
|
||||
if tools:
|
||||
tool_descs = []
|
||||
for tool in tools:
|
||||
@@ -14,27 +15,46 @@ def create_system_prompt(tools: list = None) -> ChatPromptTemplate:
|
||||
tool_descs.append(f"- {name}: {desc}")
|
||||
tools_section = "\n".join(tool_descs)
|
||||
|
||||
system_template = (
|
||||
"你是一个智能助手,具有三个专业子系统和RAG检索能力,请使用中文交流。\n\n"
|
||||
"【核心功能】\n"
|
||||
"1. 📚 词典/翻译子系统 - 查询单词、翻译文本、提取术语、每日一词\n"
|
||||
"2. 📰 资讯分析子系统 - 查询新闻、分析URL、提取关键词、生成报告\n"
|
||||
"3. 📇 通讯录子系统 - 查询联系人、添加联系人、管理通讯录\n"
|
||||
"4. 🔍 RAG检索 - 从知识库中检索相关信息回答问题\n\n"
|
||||
"【用户背景信息】\n"
|
||||
"以下是对当前用户的已知信息和长期记忆,你必须优先采纳:\n"
|
||||
"{memory_context}\n"
|
||||
"【可用工具与使用规则】\n"
|
||||
f"{tools_section}\n"
|
||||
"工具调用时请直接返回所需参数,无需额外说明。\n\n"
|
||||
"【回答要求(必须遵守)】\n"
|
||||
"1. 回答必须简洁、直接。\n"
|
||||
"2. 如果你认为该问题需要进行深入的推理或思考,请务必将你的思维链或推理过程用 `<think>` 和 `</think>` 标签包裹起来,放在回答的最前面。\n"
|
||||
"3. 优先利用已知用户信息进行个性化回复。\n"
|
||||
"4. 若无信息可依,礼貌询问或提供通用帮助。"
|
||||
)
|
||||
|
||||
# 使用 f-string 将 tools_section 直接嵌入,而 memory_context 用双花括号转义保留为变量
|
||||
system_template = f'''你是一个智能助手,具备以下专业子系统和检索能力。请使用中文交流。
|
||||
|
||||
## 核心功能
|
||||
1. 📚 词典/翻译子系统 – 查询单词、翻译文本、提取术语、每日一词
|
||||
2. 📰 资讯分析子系统 – 查询新闻、分析URL、提取关键词、生成报告
|
||||
3. 📇 通讯录子系统 – 查询联系人、添加联系人、管理通讯录
|
||||
4. 🔍 RAG检索 – 从知识库中检索相关信息回答问题
|
||||
|
||||
## 检索与信息获取策略
|
||||
当收到用户问题时,请按以下优先级处理:
|
||||
1. **RAG 检索(第1次)**:首先尝试从知识库中查找答案。
|
||||
2. **ReRAG(第2次优化检索)**:如果第一次检索结果不相关或不充分,可以优化查询后再次进行 RAG 检索。
|
||||
3. **联网搜索**:如果两次 RAG 检索后仍无法获得满意答案,必须使用联网搜索获取最新信息。
|
||||
**重要约束**:
|
||||
- 最多进行 **2 次** RAG 检索尝试。
|
||||
- 第3次决定获取信息时,必须选择**联网搜索**,禁止无休止的本地检索。
|
||||
- 如果已经明确知识库不包含该信息(例如用户询问实时新闻),可以直接进入联网搜索。
|
||||
|
||||
## 可用工具
|
||||
{tools_section}
|
||||
工具调用时请直接返回所需参数,无需额外说明。
|
||||
|
||||
## 用户背景信息
|
||||
以下是当前用户的已知信息和长期记忆,你应在回答中优先利用这些信息进行个性化回复:
|
||||
{{memory_context}}
|
||||
若无相关信息,可礼貌询问或提供通用帮助。
|
||||
|
||||
## 回答要求(必须严格遵守)
|
||||
1. **来源标注**:回答开头必须明确标注信息来源,格式如下:
|
||||
- 使用知识库时:`【知识库:来源描述】`
|
||||
- 使用联网搜索时:`【联网搜索:来源描述】`
|
||||
- 若同时用到多个来源,按实际使用顺序标注,例如:`【知识库:三国演义】【联网搜索:百度百科】`
|
||||
2. **思维链**:如果问题需要深入推理或复杂思考,请将推理过程用 `<think>...</think>` 标签包裹,放在回答最前面(来源标注之前)。
|
||||
3. **简洁直接**:回答应重点突出、条理清晰,避免冗长。
|
||||
4. **个性化**:结合用户信息进行针对性回复。
|
||||
5. **无依据时**:若既无知识库支撑也无联网搜索结果,请如实说明无法回答,并建议用户提供更多信息或尝试其他方式。
|
||||
'''
|
||||
|
||||
return ChatPromptTemplate.from_messages([
|
||||
("system", system_template),
|
||||
MessagesPlaceholder(variable_name="messages")
|
||||
])
|
||||
])
|
||||
Reference in New Issue
Block a user