02 · 如何配置一个 Agent? - Agent Configuration
所属知识库:Agent 全栈技术地图
所属领域:02 · Agent
所属章节:03 · 如何设计、构建和测试 Agent? - Development & Practice
文档类型:技术原理与工程实践研究
版本:v1.1
更新日期:2026 年 10 月 28 日
核心问题:如何把 Agent 的任务与架构设计转化为结构化、可校验、可组合、可版本化、可安全加载的配置,并保证模型、指令、工具、技能、知识、状态、权限与运行参数之间的一致性,使配置变更能够被追溯、测试、回滚并在真实执行中得到验证?
专题导读
Agent Configuration(属 Development & Practice)不是把若干模型参数和提示词写进 YAML 文件。它是连接 Agent 设计契约 与 实际运行行为 的工程层:将任务目标、能力选择、执行策略、资源约束和环境依赖表达为机器可读取、可检查、可追溯的声明,并由运行时转换为具体的组件实例和执行边界。
上一专题 「01 · 如何根据任务需求设计 Agent? - Agent Design」 形成需求规格、架构决策、模块接口和验收标准。本篇以这些设计产物为输入,研究如何形成配置模型、配置加载与合成机制、约束校验、部署环境绑定、版本与变更控制以及配置实验。下一专题 Implementation 将研究这些配置如何被代码消费、如何驱动模型与工具执行;Testing 将研究配置变更是否真的改善任务表现。
贯穿案例仍为“技术研究助理 Agent”:它需要在指定资料范围内检索、阅读、评估证据并生成技术报告。配置工作要回答的不只是“使用哪个模型”,还包括:哪些工具允许出现、哪些操作真正获得授权、何时加载哪些技能、证据与记忆如何处理、超时和预算如何执行、配置变更后如何判断系统行为是否符合设计。
本篇给出的配置 Schema、字段命名、合成优先级与 Python 实验是可复用的参考实现,不是跨框架的统一标准。不同 Agent 框架、模型提供商和部署环境的配置接口存在差异;本文先建立通用工程模型,再说明如何适配具体实现。示例不把静态校验等同于真实运行时授权,也不把本地确定性测试等同于真实模型端到端评测。
一、研究定位:配置到底配置什么?
1.1 设计、配置与实现的不同职责
可以把 Agent 的工程链条表示为:
任务需求
↓
设计契约:需要什么能力、谁负责决策、如何验收
↓
配置契约:选择什么实现、用什么参数、绑定什么资源、受什么约束
↓
加载与解析:验证、合成、解析引用、生成有效配置
↓
运行时实现:创建组件、执行模型调用、路由工具、更新状态
↓
执行轨迹与评测:配置是否产生了预期行为设计决定“为什么这样做、系统应当满足什么约束”;配置表达“当前版本具体采用什么组件、参数和资源”;实现负责“这些声明如何成为真实执行行为”。三者可以由不同文件或服务承载,但必须保持契约一致。
配置通常包括三个层次:
- 声明层(Declarative Configuration):描述 Agent 的角色、模型选择、能力清单、运行限制与依赖引用。
- 解析层(Resolution & Composition):合并基础配置与环境覆盖,解析资源引用,验证类型和跨字段约束,形成不可变的有效配置快照。
- 绑定层(Runtime Binding):将逻辑模型标识映射到真实提供商、将工具标识映射到可信执行器、将知识源标识映射到授权数据连接,并执行真正的权限与预算检查。
前两层可以主要通过配置管理实现;第三层必须依赖可信程序与基础设施,不能仅靠配置文本保证。
1.2 配置与指令、记忆、代码的边界
- Instructions:研究指令层级、行为引导和冲突机制;Configuration 研究指令的引用、组合、版本、变量注入、校验和发布。
- Model:研究模型的能力与推理接口;Configuration 研究具体模型路由、参数、超时、后备策略和提供商绑定。
- Tools / Skills:研究调用与能力封装机制;Configuration 研究可用工具集、技能依赖、启用条件及版本锁定。
- Memory / Knowledge / Context:研究信息处理机制;Configuration 研究存储引用、检索策略、上下文预算与数据作用域。
- Permissions & Constraints:研究可信授权机制;Configuration 仅表达授权策略的引用和参数,不能代替运行时执行策略。
- Implementation:研究代码与执行流程;Configuration 不应演变为任意可执行脚本的隐式编程语言。
1.3 本专题的工程交付物
| 交付物 | 主要内容 | 验收方式 |
|---|---|---|
| 配置规格 | 字段、类型、默认值、必填项、枚举、约束 | Schema 校验 |
| 基础配置 | Agent 逻辑能力与任务策略 | 与设计契约逐项映射 |
| 环境覆盖 | 开发、测试、生产环境的差异 | 有效配置对比 |
| 资源注册与绑定 | 模型、工具、知识源、技能的逻辑 ID 与实际资源 | 引用完整性检查 |
| 版本锁定与清单 | 配置、Prompt、Skill、Tool、模型版本或别名解析记录 | 可追溯、可复现 |
| 变更与回滚方案 | 配置差异、审批、测试、发布和恢复 | 回归与回滚演练 |
| 配置验证报告 | 静态错误、运行时契约、实验结果 | 自动检查与评测记录 |
二、配置模型:从能力清单到可执行契约
2.1 配置应表达的七类信息
| 维度 | 典型字段 | 主要风险 |
|---|---|---|
| 身份与任务 | agent.id、role_ref、task_profile | 角色与任务边界不一致 |
| 模型与推理 | model.ref、参数、路由、超时 | 不兼容参数、模型漂移 |
| 指令与上下文 | instructions.ref、模板变量、token 预算 | 指令冲突、上下文溢出 |
| 知识与记忆 | knowledge.sources、memory.scope、检索策略 | 越权访问、数据混用 |
| 工具与技能 | tools.allowlist、skills.refs、依赖 | 能力声明与真实接口不匹配 |
| 执行与资源 | 步数、时间、调用次数、成本上限 | 无界循环、预算不可执行 |
| 安全与评测 | policy.ref、审批要求、评测集版本 | 将声明误认为真实安全保证 |
这些字段应当支持引用而非复制。例如,配置引用 tool:web_search@2,而工具注册表保存其输入 Schema、执行器映射、风险等级与权限要求。避免在每个 Agent 配置中复制完整工具定义,造成接口漂移。
2.2 配置粒度:逻辑 Agent、运行实例与任务覆盖
一个 Agent 的配置通常不是单一文件:
- Agent 定义(Definition):稳定的角色、基础能力和默认执行策略。
- 环境配置(Environment):不同环境的模型端点、存储绑定和资源限制。
- 运行配置(Run Configuration):某次任务允许覆盖的输入、截止时间、预算等。
- 有效配置(Effective Configuration):所有层合成、校验并解析后的不可变快照。
必须规定每一层允许覆盖哪些字段。例如,用户可以缩小单次任务预算,但不能通过任务输入扩大工具权限;生产环境可以收紧超时和访问范围,但不能绕过审批策略。
2.3 一个参考 YAML 配置
以下为说明结构而设计的配置,不直接对应某个现有 SDK:
schema_version: "1.1"
agent:
id: "research-assistant"
role_ref: "roles/researcher@1.2"
task_profile: "evidence_based_report"
model:
ref: "models/research-default"
temperature: 0.2
max_output_tokens: 3000
timeout_seconds: 45
instructions:
system_ref: "prompts/research-system@3.1"
variables:
citation_style: "source-linked"
context:
max_input_tokens: 24000
reserve_output_tokens: 3000
compaction_strategy: "evidence_preserving"
knowledge:
sources: ["sources/public-papers", "sources/authorized-docs"]
retrieval:
top_k: 8
require_source_metadata: true
memory:
mode: "task_scoped"
store_ref: "stores/research-session"
retention_days: 7
tools:
allowlist: ["web.search@2", "document.read@1", "report.write_draft@1"]
skills:
refs: ["skills/evidence-review@1.0", "skills/technical-report@2.0"]
execution:
max_steps: 16
max_tool_calls: 24
timeout_seconds: 600
max_cost_usd: 1.50
security:
policy_ref: "policies/research-readonly@4"
approval_required_for: ["external_publish", "send_message"]
evaluation:
suite_ref: "evals/research-baseline@2"这里的 max_cost_usd 只是预算声明,实际执行时还需要价格数据、用量统计、并发控制和强制中断机制;approval_required_for 也需要可信的执行网关实施,不能仅靠模型遵守。temperature 等模型参数必须经过提供商能力校验:并非所有模型都接受或以相同方式解释这些参数。
三、配置契约与 Schema:类型正确只是第一步
3.1 四层校验
配置校验应至少区分四层:
- 语法校验:YAML/JSON 是否可解析;拒绝重复键和不受控的解析特性。
- 结构校验:必填字段、类型、枚举、范围、未知字段处理;可用 JSON Schema、Pydantic 等实现。
- 语义校验:字段之间是否一致;例如输入预算加输出预留是否超过所选模型上下文能力,工具依赖是否完整。
- 环境与运行时校验:资源是否存在、当前身份是否有权访问、提供商是否支持相应参数、执行器是否可用。
静态 Schema 无法判断某个知识源当前是否授权,也无法保证模型会遵循引用要求。因此,配置“合法”与 Agent“有效、可靠、安全”是不同命题。
3.2 关键跨字段不变量
设模型可用上下文窗口为
这里的 token 预算需要使用对应模型的真实计数方式或保守估算;不能把不同模型的 tokenizer 当作相同。
其他常见不变量包括:
- 每个
tool和skill引用必须能解析到注册表中的确定版本。 - Skill 声明的工具依赖必须包含于可用工具集合,且实际执行仍需授权。
- 任务级覆盖不得扩大租户数据范围或提升权限。
- 模型能力必须与所需结构化输出、工具调用等接口相匹配。
- 开启持久记忆时必须定义存储作用域、访问策略和保留期限。
- 启用回退模型时必须验证其上下文、工具接口和输出契约兼容性。
- 任何无法识别的安全关键字段应当 fail closed,不能静默忽略。
3.3 严格与宽松模式
研发时可以允许部分非关键字段使用默认值,但生产发布建议采用严格校验:未知字段报错、引用缺失报错、敏感配置缺失报错。否则,max_tool_call 与 max_tool_calls 这样的拼写错误可能导致预算控制失效。
配置迁移需要显式版本号与迁移规则,而不是长期容忍多个语义不清的同义字段。
四、配置合成、继承与优先级
4.1 不能只写“后者覆盖前者”
常见合成流程为:
内置安全基线
↓
Agent 基础定义
↓
环境绑定
↓
经过授权的运行覆盖
↓
校验 + 资源解析
↓
Effective Config(带版本与摘要)这一顺序仅表示允许覆盖的候选来源,不是所有字段都能由后层覆盖。必须为每个字段规定合成策略,例如:
| 字段类型 | 合成规则 | 示例 |
|---|---|---|
| 普通可覆盖值 | 最后一个合法来源生效 | 日志详细程度 |
| 上限型约束 | 取更严格的上限 min | 最大工具调用数 |
| 允许集合 | 取交集 | 可用工具列表 |
| 必须满足集合 | 取并集 | 必须审批的操作 |
| 受保护引用 | 仅有权限的发布流程可修改 | 安全策略引用 |
| 不可变标识 | 禁止运行时覆盖 | Agent ID、Schema 版本 |
简单的深度合并在安全字段上往往是错误的。例如把工具列表整体替换,可能把原本不允许的工具加入最终配置。
4.2 防止配置爆炸
如果每个客户、环境、模型和任务都复制一套配置,配置数量可能快速增长。应优先采用:
- 少量稳定的基础配置;
- 明确的能力 Profile;
- 环境级资源绑定;
- 受约束的任务级覆盖;
- 可机器比较的有效配置快照。
过度继承同样危险:多层模板可能使“某字段最终从哪里来”难以解释。发布工具应能够输出字段级来源(provenance),说明生效值及其覆盖路径。
4.3 不可变运行快照
一次任务开始后,应记录 config_digest 和解析后的关键资源版本。长任务中直接读取“最新配置”可能导致前后行为不一致:执行到一半时工具列表、模型或审批策略改变,任务的可复现性与审计性都会下降。
一般策略是运行配置快照固定、紧急安全策略可动态收紧。若必须热更新,应定义可更新字段、应用时点、并发一致性和恢复语义。
五、模型配置:选择、能力协商与回退
5.1 模型引用不等于固定模型
models/research-default 是逻辑引用,可能映射到不同提供商或模型版本。需要记录至少三层身份:
逻辑模型名 → 提供商/路由策略 → 实际调用的模型标识与版本当提供商使用可变别名时,单靠配置文件哈希无法保证复现同一模型行为;执行轨迹还应记录实际解析的模型标识、请求参数、提供商响应元数据及时间。
5.2 能力协商
配置前应检查:
- 是否支持工具调用、结构化输出、图像或长上下文;
- 输出 token 限制、上下文窗口与实际计费单位;
- 温度等采样参数是否被接受;
- 工具调用是否支持并行、强制选择或禁用;
- 数据驻留、隐私和服务等级约束;
- 错误类型、速率限制、超时与重试语义。
不要将某个提供商的参数名直接作为所有模型的统一语义。适配层应把通用配置映射到具体 API,并对不支持的选项报错或明确降级。
5.3 回退策略的隐藏代价
模型 A 超时后切换模型 B,并不一定保持行为等价。B 可能不支持同样的工具 Schema、上下文长度或结构化输出格式。回退策略应定义触发条件、兼容性检查、成本上限、已发生副作用的处理方式,以及是否允许在同一任务中更换模型。
对已经执行外部操作的任务,重试模型决策前必须考虑幂等与重复执行风险。
六、指令与上下文配置:组合、预算与可信边界
6.1 指令引用与版本
推荐将较长的指令模板独立版本化,通过 system_ref 等引用绑定。模板的参数应有明确类型、允许值和转义策略,避免把任意外部内容直接插入高优先级指令。
指令应区分:
- 稳定的 Agent 职责与行为原则;
- 特定任务的输入和验收条件;
- 工具使用说明;
- 检索结果、网页、文件等不可信外部数据。
这些内容不能因为最终被拼成一个字符串,就获得相同的信任级别。可信边界应由消息角色、数据封装和运行时授权共同维护。
6.2 上下文预算分配
上下文配置要明确保留哪些信息、什么时候压缩、如何防止关键证据在摘要过程中丢失。研究助理可以将上下文划分为:
稳定任务契约
+ 当前计划与任务状态
+ 已验证的证据索引
+ 最近工具观察
+ 必要历史摘要
+ 模型输出预留不宜仅用“超过阈值就截断最早消息”的规则处理所有任务。对证据型任务,删除引用来源或主张 - 证据映射可能直接破坏最终质量。
6.3 配置无法消除提示注入
把网页内容标记为 untrusted 可以帮助组织数据,但不能保证模型永远忽略恶意指令。涉及工具权限、外部发布和敏感数据访问的关键约束,必须由模型外部的可信执行层验证。
七、工具与技能配置:能力声明、依赖与授权
7.1 三个必须分开的集合
定义:
:注册表中可发现的工具; :当前 Agent 配置允许使用的工具; :运行时根据主体 、资源 和策略实际授权的工具。
真正可执行的工具集合应满足:
如果运行时只检查模型是否输出了合法工具名,却没有检查
7.2 工具版本与接口兼容
工具配置应至少记录工具 ID、接口版本、输入 Schema 摘要、输出契约、风险等级和执行器绑定。工具升级时需要检查:
- 字段是否删除或重命名;
- 必填参数是否增加;
- 返回结构是否改变;
- 超时与错误码语义是否变化;
- 是否引入新的外部副作用;
- 是否改变授权需求。
语义化版本号可以作为约定,但不能替代实际兼容性测试。
7.3 Skill 依赖与渐进加载
Skill 配置不应只是一个名称列表。还需考虑触发条件、依赖工具、所需知识源、指令加载成本、优先级与冲突处理。
例如 skills/evidence-review@1.0 依赖 web.search@2 和 document.read@1。若配置中禁用了文档读取,则该 Skill 不应继续被标记为“完全可用”。
可以先加载 Skill 的轻量元数据,在确实选择该 Skill 时再加载详细指令或脚本,避免大量不相关内容占据上下文。
八、知识、记忆与状态配置:数据作用域优先
8.1 知识源配置
知识源需要明确标识、数据类型、访问范围、检索器、更新频率、引用元数据和失败策略。对研究助理而言,“可以检索到资料”与“可以引用为可信证据”应分别配置或验证。
例如:
knowledge:
sources:
- ref: "sources/public-papers"
citation_required: true
freshness_policy: "record_publication_date"
- ref: "sources/authorized-docs"
citation_required: true
access_scope: "current_tenant"access_scope 只是意图声明;实际检索时还需在数据查询与结果返回环节实施租户隔离。
8.2 记忆配置
至少区分:
- 当前任务的短期状态;
- 可跨任务复用的长期记忆;
- 外部知识库;
- 运行日志与审计记录。
这些数据有不同的生命周期、权限和删除要求。把所有内容统一写入一个“memory store”可能导致跨任务污染或隐私风险。
配置应明确记忆写入条件、作用域、保留期限、检索策略、更新与删除方式。尤其不能把“模型记得什么”与“数据库实际保存了什么”混为一谈。
8.3 状态配置与恢复
运行状态的 Schema 版本与配置版本应分别管理。任务从旧版本配置恢复时,需要明确:
- 继续使用原配置快照;
- 迁移状态并采用新配置;
- 拒绝恢复并请求人工处理。
不能默认所有配置升级都与旧状态兼容。复杂的检查点、分布式一致性和恢复引擎属于 Agent System,本篇研究的是 Agent 配置应如何声明并约束这些能力。
九、执行参数、预算与失败策略
9.1 不同预算控制的语义
max_steps、max_tool_calls、timeout_seconds 和 max_cost_usd 不能相互替代:
| 参数 | 限制对象 | 必须明确的语义 |
|---|---|---|
max_steps | Agent 决策或执行循环次数 | 什么算一步;重试是否计入 |
max_tool_calls | 工具调用次数 | 失败调用、并行调用是否计入 |
timeout_seconds | 任务总墙钟时间 | 是否包括等待审批与排队 |
model.timeout_seconds | 单次模型请求 | 与总任务超时如何组合 |
max_cost_usd | 可计费资源消耗 | 价格版本、估算误差与超限动作 |
对于并发工具调用,应在执行前预留预算,避免多个调用同时检查“还有额度”后共同超限。费用预算通常只能根据已知价格和用量进行估算;若要求严格上限,需要预留安全裕量,并在无法精确计费时定义保守策略。
9.2 重试、回退与终止
配置应分别规定可重试错误、重试次数、退避策略、是否需要幂等键、可回退资源和最终失败动作。读操作与写操作的重试风险不同,不能用统一的“失败就重试三次”处理所有工具。
终止条件也应明确:成功、证据不足、用户取消、预算耗尽、权限拒绝、不可恢复错误、等待人工审批等状态,不应全部折叠为 done。
十、安全配置:声明与强制执行的分界
10.1 不应把安全寄托于 Prompt
“不要访问其他租户的数据”“发布前必须询问用户”等指令可以影响模型行为,但不是可信的授权机制。安全关键规则必须在工具网关、数据访问层或执行环境中强制实施。
配置系统至少应保护:
- 策略引用及版本;
- 工具与数据访问作用域;
- 审批条件;
- 外部副作用操作的授权;
- 敏感配置与凭据;
- 审计字段和执行身份。
10.2 凭据不进入可分享配置
配置文件中应存放 Secret 引用,而非 API Key 明文:
providers:
primary:
api_key_ref: "secret://agent/research/model-provider"Secret 由运行环境或专用密钥管理系统在授权条件下解析。日志、异常信息和有效配置导出都必须脱敏;不能因为配置文件被加入 .gitignore 就认为秘密安全。
10.3 最小权限与收紧原则
运行时任务覆盖可以减少可用工具、缩小数据范围或降低预算;不能自行增加权限。安全策略发生紧急变更时,已启动任务也可能需要重新授权或终止。
这要求配置管理与真实策略执行之间存在明确接口,不能只在任务启动时做一次形式化检查。
十一、配置生命周期:开发、发布、观测与回滚
11.1 推荐的配置变更流程
提出变更
↓
编辑配置 / 更新依赖引用
↓
语法 + Schema + 跨字段校验
↓
资源绑定与权限检查
↓
生成有效配置及差异报告
↓
针对性单测 / 契约测试
↓
固定评测集回归 + 对照实验
↓
审批、灰度发布或受控切换
↓
监测运行结果
↓
保留 / 回滚 / 再迭代并非每个个人实验都需要复杂的发布平台,但至少应能知道“当前运行的是哪份配置、与上次有什么不同、发生问题能否恢复”。
11.2 配置版本不等于完整可复现性
一次 Agent 运行的行为还受到以下因素影响:
配置版本
+ 指令模板内容及版本
+ Skill / Tool 接口与实现版本
+ 实际模型标识与请求参数
+ 知识库快照或检索时间
+ 代码版本
+ 运行环境
+ 任务输入与外部状态因此,应建立运行清单(Run Manifest),记录这些要素。配置文件的哈希只能证明文件内容未变,不能证明外部模型、网页内容或知识源未变。
11.3 配置实验如何避免误判
假设比较两种模型配置 A、B,应尽可能固定任务集、工具版本、知识来源、评审规则与预算条件。由于模型输出存在随机性,关键指标需要多次运行并报告分布,而不是只比较一次结果。
应区分:
- 配置有效性:字段合法、依赖完整、能正确加载。
- 功能正确性:Agent 能按配置调用相应组件。
- 任务质量:Agent 是否完成真实任务且结果可靠。
- 系统质量:延迟、费用、失败率、可恢复性等是否达标。
只通过第一层验证,不能得出后面三层结论。
十二、贯穿案例:研究助理 Agent 的配置设计
12.1 从设计交付物映射到配置
承接上一专题的设计要求:
| 设计要求 | 配置表达 | 仍需实现/验证的机制 |
|---|---|---|
| 仅访问公开及授权资料 | knowledge.sources | 数据层权限与检索过滤 |
| 能根据证据缺口继续检索 | instructions、skills、execution | 决策循环、证据状态更新 |
| 输出可追溯研究报告 | instructions、evaluation | 引用检查、主张 - 证据验证 |
| 不得擅自发布 | tools.allowlist、security.policy_ref | 网关授权、审批流程 |
| 控制调用成本 | execution.max_* | 实时计数、预算预留与终止 |
| 可定位失败原因 | logging / 运行清单 | 结构化日志、轨迹采集与评测 |
配置设计必须从任务契约出发,不能因为框架支持某项功能就默认启用。
12.2 三种实验配置
Baseline:固定研究流程。 固定检索次数与文档处理步骤,作为非动态决策基线。它的优点是路径可预测、易于控制成本,但在证据不足时缺少自适应能力。
Variant A:动态检索 Agent。 允许根据证据状态决定是否继续检索,设置严格步数、工具次数和成本上限,检验动态决策能否提升覆盖度与证据质量。
Variant B:动态检索 + 证据审查 Skill。 在 A 基础上增加专门的证据审查方法,检验它是否提高引用支持率,以及是否引入额外延迟和费用。
三组方案应使用相同的研究任务集、评审规则和资料访问边界。比较结果需关注成功率、证据质量、调用次数、成本、耗时与失败模式。上述配置是实验设计,不是已经验证的性能结论。
12.3 一份可交付的配置包
建议至少包含:
research-agent/
├── agent.yaml # Agent 定义
├── schema.json # 配置结构与类型约束
├── environments/
│ ├── dev.yaml
│ ├── test.yaml
│ └── prod.yaml
├── prompts/
│ └── research-system.md
├── policies/
│ └── research-policy.yaml
├── registry/
│ ├── tools.yaml
│ └── skills.yaml
├── evals/
│ └── research-baseline.jsonl
├── config.lock.json # 解析后的版本锁定
└── CHANGELOG.md # 变更原因与验证记录目录仅为参考组织方式。实际项目可以合并文件,但必须保留配置来源、版本、校验和变更追踪能力。
十三、可运行的最小工程实验:配置合成与安全不变量
本节设计一个不依赖第三方库的 Python 3 标准库实验(含 3.9),验证配置合成的核心契约。实验不调用真实模型、不读取密钥、不执行外部工具,因此验证范围限于确定性的配置逻辑。配套文件 02-Agent-Configuration-Development-and-Practice-v1.1-demo.py,运行:python3 02-Agent-Configuration-Development-and-Practice-v1.1-demo.py。
13.1 实验目标
验证以下行为:
- 运行覆盖只能缩小工具集合,不能增加工具。
- 运行覆盖只能收紧预算上限,不能放宽。
- 安全审批要求只能增加,不能被任务级覆盖删除。
- 受保护的策略引用不能由任务级覆盖修改。
- 未知覆盖字段被拒绝。
- 解析后的有效配置包含稳定摘要,且不受后续输入对象修改影响。
- 不满足 Skill 工具依赖时拒绝配置。
- 非法预算值被拒绝。
13.2 核心实现
完整代码见上述配套实验文件;关键逻辑如下:
effective_tools = base_tools & requested_tools
effective_budget = min(base_budget, requested_budget)
effective_approvals = base_approvals | requested_approvals注意:交集、最小值和并集的规则只适用于这里明确定义的字段语义。其他字段必须分别定义合成策略;不能把这三条公式机械套用到所有配置。
13.3 测试边界
本地执行通过时输出 8 configuration-contract checks passed。该实验可以证明参考合成函数对指定输入满足这些不变量,不能证明生产环境的工具网关会执行授权,也不能证明模型能正确选择 Skill、检索有效资料或完成研究任务。后续 Implementation 与 Testing 需要分别补足运行集成和端到端行为验证。
十四、常见失败模式与诊断方法
| 失败模式 | 典型表现 | 根因 | 建议验证 |
|---|---|---|---|
| 配置漂移 | 同一版本在不同环境表现不同 | 环境覆盖或资源别名不透明 | 输出有效配置与解析资源 |
| 模型不兼容 | 工具调用或结构化输出失败 | 只验证模型名,未验证能力 | 提供商契约测试 |
| 上下文预算失效 | 输入溢出、证据被截断 | 忽略工具描述和预留开销 | token 计数与边界测试 |
| 权限意外扩大 | 任务覆盖加入高风险工具 | 使用简单列表替换 | 允许集合交集测试 |
| Skill 不可用 | 加载成功但调用时报错 | 依赖工具或知识源缺失 | 依赖图校验 |
| 隐性配置失效 | 拼错字段但没有报错 | 未知字段被忽略 | 严格 Schema 校验 |
| 热更新不一致 | 长任务前后使用不同参数 | 缺少运行快照 | 运行清单与版本检查 |
| 回滚后仍失败 | 配置恢复但模型或知识已变化 | 外部依赖未锁定 | 资源解析记录与回归 |
| 密钥泄露 | 日志包含 Token | 导出有效配置未脱敏 | 日志与异常路径审计 |
| 指标假改善 | 某次运行表现突出 | 样本过少、变量未控制 | 固定任务集、多次实验 |
一个重要的诊断原则是:先确认实际生效的配置,再分析模型行为。 否则容易把资源绑定错误、配置覆盖或工具版本不兼容误判为模型推理能力问题。
十五、技术路线与代表性实现的研究方法
配置系统既可以自行实现,也可以使用现有框架和配置管理工具。选型时需要区分不同层次:
| 技术层次 | 代表性方向 | 应重点检查什么 |
|---|---|---|
| 数据表达 | JSON、YAML、TOML | 可读性、解析安全、类型表达 |
| 结构校验 | JSON Schema、Pydantic | 严格模式、跨字段约束、错误报告 |
| 应用配置管理 | Hydra / OmegaConf 等 | 组合、覆盖、配置来源与版本 |
| Agent 框架配置 | LangChain、LangGraph、AutoGen 等 | 模型、工具、状态与运行参数如何绑定 |
| 资源与 Secret 管理 | 环境变量、密钥管理服务 | 权限、轮换、审计、脱敏 |
| 实验与观测 | 评测工具、轨迹系统 | 配置版本关联、对照实验、回归 |
这里列出的是研究与比较方向,不意味着各工具具有完全相同的能力,也不意味着本文已对其最新版本进行逐项源码验证。具体采用某个工具前,应核对其当前官方文档、版本兼容性与实际行为。
对 Agent 框架,建议围绕同一个研究助理案例,检查五个问题:
- Agent 的模型、工具和指令在哪里定义?是声明式配置还是代码构造?
- 配置何时被解析,能否在运行中更新?更新是否影响已经开始的任务?
- 工具授权由谁执行?模型声明与真实执行权限是否分离?
- 配置、模型、Prompt、工具与执行轨迹能否关联到同一个运行标识?
- 当配置不兼容、资源不可用或策略冲突时,系统如何失败与恢复?
这样比较得到的是架构能力与工程差异,而非框架功能名称清单。
十六、工程实施流程与验收清单
16.1 推荐的八步流程
- 接收设计基线:读取任务契约、架构决策、模块接口、风险约束和验收条件。
- 建立配置模型:确定字段、类型、默认值、引用方式和配置作用域。
- 划定覆盖边界:规定哪些值可覆盖、哪些只可收紧、哪些不可修改。
- 建立资源注册:为模型、工具、Skill、知识源和策略建立稳定引用。
- 实现加载与校验:语法、Schema、语义、依赖与环境检查。
- 生成有效配置快照:记录来源、摘要、资源解析结果和敏感字段脱敏视图。
- 执行配置测试与任务回归:检查不变量、接口兼容和实际任务质量。
- 发布与监测:记录版本、变更原因、发布范围、回滚方案与运行效果。
16.2 进入 Implementation 前的验收条件
- [ ] 每个配置字段都有清晰的语义、类型和约束。
- [ ] 配置项能够追溯到任务需求或架构决策。
- [ ] 基础配置、环境配置与任务覆盖的优先级已定义。
- [ ] 权限、工具集合与预算的覆盖规则不会意外放宽约束。
- [ ] 模型、工具、Skill、知识源和策略引用可以解析。
- [ ] 关键跨字段依赖已检查,未知安全字段不会被静默忽略。
- [ ] 凭据通过安全引用管理,不在配置包或日志中明文出现。
- [ ] 每次运行能够记录有效配置摘要及关键资源版本。
- [ ] 已有配置变更测试、任务回归与回滚方法。
- [ ] 明确哪些约束由配置声明,哪些必须由运行时代码强制执行。
十七、研究结论与后续衔接
Agent Configuration 的本质,是把设计阶段的技术选择和约束转换为可执行系统能够明确理解、可靠加载并持续验证的配置契约。
高质量配置体系不仅回答“Agent 使用什么模型、工具和提示词”,还要回答:
- 每项配置从哪项需求或设计决策而来?
- 不同来源的配置如何合成,哪些约束不可被放宽?
- 所声明的资源和能力是否真实存在且彼此兼容?
- 配置变更如何影响运行行为,如何测试与回滚?
- 一次执行能否追溯到确切的配置与资源版本?
- 哪些规则只是声明,哪些已由可信运行时强制执行?
本篇的核心结论:配置是 Agent 设计与运行实现之间的受约束接口,而不是一个松散的参数集合。
下一专题 「03 · 如何实现一个 Agent? - Agent Implementation」 将以本篇的有效配置为输入,研究如何实现配置加载、模型与工具绑定、任务执行循环、状态更新、异常处理和结果输出,并将设计契约真正落实为可运行代码。
附录 A:建议的研究与技术资料入口
以下为进一步研究时应优先核对的原始技术资料及其关注点。它们是参考入口,不表示本文已逐项复核最新发布版本的所有实现细节。
- JSON Schema 官方规范:配置字段类型、结构校验、组合约束及版本差异。
json-schema.org/specification - Pydantic 官方文档:Python 配置模型、严格类型校验、跨字段验证与序列化。
docs.pydantic.dev - Hydra 官方文档:配置组合、覆盖和应用级配置管理。
hydra.cc/docs/intro - OmegaConf 官方文档:结构化配置、合并与插值机制。
omegaconf.readthedocs.io - LangGraph 官方文档:状态、运行配置与执行过程中的配置绑定。
docs.langchain.com/.../langgraph/overview - Model Context Protocol 官方文档:工具接口、资源和协议边界。
modelcontextprotocol.io - OWASP LLM / GenAI Security 项目:提示注入、工具调用与敏感信息保护的风险分析。
genai.owasp.org
附录 B:研究与验证说明
- 本文将通用工程原则、参考配置方案与具体框架能力区分表述。
- YAML 字段、配置目录和合成策略是本专题提出的参考设计,不属于通用行业标准。
- 配套
02-Agent-Configuration-Development-and-Practice-v1.1-demo.py仅验证确定性配置合成及指定不变量(输出8 configuration-contract checks passed);不调用真实模型、工具或外部服务。 - 真实提供商兼容性、密钥管理、工具授权、模型行为和端到端任务质量仍需在后续 Implementation 与 Testing 中验证。