Agent-Fox 智能助手
2025.8.29 让GPT老师给小狐所有的MCP tools都调整了工具使用说明和input schema的参数说明。重点加入了推荐各个工具之间相互配合的提示文字。
2025.8.29 改进了get_posts_by_keyword的打分算法。主要是位置加权(标题 > 摘要 > 正文 > 评论),频次做对数压缩(避免长文刷分)。
2025.8.29 新建了AI_excerpt插件,可以调用core-llm-manager的LLM调用接口和llm-data-bridge的隐私内容过滤接口。自动生成[public_excerpt][/public_excerpt]和[private_excerpt][/private_excerpt]两类摘要。然后发现,原生搜索结果页面会显示全部(也就是两部分)摘要。于是又加了个mu-plugins来login-aware-excerpt.php根据登录状态剔除另一部分。
2025.8.28 将get_content_by_keyword升级为支持AND, OR, NOT三种逻辑运算的布尔搜索,结果全部召回,并统一进行去重和打分排序。
2025.8.28 修复了因为html代码乱入导致的DOM结构混乱的bug。在前端修复 escapeHtml
转义函数,确保 &, <, >, ", '
都被正确转义;在 mdToHtml
里对模型输出的 Markdown 先把 <
和 >
全部转义,再交给 marked.parse
渲染,这样可以继续正常解析 []()
链接、粗体、列表等 Markdown 语法,同时禁止模型注入任何原始 HTML,从而避免结构破坏和样式污染;如果模型输出 HTML 代码,会被安全地展示为文本,而不会被当成真正的 DOM 渲染。
2025.8.28 将 get_posts_by_keyword 改造为了一个功能强大的新工具 get_content_by_keyword。这个新工具的核心功能是:根据用户提供的关键词,在所有授权访问的文章(包括私密和受密码保护的内容)中进行搜索。它不会返回整篇文章,而是以关键词为中心,提取并展示前后50个字符的文本片段。为了确保结果的有效性,所有返回的片段会首先按照其所在文章的匹配总数进行相关性排序,确保最相关的文章内容优先显示。同时,为了避免返回结果过长,该工具还内置了分页功能,将所有找到的文本片段进行分页,并在返回结果中提供清晰的摘要信息,如“从X篇文章中找到Y个匹配,当前显示第A页,共B页”,方便进行后续的翻页查询。此外,每个片段都包含了精确的字节偏移量(start),可以无缝配合 get_post_content_by_id 工具,直接从该位置读取文章的完整内容。
2025.8.27 彻底重构了,放弃了deep research的复杂多Agent方案,简简单单,单一LLM + MCP tools,ReAct架构。目前实现了九个工具。
内容检索工具: get_content_by_vector_search (语义搜索), get_posts_by_keyword (关键词搜索), get_posts_by_tag (标签浏览), get_posts_by_category (分类浏览)
内容导航工具: get_recent_posts (获取最新文章), get_site_stats (站点统计), get_post_content_by_id (完整文章阅读)
内容探索工具: list_all_tags (标签目录), list_all_categories (分类目录)
贵啊,Claude真贵啊!我今天一天往OpenRouter充了五六次,花了得有五六百块钱。
改进方向:1, 把摘要从粗暴截断改成LLM总结,2, get_posts_by_keyword返回含有该关键词的文段而非关键词所在文章的摘要
2025.7.15 bug记录:
- 向量库屏蔽没有做好,目前私密文章过滤掉了,但是密码保护的文章可以被向量库索引到,应该添加硬过滤。同时,如果一篇文章已经出现在向量库中,当公开状态变为私密或密码保护时,也应当执行从向量库清空的处理。等下,更好的逻辑应该是,向量库不过滤。只是索引的时候添加过滤选项,通过返回文段的meta信息过滤。这样,已登录用户还是可以享受到私密和密码保护文章的向量检索。
- 现在的迭代逻辑太简陋,下一步改进方向应该让第一步查询变成检索方案规划,然后调用多个LLM并发执行第一步规划的检索任务。最后再汇总。执行下一轮的“规划→执行”。最终一步汇总成最终答案回复用户。
- 但是这样一来上下文就太太太长了,所以在每一步执行结束之后应该再加一步内容压缩。因为检索回来的结果肯定没用的居多。内容压缩的逻辑应该是逐一判断每个文段是否与检索词相关,不相关就丢弃,对于相关的文段,也应当进一步提取这一段中具体哪几句话跟检索词相关,其他句子也删掉。由于是逐个文段判断,这一步也应该并发调用LLM,但应该手动限制并发数量,比如zhipu api最大并发数是30。同时用速度快的flash模型。
- 规划→并发执行→并发内容压缩→汇总→第二轮规划→并发执行→并发内容压缩→汇总→第三轮规划……
- 每一次“规划任务”的上下文应当包括每一次迭代的“汇总”信息。可以把这个整合步骤放在每一轮“汇总”阶段,直接跟上一轮的汇总文本合并。这时还应当加一步去重操作,这个不用调用LLM,因为向量库返回的文段是固定的,可以直接Python过滤掉。
- 另外我发现,几乎很少会用到关键词匹配,关键词能查到的内容,向量查询也能。而且如果用原生wordpress的关键词查询只能返回整篇文章或摘要,不能具体到段落,跟向量查询融合的不好。非要用关键词匹配的话,需要在向量库api里加一个端点直接从向量库而不是Mysql数据库查询。这样可以规范返回的格式。
- 还有一个问题是需不需要专门写入中间信息到文件,目前感觉存在python变量就够用了。
{
"plan_reasoning": "当前信息已确认博主与'宋同学'有关,但关系细节不足。下一步需深入挖掘'宋同学'的具体事迹并探索博主的其他社交圈。",
"tasks": [
{
"task_id": "task_001",
"query": "宋同学",
"tool": "search_posts_by_content",
"description": "精确查找所有提及'宋同学'的段落。"
},
{
"task_id": "task_002",
"query": "博主的朋友圈、同事、家人",
"tool": "semantic_vector_search",
"description": "模糊搜索与博主社交网络相关的文章。"
},
{
"task_id": "task_003",
"query": "聚会 OR 合作 OR 交流",
"tool": "search_posts_by_content",
"description": "关键词搜索描述社交活动场景的段落。"
}
]
}
用户的原始问题是:'博主的社会关系'
当前正在处理的任务是:'查找博主提到的朋友姓名'
--- 文档内容开始 ---
{单个文档片段的文本}
--- 文档内容结束 ---
请判断以上文档内容是否与当前任务'查找博主提到的朋友姓名'直接相关?
请只回答 "相关" 或 "不相关"。
用户的问题是:'博主的社会关系'
通过搜索,我收集到了以下高度相关的信息片段:
[
"从《与宋同学的毕业告别谈话》中提取的片段...",
"从《三观》中提取的片段...",
"从另一篇文章中提取的片段..."
]
请基于以上信息,生成一个全面、准确的回答。
bug记录:get content by keyword现在只在正文里搜索,应该也加上标题标签分类等meta信息,甚至评论。实验记录的分类需要完善,应该增加高级搜索(至少是按照标签或分类对结果筛选,或者直接增加AND OR等逻辑门操作)。偶尔会出现说到一半的文字被清空,可能是折叠到工具里面了。不过这个应该是网络波动导致的,暂时不用管。手机端不要自动锁定光标,因为会带动数字键盘,影响视野。AI_excerpt现在在原生搜索结果页面会被同时显示[public_excerpt]和[private_excerpt],应该根据登录状态进行过滤。AI_excerpt目前仅在提示词限制返回摘要的长度,应该通过限制output的max_tokens确保无误(已经发现GLM-4.5有时会原样复述大段长文本)。分类和tag的url不能正确返回。>的符号没有正确渲染,导致颜文字显示异常。经常出现莫名其妙的删除线,应该是md渲染导致。
靠,我突然发现这个东西它不就是纯纯的”Deep Research”吗,唯一区别就是把搜索源换成网站内部内容(也可以结合外部搜索)。绝对是有成熟的轮子可以直接拿来用的啊,我一个外行搁这儿费这么大劲自己搓毫无意义啊