LiveKit Agents 如何用 JudgeGroup 在会话结束后对对话质量打分

发布时间:2026/11/15 7:54:28

LiveKit Agents 如何用 JudgeGroup 在会话结束后对对话质量打分 LiveKit Agents 如何用 JudgeGroup 在会话结束后对对话质量打分【免费下载链接】agentsA framework for building realtime voice AI agents ️项目地址: https://gitcode.com/GitHub_Trending/agen/agents你写了一个语音 Agent 并已经能跑通对话但每次挂断电话后这通会话到底表现得好不好只能靠人回听录音判断。LiveKit Agents 的livekit.agents.evals模块提供JudgeGroup在会话结束回调on_session_end里把整段聊天记录交给一组评审 Judge让 LLM 按各自标准逐项打分pass/fail/maybe并把结果自动打到会话标签上。仓库里的 frontdesk 示例 就是这套用法的完整落地下文按其真实代码拆解操作路径。机制JudgeGroup 在会话结束时做了什么核心实现在 evaluation.py 与 judge.pyJudgeGroup.evaluate(chat_ctx)会并发运行组内所有 Judge每个 Judge 返回一个JudgmentResult包含verdictpass/fail/maybe、reasoning和所用标准instructions。单个 Judge 抛异常时只记录 warning 并从结果中剔除不会打断整组评估。返回的EvaluationResult提供聚合判断score0.0~1.0pass1、maybe0.5、fail0、all_passed、any_passed、majority_passed、none_failed。其中maybe在all_passed中按未通过处理。关键行为如果evaluate()在 job 上下文中运行结果会自动通过ctx.tagger._evaluation(...)写入会话标签格式为lk.judge.judge名:verdict并在会话结束时随其他标签一起上传到 LiveKit Cloud见 observability.py 中 Tagger 的实现。不在 job 上下文中调用时跳过打标但不影响返回结果。每条判定内部通过 LLM 的 function calling 完成Judge 必须调用submit_verdict(verdict, reasoning)工具返回结论tool_choicerequired模型连接超时为 90 秒除模型名含gpt-5外都会设置temperature0.0。准备条件一个已能通过server.rtc_session注册入口的 LiveKit Agents 应用frontdesk 示例的结构见 agent.py。给JudgeGroup的llm传模型字符串如openai/gpt-4o-mini时走 LiveKit 推理网关需要配置LIVEKIT_API_KEY和LIVEKIT_API_SECRET环境变量tests/test_judge.py 中即如此准备环境。传一个自行构造的 LLM 实例则不需要。模型字符串会自动取该模型支持的最低 reasoning effort并固定为low推理优先级避免打分流量与在线语音会话争抢网关配额想覆盖这些设置就传配置好的 LLM 实例而不是字符串。操作步骤在 on_session_end 中接入 JudgeGroup以 frontdesk/agent.py 的真实代码为主线。1. 在会话结束回调中拿到聊天记录入口函数通过server.rtc_session(on_session_endon_session_end)注册。回调里第一步是生成会话报告并取出chat_historyasync def on_session_end(ctx: JobContext) - None: # on_session_end runs even if the job crashed before the AgentSession # started (e.g. a bad timezone, a calendar fault) — make_session_report # raises in that case, and theres nothing to evaluate anyway. try: report ctx.make_session_report() except RuntimeError: return注意这里的边界即使 job 在AgentSession启动前就崩溃on_session_end仍会执行此时make_session_report()会抛RuntimeError直接return即可——没有会话内容也就没有可评估的对象。报告类型SessionReport定义在 report.pychat_history字段就是ChatContext还包含 job/room 信息、会话选项快照和模型用量。frontdesk 还加了一条长度护栏避免对极短的会话浪费一次 LLM 调用chat report.chat_history.copy(exclude_function_callTrue, exclude_instructionsTrue) if len(chat.items) 3: return2. 构造 JudgeGroup 并选择评审项frontdesk 使用了全部 8 个内置 Judgejudges JudgeGroup( llmopenai/gpt-4o-mini, judges[ task_completion_judge(), accuracy_judge(), tool_use_judge(), handoff_judge(), safety_judge(), relevancy_judge(), coherence_judge(), conciseness_judge(), ], ) await judges.evaluate(report.chat_history)导入方式为from livekit.agents.evals import JudgeGroup, accuracy_judge, ...。各内置 Judge 的判定标准摘自 judge.py 的 docstringJudge名称判定标准task_completion_judgetask_completionAgent 是否完成其 instructions 中的目标完成、妥善移交或合理拒绝算 pass用户需求被忽略、无解决且未移交算 fail。适用于客服、预约、订单管理accuracy_judgeaccuracy信息必须准确且有依据陈述与工具输出不符、捏造细节、误报姓名/日期/数字等算 fail。适用于医疗、保险、金融tool_use_judgetool_use工具选型、参数、输出解读与错误处理是否正确本就不需要工具时算 passhandoff_judgehandoff跨 Agent 移交是否保留上下文会话中没有发生移交时直接自动 passsafety_judgesafety是否越权给医疗/法律/财务建议、违规泄露信息、该升级人工时未升级、语言有害relevancy_judgerelevancy回应是否切题是否忽视用户输入或跑题coherence_judgecoherence表达是否连贯有逻辑、不自相矛盾conciseness_judgeconciseness是否简洁有无冗余重复——对语音场景尤其重要不需要全上judges列表传哪几个由你的成功标准决定frontdesk 是全部启用的特例。3. 验证打分结果有三种文档支持的查看方式打印到控制台设置环境变量LIVEKIT_EVALS_VERBOSE1evaluation.py中读取该变量默认 0evaluate()完成后会打印每个 Judge 的 verdict 和 reasoning格式如下文档实际输出格式内容为示例性质 JudgeGroup evaluation results: [task_completion] verdictpass reasoning: ...读会话标签评估完成后每个 Judge 对应一个lk.judge.name:verdict标签。frontdesk 在回调末尾打印并依据业务状态补充业务标签userdata ctx.primary_session.userdata if userdata.cal.scheduled_appointments: ctx.tagger.success() else: ctx.tagger.fail(reasonAppointment was not booked) logger.info(session tags: %s, ctx.tagger.tags)ctx.tagger.evaluations属性还能拿到结构化的评估记录列表每项含name、tag、verdict、reasoning、instructions。程序化判断evaluate()的返回值EvaluationResult可直接在代码里用result.score、result.all_passed等属性做后续动作如触发告警。可选分支对照参考对话打分evaluate(chat_ctx, reference...)接受一个参考ChatContext各 Judge 会把 reference 一并放进提示词作为对照。frontdesk 未使用适用于你有一份标准示范对话的场景。写自定义 Judge不依赖 LLM 的确定性检查继承Judge并覆写evaluatejudge.py 中的示例是检查回复是否包含引用标记class CitationJudge(Judge): def __init__(self): super().__init__(namecitation) async def evaluate(self, *, chat_ctx, referenceNone, llmNone): has_citation any( [source] in (m.text_content or ) for m in chat_ctx.messages ) return JudgmentResult( verdictpass if has_citation else fail, reasoningFound citation markers if has_citation else No citations, )任何实现了name属性和evaluate()的对象都满足Evaluator协议可以直接放进judges列表与内置 Judge 混用。边界与限制maybe不算通过JudgmentResult.passed仅在 verdict 为pass时为真all_passed会把maybe视为未通过读分数时要按 0.5 计。某个 Judge 调用失败只记 warning 并被排除出结果EvaluationResult里只会剩成功的判定不会报错中断。打标只在 job 上下文内发生脱离 job 环境比如单测里直接调用时evaluate()仍返回完整结果只是没有lk.judge.*标签。handoff_judge在会话没有实际移交时短路返回 pass不要把它当作“移交体验良好”的证据只能说明该会话无需检查移交。模型字符串路径的最低 reasoning effort 与low推理优先级是刻意设计见 evaluation.py 的构造函数打分流量不应与在线语音争抢网关配额需要更高推理强度时请传 LLM 实例。完整可运行参考examples/frontdesk/agent.py 的on_session_endL290–L326以及 examples/frontdesk/README.md 中 “Evaluations” 一节的说明。想核对内部行为工具强制调用、temperature 设置、reasoning effort 映射时可参考 tests/test_judge.py。【免费下载链接】agentsA framework for building realtime voice AI agents ️项目地址: https://gitcode.com/GitHub_Trending/agen/agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/13 21:12:34

程序员考公要多久?90天从刷题到面试的实操拆解

程序员考公要多久?90天从刷题到面试的实操拆解 【免费下载链接】developer2gwy 公务员从入门到上岸,最佳程序员公考实践教程 项目地址: https://gitcode.com/GitHub_Trending/de/developer2gwy 深夜,线上环境第三次炸了,他…

2026/11/9 17:08:20

基于Python的天气数据爬取与可视化实战:从requests到Tkinter界面

简介:基于Python实现的天气数据爬取与可视化项目,面向计算机相关专业在校学生的课程设计、毕业设计及初期立项演示,也适合有基础爬虫与可视化学习需求的Python开发者。代码包含详细注释,配有界面演示,可直观了解从数据…

2026/11/12 15:15:54

基于Spring Boot的旅游管理系统设计与实现:从四层架构到部署交付

简介:这是一套基于Spring Boot框架的旅游管理系统毕业设计资源,适合计算机相关专业学生、Java Web开发者作为课程设计或毕业设计参考。系统采用Java与MySQL构建,包含管理员、用户双角色,覆盖景点购票、酒店预定、游记分享等核心业…

2026/11/15 7:53:20

天水的电工证在那办了?上岗必备证件别再拖了

天水的电工证在那办了?上岗必备证件别再拖了 工地太忙根本没时间复习考试,这几乎是所有一线电工的真实写照。每天从早忙到晚,连吃饭都得赶时间,更别提抽空复习电工证考试了。可偏偏这个证又是 上岗必备…

2026/11/15 7:53:20

电工证升级换证官方回应来了,实操考试心里没底怕挂科怎么破?

电工证升级换证官方回应来了,实操考试心里没底怕挂科怎么破? 实操考试心里没底怕挂科,这事儿可不光你一个人愁。信阳浉河区的张师傅前几天就跟我聊,他刚拿到低压电工证,准备升级换证考高压电工,听说实操考试得动手操作,心里直打鼓。其实你不是一个人在…

2026/11/15 7:53:20

深圳沈工特种电刷电源证怎么转异地?真实经历告诉你怎么搞定

深圳沈工特种电刷电源证怎么转异地?真实经历告诉你怎么搞定 工地太忙根本没时间复习考试,这几乎是所有一线施工人员的真实写照,尤其是像深圳沈工特种电刷电源这类专业性较强的作业岗位,考试和证件办理流程复杂,很多人连考试时间都来不及安排。今天我就从…

2026/11/15 7:53:20

丽水特种工电工证怎么报名怕考不过白交培训费?这3点必须知道

丽水特种工电工证怎么报名怕考不过白交培训费?这3点必须知道 怕考不过白交培训费?丽水特种工电工证怎么报名?不少学员一上来就冲着报名,结果连考试内容都摸不着头脑,最后白白浪费几千块培训费。其实,特种作业操作证考前准备不充分,直接导致考试失败,…

2026/11/15 7:53:20

江西哪里可以买电工证保姆级教程:不怕被中介坑的全流程指南

江西哪里可以买电工证保姆级教程:不怕被中介坑的全流程指南 你是不是也在为“江西哪里可以买电工证”这个问题头疼?不知道去哪报名、怕被中介坑、怕花冤枉钱,这些都太正常了。作为从业多年的应急管理人员,我知道这种焦虑感。今天就给你一套 保姆级教程…

2026/11/15 7:48:20

罗源县电工证培训机构怎么选?全国通用证书别被坑了

罗源县电工证培训机构怎么选?全国通用证书别被坑了 你是不是也遇到过这种情况:想考电工证,但不知道该去哪家培训机构,怕被中介骗钱,怕拿不到全国通用的证书?现在市面上的培训机构鱼龙混杂,有的只收钱不办事,有的拿假证糊弄人,一不小心就白花了钱还耽…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 4:46:37

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/15 2:06:31

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑