agent20问-1
1、AI Agent 的核心组件有哪些?感知、决策、执行、记忆各自的作用是什么?
agent 由 4 个核心组件构成:感知、决策、执行、记忆;
感知模块负责接受和理解外部信息,输入主要是用户的自然语言指令、图片、文件内容、api 返回的结构化数据等,他的核心任务是把原始输入转成 agent 内部能处理的格式;
决策模块是 agent 的大脑,通常由大语言模型来承担,它负责理解当前任务、分析已有信息、制定执行计划、决定下一步该做什么;
执行模块负责把决策转成实际行动,最典型的就是工具调用,跑代码、查数据库、调外部 api、读写文件;
记忆模块让 agent 能记住历史信息,短期记忆就是当前对话的上下文,记录着这次任务已经做了什么、拿到了什么结果,长期记忆则把重要信息持久化下来,下次对话还能用;
2、什么是 AI Agent 中的工具调用(Tool Calling)?它的基本流程是怎样的?
a、先告诉模型有哪些工具可用,每个工具干什么、参数是什么格式,这些信息随 prompt 一起发给模型
b、模型在对话过程中判断当前需要哪个工具,输出一段结构化的 json,里面包含工具名和参数值;
c、应用程序解析这段 json,去实际执行对应的工具操作,比如 调用 api、跑 sql、读文件;
d、把工具执行的结果返回给模型,模型拿到真实数据后继续推理,要么给出最终回答,要么决定再调另一个工具;
如果模型输出的工具调用参数格式不对,json 解析失败了:分两层处理,第一层解析容错,用宽松的 json 解析器,能自动修复常见的格式问题,比如多余的逗号、缺少引号;第二层是重试机制,解析彻底失败的话,把错误信息拼回 Prompt 告诉模型“你上次输出的格式有问题,正确格式应该是这样的”,让它重新生成,一般重试 2 - 3 次就能拿到合规的输出;
3、AI Agent 如何处理工具调用返回超大结果的问题?有哪些实用的解决方案?
a、事前控制:在调用工具之前就限死返回数据的规模,数据库查询自动加 LIMIT,搜索接口限制返回条数,API 请求只拿需要的字段,关键在于工具设计阶段就把 limit、fields 这些参数暴露出来,让 agent 能主动控制粒度;
b、事中阶段是在工具返回后、送入模型前做裁剪,简单粗暴的按照 token 数砍,聪明点的做法是结构化阶段,比如保留前几条记录当样本,附上总数和统计信息,让模型知道全貌;
c、事后摘要是额外调用一次 llm 把大结果压缩成关键信息,信息保留度更高,但多了一次 llm 模型调用的开销,适合结果大但是关键细节不能丢的场景
4、什么是 Agent Loop(智能体循环)?一个典型的 Agent Loop 包含哪些步骤?
agent loop 包括:
a、接受输入:agent 拿到用户的请求或者上一轮循环的观察结果,把所有已知信息组织到上下文中;
b、推理决策:大模型基于当前上下文进行思考,判断现在该做什么,可能的决策有三种:调用某个工具执行操作、直接给出最终回答、或者判断需要更多信息继续推理;
c、执行行动,如果模型决定调用工具,系统就执行对应的工具操作,拿到执行结果;
d、观察和判断:把工具返回的结果添加到上下文,回到推理步骤,模型看到新信息后再次判断下一步该做什么,如果任务已经完成,就跳出循环返回最终结果;
agent loop 中上下文越来越长,token 成本爆炸怎么处理:
a、中间结果摘要,每隔几轮就让模型把之前的过程压缩成一段总结,替换掉原始的详细记录;第二种是滑动窗口,只保留最近 5-10 轮的完整信息,更早的只保留关键结论;第三种是分层存储,把工具返回的原始数据放到外部存储中,上下文只放摘要和引用;
如果 agent 在循环中一直做错误决策,有什么机制能让它自我纠正?
最直接的方式就是把错误结果原封不动喂回给模型,大多数情况下模型看到报错信息会自己调整侧策略,更高级的方法是引入 reflection 机制,在每轮结束后额外加一步反思,让模型评估一下当前进展是否合理、有没有更好的方案,还有一种就是 multi-agent 架构,用一个“监督” agent 来评审 “执行 agent”的行为,发现跑偏了就介入纠正;
5、什么是 Reflexion?它和 ReAct 有什么区别?如何提升 Agent 的自我纠错能力?
react 是一步步往前走,做完一步看结果决定下一步干啥,但它不会回过头来审视整个执行过程,reflexion 每次尝试结束后,不管成不成功,都会做一个反思总结,带着总结从头再来;
reflexion 的典型流程:执行任务 -> 评估结果 -> 生成反思 -> 存储反思到记忆 -> 重新尝试;
reflexion 的架构拆开看就三块:actor 负责执行任务,本质就是一个 跑 react 的 agent;evaluator 负责判断任务完成得怎么样,可以是自动化测试用例、单元测试通过率、也可以让另一个 llm 来打分;self-reflection 拿到执行过程和评估结果后,生成一段自然语言的反思总结,明确指出“错在哪、为什么错、下次怎么改”
6、MCP 协议是什么?它在 AI Agent 系统中解决了什么问题?
mcp 时端到端的协议,从能力发现到传输到执行全覆盖;
mcp server 暴露了三种能力:
a、tools 让模型可以执行操作,比如查数据库、发邮件、操作文件系统,是最常见的能力类型,模型判断何时调用、传什么参数;
b、resources 提供只读的上下文数据给模型,类似打开一个文件让模型阅读,不会出发任何写操作
c、prompts,预定义的 prompt 模板,方便用户快速出发特定工作流,比如“代码审查”模板
mcp:
a、协议基于 json-rpc 2.0,技术门槛极低,任何一个语言都能实现一个 server;
b、支持本地进程通信和远程 http 两种传输方式,本地用 stdio,启动快,零配置;远程用 streamable http 适合云端部署,能做鉴权和多租户;
c、生态推动力强
mcp 通信流程:
a、client 启动时通过 initialize 握手,交换双方支持的协议版本和能力列表;
b、client 调用 tools/list 拿到 server 暴露的所有工具定义,包括名称、描述、参数的 json schema;
c、用户提问后,模型根据工具描述决定调用哪个工具、传什么参数;
d、client 发送 tools/call 请求到 server,server 执行具体操作后返回结果;
e、client 把结果喂回模型,模型继续推理或直接输出给用户
7、当对话历史超出上下文窗口时,有哪些上下文压缩策略?各自的优缺点是什么?
滑动窗口阶段:最简单粗暴,但是 agent 可能直接失忆忘记任务目标,适合每轮相对独立的闲聊场景,不适合需要长程依赖的复杂任务;
摘要压缩:用 LLM 把早起对话浓缩成一段精简摘要,替代完整历史,能保住关键信息的同时把 token 数砍掉 80% 以上,代价是每次摘要多一次 llm 调用,增加 1 到 3 秒延迟和额外成本,而且摘要质量不稳定,关键细节一旦在摘要中丢失了,后面的推理就可能跑偏;
递进式摘要,是摘要压缩的升级版,不是攒到快溢出了再一口气摘要,每隔 5 轮就做一次小范围摘要,摘要结果作为后续上下文的一部分,随着对话继续,早期的摘要会被进一步压缩,信息衰减是渐进的;
选择性保留,根据信息的重要性分级决定保留还是丢弃,系统提示词、用户原始需求、关键决策节点这些高优内容始终保留,中间的工具调用细节和过渡性推理过程可以丢弃或压缩,实际上需要一套重要性评分机制,可以用规则,也可以用模型打分;
8、如何设计一个生产级的 Agent 系统架构?需要考虑哪些关键模块?
a、核心执行引擎,整个系统的心脏:负责跑 agent loop,管理“推理 -> 行动 -> 观察”的循环,处理工具调用的调度和结果回收,组装上下文窗口,这个模块必须足够健壮,模型 api 超时、工具调用失败、返回格式异常这些情况都得兜住;
b、模型网关层,封装所有跟大模型 api 打交道的细节,支持多模型路由,比如顶级模型做复杂推理、处理长文本,一个便宜的小模型做简单分类;同时做负载均衡、多 key 轮转、请求重试、主模型挂了自动降级切备用模型,还有 token 用量监控和限流;
c、工具管理层,负责工具的注册、发现、权限控制和执行,在支持 mcp 协议的系统中会包含 mcp client 的管理,核心设计点是工具的沙箱隔离执行和超时控制,防止某个工具卡死拖垮整个系统;
d、记忆管理层,处理短期记忆和长期记忆,短期记忆就是上下文管理、对话历史压缩;长期记忆走持久化存储加向量检索
e、可观测性层,每一轮循环做了什么决策、调用了什么工具、花了多少 token、全部要有链路追踪;再加上异常监控、告警、性能指标采集,没了这一层,线上除了问题根本没法排查
f、安全层:输入过滤防 prompt 注入、输出审核防敏感内容泄露、工具调用鉴权、用户数据隔离
9、如何评估 AI Agent 的效果?有哪些评估维度和方法?
a、任务完成度:agent 有没有把事办成,直接用二元指标判断成功或失败;
b、执行效率:用了多少次循环、消耗了多少 token、花了多少时间;
c、决策质量:评估 agent 在推理过程中做的选择是否合理:工具选对了没有、参数传对了没有、有没有做无意义的操作,这个维度需要审查 agent 得执行 trace
d、安全性和可靠性:agent 有没有做不该做的事情,有没有泄露敏感信息、执行危险操作、遇到异常是不是处理得当;
自动化评估:基于测试用例的评估,使用 llm-as-a-judge,把 agent 得执行过程和最终结果发给旗舰模型这样的强模型,让它从任务完成度、回答质量、逻辑连贯性等维度进行打分
10、如何将已有的应用转换成 MCP 服务?
a、梳理功能模块,把应用里需要暴露给外部的能力挑出来,比如 api 接口、数据查询、文件处理这些;
b、创建独立的 mcp 服务,跟原有业务服务隔离开,通过 http api 或者 sdk 跟业务服务通信
c、导入 mcp 依赖,java 用 spring-ai-mcp、python、typescript 等语言
d、定义工具描述,包括功能说明、入参字段及描述、返回值字段及描述,这些信息会被大模型用来理解什么时候该调用这些工具
e、实现 mcp server,按照 mcp 协议规范构建服务端,负责接受 mcp 客户端请求、路由到对应功能模块、返回结果
11、Agent 死循环问题有遇到过吗?如何解决?
a、提示此中加状态约束,明确告诉模型“如果已经到达某个状态了,就直接做什么什么,不要再做什么什么了”
b、加状态变量追踪,用 step=1/2/3 这种标识跟踪当前执行到哪一步,每次调用模型时把当前状态带上,模型按状态执行对应动作;
c、设置兜底机制,最多调用 5 次,超过就强制终止,同时检查每次返回的内容是否有变化,连续两次返回一样的内容直接判定为死循环
12、MCP 协议的架构包含哪些核心组件?Server 和 Client 分别负责什么?
mcp 架构包括:host、client、server
host 是面向用户的 ai 应用,比如 claude code,cursor 这种,host 负责管理整个应用的生命周期,是用户直接交互的入口,一个 host 内部可以创建多个 mcp client 实例,每个 client 连接一个 server;
client 运行在 host 内部,负责和 mcp server 建立连接、维护通信会话,client 会在初始化阶段和 server 进行能力协商,双方告诉对方自己支持哪些功能,然后在整个会话周期内负责消息的收发和协议管理,可以把 client 理解成 host 内部的外交官,代表 host 和外部的 server 打交道;
server 是能力提供方,负责把某个工具或数据源的能力按照 mcp 协议暴露出来,一个server 可以提供三种类型的能力:tools 是可执行的操作、resources 是只读的上下文数据、prompts 是预定义的提示模板