跳到正文

Agent架构设计原则?

大模型 Agent 核心组件功能划分与 Prompt 设计最佳实践

原题:请描述一个基于大模型的Agent系统的典型架构设计,包括各个核心组件的功能划分,并详细说明Agent内部prompt设计的关键原则和最佳实践。

Prompt工程 · 字节真题

30 秒回答

  1. 明确分层架构(感知-规划-执行-记忆)
  2. ReAct/CoT推理模式设计
  3. 工具描述Schema标准化
  4. Prompt模块化与版本管理

回答与解析

答案要点

  • 明确分层架构(感知-规划-执行-记忆)
  • ReAct/CoT推理模式设计
  • 工具描述Schema标准化
  • Prompt模块化与版本管理
  • 多轮对话状态维护机制

典型Agent架构(四层设计)

感知层(Perception)

  • 多模态输入解析:文本/语音/图像统一编码
  • 意图识别模块:粗粒度意图分类 + 槽位抽取
  • 上下文压缩:历史对话摘要,控制窗口长度

规划层(Planning)

  • 推理引擎:ReAct/CoT/ToT模式选择
  • 任务分解:将复杂目标拆解为可执行子任务
  • 动态规划:根据执行反馈调整后续计划

执行层(Action)

  • 工具注册中心:统一接口描述(OpenAPI Schema)
  • 执行器:并行/串行调用、超时重试、结果解析
  • 安全沙箱:敏感操作人工确认、权限管控

记忆层(Memory)

  • 短期记忆:对话窗口、工作记忆(Working Memory)
  • 长期记忆:向量数据库存储经验、用户画像
  • 记忆检索:相关性召回 + 时效性过滤

Prompt设计核心原则

结构化模板

## Role: {角色定位}
## Context: {背景信息 + 历史摘要}
## Tools: {可用工具列表,含参数Schema}
## Instruction: {当前任务 + 输出格式要求}
## Constraints: {禁止事项 + 安全红线}

关键实践

  • 工具描述:用JSON Schema严格定义,示例值降低歧义
  • Few-shot示例:3-5个边界case覆盖常见失败模式
  • 输出约束:强制结构化输出(JSON/XML),方便下游解析
  • 动态组装:按场景裁剪Prompt,避免无效信息干扰

版本管理

  • Prompt A/B测试框架,线上灰度切换
  • 关键业务Prompt入版本库,变更需Code Review

口语版讲法(约4分钟)

  • 一句话定位:Agent系统本质是让大模型具备行动和规划能力
  • 四层架构:感知、规划、执行、记忆,每层功能与边界
  • Prompt设计:结构化模板、工具描述、动态组装
  • 落地风险:上下文窗口、工具调用失败、安全沙箱
  • 收尾:更倾向轻量Agent,留可延伸点待追问

这道题问的是Agent系统的架构和Prompt设计,本质上就是问怎么让一个大模型不光会聊天,还能自主行动、调用工具、完成任务。我觉得这个问题最核心的是把Agent的决策能力和执行能力拆清楚。

我一般会把Agent架构分成四层。先讲感知层,它负责接收和解析用户输入,比如文本、语音、图像,统一编码成模型能理解的形式。这里有个关键点:不是所有输入都要完整塞给模型,我会先做意图识别,粗粒度分类加槽位抽取,然后对历史对话做摘要压缩,控制上下文窗口长度。这个压缩很关键,不然对话一长,模型就分不清重点了。

然后是规划层,这是Agent的大脑。我会用 ReAct 或者 Chain-of-Thought 模式让模型一步步推理,把复杂任务拆成子任务。比如客服退款场景,用户说“我买的东西没收到,我要退款”,规划层会把任务拆成:先查订单状态,再确认物流信息,然后判断是否满足退款条件,最后执行退款操作。这里有个边界问题:ReAct适合单步推理,Tree-of-Thoughts 适合多路径探索,但真正落地时我一般混着用,根据任务复杂度动态切换。

接着是执行层,它负责调用工具。我会维护一个工具注册中心,每个工具用 Function Calling 的规范描述,包括参数Schema、示例值。执行器支持并行或串行调用,有超时重试机制,结果解析后返回给规划层。这里有个坑:工具调用失败是常见失败场景,比如接口超时、返回格式不对,我会设计重试策略和降级方案,比如重试三次后尝试简化版本。

最后是记忆层,分短期和长期。短期记忆就是当前对话的上下文窗口,长期记忆用 Vector Database 存储用户画像和历史经验。检索时我会做相关性召回加时效性过滤,避免过时信息干扰。

再说Prompt设计。我坚持用结构化模板,比如角色、上下文、工具列表、当前任务、约束条件,分块清晰。工具描述用JSON Schema,加上示例值降低歧义。动态组装很关键,根据当前场景裁剪Prompt,比如客服场景只加载相关工具描述,避免无关信息干扰模型判断。

落地时我会特别关注几个风险。一是上下文窗口长度,历史对话太多会超出模型限制,所以我用摘要压缩,必要时用 Sliding Window 只保留最近几轮。二是工具调用安全,敏感操作比如退款、修改订单,我会加人工确认沙箱,权限管控严格。三是Prompt版本管理,关键业务Prompt入版本库,上线前A/B测试,灰度切换。

说到这,有个延伸点值得讨论:Agent的长期记忆和短期记忆怎么协同,比如当长期记忆检索结果和当前对话冲突时,模型怎么抉择?

总的来说,我更倾向轻量级Agent设计,不堆太多层,够用就好。因为层数多了,延迟和失败率都会上升,得不偿失。

关键一句:Agent长期记忆与短期记忆冲突时如何抉择

面试官还可能这样问

  1. 问法 1 · 场景切入

    假设你在做一个智能客服Agent,用户问“帮我查一下上个月的订单”,Agent需要先调用订单查询工具,再根据结果回答。你会怎么设计这个Agent的架构?特别是感知、规划、执行这些模块怎么分工?

  2. 问法 2 · 层层追问

    你设计过Agent系统吗?……它的整体架构大概分几层?……每层核心组件是什么?……那Agent内部的prompt你是怎么组织的?比如怎么描述工具、怎么控制输出格式?

  3. 问法 3 · 直球架构

    描述一个基于大模型的Agent的典型四层架构,包括感知、规划、执行、记忆的功能划分。再详细说说Agent内部prompt设计的关键原则和最佳实践,比如结构化模板、工具描述、few-shot示例这些。

同模块相关题目