AI 应用开发Ⅰ

Ethan
2025-03-04 发布 / 正在检测是否收录...

1. Skill 管理与 System Prompt 优化

问题:Skill 太多占用上下文窗口

方案

  • Skill 做成外部注册表,system prompt 只保留最小规则和调用协议,按需动态注入
  • Skill Routing:用规则/分类模型/向量检索筛 top-k skill
  • Skill 信息拆成摘要版和完整版,先注入摘要,确认调用后再加载详细说明,显著压缩 token

2. Skill 消歧(Description 相似导致误召回)

解决思路(四步走):

  1. 将 skill 从纯文本 description 升级为结构化定义(适用场景、禁用场景、输入参数、返回格式、前置条件、失败条件、调用示例)
  2. 两阶段选择:先召回 top-k → 再让模型根据参数约束和样例做 rerank
  3. 加入负样本示例,明确告诉模型什么问题不应该调用这个 skill
  4. 执行前做 schema 校验和 rule check,即使模型选错也不能继续误调

长期方案:如果两个 skill 语义长期接近,考虑在系统设计层面合并成一个 skill,再由内部参数路由


3. Agent 设计核心 — 上下文工程

Agent 最终不是单轮问答,而是一个持续决策系统。模型能看到什么信息、这些信息的顺序和优先级、哪些是规则/证据/历史状态,都会直接影响 Agent 的稳定性。

核心原则:不是"给模型更多信息",而是"给模型正确的信息"。


4. 上下文工程注意事项

要点说明
角色隔离system、developer、user、tool output、memory 的优先级和边界要清楚,外部文本和系统规则不能混在一起
信息裁剪只保留当前任务相关内容,避免把所有历史对话/检索结果/工具说明一股脑灌进去
格式控制结构化上下文比纯自然语言更稳(工具结果用 JSON、任务状态字段化、长历史做摘要)
来源可信度分层系统规则 > 用户输入 > 工具结果 > 模型猜测 > 无依据生成
上下文压缩与淘汰长任务需做压缩和过期淘汰,避免状态漂移和旧信息污染新决策

5. 长期记忆设计(写回、衰减、冲突消解)

写回策略

  • 只保存高价值稳定信息:用户偏好、身份属性、长期任务目标、反复出现的业务事实
  • 结构化抽取(如 profile 字段),而非原文整段存储

衰减策略

  • 短期热点信息:高权重,随时间衰减
  • 长期稳定偏好:低频刷新,不轻易删除

冲突消解

  • 结合时间戳、来源可信度、置信度
  • 新的高可信事实覆盖旧事实,低可信内容只作为候选

高级方案

  • 事件流 + 物化视图:所有记忆写入先存成 event,再异步聚合成 profile,方便审计和回滚

6. 并行 Tool Calling

核心要点

  • 只有互不依赖的工具才能并行(如天气查询和汇率查询可一起发)
  • 有依赖关系的必须串行

一致性保障

  • 工具执行结果先写到临时观察区,再由调度器统一合并,避免并发写导致状态污染

可回放性

  • 每次调用带 trace_idstep_id、输入参数、输出结果和耗时,组成完整执行 DAG

失败处理

  • 按工具粒度重试,不能因为一个工具超时就把全部结果丢掉

副作用操作

  • 发消息、创建订单等需加幂等键,防止重复重试造成真实业务重复写入

7. 主流 Agent 设计模式

模式特点适用场景
ReAct边推理边行动(思考→调用→观察→继续思考)通用场景
Plan-and-Execute先规划再按步骤执行长任务,比纯 ReAct 更稳
Router先做任务分类,再路由给不同子 Agent/工具链多能力分发
Workflow + Agent固定流程嵌局部自主决策线上业务常用
Supervisor主 Agent 拆解任务并分派给多个子 Agent多 Agent 协作
Blackboard多 Agent 通过共享状态协作多 Agent 协作
点对点自由协作Agent 间自由协作线上较少,不易治理

8. MCP vs A2A vs Function Calling

协议抽象层级适用场景
Function Calling调用一个函数单应用内工具调用,模型输出结构化调用意图,宿主进程负责执行
MCP暴露一组标准能力多模型客户端/IDE 共享一套工具和资源能力,统一封装资源、工具、提示模板
A2A多智能体协作完成任务多 Agent 分工协作、任务转派和结果汇总

本质区别:抽象层级不同 — 函数调用 → 能力暴露 → 智能体协作


9. RAG 接入 Agent 的设计

  • RAG 应作为决策节点,而非固定的"先查再答"
  • 模型先判断是否需要外部知识 → 决定 query rewrite → query decomposition → 召回 → rerank → 生成
  • 常见做法:把 RAG 包成一个工具,Agent 自己决定何时调用
  • 检索结果需做去重、切片、排序、来源标注
  • 生成时要求模型只根据检索到的证据回答,没有证据就明确说不确定,降低幻觉

10. Tool Calling 工程实现

四层架构

层级职责
工具注册层管理可用工具
参数 schema 层定义参数格式和约束
执行器层实际执行工具调用
审计日志层记录调用链路

服务端职责:白名单校验、参数校验、超时控制、幂等控制、错误包装

核心原则:模型只能输出候选调用,不能把工具执行权直接交给模型


11. Agent Memory 分层

层级用途特点
短期记忆最近几轮对话 + 当前任务状态保证会话连贯
长期记忆稳定事实(用户偏好、身份、目标)持久化存储
摘要记忆压缩旧对话为关键事实减少 token 占用

落地策略:保留最近 N 轮原文 → 更久远内容压成 summary → 抽取关键字段单独存储 → 按需召回,不全量拼接


12. Prompt Injection 防护(Agent 场景)

风险:不仅生成错误文本,还可能误调工具、越权执行、触发真实业务操作

分层防护

  1. 角色和优先级隔离:外部知识不能覆盖系统规则
  2. 文档视为证据:检索文档视为证据,不视为命令
  3. 工具调用管控:白名单 + 参数校验,高风险操作显式确认
  4. 链路可追踪:输出和调用链路必须可追踪,出问题能回放
  5. 输入清洗:对明显越权或诱导内容做拦截

核心思想:靠系统设计让模型即使被诱导,也没有越权能力


13. Agent 效果评估(四层)

层级评估维度
回答质量准确性、完整性、是否基于证据
工具质量选工具是否正确、参数是否正确、调用是否成功
任务质量一次会话是否完成目标、是否需要额外追问、是否需要人工接管
系统质量耗时、成本、token、错误率、稳定性

如果有 RAG,还需单独评估:召回命中率、rerank 效果、答案引用质量

核心观点:Agent 不是单个模型的分数,而是整条链路的分数


14. 线上工具选错排查路径

  1. 检查 tool description 和 schema 设计,边界是否模糊,参数是否能区分场景
  2. 检查 skill routing 层,是否一次性喂了过多候选工具造成噪声竞争
  3. 检查 prompt 和 few-shot 示例是否给了错误引导,或是否最近改过 system prompt
  4. 回放 trace,检查模型选工具前看到的上下文、历史记忆是否污染当前判断、用户输入是否歧义严重

排查原则:不是看最后一步,而是看"候选集是怎么来的、模型为什么这么选、执行前有没有二次校验"


15. 长任务防死循环

限制手段

  • 最大推理步数
  • 最大工具调用次数
  • 最大 token 开销
  • 最大执行时长

条件定义:明确什么叫完成、什么叫失败、什么情况需要让用户补信息

重复动作检测:连续多步调用同一工具/得到相似结果/没有带来新证据 → 强制终止并返回阶段性结论


总结

Agent 系统的关键不在于模型能力有多强,而在于:

  1. 上下文工程:给模型正确的信息,而非更多信息
  2. 系统设计:安全边界、校验层、可回放
  3. 分层架构:记忆分层、评估分层、防护分层
© 版权声明
THE END
喜欢就支持一下吧
点赞 1 分享 收藏

评论 (0)

取消

Warning: file_put_contents(/var/www/html/usr/cache/pagecache/6a/6a66cf329ecbf3c17e9267a6aed88420.cache): failed to open stream: No such file or directory in /var/www/html/usr/plugins/PageCache/Plugin.php on line 188