two-phase-reply.md
2.14 KB
两段式回复:任务识别 + ack + 追发结果
问题
admin 收到复杂任务("研究一下 taste-skill")时,hermes 执行需要 1-5 分钟。 单段式回复会让对方等很久才收到回复。
方案
两段式回复:先秒回确认,再后台执行,完成后追发结果。
实现
任务识别
_is_task_request(body) — 检查消息是否包含以下关键词:
TASK_KEYWORDS = ["研究", "学习", "查一下", "分析", "帮我", "看看",
"安装", "配置", "搭建", "写一个", "改一下",
"怎么", "什么是", "解释", "总结", "调查",
"research", "install", "setup", "analyze"]
命中任意 1 个即判定为任务请求。
ack 生成
_gen_ack(ctx, body, sender_disp) — 根据任务内容生成个性化确认:
"研究/学习/看看" → "收到,我来研究,搞定了给你报告"
"安装/配置/搭建" → "好的,我来处理,完了给你结果"
"查/分析" → "收到,我查一下,稍等给你报告"
"写/改/帮" → "好的,我来弄,弄好给你报告"
其他 → "收到,我来处理,有结果跟你说"
流程
def process_event(event, ...):
if role == "admin" and _is_task_request(body):
# Phase 1: 立刻发送 ack
ack = _gen_ack(ctx, body, sender_disp)
_send_text_verified(talker, ack_text, key)
_queue_insert(event, ack_text, ..., "ack")
# Phase 2: 正常执行 + 发送结果
draft, exit_code, stderr = generate(ctx, event=event, role=role)
# ... verify → policy → send
与普通 admin 的区别
| 模式 | ack | prompt | 回复格式 |
|---|---|---|---|
| admin 任务 | ✅ 先发 | "执行任务→输出报告" | 做了什么/发现了什么/结果 |
| admin 闲聊 | ❌ | "以火星人口吻回复" | 对话式 |
| member | ❌ | hermes -z 纯文本 | 对话式 |
当前状态
已实现。admin 任务模式的两段式回复正常运作。 待改进:admin 任务超时时不回退 member 模式(member 产出的对话式回复不符合"报告"预期)。