Agent架构设计原则?
大模型 Agent 核心组件功能划分与 Prompt 设计最佳实践
原题:请描述一个基于大模型的Agent系统的典型架构设计,包括各个核心组件的功能划分,并详细说明Agent内部prompt设计的关键原则和最佳实践。
Prompt工程 · 字节真题
30 秒回答
- 明确分层架构(感知-规划-执行-记忆)
- ReAct/CoT推理模式设计
- 工具描述Schema标准化
- 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 · 场景切入
假设你在做一个智能客服Agent,用户问“帮我查一下上个月的订单”,Agent需要先调用订单查询工具,再根据结果回答。你会怎么设计这个Agent的架构?特别是感知、规划、执行这些模块怎么分工?
- 问法 2 · 层层追问
你设计过Agent系统吗?……它的整体架构大概分几层?……每层核心组件是什么?……那Agent内部的prompt你是怎么组织的?比如怎么描述工具、怎么控制输出格式?
- 问法 3 · 直球架构
描述一个基于大模型的Agent的典型四层架构,包括感知、规划、执行、记忆的功能划分。再详细说说Agent内部prompt设计的关键原则和最佳实践,比如结构化模板、工具描述、few-shot示例这些。