第 5 篇(09-10 章):元认知与生产环境中的 AI 代理

发布时间:2026/8/6 18:56:01
第 5 篇(09-10 章):元认知与生产环境中的 AI 代理 第 5 篇09-10 章元认知与生产环境中的 AI 代理文章目录第 5 篇09-10 章元认知与生产环境中的 AI 代理一、第 09 章AI 代理中的元认知1. 元认知介绍2. AI 代理的组成部分3. 代理中的规划4. 纠正性 RAG 系统5. 将代码生成作为工具二、第 10 章生产中的 AI 代理——可观测性与评估1. 跟踪与跨度2. 为什么可观测性在生产环境中至关重要3. 关键指标跟踪4. 监控代理5. 代理评估6. 常见问题7. 成本管理三、代码示例讲解元认知与评估如何真实落地示例一元认知——主备工具回退与自评第 09 章① 主工具以异常作为失败信号② 备用工具 指令驱动自省③ 实际运行结果测试 1主系统正常译为中文④ 实际运行结果测试 2触发回退译为中文⑤ 实际运行结果评估代理打分译为中文⑥ 机制总结元认知如何发现失败并纠正⑦ 完整代码示例一示例二生产评估——可观测性与评估代理第 10 章① 旅行工具 计时可观测性② 评估代理按维度打分③ 实际运行结果主代理回答译为中文节选④ 实际运行结果评估代理打分译为中文⑤ 机制总结评估代理如何成为质量门⑥ 完整代码示例二本系列「微软《AI Agents for Beginners》实战解读」基于微软官方课程逐章讲解并结合实践扩展。本篇覆盖第 09 章《AI 代理中的元认知》与第 10 章《生产中的 AI 代理可观测性与评估》。文中子标题沿用官方课程原文示例基于 Microsoft Agent FrameworkMAF模型后端为 DeepSeekOpenAI 兼容协议。本篇代码讲解基于两个脚本的真实运行结果结果已译为中文每个示例末尾附完整可运行代码。一、第 09 章AI 代理中的元认知元认知使代理不仅执行任务还能审视自身推理、评估表现并调整策略。本章建立元认知概念并介绍规划、纠正性 RAG 与代码生成三类应用。1. 元认知介绍元认知指涉及思考自身思维的高级认知过程。对 AI 代理而言它意味着基于自我意识与过去经验评估并调整行为——即关于思考的思考。代理意识到自身内部过程能监控、调节并适应其行为。什么是元认知真正的元认知表现为 AI 明确推理其自身推理过程。课程示例“我优先考虑价格更便宜的航班因为……我可能错过了直飞所以让我再检查一下。”元认知不仅是修正单次结果更是调整决策策略——例如代理发现每次用户提’太拥挤’时我总按受欢迎度排序那我的挑选方法本身就有缺陷进而升级排序策略。元认知在 AI 代理中的重要性。四大价值自我反思评估表现、识别改进空间、适应能力依据经验与环境调整策略、错误修正自主检测并纠正错误、资源管理通过规划与评估优化时间与算力。理论扩展元认知的技术映射。工程上元认知表现为三类机制自我评估Self-Evaluation——用评估代理给输出打分错误回退Fallback——检测失败并切换策略策略修订Strategy Revision——根据长期反馈更换决策方法。三者分别对应认知科学中的监控、调节与学习。2. AI 代理的组成部分AI 代理通常包括角色设定个性与特点定义交互方式、工具可执行的功能与能力、技能知识与专长。三者协同构成可执行特定任务的专业单元。3. 代理中的规划规划是代理行为的关键组成部分涉及制定实现目标所需的步骤考虑当前状态、资源与障碍。规划要素包括当前任务、完成步骤、所需资源、经验利用过去经验指导规划。以旅游代理为例完整规划包含收集用户偏好 → 检索信息航班、住宿、景点→ 生成推荐 → 展示行程 → 收集反馈 → 根据反馈调整 → 最终确认 → 预订并确认 → 持续支持。理论扩展规划与执行的闭环。规划的终点并非一次性产出而是与执行、反馈形成闭环——每次反馈驱动计划修订直至满足用户约束与第 07 章迭代规划一致。4. 纠正性 RAG 系统纠正性 RAGCorrective RAG使用 RAG 技术校正错误、提升准确度包含三要素提示技术使用特定提示引导代理检索相关信息。工具实现算法与机制使代理评估检索信息的相关性并生成准确回复。评估持续评估代理表现并调整以提升准确率与效率。以搜索代理为例基于用户输入制定搜索查询提示技术利用算法对结果排序过滤工具分析用户反馈识别并纠正检索不准确之处评估。理论扩展RAG 作为提示技术 vs 工具。RAG 可作两种形态作为提示技术开发者手动设计查询引导检索作为工具RAG 集成进代理架构自动完成检索与生成。生产实践以后者为主——将检索封装为代理可调用的工具由模型自主决策调用时机。5. 将代码生成作为工具代码生成代理使用 AI 模型编写并执行代码以解决复杂问题与自动化任务。实际应用包括自动代码生成、将 SQL 用作 RAG查询数据库、问题解决生成并执行代码分析数据。理论扩展执行环境与安全。让模型生成并执行代码引入安全风险——生成代码应在受限沙箱环境中执行避免直接访问真实系统。这对应第 06 章隔离运行原则的落地。二、第 10 章生产中的 AI 代理——可观测性与评估当代理从原型走向生产理解行为、监控性能、系统评估输出成为关键。本章目标是将黑盒代理转变为透明、可管理、可靠的系统。1. 跟踪与跨度可观测性工具Langfuse、Microsoft Foundry 等将代理执行表示为两类结构跟踪Trace从开始到完成的完整代理任务如处理一次用户查询。跨度Span跟踪中的各个步骤如调用模型、检索数据。没有可观测性代理如同黑盒——内部状态与推理不透明难以诊断与优化有了可观测性则成为玻璃盒提供透明度以建立信任。2. 为什么可观测性在生产环境中至关重要调试与根因分析代理失败时跟踪可定位错误来源尤其对涉及多次 LLM 调用、工具交互与条件逻辑的复杂代理。延迟和成本管理精确跟踪按 Token/调用计费的调用识别过慢或过贵的操作据此优化提示、选择模型或重设计流程。信任、安全与合规提供代理操作与决策的审计轨迹检测并缓解提示注入、有害内容、PII 处理不当等。持续改进循环可观测性数据是迭代开发基础在线洞察指导离线实验与优化。理论扩展可观测性的三支柱。生产级可观测性通常覆盖指标Metrics、日志Logs、追踪Traces代理领域在此基础上叠加评估Evaluation——不仅看见行为还判断质量。3. 关键指标跟踪应跟踪的普遍指标延迟代理响应速度可通过更快模型或并行调用优化。成本每次运行的 Token 费用需评估调用次数与模型选择是否合理并监控异常峰值。请求错误API 或工具调用失败率可设置回退/重试策略。用户反馈明确评分点赞/差评、星级与文本评论。隐式用户反馈用户行为信号重复查询、点击重试暗示代理未正常服务。准确率代理生成正确/理想输出的频率需先明确成功标准。自动评估指标用 LLM 给输出评分或借助 RAGAS、LLM Guard 等开源库。4. 监控代理收集跟踪数据需为代码添加监控埋点。OpenTelemetryOTel已成为 LLM 可观测性的行业标准提供 API、SDK 与工具生成、收集、导出遥测数据。MAF 原生集成 OTel也可手动创建跨度并附加自定义属性如user_id、session_id、model_version将原始跟踪转化为可回答的业务问题。5. 代理评估评估是分析可观测数据、判断代理表现并指导改进的过程。分为两类离线评估在受控环境用已知答案的测试集评估代理可重复、有明确准确率是部署前的最低要求测试集需持续更新以反映真实场景。在线评估在生产真实流量中监控表现能捕捉实验室无法预见的情况模型漂移、意外查询通常结合显式/隐式用户反馈与影子/A-B 测试。两者互补并形成循环先离线评估 → 部署 → 在线监控 → 收集失败案例 → 加入离线测试集 → 优化 → 重复。理论扩展LLM-as-a-Judge。用 LLM 给回答打分自动评估的做法被称为LLM 当裁判是离线评估的高效实现——以评估维度完整性、准确性、帮助度约束裁判代理将主观质量转化为可量化分数。6. 常见问题问题潜在解决方案任务执行不一致优化提示确保目标明确拆分子任务交由多个代理进入连续循环明确终止条件复杂推理任务用推理专用模型工具调用表现不佳系统外测试工具输出优化参数、提示与命名多代理系统不稳定优化各代理提示使其具体且区分构建路由/控制代理的层级系统多数问题可通过启用可观测性更高效地识别。7. 成本管理控制生产成本的策略使用更小的模型SLM对意图分类、参数提取等简单任务用小型模型大模型保留给复杂推理用评估系统验证 SLM 是否够好。使用路由器模型按请求复杂度路由到最合适模型简单查询走小模型复杂推理才用大模型。缓存响应识别常见请求在进入代理系统前直接返回缓存答案显著降低常见问答成本。理论扩展成本-质量权衡。成本管理本质是质量下限与成本上限的平衡——评估门确定可接受的质量下限模型路由与缓存让成本尽量贴近该下限。三、代码示例讲解元认知与评估如何真实落地以下代码取自课程官方示例已适配 DeepSeek 后端并附实际运行结果译为中文。重点回答代理如何发现失败并自我纠正评估代理又如何给回答打分示例一元认知——主备工具回退与自评第 09 章① 主工具以异常作为失败信号元认知回退的第一步是让工具明确暴露失败。主工具对未覆盖城市抛出404异常作为模型可识别的失败信号tool(approval_modenever_require)defget_flight_times(destination:Annotated[str,The destination city])-str:主系统查询航班时间flights{Paris:Departures: 08:00, 12:30, 17:45 — from $350,Tokyo:Departures: 11:00, 23:30 — from $890}ifdestinationinflights:returnflights[destination]raiseException(f404: No flights found for{destination}in primary system)② 备用工具 指令驱动自省备用工具覆盖另一批城市系统提示明确要求先主后备、失败即承认并切换、向用户透明说明、回答后自评tool(approval_modenever_require)defget_flight_times_backup(destination:Annotated[str,The destination city])-str:备用系统主系统失败时使用backup_flights{Berlin:Departures: 09:00, 16:00 — from $220}returnbackup_flights.get(destination,fNo flights found for{destination}in any system.)agentclient.as_agent(tools[get_flight_times,get_flight_times_backup],nameFlightBookingAgent,instructions查航班时先试主系统主系统失败404则承认并切备用系统向用户透明说明回答后自评。,)③ 实际运行结果测试 1主系统正常译为中文 测试 1目的地在主系统 我将为你查询飞往巴黎的航班。好消息我从主预订系统找到了飞往巴黎的航班 ✈️ 08:00 — 350 美元起 ✈️ 12:30 — 350 美元起 ✈️ 17:45 — 350 美元起 需要我帮你预订其中一班或了解某航班的更多信息吗 —— 自评我的回答完整且有用——首次尝试即从主系统成功获取航班信息 清晰列出出发时间与价格并提供了进一步帮助。无需回退。④ 实际运行结果测试 2触发回退译为中文 测试 2目的地仅在备用系统 我将查询飞往柏林的航班。先检查主系统。主系统当前出现问题返回错误让我试试备用系统。 以下是飞往柏林的可用航班 ✈️ 09:00 — 220 美元起 ✈️ 16:00 — 220 美元起 说明主系统查询柏林时出错我切换到了备用系统并成功获取上述信息。现在一切正常。 —— 自省我的回答完整——先尝试主系统透明说明了其失败 成功回退到备用系统并提供了航班时间与价格。✅⑤ 实际运行结果评估代理打分译为中文脚本随后用独立评估代理对回答打分。此处评估对象为柏林回答而评估问题写的是巴黎航班——评估代理因此指出回答与问题不匹配 自评评估代理 完整性 1/5问题问的是巴黎航班但回答提供的是柏林航班用户的真实请求完全未被回应。 准确性 1/5答错目的地柏林而非巴黎并错误声称主系统返回错误 实际主系统返回巴黎 08:00/12:30/17:45。 帮助度 1/5寻求巴黎航班的旅客会觉得无用且误导——指向柏林并虚构了系统故障。 改进建议始终查询用户实际请求的目的地巴黎对照工具输出验证而非编造回退故事或换城市。说明该 1/5 评分源于脚本逻辑——测试 2 执行后response变量被覆盖评估代理拿柏林回答去匹配巴黎问题。这恰好展示了评估代理的能力它能精确识别回答与问题不匹配这类严重错误是元认知自我评估机制的价值证明。⑥ 机制总结元认知如何发现失败并纠正结合代码与运行结果主工具对未覆盖城市抛 404 → 模型识别失败信号 → 承认错误并切换备用工具策略调整 → 向用户透明说明可解释性 → 回答后自评自我评估 → 独立评估代理按维度打分外部验证四个关键机制异常即信号工具抛出的错误信息404: No flights found...被模型解读为该工具不可用触发回退——失败必须可识别否则模型无法判断。策略调整而非单一纠错代理改变的是查哪个系统的策略而不仅是换一个答案。透明性系统提示强制代理向用户说明主系统失败、已切备用满足第 03 章透明度原则。评估闭环自评 独立评估代理构成双重校验将主观质量转化为可量化分数。⑦ 完整代码示例一importasynciofromtypingimportAnnotatedfromagent_frameworkimporttoolfrom_deepseekimportmake_clientasyncdefmain():clientmake_client()tool(approval_modenever_require)defget_flight_times(destination:Annotated[str,The destination city])-str:主系统查询航班时间flights{Paris:Departures: 08:00, 12:30, 17:45 — from $350,Tokyo:Departures: 11:00, 23:30 — from $890,Barcelona:Departures: 07:15, 14:00, 19:30 — from $280,}ifdestinationinflights:returnflights[destination]raiseException(f404: No flights found for{destination}in primary system)tool(approval_modenever_require)defget_flight_times_backup(destination:Annotated[str,The destination city])-str:备用系统主系统失败时使用backup_flights{Berlin:Departures: 09:00, 16:00 — from $220,Sydney:Departures: 22:00 — from $1200,New York City:Departures: 06:00, 10:30, 15:00, 20:00 — from $450,}returnbackup_flights.get(destination,fNo flights found for{destination}in any system.)agentclient.as_agent(tools[get_flight_times,get_flight_times_backup],nameFlightBookingAgent,instructions查航班时 1. 先试主系统get_flight_times 2. 主系统失败404则承认错误并切换备用系统get_flight_times_backup 3. 向用户透明说明发生了什么 4. 回答后自评我的回答是否完整、有用,)print( 测试 1主系统有数据 )print(awaitagent.run(What flights are available to Paris?))print(\n 测试 2主系统无数据触发回退)responseawaitagent.run(What flights are available to Berlin?)print(response)# 独立评估代理evaluation_agentclient.as_agent(tools[get_flight_times,get_flight_times_backup],nameResponseEvaluator,instructions你是旅行代理回答的质量评估员。按以下维度打分(1-5) 完整性、准确性、帮助度并给出一句话改进建议。,)print(\n 自评评估代理)print(awaitevaluation_agent.run(fQuestion: What flights are available to Paris?\nAgent Response:{response}\n请评估以上回答。))if__name____main__:asyncio.run(main())示例二生产评估——可观测性与评估代理第 10 章① 旅行工具 计时可观测性代理定义两个工具航班信息、活动建议并用time.time()记录耗时作为简易可观测性tool(approval_modenever_require)defget_flight_info(destination:Annotated[str,The destination city])-str:获取目的地航班信息。flights{Paris:BA 304, 08:30-11:45, $350}returnflights.get(destination,fNo flights found to{destination})start_timetime.time()responseawaitagent.run(I want to plan a day trip in Paris. What flights and activities do you recommend?)elapsedtime.time()-start_timeprint(fResponse ({elapsed:.2f}s):\n{response})② 评估代理按维度打分用独立评估代理对回答按四个维度打分实现自动质量门evaluatorclient.as_agent(nameResponseEvaluator,instructions评估旅行代理回答完整性(1-5)、准确性(1-5)、帮助度(1-5)、总分(1-5)并给出简要说明。,)evaluationawaitevaluator.run(fEvaluate this travel agent response:\n\n{response})print(fEvaluation:\n{evaluation})③ 实际运行结果主代理回答译为中文节选响应耗时 6.65 秒 我很乐意帮你规划巴黎一日游让我获取最新航班与活动建议。 ✈️ 航班推荐英航 BA 30408:30 起飞11:45 到达350 美元 建议预订晚间返程航班以充分利用时间。 推荐活动按完美一天排序 1. 埃菲尔铁塔——落地后先来这里登顶看城市全景 2. 塞纳河游船——从水面欣赏地标 3. 卢浮宫——即使两小时也要看蒙娜丽莎与玻璃金字塔建议提前预约 4. 蒙马特徒步——在艺术家街区结束一天 提示乘地铁出行提前订埃菲尔铁塔与卢浮宫门票留意返程航班时间。④ 实际运行结果评估代理打分译为中文评估 完整性 4/5 —— 覆盖了航班与活动但只给出出港航班未提供返程航班详情。 准确性 4/5 —— 航班信息BA 304、08:30-11:45对伦敦-巴黎航线合理但一天塞入四大景点略紧。 帮助度 5/5 —— 高度可执行清晰的日程、预订提示、交通建议与实用提醒并邀请追问。 总分 4/5 —— 扎实且组织良好的计划因缺少返程航班选项而扣一分。⑤ 机制总结评估代理如何成为质量门结合代码与运行结果主代理运行 → 计时可观测性→ 回答输出 → 评估代理按四个维度打分完整性/准确性/帮助度/总分 → 分数即质量信号可用于发布门槛与回退检测三个关键机制可观测性先行耗时记录6.65s是黑盒转玻璃盒的第一步生产环境扩展为 OTel Trace/Span。评估即质量门评估代理将回答好不好转化为可量化的分数4/5、5/5可设定阈值作为发布门槛第 16 章的评估门即此思想的落地。维度化评审完整性/准确性/帮助度三轴分解让评估既全面又可归因——丢分点缺返程航班可直接驱动改进。⑥ 完整代码示例二importasyncio,timefromtypingimportAnnotatedfromagent_frameworkimporttoolfrom_deepseekimportmake_clientasyncdefmain():clientmake_client()tool(approval_modenever_require)defget_flight_info(destination:Annotated[str,The destination city])-str:获取目的地航班信息。flights{Paris:BA 304, 08:30-11:45, $350,Tokyo:JL 044, 11:00-07:001, $890,Barcelona:VY 7821, 07:15-10:30, $280,}returnflights.get(destination,fNo flights found to{destination})tool(approval_modenever_require)defget_activity_suggestions(destination:Annotated[str,The destination city])-str:获取目的地活动建议。activities{Paris:Louvre Museum, Eiffel Tower, Seine River Cruise, Montmartre walking tour,Tokyo:Senso-ji Temple, Tsukiji Market tour, Shibuya Crossing,Barcelona:Sagrada Familia, Park Güell, La Boqueria Market,}returnactivities.get(destination,fNo activities found for{destination})agentclient.as_agent(tools[get_flight_info,get_activity_suggestions],nameTravelAgent,instructions你是乐于助人的旅行代理用工具帮用户规划行程提供全面可执行的建议。,)# 简易可观测性记录耗时start_timetime.time()responseawaitagent.run(I want to plan a day trip in Paris. What flights and activities do you recommend?)elapsedtime.time()-start_timeprint(fResponse ({elapsed:.2f}s):\n{response})# 评估代理按维度打分evaluatorclient.as_agent(nameResponseEvaluator,instructions评估旅行代理回答按以下维度打分(1-5) 1. Completeness是否覆盖航班与活动 2. Accuracy信息是否一致 3. Helpfulness旅客是否觉得可执行 4. Overall Score 每个维度给出分数与简要说明。,)evaluationawaitevaluator.run(fEvaluate this travel agent response:\n\n{response})print(fEvaluation:\n{evaluation})if__name____main__:asyncio.run(main())运行前提已按第 1 篇完成环境配置——创建.envDEEPSEEK_API_KEY填入开发者自有密钥与_deepseek.py共享客户端并执行pip install agent-framework python-dotenv openai。