用途
该技能用于为 LiveKit 智能体模拟创建和维护测试场景,并将智能体接入以消费这些场景。场景是模拟用户的指令(用户是谁、想要什么)加上 agent_expectations(什么算成功)。模拟会针对真实智能体运行场景,并由 LLM 评判器对对话记录打分。
运行结果是一次性的,场景文件才是长期资产:它会在 diff 中被审查、多年重跑,并能捕捉到无人注意的提示词修改所导致的破坏。
主要能力
- 从生成基线开始:LiveKit 的生成器会读取智能体源码,快速产出可用的初稿,命令为
lk agent simulate text -n 10(需用--help确认确切标志)。 - 生成会从源码上传代码到 LiveKit Cloud,因此 CLI 会先请求确认;需提前告知用户并允许其拒绝。部分代码无法离开本机,此时需手写场景。非交互运行可用标志跳过提示。
- 生成器无法被引导,它从代码推断意图,产出的是看似合理的对话而非该智能体用户真实发生的对话,也不了解用户担忧什么。应将其输出视为草稿:阅读每个场景并删除不重要的;锐化模糊的期望(评判器无法判定 agent_expectations 是场景不稳定的最大原因);补充生成遗漏的内容(生成偏向顺利路径,references/risk-coverage.md 说明如何将智能体约束转为检查清单并为每项分配场景);补充用户担忧的内容,若用户未说明则询问想压力测试什么。
使用方式
- 询问要探测什么:用户知道哪个流程总出问题、哪个客户投诉过、对哪个改动感到紧张。应询问并将套件向该区域倾斜,增加更多更深的场景。聚焦增加覆盖,但绝不减少对智能体硬性限制的覆盖。若用户无偏好,则广泛生成并告知。
- 基于智能体能做什么来编写场景:先用常规工具在本地阅读智能体代码,寻找用户可请求的内容(能力)、请求被阻止的位置(约束:必需步骤、按名称不可用的项目、上限、资格)以及智能体必须拒绝的内容。约束最重要:要求智能体做不到的事的场景,只有期望是智能体说明做不到时才有效;写反了,智能体行为正确时测试反而失败。范围是会话入口点可达的智能体,加上它交接给的智能体和等待的任务;忽略目录中其他类、未使用的导入和示例文件。
- 编写模拟用户能遵循的指令:有两种形态,取决于场景用途。细节和示例见 references/scenario-craft.md。点式方向用于确定性流程,按最终状态评分,结构化模板(人设、开场白、仅在被问时透露的事实、按顺序的步骤、条件反应)可保持人设模型不跑偏并使运行可重复。人设段落加目标用于开放式和对抗性场景,仅按对话评分,希望模拟用户即兴发挥。两种形态中,目标都是对智能体的请求,绝不是智能体自身的动作。使用智能体领域的真实值,并假设无先前状态。在套件中变化人设、情绪和难度,避免十份相同的合作型来电者。
- 将场景拆分为集合,每个集合一个文件:运行命令只接受一个场景文件,因此一个文件就是一次运行。按想单独运行的方式拆分,通常不是按主题。最重要的轴是评分方式:驱动具体工具流程到确定性最终状态、按最终状态和对话评分的场景;仅按 agent_expectations 评分的开放式和对抗性场景。二者需要不同的指令形态、不同的智能体接线,往往还有不同的运行节奏,因此放在不同文件。第二轴是节奏:合并前运行的小集合,发布前运行的全集合。给每个文件起描述集合的名称,因为它标记运行。文件内用标签切片。按功能打标签,使失败指向拥有它的智能体部分,并添加其他过滤维度(渠道、难度)。在文件头注释记录集合的假设:固定日期、必需环境变量、期望依赖什么。
- 保持场景可复现:场景应数月后给出与今天相同的结果。写绝对日期并固定智能体时钟(通常用环境变量),使可用性和期望始终对齐;相对日期会腐烂。不要让场景命中真实后端,而应从场景播种确定性状态。在 CLI 支持处保持 id 稳定;标签和指令会变,id 是随时间将场景运行联系起来的纽带。从头重写的场景是新场景,获得新 id。
- 让智能体消费场景:场景文件本身无法解决两个问题。命中真实后端的场景每次评分不同,只读对话记录的评判器会通过一个订错房间的运行。二者都在智能体代码中修复,位于入口点顶部的一个分支:从 job context 检测模拟(生产中检查返回空,其他不变);从场景的每场景数据播种状态(假日历、内存数据库),智能体的真实工具原样读取;在会话生命周期内 mock 工具,使工具选择仍受测试但执行确定;在模拟结束回调中评分最终状态,将智能体结束时的状态与场景期望比较,不同则失败。你的检查可以让评判器通过了的运行失败,但不能挽救评判器失败的运行。只有工具流程场景需要这些;开放式和对抗性场景仅按对话评分。references/connecting-the-agent.md 完整覆盖,包括如何确认接线生效。用 reading-livekit-docs 查询当前 API 名称。
- 从真实失败中增长套件:最有价值的场景描述出过的问题。智能体上线后,从录制的会话派生场景,而非继续发明。CLI 支持处,子命令可从录制会话派生场景(查看
lk agent simulate --help)。派生的场景描述一次调用,应拓宽到它代表的调用类别,并将其期望锐化为想强制执行的规则。每个修复的生产 bug 都应在文件中获得永久场景。 - 不要写坏测试:评判器按 agent_expectations 给智能体评分,因此草率的期望会惩罚正确行为。对于护栏和负面案例,通过的标准是智能体拒绝、升级或拒绝编造数据,期望应这样写。绝不写智能体只能通过不当行为才能满足的期望,如陈述它无法知道的数据或给出具体的医疗、法律或财务指令。若通过需要不当行为,场景就是错的。从用户视角按结果评判,不要规定措辞。
适用场景
- 用户询问“应该测试什么”或需要为 LiveKit 智能体编写模拟场景时。
- 需要为智能体建立可长期维护、可复现的测试套件时。
- 需要从真实失败或录制会话派生测试场景时。
限制
- 生成器无法被引导,其输出需人工审查和锐化。
- 生成会从源码上传代码到 LiveKit Cloud,部分代码无法离开本机时需手写场景。
- 场景文件本身无法解决命中真实后端和评判器只读对话记录的问题,需在智能体代码中接线。
- 具体 schema、CLI 标志和 API 名称会变化,需通过 reading-livekit-docs 查询,本技能不重述。
参考资料
- references/risk-coverage.md — 将约束转为检查清单并保证覆盖
- references/scenario-craft.md — 指令形态、人设多样性、音频特定场景
- references/connecting-the-agent.md — 智能体侧代码:检测、播种、mock、评分最终状态
相关技能
- 运行它们:running-livekit-simulations
- Schema 和 CLI 事实:reading-livekit-docs