ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 Agno ReliabilityEval 验证 Team 级工具调用与委托可靠性:以 AI 新闻搜索团队为例

用 Agno ReliabilityEval 验证 Team 级工具调用与委托可靠性:以 AI 新闻搜索团队为例 用 Agno ReliabilityEval 验证 Team 级工具调用与委托可靠性以 AI 新闻搜索团队为例【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno本篇技术指南基于仓库 cookbook/09_evals/reliability/team/README.md 与配套示例 cookbook/09_evals/reliability/team/ai_news.py 展开介绍如何在 Agno 中对团队Team级工具调用与成员委托做可靠性评估。你将掌握如何搭建一个带 Web 搜索能力的多 Agent 团队、如何声明期望的工具调用序列、如何用ReliabilityEval校验委托与新闻搜索调用是否真实发生并干净执行以及如何将评估结果接入断言、日志与异步流程形成可回归的可靠性门槛。一、为什么需要团队级可靠性评估在单 Agent 场景下可靠性评估只需要检查该 Agent 是否正确调用了工具。但一旦升级为Team情况就复杂了团队中的主控模型需要通过delegate_task_to_member这类内置工具把任务委托给成员 Agent而真正的业务工具如新闻搜索search_news是在**成员响应member response**里执行的。如果评估逻辑只盯着主控这一层的响应就会漏掉成员内部发生的工具调用得出工具未调用的错误结论。仓库中 reliability 目录下的其他示例single_tool_calls、multiple_tool_calls都是单 Agent 场景而 team/ai_news.py 专门演示了跨层主控 成员的工具调用证据收集这正是本指南的核心。二、示例总览构建一个 AI 新闻搜索团队ai_news.py的完整流程可拆解为四个阶段创建一个带WebSearchTools(enable_newsTrue)的成员 Agent将该成员放入Team让主控模型负责调度声明期望的工具调用列表expected_tool_calls运行ReliabilityEval并对结果执行断言。from typing import Optional from agno.agent import Agent from agno.eval.reliability import ReliabilityEval, ReliabilityResult from agno.models.openai import OpenAIChat from agno.run.team import TeamRunOutput from agno.team.team import Team from agno.tools.websearch import WebSearchTools其中ReliabilityEval/ReliabilityResult来自 libs/agno/agno/eval/reliability.pyTeamRunOutput是团队运行返回的结果类型定义于 libs/agno/agno/run/team.py。三、搭建团队成员 Agent 与 Team 主控team_member Agent( nameNews Searcher, modelOpenAIChat(gpt-5.6-luna), roleSearches the web for the latest news., tools[WebSearchTools(enable_newsTrue)], ) team Team( nameNews Research Team, modelOpenAIChat(gpt-5.6-luna), members[team_member], markdownTrue, show_members_responsesTrue, )3.1 成员 Agent挂载新闻搜索工具WebSearchTools是 Agno 提供的 Web 搜索工具集位于 libs/agno/agno/tools/websearch.py底层使用ddgsDuckDuckGo Search 的元搜索库。它默认同时注册两个函数web_search(query, max_results5)普通网页搜索search_news(query, max_results5)新闻搜索。enable_newsTrue确保search_news被注册进工具列表源码见websearch.py中tools.append(self.search_news)分支。构造时还支持以下常用参数可在实际项目中按需配置参数默认值说明enable_searchTrue是否启用web_searchenable_newsTrue是否启用search_newsbackendauto搜索后端如duckduckgo、google、bing、brave等fixed_max_resultsNone固定返回结果数覆盖每次调用传入的max_resultstimelimitNone时间过滤合法值为d/w/m/y日/周/月/年非法值会在构造时抛ValueErrorregionNone搜索结果地域如us-en、uk-enproxy/timeout/verify_ssl—代理、超时与 SSL 校验依赖方面WebSearchTools要求安装ddgs未安装时导入会抛出ImportError提示pip install ddgs。3.2 Team主控调度委托Team负责编排成员。示例开启了markdownTrue输出渲染为 Markdown与show_members_responsesTrue回显成员响应。运行后team.run(What is the latest news on AI?)返回的是TeamRunOutput——一个同时携带tools、messages与member_responses的数据结构见 libs/agno/agno/run/team.py主控层执行delegate_task_to_member委托成员成员层执行search_news完成真实搜索成员产生的工具证据会嵌套在member_responses中。四、声明期望的工具调用序列expected_tool_calls [ delegate_task_to_member, search_news, ]这份清单是评估的金标准delegate_task_to_member是团队主控模型的内置委托工具用于把子任务派发给合适的成员search_news是成员通过WebSearchTools(enable_newsTrue)暴露的新闻搜索函数。ReliabilityEval会对expected_tool_calls做无序的按名集合匹配只要每个期望名称都存在一次干净执行clean execution顺序并不重要。五、运行评估ReliabilityEval 的判定机制def evaluate_team_reliability(): response: TeamRunOutput team.run(What is the latest news on AI?) evaluation ReliabilityEval( nameTeam Reliability Evaluation, team_responseresponse, expected_tool_callsexpected_tool_calls, ) result: Optional[ReliabilityResult] evaluation.run(print_resultsTrue) if result: result.assert_passed()5.1 成员证据的跨层收集对于团队评估ReliabilityEval._evaluate会调用_collect_member_evidencereliability.py递归遍历TeamRunOutput.member_responses把每一层成员可以是嵌套团队的tools与messages全部合并。源码注释明确指出委托产生的工具调用挂在成员响应上若只做扁平读取会把孙级成员的干净执行误判为缺失——这正是团队可靠性评估与单 Agent 评估的关键差异。5.2 以执行为准的严格匹配2.8.0 起的语义从 2.8.0 起ReliabilityEval的判定依据从消息侧请求切换为执行侧证据ToolExecution核心规则如下干净执行才算通过期望工具只有在tools中存在一条tool_call_error不为真None视为干净兼容从存储还原的响应且未处于暂停is_paused状态的执行时才计入passed_tool_calls被拒绝/报错的调用不再通过例如因tool_call_limit被拒绝的调用只会出现在消息侧不会产生执行记录此类调用会在missing_tool_calls中以search (requested but refused/errored — execution matching, new in 2.8.0)的形式标注重试语义期望工具先报错后重试成功最终仍判定通过失败执行不会毒化评估严格模式allow_additional_tool_callsFalse默认时任何未声明的工具调用都会导致失败设为True则放宽为子集匹配多余调用记入additional_tool_calls历史消息隔离由add_history_to_context注入的上轮消息带from_history标记会被排除避免昨天的工具调用导致今天的评估失败。这些语义均有对应的单元测试覆盖见 libs/agno/tests/unit/eval/test_reliability_eval.py例如test_team_member_executions_matched验证了委托调用与成员执行都能被匹配。5.3 参数校验expected_tool_call_arguments除工具名称外ReliabilityEval还支持校验工具参数。单次校验写法为{multiply: {a: 10, b: 5}}多次校验写法为{add: [{a: 2, b: 2}, {a: 3, b: 3}]}列表内每个 spec 只需被至少一次调用匹配。参数读取自ToolExecution.tool_args已解析None视为空字典同样只以干净执行为准。六、理解 ReliabilityResult 与断言run()返回的ReliabilityResultreliability.py包含以下字段字段含义eval_statusPASSED或FAILEDpassed_tool_calls干净执行的期望工具failed_tool_calls未声明且未放行的工具调用missing_tool_calls期望但未出现干净执行的工具含已请求但被拒/报错注解additional_tool_callsallow_additional_tool_callsTrue时的额外调用failed_argument_checks/passed_argument_checks参数校验结果调用print_eval()会以 rich 表格打印Reliability Summary。assert_passed()在eval_status ! PASSED时抛出AssertionError并把完整结果拼进断言消息——CI 变红时能一眼看出是评估定义错了还是 Agent 行为错了。七、评估结果的文件保存与数据库落盘ReliabilityEval还支持两个实用的输出通道保存到文件设置file_path_to_save_results支持{name}与{run_id}占位符结果会以 JSON 落盘写入数据库传入dbBaseDb或AsyncBaseDb如 06_storage 中的 PostgreSQL、SQLite 等run()会把结果、eval_typeRELIABILITY、模型信息与eval_input一并写入评估表目录下的 db_logging.py 就是可靠性评估 PostgreSQL 日志的完整示例。ReliabilityEval同时校验必须且只能传入agent_response或team_response之一若db是异步实现需改用arun()异步版本见 reliability_async.py 的流程。八、运行方式与前置条件python cookbook/09_evals/reliability/team/ai_news.py运行前需满足已安装agno及其依赖并安装ddgspip install ddgs配置可用的OpenAIChat凭据如OPENAI_API_KEY示例中的模型标识请以当前可用模型为准并按需替换网络可访问搜索后端。仓库中的 TEST_LOG.md 为待填写的测试记录模板可参照 09_evals 目录下其他TEST_LOG.md的格式登记运行状态。九、扩展从名称匹配到参数匹配的实战建议若你的团队业务工具依赖特定参数例如新闻搜索必须携带关键词AI可在expected_tool_call_arguments中追加校验evaluation ReliabilityEval( nameTeam Reliability Evaluation, team_responseresponse, expected_tool_callsexpected_tool_calls, expected_tool_call_arguments{ search_news: {query: AI} }, )这样评估就从工具是否被调用升级为工具是否以正确的参数被调用结合执行侧匹配与团队跨层证据收集可以为多 Agent 编排提供一层贴近生产行为的可靠性回归保障。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表