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 产出的对话式回复不符合"报告"预期)。