Skip to content

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 的工程链条表示为:

text
任务需求
   ↓
设计契约:需要什么能力、谁负责决策、如何验收
   ↓
配置契约:选择什么实现、用什么参数、绑定什么资源、受什么约束
   ↓
加载与解析:验证、合成、解析引用、生成有效配置
   ↓
运行时实现:创建组件、执行模型调用、路由工具、更新状态
   ↓
执行轨迹与评测:配置是否产生了预期行为

设计决定“为什么这样做、系统应当满足什么约束”;配置表达“当前版本具体采用什么组件、参数和资源”;实现负责“这些声明如何成为真实执行行为”。三者可以由不同文件或服务承载,但必须保持契约一致。

配置通常包括三个层次:

  1. 声明层(Declarative Configuration):描述 Agent 的角色、模型选择、能力清单、运行限制与依赖引用。
  2. 解析层(Resolution & Composition):合并基础配置与环境覆盖,解析资源引用,验证类型和跨字段约束,形成不可变的有效配置快照。
  3. 绑定层(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:

yaml
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 四层校验 ​

配置校验应至少区分四层:

  1. 语法校验:YAML/JSON 是否可解析;拒绝重复键和不受控的解析特性。
  2. 结构校验:必填字段、类型、枚举、范围、未知字段处理;可用 JSON Schema、Pydantic 等实现。
  3. 语义校验:字段之间是否一致;例如输入预算加输出预留是否超过所选模型上下文能力,工具依赖是否完整。
  4. 环境与运行时校验:资源是否存在、当前身份是否有权访问、提供商是否支持相应参数、执行器是否可用。

静态 Schema 无法判断某个知识源当前是否授权,也无法保证模型会遵循引用要求。因此,配置“合法”与 Agent“有效、可靠、安全”是不同命题。

3.2 关键跨字段不变量 ​

设模型可用上下文窗口为 W,输入预算为 I,输出预留为 O,系统及工具描述等额外开销为 H,安全裕量为 M。应满足:

I+O+H+M≤W

这里的 token 预算需要使用对应模型的真实计数方式或保守估算;不能把不同模型的 tokenizer 当作相同。

其他常见不变量包括:

  • 每个 tool 和 skill 引用必须能解析到注册表中的确定版本。
  • Skill 声明的工具依赖必须包含于可用工具集合,且实际执行仍需授权。
  • 任务级覆盖不得扩大租户数据范围或提升权限。
  • 模型能力必须与所需结构化输出、工具调用等接口相匹配。
  • 开启持久记忆时必须定义存储作用域、访问策略和保留期限。
  • 启用回退模型时必须验证其上下文、工具接口和输出契约兼容性。
  • 任何无法识别的安全关键字段应当 fail closed,不能静默忽略。

3.3 严格与宽松模式 ​

研发时可以允许部分非关键字段使用默认值,但生产发布建议采用严格校验:未知字段报错、引用缺失报错、敏感配置缺失报错。否则,max_tool_call 与 max_tool_calls 这样的拼写错误可能导致预算控制失效。

配置迁移需要显式版本号与迁移规则,而不是长期容忍多个语义不清的同义字段。

四、配置合成、继承与优先级 ​

4.1 不能只写“后者覆盖前者” ​

常见合成流程为:

text
内置安全基线
    ↓
Agent 基础定义
    ↓
环境绑定
    ↓
经过授权的运行覆盖
    ↓
校验 + 资源解析
    ↓
Effective Config(带版本与摘要)

这一顺序仅表示允许覆盖的候选来源,不是所有字段都能由后层覆盖。必须为每个字段规定合成策略,例如:

字段类型合成规则示例
普通可覆盖值最后一个合法来源生效日志详细程度
上限型约束取更严格的上限 min最大工具调用数
允许集合取交集可用工具列表
必须满足集合取并集必须审批的操作
受保护引用仅有权限的发布流程可修改安全策略引用
不可变标识禁止运行时覆盖Agent ID、Schema 版本

简单的深度合并在安全字段上往往是错误的。例如把工具列表整体替换,可能把原本不允许的工具加入最终配置。

4.2 防止配置爆炸 ​

如果每个客户、环境、模型和任务都复制一套配置,配置数量可能快速增长。应优先采用:

  • 少量稳定的基础配置;
  • 明确的能力 Profile;
  • 环境级资源绑定;
  • 受约束的任务级覆盖;
  • 可机器比较的有效配置快照。

过度继承同样危险:多层模板可能使“某字段最终从哪里来”难以解释。发布工具应能够输出字段级来源(provenance),说明生效值及其覆盖路径。

4.3 不可变运行快照 ​

一次任务开始后,应记录 config_digest 和解析后的关键资源版本。长任务中直接读取“最新配置”可能导致前后行为不一致:执行到一半时工具列表、模型或审批策略改变,任务的可复现性与审计性都会下降。

一般策略是运行配置快照固定、紧急安全策略可动态收紧。若必须热更新,应定义可更新字段、应用时点、并发一致性和恢复语义。

五、模型配置:选择、能力协商与回退 ​

5.1 模型引用不等于固定模型 ​

models/research-default 是逻辑引用,可能映射到不同提供商或模型版本。需要记录至少三层身份:

text
逻辑模型名 → 提供商/路由策略 → 实际调用的模型标识与版本

当提供商使用可变别名时,单靠配置文件哈希无法保证复现同一模型行为;执行轨迹还应记录实际解析的模型标识、请求参数、提供商响应元数据及时间。

5.2 能力协商 ​

配置前应检查:

  • 是否支持工具调用、结构化输出、图像或长上下文;
  • 输出 token 限制、上下文窗口与实际计费单位;
  • 温度等采样参数是否被接受;
  • 工具调用是否支持并行、强制选择或禁用;
  • 数据驻留、隐私和服务等级约束;
  • 错误类型、速率限制、超时与重试语义。

不要将某个提供商的参数名直接作为所有模型的统一语义。适配层应把通用配置映射到具体 API,并对不支持的选项报错或明确降级。

5.3 回退策略的隐藏代价 ​

模型 A 超时后切换模型 B,并不一定保持行为等价。B 可能不支持同样的工具 Schema、上下文长度或结构化输出格式。回退策略应定义触发条件、兼容性检查、成本上限、已发生副作用的处理方式,以及是否允许在同一任务中更换模型。

对已经执行外部操作的任务,重试模型决策前必须考虑幂等与重复执行风险。

六、指令与上下文配置:组合、预算与可信边界 ​

6.1 指令引用与版本 ​

推荐将较长的指令模板独立版本化,通过 system_ref 等引用绑定。模板的参数应有明确类型、允许值和转义策略,避免把任意外部内容直接插入高优先级指令。

指令应区分:

  • 稳定的 Agent 职责与行为原则;
  • 特定任务的输入和验收条件;
  • 工具使用说明;
  • 检索结果、网页、文件等不可信外部数据。

这些内容不能因为最终被拼成一个字符串,就获得相同的信任级别。可信边界应由消息角色、数据封装和运行时授权共同维护。

6.2 上下文预算分配 ​

上下文配置要明确保留哪些信息、什么时候压缩、如何防止关键证据在摘要过程中丢失。研究助理可以将上下文划分为:

text
稳定任务契约
+ 当前计划与任务状态
+ 已验证的证据索引
+ 最近工具观察
+ 必要历史摘要
+ 模型输出预留

不宜仅用“超过阈值就截断最早消息”的规则处理所有任务。对证据型任务,删除引用来源或主张 - 证据映射可能直接破坏最终质量。

6.3 配置无法消除提示注入 ​

把网页内容标记为 untrusted 可以帮助组织数据,但不能保证模型永远忽略恶意指令。涉及工具权限、外部发布和敏感数据访问的关键约束,必须由模型外部的可信执行层验证。

七、工具与技能配置:能力声明、依赖与授权 ​

7.1 三个必须分开的集合 ​

定义:

  • D:注册表中可发现的工具;
  • C:当前 Agent 配置允许使用的工具;
  • A(p,r):运行时根据主体 p、资源 r 和策略实际授权的工具。

真正可执行的工具集合应满足:

E(p,r)=D∩C∩A(p,r)

如果运行时只检查模型是否输出了合法工具名,却没有检查 A(p,r),则配置白名单无法提供充分的安全保证。

7.2 工具版本与接口兼容 ​

工具配置应至少记录工具 ID、接口版本、输入 Schema 摘要、输出契约、风险等级和执行器绑定。工具升级时需要检查:

  • 字段是否删除或重命名;
  • 必填参数是否增加;
  • 返回结构是否改变;
  • 超时与错误码语义是否变化;
  • 是否引入新的外部副作用;
  • 是否改变授权需求。

语义化版本号可以作为约定,但不能替代实际兼容性测试。

7.3 Skill 依赖与渐进加载 ​

Skill 配置不应只是一个名称列表。还需考虑触发条件、依赖工具、所需知识源、指令加载成本、优先级与冲突处理。

例如 skills/evidence-review@1.0 依赖 web.search@2 和 document.read@1。若配置中禁用了文档读取,则该 Skill 不应继续被标记为“完全可用”。

可以先加载 Skill 的轻量元数据,在确实选择该 Skill 时再加载详细指令或脚本,避免大量不相关内容占据上下文。

八、知识、记忆与状态配置:数据作用域优先 ​

8.1 知识源配置 ​

知识源需要明确标识、数据类型、访问范围、检索器、更新频率、引用元数据和失败策略。对研究助理而言,“可以检索到资料”与“可以引用为可信证据”应分别配置或验证。

例如:

yaml
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 版本与配置版本应分别管理。任务从旧版本配置恢复时,需要明确:

  1. 继续使用原配置快照;
  2. 迁移状态并采用新配置;
  3. 拒绝恢复并请求人工处理。

不能默认所有配置升级都与旧状态兼容。复杂的检查点、分布式一致性和恢复引擎属于 Agent System,本篇研究的是 Agent 配置应如何声明并约束这些能力。

九、执行参数、预算与失败策略 ​

9.1 不同预算控制的语义 ​

max_steps、max_tool_calls、timeout_seconds 和 max_cost_usd 不能相互替代:

参数限制对象必须明确的语义
max_stepsAgent 决策或执行循环次数什么算一步;重试是否计入
max_tool_calls工具调用次数失败调用、并行调用是否计入
timeout_seconds任务总墙钟时间是否包括等待审批与排队
model.timeout_seconds单次模型请求与总任务超时如何组合
max_cost_usd可计费资源消耗价格版本、估算误差与超限动作

对于并发工具调用,应在执行前预留预算,避免多个调用同时检查“还有额度”后共同超限。费用预算通常只能根据已知价格和用量进行估算;若要求严格上限,需要预留安全裕量,并在无法精确计费时定义保守策略。

9.2 重试、回退与终止 ​

配置应分别规定可重试错误、重试次数、退避策略、是否需要幂等键、可回退资源和最终失败动作。读操作与写操作的重试风险不同,不能用统一的“失败就重试三次”处理所有工具。

终止条件也应明确:成功、证据不足、用户取消、预算耗尽、权限拒绝、不可恢复错误、等待人工审批等状态,不应全部折叠为 done。

十、安全配置:声明与强制执行的分界 ​

10.1 不应把安全寄托于 Prompt ​

“不要访问其他租户的数据”“发布前必须询问用户”等指令可以影响模型行为,但不是可信的授权机制。安全关键规则必须在工具网关、数据访问层或执行环境中强制实施。

配置系统至少应保护:

  • 策略引用及版本;
  • 工具与数据访问作用域;
  • 审批条件;
  • 外部副作用操作的授权;
  • 敏感配置与凭据;
  • 审计字段和执行身份。

10.2 凭据不进入可分享配置 ​

配置文件中应存放 Secret 引用,而非 API Key 明文:

yaml
providers:
  primary:
    api_key_ref: "secret://agent/research/model-provider"

Secret 由运行环境或专用密钥管理系统在授权条件下解析。日志、异常信息和有效配置导出都必须脱敏;不能因为配置文件被加入 .gitignore 就认为秘密安全。

10.3 最小权限与收紧原则 ​

运行时任务覆盖可以减少可用工具、缩小数据范围或降低预算;不能自行增加权限。安全策略发生紧急变更时,已启动任务也可能需要重新授权或终止。

这要求配置管理与真实策略执行之间存在明确接口,不能只在任务启动时做一次形式化检查。

十一、配置生命周期:开发、发布、观测与回滚 ​

11.1 推荐的配置变更流程 ​

text
提出变更
   ↓
编辑配置 / 更新依赖引用
   ↓
语法 + Schema + 跨字段校验
   ↓
资源绑定与权限检查
   ↓
生成有效配置及差异报告
   ↓
针对性单测 / 契约测试
   ↓
固定评测集回归 + 对照实验
   ↓
审批、灰度发布或受控切换
   ↓
监测运行结果
   ↓
保留 / 回滚 / 再迭代

并非每个个人实验都需要复杂的发布平台,但至少应能知道“当前运行的是哪份配置、与上次有什么不同、发生问题能否恢复”。

11.2 配置版本不等于完整可复现性 ​

一次 Agent 运行的行为还受到以下因素影响:

text
配置版本
+ 指令模板内容及版本
+ 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 一份可交付的配置包 ​

建议至少包含:

text
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 实验目标 ​

验证以下行为:

  1. 运行覆盖只能缩小工具集合,不能增加工具。
  2. 运行覆盖只能收紧预算上限,不能放宽。
  3. 安全审批要求只能增加,不能被任务级覆盖删除。
  4. 受保护的策略引用不能由任务级覆盖修改。
  5. 未知覆盖字段被拒绝。
  6. 解析后的有效配置包含稳定摘要,且不受后续输入对象修改影响。
  7. 不满足 Skill 工具依赖时拒绝配置。
  8. 非法预算值被拒绝。

13.2 核心实现 ​

完整代码见上述配套实验文件;关键逻辑如下:

python
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 框架,建议围绕同一个研究助理案例,检查五个问题:

  1. Agent 的模型、工具和指令在哪里定义?是声明式配置还是代码构造?
  2. 配置何时被解析,能否在运行中更新?更新是否影响已经开始的任务?
  3. 工具授权由谁执行?模型声明与真实执行权限是否分离?
  4. 配置、模型、Prompt、工具与执行轨迹能否关联到同一个运行标识?
  5. 当配置不兼容、资源不可用或策略冲突时,系统如何失败与恢复?

这样比较得到的是架构能力与工程差异,而非框架功能名称清单。

十六、工程实施流程与验收清单 ​

16.1 推荐的八步流程 ​

  1. 接收设计基线:读取任务契约、架构决策、模块接口、风险约束和验收条件。
  2. 建立配置模型:确定字段、类型、默认值、引用方式和配置作用域。
  3. 划定覆盖边界:规定哪些值可覆盖、哪些只可收紧、哪些不可修改。
  4. 建立资源注册:为模型、工具、Skill、知识源和策略建立稳定引用。
  5. 实现加载与校验:语法、Schema、语义、依赖与环境检查。
  6. 生成有效配置快照:记录来源、摘要、资源解析结果和敏感字段脱敏视图。
  7. 执行配置测试与任务回归:检查不变量、接口兼容和实际任务质量。
  8. 发布与监测:记录版本、变更原因、发布范围、回滚方案与运行效果。

16.2 进入 Implementation 前的验收条件 ​

  • [ ] 每个配置字段都有清晰的语义、类型和约束。
  • [ ] 配置项能够追溯到任务需求或架构决策。
  • [ ] 基础配置、环境配置与任务覆盖的优先级已定义。
  • [ ] 权限、工具集合与预算的覆盖规则不会意外放宽约束。
  • [ ] 模型、工具、Skill、知识源和策略引用可以解析。
  • [ ] 关键跨字段依赖已检查,未知安全字段不会被静默忽略。
  • [ ] 凭据通过安全引用管理,不在配置包或日志中明文出现。
  • [ ] 每次运行能够记录有效配置摘要及关键资源版本。
  • [ ] 已有配置变更测试、任务回归与回滚方法。
  • [ ] 明确哪些约束由配置声明,哪些必须由运行时代码强制执行。

十七、研究结论与后续衔接 ​

Agent Configuration 的本质,是把设计阶段的技术选择和约束转换为可执行系统能够明确理解、可靠加载并持续验证的配置契约。

高质量配置体系不仅回答“Agent 使用什么模型、工具和提示词”,还要回答:

  • 每项配置从哪项需求或设计决策而来?
  • 不同来源的配置如何合成,哪些约束不可被放宽?
  • 所声明的资源和能力是否真实存在且彼此兼容?
  • 配置变更如何影响运行行为,如何测试与回滚?
  • 一次执行能否追溯到确切的配置与资源版本?
  • 哪些规则只是声明,哪些已由可信运行时强制执行?

本篇的核心结论:配置是 Agent 设计与运行实现之间的受约束接口,而不是一个松散的参数集合。

下一专题 「03 · 如何实现一个 Agent? - Agent Implementation」 将以本篇的有效配置为输入,研究如何实现配置加载、模型与工具绑定、任务执行循环、状态更新、异常处理和结果输出,并将设计契约真正落实为可运行代码。

附录 A:建议的研究与技术资料入口 ​

以下为进一步研究时应优先核对的原始技术资料及其关注点。它们是参考入口,不表示本文已逐项复核最新发布版本的所有实现细节。

  1. JSON Schema 官方规范:配置字段类型、结构校验、组合约束及版本差异。
    json-schema.org/specification
  2. Pydantic 官方文档:Python 配置模型、严格类型校验、跨字段验证与序列化。
    docs.pydantic.dev
  3. Hydra 官方文档:配置组合、覆盖和应用级配置管理。
    hydra.cc/docs/intro
  4. OmegaConf 官方文档:结构化配置、合并与插值机制。
    omegaconf.readthedocs.io
  5. LangGraph 官方文档:状态、运行配置与执行过程中的配置绑定。
    docs.langchain.com/.../langgraph/overview
  6. Model Context Protocol 官方文档:工具接口、资源和协议边界。
    modelcontextprotocol.io
  7. 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 中验证。