feat(context): 为大语言模型提供过去网页搜索的上下文记忆

此更改使聊天机器人能够记住并引用过去网页搜索的相关信息,从而显著提高响应质量和连贯性。

系统不再将每个查询视为孤立事件,而是在生成新响应之前,对之前的 `web_search` 结果缓存进行向量相似度搜索。如果发现过去的相关信息,会自动作为“相关历史搜索结果”注入到大语言模型的提示中。

这使模型能够立即访问相关背景信息,避免对已经讨论过的主题重复搜索。

为了支持这一新功能:
- 对 `web_search` 工具的提示进行了改写,以通过确保结果被高效缓存和调用,鼓励大语言模型更频繁地使用它。
- 重要工具结果(如网页搜索)的预览长度已增加
This commit is contained in:
tt-P607
2025-12-04 04:12:36 +08:00
parent f519f87884
commit 22767ce234
4 changed files with 186 additions and 13 deletions

View File

@@ -32,15 +32,35 @@ class ToolCallRecord:
"""后处理:生成结果预览"""
if self.result and not self.result_preview:
content = self.result.get("content", "")
# 联网搜索等重要工具不截断结果
no_truncate_tools = {"web_search", "web_surfing", "knowledge_search"}
should_truncate = self.tool_name not in no_truncate_tools
max_length = 500 if should_truncate else 10000 # 联网搜索给更大的限制
if isinstance(content, str):
self.result_preview = content[:500] + ("..." if len(content) > 500 else "")
if len(content) > max_length:
self.result_preview = content[:max_length] + "..."
else:
self.result_preview = content
elif isinstance(content, list | dict):
try:
self.result_preview = orjson.dumps(content, option=orjson.OPT_NON_STR_KEYS).decode("utf-8")[:500] + "..."
json_str = orjson.dumps(content, option=orjson.OPT_NON_STR_KEYS).decode("utf-8")
if len(json_str) > max_length:
self.result_preview = json_str[:max_length] + "..."
else:
self.result_preview = json_str
except Exception:
self.result_preview = str(content)[:500] + "..."
str_content = str(content)
if len(str_content) > max_length:
self.result_preview = str_content[:max_length] + "..."
else:
self.result_preview = str_content
else:
self.result_preview = str(content)[:500] + "..."
str_content = str(content)
if len(str_content) > max_length:
self.result_preview = str_content[:max_length] + "..."
else:
self.result_preview = str_content
class StreamToolHistoryManager: