代理钩子的有效负载结构 | AI生成和翻译

Home 2026.05

完整说明如下:载荷在 agent/shell_hooks.py:465-481_serialize_payload)中构建。对于你的 post_llm_call 钩子,以下内容将通过 stdin 传入:

{
  "hook_event_name": "post_llm_call",
  "tool_name": null,
  "tool_input": null,
  "session_id": "sess_abc123",
  "cwd": "/Users/lzwjava/projects/jekyll-ai-blog",
  "extra": {
    "user_message": "what the user asked",
    "assistant_response": "the agent's final response text",
    "conversation_history": [
      {"role": "system", "content": "..."},
      {"role": "user", "content": "..."},
      {"role": "assistant", "content": "..."}
    ],
    "model": "deepseek/deepseek-v4-pro",
    "platform": "cli"
  }
}

各字段说明:

字段 来源
hook_event_name 始终为 "post_llm_call"
tool_name 非工具事件始终为 null
tool_input 非工具事件始终为 null
session_id kwargs.get("session_id")
cwd 渲染时的 Path.cwd()
extra _TOP_LEVEL_PAYLOAD_KEYS{"tool_name", "args", "session_id", "parent_session_id"})之外的所有其他内容

extra 中的键来自 run_agent.py:15804-15812 中的调用:

_invoke_hook("post_llm_call",
    session_id=self.session_id,
    user_message=original_user_message,       # → extra
    assistant_response=final_response,        # → extra
    conversation_history=list(messages),      # → extra
    model=self.model,                          # → extra
    platform=getattr(self, "platform", None) or "",  # → extra
)

其他钩子具有不同的载荷。 快速参考:

钩子 tool_name tool_input 重要 extra
pre_tool_call "terminal" {"command": "..."} task_id, tool_call_id
post_tool_call "terminal" {"command": "..."} task_id, result, duration_ms, tool_call_id
pre_llm_call null null user_message, platform, conversation_history
post_llm_call null null user_message, assistant_response, conversation_history, model, platform
on_session_start null null platform, session_id
on_session_end null null platform, session_id
subagent_stop null null child_role, duration_ms, result_summary

因此,在你的脚本中,你可以通过 extra.assistant_response 获取回答片段,通过 extra.model 了解使用了哪个模型,或者通过 extra.platform 知道运行环境。需要我更新通知以包含这些信息吗?


Back Donate