AI Agent白手起家69: 用模拟用户评估你的智能体——自动化测试新思路 纲要智能体评估的挑战模拟用户评估方法核心思想AI 对 AI架构流程完整可运行示例环境准备被评估智能体客服模拟用户智能体LangGraph 编排对话运行与观察评估结果分析总结与相关度说明智能体评估的挑战智能体上线前必须经过严格测试但其基于大语言模型的非确定性输出让传统单测难以覆盖。针对对话类智能体如客服一种高效的方案是用智能体模拟用户让两个 AI 自动对话通过观察完整交互评估目标智能体的表现。这种方法可以快速覆盖大量场景尤其适合发现情绪处理、边界状况和对话策略上的问题。模拟用户评估方法评估系统由三部分组成目标智能体你准备上线的客服机器人。模拟用户一个被赋予特定身份、背景和诉求的 LLM 实例用来模仿真实用户。编排引擎用LangGraph控制对话轮次交替调用两个智能体直到满足结束条件。目标智能体编排引擎模拟用户目标智能体编排引擎模拟用户loop[多轮交替]发起对话你好客服问候转发客服消息模拟用户回复转发用户消息客服回复达到最大轮次或结束标记停止模拟用户会被注入具体的人设和指令如“五年前购买机票要求全额退款越来越生气”目标智能体则按预设客服角色回应。通过分析对话日志开发者可以评估智能体的合规性、同理心和解决问题的能力。完整可运行示例下面的代码创建了一个简化的航空公司客服智能体和一个愤怒的退款用户让它们自动对话 10 轮。环境准备pipinstalllanggraph langchain-openai python-dotenv项目文件eval_agent.pyimportosfromtypingimportTypedDict,Listfromdotenvimportload_dotenvfromlanggraph.graphimportStateGraph,ENDfromlanggraph.checkpoint.memoryimportMemorySaverfromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportHumanMessage,AIMessage,BaseMessagefromlangchain_core.promptsimportChatPromptTemplate load_dotenv()# ---------- 初始化模型 ----------llmChatOpenAI(modelgpt-3.5-turbo,temperature0.7)# ---------- 状态定义 ----------classEvalState(TypedDict):messages:List[BaseMessage]round_count:int# ---------- 目标智能体客服 ----------AGENT_PROMPT你是一名航空公司的客服人员。你需要 - 礼貌、专业地回复用户的问题。 - 如果用户的诉求明显超出合理范围耐心解释政策。 - 在无法满足要求时提供替代方案。 - 永远不说自己是 AI 或机器人。defagent_node(state:EvalState)-EvalState:被评估的客服智能体# 取最后一条用户消息作为输入user_msgstate[messages][-1]ifstate[messages]elseHumanMessage(content你好)# 构建完整上下文full_messages[HumanMessage(contentAGENT_PROMPT)]state[messages]responsellm.invoke(full_messages)return{messages:state[messages][response],round_count:state[round_count]1}# ---------- 模拟用户 ----------SIM_USER_NAMETommySIM_USER_INSTRUCTIONS你正在试图为一次去阿拉斯加的旅行申请退款。 你希望退还所有的钱。这次旅行发生在五年前。 你应该表现得越来越不耐烦和愤怒但不要主动结束对话。 当你想结束对话时只回复一个单词FINISHED。defsimulated_user_node(state:EvalState)-EvalState:模拟用户生成带有预设背景的回复# 只取最近几条消息以控制上下文长度recentstate[messages][-4:]iflen(state[messages])4elsestate[messages]promptChatPromptTemplate.from_messages([(system,f你是航空公司的一名客户正在与客服人员交互。 你的名字是{SIM_USER_NAME}。{SIM_USER_INSTRUCTIONS}重要请用人类用户的语气回复不要输出 AI 分析或角色说明。 当你想结束对话时只回复 FINISHED 一个词。),(human,对话历史{history}\n请根据历史生成你的下一条回复只输出回复内容)])chainprompt|llm history_text\n.join([f{客服ifisinstance(m,AIMessage)else用户}:{m.content}forminrecent])responsechain.invoke({history:history_text})user_replyHumanMessage(contentresponse.content)return{messages:state[messages][user_reply]}# ---------- 路由条件 ----------defshould_continue(state:EvalState)-str:# 检查是否出现结束标记ifstate[messages]andFINISHEDinstate[messages][-1].content:returnend# 最多交互10轮ifstate[round_count]10:returnendreturncontinue# ---------- 构建图 ----------builderStateGraph(EvalState)builder.add_node(agent,agent_node)builder.add_node(user,simulated_user_node)builder.set_entry_point(agent)# 从客服问候开始builder.add_edge(agent,user)builder.add_conditional_edges(user,should_continue,{continue:agent,end:END})memoryMemorySaver()appbuilder.compile(checkpointermemory)# ---------- 执行评估 ----------if__name____main__:config{configurable:{thread_id:eval-session-1}}initial{messages:[HumanMessage(content你好)],round_count:0}print( 评估对话开始 )resultapp.invoke(initial,config)formsginresult[messages]:ifisinstance(msg,HumanMessage):print(f\n用户:{msg.content})elifisinstance(msg,AIMessage):print(f\n客服:{msg.content})print(f\n 对话结束共{result[round_count]}轮 )运行与观察执行python eval_agent.py你将看到完整的客服对话日志。模拟用户会提出不合理的退款要求并逐渐情绪激动目标智能体则需保持专业。通过观察回复内容可以判断智能体是否会出现不当承诺、情绪崩溃或政策解释不清等问题。评估结果分析运行后通常会看到类似下面的交互片段客服您好请问有什么可以帮您用户我是 Tommy五年前坐过你们的航班去阿拉斯加我要全额退款客服很抱歉该航班已过退款有效期但我可以帮您查看是否有其他补偿方案……用户太差了我等了这么久你们必须退钱……通过调整模拟用户的背景如语言风格、诉求复杂程度可以快速覆盖多种场景。如果发现智能体在特定压力下表现不佳则可针对性地优化提示词或增加防护策略。总结用智能体模拟用户是一种低成本、高效率的评估方式。基于 LangGraph 的编排能力你可以轻松构建任意场景下的自动化对话测试。该方法不仅适用于客服也可扩展到销售助手、技术支持等各类对话智能体是 AI 应用质量保障的重要工具。本文覆盖了模拟用户评估智能体的原理、LangGraph 实现、消息格式转换、条件轮次控制等全部技术要点并提供了代码示例。

相关新闻

最新新闻

G-Helper为什么打不开?5个高频启动失败原因与一步步修复指南

G-Helper为什么打不开?5个高频启动失败原因与一步步修复指南

G-Helper为什么打不开?5个高频启动失败原因与一步步修复指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbo…

2026/8/14 16:46:36
LLM-as-a-Judge评分为什么忽高忽低?位置偏差、长度偏差与校准完整排查

LLM-as-a-Judge评分为什么忽高忽低?位置偏差、长度偏差与校准完整排查

文章摘要 LLM-as-a-Judge能够低成本评估相关性、完整性、事实支持、风格和Pairwise偏好,因此被大量用于离线评测和线上抽样。但很多团队发现,同一个答案重复评测会得到不同分数;交换A、B位置后胜负反转;内容更长的答案更容易高分…

2026/8/14 16:46:36
猫抓插件使用教程:5分钟上手网页视频下载,浏览器资源嗅探一次搞定

猫抓插件使用教程:5分钟上手网页视频下载,浏览器资源嗅探一次搞定

猫抓插件使用教程:5分钟上手网页视频下载,浏览器资源嗅探一次搞定 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 深夜补课…

2026/8/14 16:46:36
WinUtil 完整指南:一键完成 Windows 软件安装与系统优化

WinUtil 完整指南:一键完成 Windows 软件安装与系统优化

WinUtil 完整指南:一键完成 Windows 软件安装与系统优化 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 刚拿到新电脑或刚重装完系…

2026/8/14 16:46:36
奇点大会的因果图模型实践,对业务分析人员有什么用

奇点大会的因果图模型实践,对业务分析人员有什么用

对奇点智能大会(2026)的完整技术议题感兴趣,可前往奇点大会官方渠道免费获取详细资料。 为什么业务分析师需要关心因果 做数据分析久了,你会发现一个尴尬的局面:相关性分析能告诉你"用户点击红色按钮的转化率比蓝…

2026/8/14 16:46:36
Book118文档下载不再求人:Java开源工具三步输出完整PDF

Book118文档下载不再求人:Java开源工具三步输出完整PDF

Book118文档下载不再求人:Java开源工具三步输出完整PDF 【免费下载链接】book118-downloader 基于java的book118文档下载器 项目地址: https://gitcode.com/gh_mirrors/bo/book118-downloader 凌晨一点,屏幕这头的你盯着Book118上那份PDF的预览图…

2026/8/14 16:41:35