基于 agno 环境框架对比推理强度策略Policy Settings 指南与测试实证【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno# agno Policy Settings 实战用环境指纹与策略指纹对比 gpt-5.5 推理强度本指南基于 agno 开源仓库cookbook/environments/_16_policy_settings/中的 Policy Settings 示例与测试日志系统讲解如何在任务、评分器、工具与提示词完全固定的前提下仅通过模型请求策略request-shaping变化来评估 agent 表现。读完本文你将掌握Environment/run_rollouts/EnvironmentDiff的核心用法理解环境指纹env fingerprint与策略指纹policy fingerprint的拆分原理并学会用低/高推理强度reasoning effort对同一模型做可比较的对照实验。Policy Settings 是什么Policy Settings策略设置是一组用于比较请求级模型配置对同一评测环境影响的示例。在 agno 的环境评测体系里环境由Environment定义一个 agent、一组任务Task和一个评分器Scorer。当你想回答同一个模型、同一批任务把推理强度从 low 调到 high通过率会变化多少这类问题时改动的是模型的请求策略而不是任务本身——这正是_16_policy_settings目录要演示的场景。该目录包含两个可运行示例与一份测试日志README.md —— 示例说明与运行方法basic.py —— 用高推理强度覆盖低推理强度策略输出 policy-only 的 diffreasoning_effort.py —— 检查指纹拆分一个环境指纹、两个策略指纹与任务级增量TEST_LOG.md —— 2026-07-20 使用gpt-5.5在低/高推理强度下的真实测试记录。测试日志明确说明两个示例均对比gpt-5.5的 low 与 high 两种推理强度不涉及换用不同模型家族。核心机制为什么只改策略仍然可比Policy Settings 可比性的根基是 agno 环境模块对两种指纹的拆分。相关实现位于 libs/agno/agno/environments/environment.py环境指纹env fingerprint对环境身份整体做 sha256 哈希覆盖任务列表、评分器、声明的工具及tool_choice、所有提示词类字段instructions、description、system_message、additional_context、expected_output、role、additional_input、提示词开关markdown、add_name_to_context等、模型级提示字段system_prompt、instructions、session_state与终止设置timeout_seconds、tool_call_limit。指纹字符串以_ENV_FINGERPRINT_VERSION envfp2作为版本前缀跨版本永不误判相等。策略指纹policy fingerprint仅对请求策略身份做哈希即模型类名、id、provider、base_url以及所有枚举的请求整形参数见 libs/agno/agno/scorer/_model.py 中model_identity_payload与fingerprint_fields。reasoning_effort正是这类参数之一它在 OpenAIResponses 模型 上被声明发送请求时写入reasoning.effort不属于被排除的本地行为字段重试、缓存、展示名等因此任何推理强度变化都会改变策略指纹而不会改变环境指纹。换句话说用model覆盖推理强度是一个纯策略变化policy-only change。环境指纹保持不变EnvironmentDiff的合法性才有保障——两个结果集仍然来自同一个环境可以逐任务计算增量。两个需要留意的边界从 README.md 和 environment.py 的实现可以提炼出两条重要边界带提示词的模型覆盖仍是环境变化。env_fingerprint会把有效模型override 生效后的模型的system_prompt/instructions折入哈希model_prompt_payload。因此如果 override 同时改动了模型的提示词字段那就不再是纯策略变化EnvironmentDiff会因环境指纹不一致而拒绝比较。diff()对指纹发散零容忍。见 runner.py 中EnvironmentRunResult.diff若两侧env_fingerprint不匹配直接抛出MismatchError且None永不相等指纹降级为None时也不会放行。这正是该机制存在的目的杜绝把不同环境的结果错当成对照。实战一basic.py —— 用策略覆盖渲染 policy-only diffbasic.py 的流程是构造一个gpt-5.5低推理强度 agent → 组装Environment→ 分别以k4跑两次run_rollouts第二次通过model参数把推理强度覆盖为 high → 打印两次结果并调用high.diff(low)。核心代码结构from agno.agent import Agent from agno.environments import Environment, Task, run_rollouts from agno.models.openai import OpenAIResponses from agno.scorer import CodeScorer from pydantic import BaseModel class Answer(BaseModel): value: int def exact_value(run, expected): return run.content.value expected agent Agent( modelOpenAIResponses(idgpt-5.5, reasoning_effortlow), output_schemaAnswer, ) env Environment( namepolicy-settings-basic, agentagent, tasks( Task( idproduct-a, input( Compute 2718281828459045 times 1618033988749895. Add the decimal digits of that product, multiply the digit sum by 131071, subtract the product remainder modulo 65521, and return the final integer. ), expected20944939, ), Task( idproduct-d, input( Compute 2236067977499789 times 2449489742783178. Add the decimal digits of that product, multiply the digit sum by 524287, subtract the product remainder modulo 99991, and return the final integer. ), expected76998482, ), ), scorerCodeScorer(exact_value), ) if __name__ __main__: low run_rollouts(env, k4) high run_rollouts( env, k4, modelOpenAIResponses(idgpt-5.5, reasoning_efforthigh), ) print(low) print(high) print(high.diff(low))要点拆解结构化输出 精确评分agent 使用output_schemaAnswerPydantic 模型约束输出评分器是CodeScorer(exact_value)其中exact_value逐次核对run.content.value expected。这类任务故意设计为大数乘法 数位求和 大素数取模的多步算术链对推理强度高度敏感便于观察差异。run_rollouts的model覆盖签名见 runner.pyrun_rollouts(env, *, k8, tasksNone, modelNone, concurrency4)。当传入model时该模型即有效模型effective model指纹计算与每次 attempt 的采样都基于它——见 runner 中effective_model model if model is not None else getattr(source_agent, model, None)的逻辑。每次 attempt 隔离run_rollouts对每个 attempt 使用隔离的深拷贝 agent、全新的内存数据库与rollout-user-*用户 id响应缓存关闭、写入路径记忆/知识/学习/会话摘要写入等被切断确保样本互不污染。diff()产出 policy-only 增量high.diff(low)返回EnvironmentDiff逐任务给出baseline - current、通过率与增量 delta并标注policy_changed。TEST_LOG 实测结果2026-07-20gpt-5.5TEST_LOG.md 中basic.py的测试记录低推理强度product-a3/40.75product-d1/40.25高推理强度两行均为 4/41.00diff 报告0.25与0.75且标注 policy changed。这说明把同一gpt-5.5的推理强度从 low 升到 high 后两个多步算术任务通过率全部提升到满分且这种提升被正确归因于策略变化policy changed因为环境指纹没有变。实战二reasoning_effort.py —— 解剖指纹拆分reasoning_effort.py 在 basic 的基础上把为什么可比显式化它直接断言两次运行共享同一环境指纹、策略指纹不同并打印三个指纹。if __name__ __main__: low run_rollouts(env, k4) high run_rollouts( env, k4, modelOpenAIResponses(idgpt-5.5, reasoning_efforthigh), ) print(low) print(high) assert low.env_fingerprint high.env_fingerprint assert low.policy_fingerprint ! high.policy_fingerprint print(fshared environment fingerprint: {low.env_fingerprint}) print(flow policy fingerprint: {low.policy_fingerprint}) print(fhigh policy fingerprint: {high.policy_fingerprint}) print(high.diff(low))其中任务product-e与product-a的输入为另一组大数3162277660168379 * 2645751311064591数位和乘131101模65519期望值20389256。TEST_LOG 实测结果reasoning_effort.py低推理强度product-a3/40.75product-e3/40.75高推理强度两行均 4/41.00指纹断言环境指纹匹配env_fingerprint相等策略指纹不匹配policy_fingerprint不同任务级增量每个任务均0.25。这组断言正是 Policy Settings 的契约run_rollouts会在运行开始时计算指纹并盖章到结果上见 runner.py 中_env_fingerprint_of/_policy_fingerprint_of的调用EnvironmentRunResult同时携带env_fingerprint与policy_fingerprint两个字段diff()仅要求前者相等而policy_changed标志则来自后者是否变化。reasoning_effort 示例把这个契约写成可断言的测试任何一次意外破坏例如某次改动让reasoning_effort被错误地折入环境指纹都会让脚本直接失败。运行方式与前置条件两个示例都可以从仓库根目录直接运行见 README.mdpython cookbook/environments/_16_policy_settings/basic.py python cookbook/environments/_16_policy_settings/reasoning_effort.py前置条件需要设置OPENAI_API_KEY环境变量运行时会渲染实时网格Rich LiveGrid非终端环境自动禁用结束后打印任务通过率统计与diff增量表k4表示每个任务跑 4 次 attemptconcurrency默认 4控制并发度每次运行产生全新 attempt 隔离结果不落库若需持久化可调用EnvironmentRunResult.save(path)/load(path)见 runner.py。何时使用与 _15_prompt_comparison 的衔接README.md 明确了使用时机在_15_prompt_comparison提示词对比之后使用本目录示例。两者的分工是提示词对比cookbook/environments/_15_prompt_comparison任务、评分器、工具与模型请求策略不变只改提示词策略设置本目录任务、评分器、工具与提示词都不变只改模型的请求策略这里是推理强度。一句话概括当任务的问什么和怎么评完全固定只有模型请求策略在变时就用 Policy Settings。同时要牢记边界——带提示词的模型覆盖例如 override 同时改system_prompt仍属于环境变化不在本模式的适用范围之内。源码级补充指纹到底怎么算如果想深入理解建议顺着以下路径阅读源码libs/agno/agno/environments/environment.py ——Environment/Task数据类、env_fingerprint()/policy_fingerprint()/env_matches()以及_env_fingerprint_of/_policy_fingerprint_of的具体 payload 构成sha256 规范化 JSON_canonical保证跨进程稳定。libs/agno/agno/scorer/_model.py ——model_identity_payload的排除规则凭据、重试、缓存、model_type等不进入策略指纹而reasoning_effort、logit_bias这类请求整形参数必须进入提示词字段则归环境指纹model_prompt_payload。libs/agno/agno/environments/runner.py ——run_rollouts/arun_rollouts的指纹计算时机运行开始、基于有效模型、EnvironmentDiff的逐任务增量与MismatchError守卫、error-storm提前终止机制。libs/agno/agno/models/openai/responses.py ——reasoning_effort参数如何映射到请求的reasoning.effort字段。小结Policy Settings 提供了一种最小化变量的评测模式在环境完全不变的前提下通过model覆盖策略参数并用EnvironmentDiff得到逐任务的通过率增量。_16_policy_settings的两个示例与测试日志共同验证了这一流程——gpt-5.5从 low 到 high 的推理强度切换是纯策略变化环境指纹一致、策略指纹不同且在测试的算术任务上带来了稳定的通过率提升basic 场景 0.25 / 0.75reasoning_effort 场景各 0.25。这套指纹拆分 策略覆盖 diff 对照的方法论同样适用于temperature、top_p、logit_bias等其他请求整形参数的对比实验。 /output文章【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考