mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 09:28:14 +00:00
fix(agent): 修正系统提示词的回复投递规则,补充事实性约束
问题一:提示词说反话,导致 qq 回复大量丢失。
v2 架构曾有「回复自动回投来源通道」的能力(IOManager.routes + RegisterOutputRoute),
但 304c3ae 'remove IO route mapping' 删掉了整套路由映射。此后:
- outputCh 唯一消费者(cmd/homed/main.go)只处理 memory_candidate,其余静默丢弃,
output.go 末尾的 EmitTextTo 兜底成为死路
- ResponseCh 只剩 webui /api/v1/chat、cli、clawhubadapter 三处同步 HTTP 用途,
不再承担渠道投递;qq 走 InjectInterruptText → interruptCh,ResponseCh 恒为 nil
- emitResponse 从不调 GetDevice(),纯文本对异步通道 = 丢弃
提示词却仍写着「直接返回纯文本即可送达,无需额外工具」「output_send 不是回复的必要步骤」。
实测近 12h 6 次 qq 输入仅 1 次送达,规律是 tools 含 output_send__qq 才到,否则全丢,
且 agent 自认为已回复。现改为明确区分同步/异步通道并要求显式 output_send__。
问题二:无事实性约束,工具失败时模型编造内容。
qq_get_message 30 次调用有 9 次返回 not_found:true(NapCat 响应解析失败),
模型未如实说明,转而虚构消息正文——包括一条不存在的 message_id=1321159191
(全 journal 零命中、不在任何调用记录里)配上完全虚构的正文
「我想搭一个 Dify 工作流,想做一个人脸识别系统 demo」,用户从未说过。
虚构内容经 formatMergedTimeline 回灌【对话时序】后被当作既有事实反复复述放大
(两条消息 reasoning_content 达 180KB / 220KB)。
现补充:工具返回 not_found/空结果必须如实说明不得猜测;【对话时序】是历史事实摘要
不是当前任务;无依据的人名/需求/数字/路径直接说不知道。
注:set() 用 INSERT OR IGNORE,改此默认值只影响新部署;
本机运行实例的 config.db core.agent.system_prompt 已同步更新(改前备份)。
验证:重新部署后实测 agent 明确回答 qq 需 output_send__qq 且纯文本会被丢弃;
对 message_id=1321159191 如实报告 not_found 并声明「正文完全不知道,绝不猜」。
This commit is contained in:
@ -568,11 +568,21 @@ func (r *ConfigRegistry) seedDBValues(dataDir string) {
|
||||
|
||||
WebUI 概览页展示你的立绘,可通过 /mascot.webp 直接访问。如输出通道支持图片引用,可借此发送自己的立绘。
|
||||
|
||||
回复会自动发送到用户的输入来源通道,直接返回纯文本即可送达,无需额外工具。
|
||||
输出门工具 output_send__{通道名} 仅用于主动向指定通道推送消息(群发、主动通知、向其他通道发言),不是回复的必要步骤。用 output_list_channels 查看可用通道。
|
||||
使用 output_send__{通道名}_help 查看每个通道的格式说明。
|
||||
【回复投递规则 —— 必读,违反会导致用户收不到任何回复】
|
||||
除 webui / cli 这类同步请求通道外,纯文本回复不会自动送达任何通道。
|
||||
面向 qq、wechat、a2a、acp 等异步通道时,必须显式调用 output_send__{通道名} 把内容发出去;
|
||||
只返回纯文本会被直接丢弃,用户永远收不到,而你会误以为已经回复过了。
|
||||
用 output_list_channels 查看可用通道,output_send__{通道名}_help 查看该通道的 meta/格式要求
|
||||
(qq 等通道的 meta 需要 group_id 或 user_id 指明发给谁,缺失会发送失败)。
|
||||
输出通道可多次调用,长消息应当分多次发出而不是一口气发完。
|
||||
|
||||
【事实性约束 —— 不得编造】
|
||||
只根据工具真实返回的内容作答。当 qq_get_message 等工具返回 not_found:true、
|
||||
"解析 NapCat 响应失败"、"未找到" 或空结果时,说明你没有拿到消息正文:
|
||||
必须如实说明未取到,或换 qq_get_history 等工具重试,绝不允许凭 message_id 猜测或虚构正文。
|
||||
【对话时序】里的历史条目是过去发生的事实摘要,不是当前任务;不要把其中的内容当成用户此刻的新要求。
|
||||
涉及具体人名、需求、数字、路径时,若上下文中没有依据,直接说不知道,不要补全细节。
|
||||
|
||||
当用户上传图片或音频时,系统会自动附着媒体内容。如果模型不支持直接处理多媒体,请调用对应的媒体处理工具。`)
|
||||
|
||||
set("core.input_processing.image.fallback_provider", "")
|
||||
|
||||
Reference in New Issue
Block a user