提示: 刚接触 Failproof AI 可观测性?本页是完整的 SDK 事件参考文档。
安装
SDK 以私有 wheel 包的形式分发给客户,而非通过公共包索引。您的入职培训将涵盖如何获取、安装和固定版本——如需访问权限,请联系您的 Failproof AI 联系人。 安装完成后,确认您已成功安装:快速开始
为真实调用添加插桩
在实践中,您需要对现有的智能体代码进行包装。在模型调用前后分别发送model_request 和 model_response 事件,使这两个事件覆盖真实请求的时间范围,以便 Failproof AI 可观测性将它们配对:
tool_use 和 tool_result 进行包装,并在这一对事件中复用同一个 tool_call_id。
以下是这些事件到达仪表板后的样式,按类型用颜色区分,并支持按环境、智能体和会话进行筛选:

configure()
event.* 调用之前调用一次。可以省略;默认值开箱即用。所有参数均为仅限关键字参数;请按上面所示按名称传递。
当 base_dir 为 None(默认值)时,SDK 会读取 $AGENTEYE_HOME(如果已设置),否则回退到 ~/.agenteye。这与采集器自身的解析逻辑一致,因此单个 AGENTEYE_HOME 环境变量可同时为 SDK 和采集器配置共享的事件缓冲目录。
环境
为每个事件标记一个部署环境(production、staging、qa、canary 等)。设置一次,SDK 会自动将其附加到每个事件上。
方式一:通过 configure():
configure(environment=...) 优先于环境变量。若两者均未设置,默认为 "dev"。
环境值会作为一级过滤器显示在仪表板中,并存储在服务器上以支持快速查询。
警告: 环境值不得包含字面逗号,。仪表板过滤器在传输时使用逗号分隔的多选格式(?environment=prod,staging),因此名为prod,blue的环境会被拆分为两个值。包含逗号的环境值的事件将在摄取时被拒绝。
数据与隐私
SDK 仅记录您显式传递的字段。提示词、消息、工具输入输出以及模型内容,只有在您将其传递给event.* 调用时才会被捕获。不会从您的进程中读取任何内容,也不会有隐式捕获。您未设置的任何字段将从事件中完全省略,不会写入磁盘。
因此,数据脱敏是您的选择和责任。如果提示词或工具负载中包含您不希望存储的 PII 或密钥,请在将其传递给事件方法之前进行清除或掩码处理。
事件参考
大多数事件以共享关联 ID 的开始/结束对形式出现:tool_use 和 tool_result 共享一个 tool_call_id,hook_triggered 和 hook_completed 共享一个 hook_id,human_wait 和 human_input 共享一个 input_id。发送开始事件,执行工作,然后使用相同 ID 发送结束事件。Failproof AI 可观测性会自动匹配这一对事件并为您计算 duration_ms,因此您无需自行传递 duration_ms。

所有方法还接受任意
**kwargs 用于自定义元数据(参见自定义字段)。
event.agent_start()
当智能体开始工作时发送。
event.agent_end()
当智能体完成工作时发送。
event.tool_use()
当智能体调用工具时发送。与 tool_result 配对;SDK 自动计算 duration_ms。
event.tool_result()
当工具返回时发送。通过 tool_call_id 与 tool_use 关联。
event.model_request()
在向 LLM 发送提示词之前发送。
messages 条目的 content 可以是普通字符串,也可以是 Anthropic 风格的块列表。采样参数(temperature、max_tokens 等)可作为额外 kwargs 传递。
event.model_response()
当 LLM 返回响应时发送。
content 可以是普通字符串(通用提供商)或 Anthropic 风格的内容块列表。工具调用以 {"type": "tool_use", ...} 块的形式存在于 content 中,没有单独的 tool_calls 字段。
event.hook_triggered()
当钩子触发时发送。与 hook_completed 配对;SDK 自动计算 duration_ms。
event.hook_completed()
当钩子完成时发送。通过 hook_id 与 hook_triggered 关联。
event.error()
当发生未处理的错误时发送。
人在回路事件
人在回路事件让您能够监督人员介入智能体执行的关键时刻(等待审批、提供输入、暂停或停止智能体)。通过这些事件,您可以衡量人类响应所需的时间(SDK 会自动为配对事件计算duration_ms),审计谁暂停或中断了智能体,并构建在仪表板中呈现的审批和监督工作流。
event.human_wait()
当智能体暂停执行以等待人类提供输入时发送。与 human_input 配对;SDK 自动计算 duration_ms(人类响应所需时间)。
event.human_input()
当人类提供输入且智能体恢复执行时发送。通过 input_id 与 human_wait 关联。duration_ms 自动计算,调用方不得传递。
event.human_pause()
当人类主动暂停智能体时发送(例如通过仪表板控件)。智能体被挂起但未终止。
event.human_interrupt()
当人类在执行过程中主动停止智能体时发送。与 human_pause 不同,智能体的工作被终止而非挂起。
自定义字段
任何额外的关键字参数都会在标准字段之后附加到事件中:timestamp、type 和 environment 是保留字段,如果作为自定义字段传递,将引发 ValueError(Reserved field names cannot be used as custom fields: [...])。session_id 和 agent_id 是每个事件方法的必填参数,不能再次提供;若重复传递,Python 会引发 TypeError。请使用 configure(environment=...) 或 AGENTEYE_ENVIRONMENT 变量来设置环境。
当您希望查询字段内容时,请保持负载为结构化 JSON。JSON 原生不支持的值类型——例如 datetime、UUID、decimal、set、bytes 或模型对象——将被转换为字符串,以确保记录安全继续。
事件的写入方式
事件在进程内缓冲,每隔flush_interval 秒(默认 500 毫秒)刷新到磁盘。每次刷新写入一个 JSONL 文件:

