很多团队做 AI Agent,最开始关注的是两个问题:
它能不能理解任务?
它能不能调用工具?
但一旦 Agent 进入真实业务,你会发现还有一个更重要的问题:
它出问题之后,怎么查?
比如:
它为什么给用户发了那封邮件?
它为什么调用了这个工具?
它为什么选择了这个参数?
它读过哪些上下文?
它有没有触发过人工确认?
它失败后有没有重试?
它最终输出是由哪一步生成的?
如果这些问题答不上来,AI Agent 就不适合进入生产环境。
所以,Agent 系统除了 Prompt、工具和权限,还必须设计 Event Log。
Event Log 的目标不是简单记录一行日志,而是把 Agent 的关键行为变成可追踪事件。
一个最小 Agent 执行链路可能是:
User Request -> Context Load -> Planning -> Tool Selection -> Argument Generation -> Tool Call -> Tool Result -> Final Response每一步都应该有事件。
先定义事件类型:
fromenumimportEnumfromdataclassesimportdataclass,fieldfromtypingimportDict,Any,OptionalfromdatetimeimportdatetimeimportuuidclassAgentEventType(str,Enum):USER_REQUEST="user_request"CONTEXT_LOADED="context_loaded"PLAN_CREATED="plan_created"TOOL_SELECTED="tool_selected"ARGUMENTS_GENERATED="arguments_generated"TOOL_CALLED="tool_called"TOOL_RESULT="tool_result"HUMAN_APPROVAL="human_approval"FINAL_RESPONSE="final_response"ERROR="error"@dataclassclassAgentEvent:event_id:strtrace_id:strsession_id:struser_id:strevent_type:AgentEventType timestamp:strpayload:Dict[str,Any]=field(default_factory=dict)parent_event_id:Optional[str]=None每一次用户请求生成一个 trace_id。
defnew_trace_id()->str:returnf"trace_{uuid.uuid4().hex}"defnow_iso()->str:returndatetime.utcnow().isoformat()写一个事件记录函数:
EVENT_STORE=[]deflog_event(trace_id:str,session_id:str,user_id:str,event_type:AgentEventType,payload:Dict[str,Any],parent_event_id:Optional[str]=None)->AgentEvent:event=AgentEvent(event_id=f"evt_{uuid.uuid4().hex}",trace_id=trace_id,session_id=session_id,user_id=user_id,event_type=event_type,timestamp=now_iso(),payload=payload,parent_event_id=parent_event_id)EVENT_STORE.append(event)returnevent一个用户请求进来时:
trace_id=new_trace_id()session_id="session_001"user_id="user_123"request_event=log_event(trace_id=trace_id,session_id=session_id,user_id=user_id,event_type=AgentEventType.USER_REQUEST,payload={"message":"请帮我整理上周客户反馈,并生成三条跟进建议"})加载上下文时:
context_event=log_event(trace_id=trace_id,session_id=session_id,user_id=user_id,event_type=AgentEventType.CONTEXT_LOADED,payload={"sources":["crm_feedback_summary","support_tickets"],"record_count":42,"contains_sensitive_data":False},parent_event_id=request_event.event_id)Agent 生成计划时:
plan_event=log_event(trace_id=trace_id,session_id=session_id,user_id=user_id,event_type=AgentEventType.PLAN_CREATED,payload={"steps":["summarize_feedback","cluster_common_issues","generate_follow_up_suggestions"],"risk_level":"medium"},parent_event_id=context_event.event_id)工具调用前后都要记录:
tool_event=log_event(trace_id=trace_id,session_id=session_id,user_id=user_id,event_type=AgentEventType.TOOL_CALLED,payload={"tool_name":"cluster_feedback","arguments":{"source":"support_tickets","range":"last_week"}},parent_event_id=plan_event.event_id)result_event=log_event(trace_id=trace_id,session_id=session_id,user_id=user_id,event_type=AgentEventType.TOOL_RESULT,payload={"tool_name":"cluster_feedback","ok":True,"result_summary":{"clusters":5,"top_issue":"response_time"}},parent_event_id=tool_event.event_id)最终回复也要记录:
final_event=log_event(trace_id=trace_id,session_id=session_id,user_id=user_id,event_type=AgentEventType.FINAL_RESPONSE,payload={"response_type":"suggestions","suggestion_count":3,"requires_human_review":True},parent_event_id=result_event.event_id)这样,当用户或者团队负责人追问“这条建议怎么来的”,系统不是靠猜,而是可以根据 trace_id 找到完整链路。
defget_trace(trace_id:str):return[eventforeventinEVENT_STOREifevent.trace_id==trace_id]foreventinget_trace(trace_id):print(event.timestamp,event.event_type,event.payload)真实生产环境里,Event Log 应该进入数据库、消息队列或日志系统,而不是存在内存里。
可以设计表结构:
CREATETABLEagent_events(event_idVARCHAR(64)PRIMARYKEY,trace_idVARCHAR(64)NOTNULL,session_idVARCHAR(64)NOTNULL,user_idVARCHAR(64)NOTNULL,event_typeVARCHAR(64)NOTNULL,parent_event_idVARCHAR(64),payload JSONBNOTNULL,created_atTIMESTAMPNOTNULL);CREATEINDEXidx_agent_events_trace_idONagent_events(trace_id);CREATEINDEXidx_agent_events_user_idONagent_events(user_id);CREATEINDEXidx_agent_events_typeONagent_events(event_type);Event Log 还有三个价值。
第一,可审计。
当 Agent 执行了高风险动作,可以查到谁触发、读了什么上下文、模型计划是什么、工具参数是什么、是否经过人工确认。
第二,可回放。
如果某次执行结果有问题,可以根据事件链路重建执行过程,找出是上下文错误、计划错误、工具参数错误,还是最终总结错误。
第三,可优化。
你可以统计:
哪些工具最常失败。
哪些任务最常需要人工介入。
哪些模型输出参数最容易缺字段。
哪些用户请求最容易触发高风险事件。
这比单纯看调用次数有价值。
AI Agent 会越来越多地接入真实业务。Google I/O 2026 展示的方向是把 AI Agent 推入搜索、办公和日常应用;Codex 也强调多代理工作流和云端并行处理。
如果团队前期要比较 ChatGPT、Claude、Gemini、Grok 等模型在任务规划、工具调用、结果解释上的表现,可以用 gpt1998.com 作为多模型入口做测试。但无论模型怎么换,Event Log 都应该是系统自己的底座。
Agent 可以更聪明,日志不能更模糊。
没有 Event Log,Agent 出错之后只能靠猜。
有了 Event Log,Agent 才有机会进入可追踪、可复盘、可治理的工程系统。