数据截至 (上游 commit a2c024725189)
04 · Agent/User 变体、领域与语音知识扩展
本章把「参赛选手」和「赛场」讲全,最后给巧妙之处、边界、横向对比与总代码地图。
4.1 三种 Agent,各测一件事
都在 llm_agent.py,共享「读策略 → 调工具/回话」的骨架,区别在拿到多少信息:
| Agent | 拿到什么 | 测什么 |
|---|---|---|
LLMAgent(llm_agent.py:54) | 只有领域策略 + 工具 | 正常被考对象:真本事 |
LLMGTAgent(llm_agent.py:166) | 策略 + 工具 + 标准答案步骤 | 「答案喂到嘴边还能不能做对」——主要用 来验 user 模拟器是否正常 |
LLMSoloAgent(llm_agent.py:321) | 策略 + 工具 + ticket 工单,无用户 | 纯执行力:给足信息自己把库改对 |
LLMSoloAgent 有两个专属机关:tool_choice="required" 强制每步必出工具调用(llm_agent.py:473),以及一个注入进去的 done 工具——调它就返回 ###STOP### 收工(llm_agent.py:357-364、426-431)。
4.2 User 模拟器:LLM 反串顾客
UserSimulator(user_simulator.py:99)是个「角色对调」的 LLM 调用。它的系统提示 = 全局模拟守则 + 该任务的 user_scenario(顾客剧本),生成时把对话里的 assistant/user 角色翻转(flip_roles),让模型站在顾客立场说话(user_simulator.py:232)。若领域给了用户工具,它也能发工具调用,框架再把 requestor 翻成 "user"(user_simulator.py:255-265)。
顾客行为由三处叠加控制,源码特意提醒三者要一致不重叠(user_simulator.py:104-110):全局守则(data/tau2/user_simulator/*.md)、任务里烤进去的 persona、运行时 persona_config。
4.3 五个领域一览
| 领域 | 场景 | 特点 |
|---|---|---|
mock | 开发测试用 | 最小双控(含用户通知箱工具) |
airline | 订票/退改签 | 经典单控,策略约束多 |
retail | 订单/退货 | 经典单控 |
telecom | 宽带/话费排障 | 双控标杆:sync_tools 把用户设备与账户 DB 耦合(见 01 章) |
banking_knowledge | 知识型银行客服 | τ³ 新增:靠检索文档答题 |
telecom 还有个花样:同一环境可挂两种技术支持策略——manual(自然语言步骤)和 workflow(结构化流程),分别注册成 telecom 和 telecom-workflow(telecom/environment.py:96-150、registry.py:330-345),用来对比「策略写法」对 Agent 的影响。
4.4 τ³ 扩展一:语音全双工(Tick 轨迹)
文本模式是回合制——你说完我说。语音客服不是:两边可以同时出声、可以打断。为此 τ³ 换了套轨迹单位——不再是一条条 Message,而是一格格 Tick(message.py:636)。
一个 Tick = 某个极短时间片(如 50ms)里同时发生的一切:Agent 说了什么 chunk、User 说了什么 chunk、双方各自的工具调用与结果(message.py:656-664)。评测时再把 Tick 序列线性化回消息去比 DB、比沟通(evaluator_env.py:168 的 ticks_to_message_history