MewCode 项目面试题库
项目基础介绍
1. 简单介绍一下这个 MewCode Coding Agent 项目,先用一两句话讲清楚它是什么,能做什么。
-
定位:MewCode 是我独立开发的一个终端 AI 编程助手。
-
功能:用户用自然语言下指令,Agent 自己读代码、改文件、跑命令,整个过程自主完成,不需要人去盯每一步。
-
架构:底层做了五层架构,支持多家模型厂商的 API,有完整的权限控制和上下文压缩机制,还支持多个 Agent 并行协作。
-
两点:做这个项目的出发点:每天都在用 Claude Code,但它像个黑盒,想搞清楚 Agent 内部到底怎么决策的,就自己从零造了一个。
2. 你觉得 Agent 有哪些必要元素?
-
大脑:LLM 理解任务,做判断,决定下一步做什么
-
手脚:Tool 并非事先编排,而是在循环过程中LLM自主调用工具,目的->为了感受外部环境
-
循环:原因->任务驱动,和大模型的不同
-
环境的反馈:是什么:跑命令能看到输出,改代码测试能看到报错->驱动下一轮的决策。没有Agent也不知道做的效果怎么样
-
不太必要算:安全机制和记忆系统
- 工程上,只是起到好不好用的效果。其他四要素则是决定agent能不能跑
- 这个项目在四要素的基础上做了五层的权限拦截和跨会话记忆
3. Agent 有什么工作模式?
-
ReAct:Reasoning+Acting 推理->行动->观察
- 灵活,但是token消耗大
-
Plan-and-Execute:
- 是什么:规划后执行,想清楚完整计划
- 项目参考:Plan Mode ,只读代码,不执行。token消耗少,因为只规划不写、不产生写操作的反复试错(注意不是「只推理一次」,规划阶段照样多轮读文件)
-
Reflection:
- 是什么:做完再检查:两种审查模式,隐式的反思机制
- 项目参考:额外调一轮Agent,token成本翻倍。测试框架替代
-
Multi-Agent:Coordinator + Worker
- Coordinator负责拆分任务,Worker在各自独立的Worktree里并行干活,汇总结果
4. 你说 Agent 能自主完成多步任务,那 Agent 怎么知道该停了?万一它一直循环下去怎么办?
-
Function Calling 协议:看模型是否返回工具调用,不调用则结束。
-
防止死循环
-
给循环轮次加上一个硬上限
-
token用量监控
-
官方做法:
- 第一层 硬性限制:设置全局最大步数(如 N 步)、单工具的最大重试次数
- 第二层 重复检测:监控最近N步的工具调用序列,判断是否出现相同工具+相同描述的调用
- 第三层 收敛性检测:追踪每步的进展指标,判断是否需要重新规划等
- 第四层 建模是否需要外部信息的决策边界
- 太激进:信息不够则反复进入死循环
- 太保守:信息没有收集够
-
5. 你在简历里说独立完成整体架构设计,能简单讲一下分了哪几层、每层做什么?
-
引擎层:LLM Client、Agent Loop
-
工具层:内置工具、MCP 等
-
交互层:CLI、Skill系统等
-
安全层:危险命令检测、路径沙箱、HITL审批
-
记忆层:持久化、上下文压缩
Function Calling / 工具调用
6. 你简历写熟悉 Function Calling 协议,能用大白话讲一下这个协议大概是怎么工作的?
-
本质:模型 → 调用方的一次结构化通信
-
Agent → LLM:工具列表和对话历史发给大模型,包括工具 name、description、input_schema
-
LLM → 调用方:名字、调用 id、入参 json(tool_use)
-
调用方 → LLM:调用 ID(tool_result),再发下一轮请求
7. ReAct 范式能用大白话讲一下吗?它和普通 LLM 调用有啥区别?
-
是什么:Reasoning + Acting,思考 → 行动 → 反思循环
-
区别:关键在于状态的延续。LLM 可以看到之前的行为和结果,基于事实决策,而不是凭空生成
如果模型思考是错的应该怎么办?
- 将工具错误明确标记
is_error=True传回给模型,让模型清楚知道刚才哪一步失败了
8. 你的 Agent Loop 一轮里大概会做哪些事?按顺序讲一遍。哪一步容易出 bug?
-
检查上下文长度 → 超额则压缩(两层压缩机制)
-
拼装输入:LLM 无状态,每轮都要把决策所需的一切重新打包成一次请求;物理上分三块 ——
system、tools、messages-
System Prompt(→
system):Agent 的角色、行为规则、输出格式 -
工具列表(→
tools):每个工具的 name / description / input_schema,Function Calling 的基础 -
对话历史(→
messages):历轮的用户消息、模型回复、tool_use、tool_result,是 Agent「状态延续」的载体-
环境信息(→
messages开头):cwd、OS、系统时间,让模型知道「跑在哪、什么时间」 -
项目指令(→
messages开头):CLAUDE.md,人手写的项目约定 / 测试 / lint 命令 -
长期记忆(→
messages开头):跨会话的用户偏好与纠正反馈,Agent 自动提取 -
(环境信息 → 项目指令 → 记忆)会话开头一次性注入到
messages最前面(见第 21 题),之后每轮主要追加新的对话历史和工具结果
-
-
-
调用 LLM → 判断是否返回工具调用
-
不调用:直接结束本轮
-
调用:把模型回复连同工具调用一起塞入历史,进入下一轮
-
-
工具调用过程:各种 hook,方便外部扩展
-
Multi-Agent 场景:轮次开始时检查邮箱,把队友发来的消息拼进历史
容易出 bug
-
对话一致性:孤儿调用(orphan tool_use):
- 原因:FC要求有一个结果tool_result。工具执行抛异常没正确返回/ESC中断
- 解决方案:设计对话链校验逻辑,从持久化日志恢复时也会校验,发现孤儿就截断到最近一个完整边界
-
Multi-Agent:
- 场景描述:Worker A看到WorkerB的消息,商定如何做决定
- 任务重做 / 任务等待的竞态
9. 工具并行执行你是怎么设计的?怎么判断哪些工具可以并行?
-
可并行(只读不修改外部状态):ReadFile、Glob(查找文件)、Grep(查找文件内容)
-
不可并行(写类工具):WriteFile、EditFile、Bash
-
spawn 子 Agent 类工具:本身有副作用(创建 worktree、注册任务等共享状态)→ 不能并发,会竞争;但子 Agent 跑起来后是后台异步的,不阻塞主 Agent。并发能力通过 Background 模式实现,不是工具级并发
分批算法:
-
遍历模型返回的工具调用列表,连续的并发安全工具合并到同一个并发批次,碰到非并发安全工具就开一个新的串行批次
-
好处:既保证了并发的安全,有保证了工具执行的效率
*追问:两个 ReadFile 读同一个文件,并发会有问题吗?
- 单次ReadFile是只读IO,并发没有问题
并发批次里有一个工具特别慢,怎么处理?
- 给每个工具配备独立超时——避免卡住整批
- 让慢工具流式产出中间状态
10. Plan Mode 是什么?为什么要专门搞这个模式?
-
是什么:只读规划模式,LLM 只能读文件、grep,glob收集信息,bash也能用但是有限制比如ls、find、git log等不会产生副作用的命令
-
为什么:自动化执行的边界要交给用户控制,先让用户确认计划再执行,适合复杂多步改动
如何实现Agent按Plan执行
-
切换权限:Agent规划完成后会调用ExitPlanMode工具,用户在UI上确认同意。系统自动恢复到之前的权限模式,权限层立即生效
-
工程上
- Plan会自动持久化写到磁盘空间,不怕上下文压缩丢掉
- 退出Plan Mode的时候,完整的Plan文本会通过工具返回值回滚到模型上下文里
Plan Mode如何保证质量
-
System prompt 的结构化约束
- 模型输出:上下文分析、推荐方案、设计的文件路径、可复用的现有代码、验证方式
-
Plan出错最常见的原因时没读够代码,Prompt里我强制要求Plan Mode至少调多次工具读相关文件
11. 你的工具系统是怎么注册和分发的?新加一个工具要改多少地方?
-
工具系统核心是一个字典,key-value,每个工具自己声明:叫什么、是干什么的、入参长什么样、属于读还是写、能不能并发
-
新加一个工具:写代码继承基类,再把它扔进字典里,剩下的都是自动的
- 工具描述从入参定义里直接推出来
- 权限根据读写命令的设置来定
- 并发分批根据并发设置来定
-
MCP 工具更省事,配置即生效。启动时连上MCP Server
12. 工具执行结果太大,比如一个 grep 跑出来 50MB 输出,怎么避免塞满上下文?
-
检查结果大小 → 超过阈值把原始内容写进会话目录下一个专门的工具结果子目录里(文件路径记载)
-
模型需要完整内容时,自己调用 ReadFile 去读取这个文件
-
每一轮 Loop 开始时遍历历史,把同一条消息里的工具结果按大小排序处理。根据落盘进行处理
权限与安全
13. 你简历说五层权限拦截,能从内到外讲一遍吗?
-
起初:最开始只有 HITL 一层,就是每次工具调用都弹框问用户->allow太多
-
五层(由内到外):
-
危险命令检测:只针对 Bash 类工具,正则匹配
rm -rf/、mkfs、fork bomb 等 -
规则引擎:用户级、项目级、本地级三层规则文件,按 Tool + pattern匹配
-
路径沙箱:文件类工具,把路径解析成绝对路径,看是不是落在项目根目录里—>防止Agent去改系统级别文件
-
权限模式:default(正常询问)、acceptEdits(接受编辑)、plan 几种挡位
-
HITL(Human In The Loop):最外层兜底,人工确认
-
-
组合逻辑(三条铁律,最容易被追问):
-
deny 短路:任何一层判「拒绝」就立刻中断,后面的层无权翻盘(fail-safe,失败朝安全方向倒)
-
allow ≠ 直接执行:某层放行后仍要过后续安全关(规则放行的 Bash,危险命令检测照样拦)
-
HITL 是最后手段:能被规则/模式自动判定的就不打扰人,只有「无人能决定」才落到第 5 层
-
-
一个调用的闯关例子(面试时拿这个讲,立刻具体):
-
rm -rf /→ ① 直接拦死,到不了后面 -
npm test(规则里有Bash(npm test:*)allow)→ 过 ①、② 放行,不弹框 -
写
../../../etc/hosts→ 过 ①②,③ 沙箱发现跑出项目根,拦 -
acceptEdits 模式改项目内文件 → 过 ①②③,④ 自动放行
-
default 模式跑没见过的命令 → 一路穿到 ⑤ 弹框问人
-
-
加分句:权限拒绝本身会作为
tool_result回传给模型,让它知道被拦了、换种方式做——呼应 Q43「反馈回路」,用确定性机制兜住模型的不确定性(Harness 思想)
MCP
14. MCP 是什么?为什么不直接把工具写在 Agent 进程里?
-
是什么:Model Context Protocol,把工具放到独立进程里跑,Agent 通过 MCP Client 连上去,拿到工具列表,代理调用
-
为什么:配置即生效。用户想加一个新工具,不需要改 Agent 任何代码,编辑一下配置文件指定 MCP Server 启动命令即可
追问:MCP 引入了进程间通信,性能损耗大吗?
- IPC 开销完全可以忽略,性能瓶颈在工具实现的内部逻辑
15. MCP 都支持哪些通信方式?
-
本质:三种传输运的都是 JSON-RPC 2.0 消息,区别只在「Server 跑在哪、走哪条管道」——传输是管道,JSON-RPC 是管道里的内容
-
1. stdio(标准输入输出)——最常用
Agent 直接把 MCP Server 当成一个子进程启动起来,两边通过标准输入/输出(就是程序间最基本的文本流通道)交换 JSON-RPC 格式的消息。
- 特点:不需要任何网络配置(因为根本没走网络,就是同一台机器上两个进程对话);Server 的生命周期完全跟着 Agent 走——Agent 退出,子进程也跟着结束。
- 适用场景:本地工具,比如读写文件、代码搜索、git 操作这些天然就在本机执行的任务。
- 优点:最简单、最稳定、延迟极低(微秒级,因为是进程间通信,不走网络)。
-
2. SSE(Server-Sent Events)
本质上是基于 HTTP 长连接:客户端用普通的 HTTP POST 发请求,服务端通过 SSE(一种服务器持续向客户端推送数据的技术)把消息流式推回来。
- 适用场景:连接已经独立部署在远端的服务,比如公司内部的 RAG 系统、知识库。
- 优点:一个 Server 可以同时服务多个客户端,适合团队共享同一个工具/服务。
- 缺点(追问里提到):走网络,延迟明显比 stdio 高(几十毫秒起步),还要处理认证、网络抖动、超时重连这些复杂问题。
-
3. Streamable HTTP
这是 MCP 协议后来新增的,设计目标是逐步替代 SSE。
- 和 SSE 的核心区别:不要求服务端维持长连接。每次请求都是独立的 HTTP 调用,服务端可以灵活选择直接返回普通 JSON,或者按需开一个 SSE 流。
- 优点:对"无状态部署"更友好,比如 Serverless 环境(按需启动、用完即关,不适合维持长连接的场景)。
- 现状:目前生态里大部分 Server 还是用 stdio 或 SSE,Streamable HTTP 还在推广阶段,没完全普及。
16. MCP Server 启动失败,你的 Agent 怎么处理?让 Agent 启动失败还是降级?
-
降级,不让 Agent 启动失败
-
MCP 管理器在注册阶段对每个 Server 做异常隔离:成功则连上拉取工具,失败则记录日志
-
MCP 是扩展能力,不是核心能力,一个 MCP Server 挂掉不应该影响整个 Agent 运行
17. 你简历写"MCP 工具延迟加载,Token 占用减少 85%",具体是怎么实现的?
-
原因:Tool 太多,把完整 schema 全部塞进上下文,200k 窗口很快被工具定义挤占,多聊几轮就触发压缩
-
做法:系统提示词告诉模型「有些工具还没加载,需要先通过 ToolSearch 查询才能调用」,注册时只传名称,不传完整 schema,LLM 按需发现后再加载完整定义
上下文压缩
18. 上下文压缩具体怎么做的?分别什么时机触发?
-
落盘:大工具结果放到磁盘,不进历史(单结果超50k字符或者一轮工具总和超200k)-> 只留2K预览 + 文件路径
- 开销很低->完整内容调用ReadFile工具去读那个文件即可
-
全量压缩:每一轮 Loop 检查上轮输入 token 是否超过阈值,超过则调用 LLM 生成对话摘要+边界提示替换旧历史,CLAUDE的做法是上一轮20K+13K这一轮次
- 原因:落盘不够用,上下文依然接近于爆炸,这个时候需要调用LLM自己来生成一份对话摘要
-
用户主动 compact:用户主动触发压缩命令
- 手动compact的安全余量只有3k
自动压缩后,模型忘了用户最初的需求怎么样
- 摘要压缩的Prompt里列了9个必须保留的部分:第六项是尽量保留用户的消息原文,prompt里写得是约束语气,本质还是prompt层面的引导
频繁压缩导致的历史对话失真问题
-
压缩只会替换内存里的对话历史,磁盘里的日志不会更改
-
用户感知生命周期
19. 摘要本身也要调用 LLM,万一摘要这次调用又超了上下文呢?
-
预防:压缩触发时,确保剩余 token 余量足够生成摘要不超限
-
失败兜底:检测上下文长度,丢掉最早的1/5,最多重复三次->三次后触发压缩熔断器,后续就不再自动压缩了
记忆系统
20. 记忆系统怎么设计的?为什么要分层?
-
用户级:/home下,跨项目的用户偏好、纠正反馈等,如编码风格,命名规范
-
项目级:.minicoder下/ 项目知识、参考信息,只对当前项目生效
-
分层原因:不同知识的作用域不同——跨项目的偏好(编码风格等)放用户级,只对当前项目生效的(技术栈、架构约定等)放项目级,避免互相污染
-
分层
- 工作记忆:200k token就是Agent的大脑带宽,当前正在处理的所有信息总和
- 长期记忆:对应到所有持久化到磁盘的信息
- 会话持久化:和Agent的每次对话
- 项目指令文件:预先写好的项目知识和编码规范,
- 自动记忆:Agent在对话中自动累计的经验
21. 记忆什么时候被注入对话?怎么注入?
-
注入时机:会话开始或第一次调用时,用一个注入标志位防止重复;压缩之后注入标志重置,下一轮重新注入到摘要后面
-
为什么只注一次:记忆内容固定,每轮都塞是浪费 token + 破坏 prompt cache,所以用布尔标志位,注过就跳过
-
为什么压缩后要重置:上下文压缩会把旧历史(含之前注入的记忆)换成摘要,记忆可能被压没;所以压缩后把标志重置,下一轮重新注入一次、接在摘要后面,保证记忆不丢
-
-
注入位置:对话历史开头,环境信息之后
-
注入顺序:
-
环境信息(cwd、OS、系统时间)
-
项目指令(CLAUDE.md)
-
自动记忆文件内容
-
一条假装的助手消息:「已了解项目背景和记忆」
- 为什么要伪造这条:FC 对话是 user/assistant 交替的。前面塞的背景信息以 user 消息出现,若紧接着就是真正的用户问题,就成了「user(背景)→ user(真问题)」两条 user 连着,不自然、易混淆;伪造一条 assistant「收到」把对话补成「user(背景)→ assistant(收到)→ user(真问题)」,给模型一个台阶确认接收背景(Claude Code 同款做法)
-
Multi-Agent
22. 为什么需要多 Agent?单 Agent 不够用吗?多 Agent 协作有几种模式?
-
单 Agent 瓶颈:
-
上下文窗口先触顶
-
串行带来的效率低下
-
-
多 Agent 适合的场景:任务可拆分且单任务耗时明显
-
Agent Team 模式:
-
多个 Agent 共享任务清单和邮箱通信,每个 Agent 独立在 Worktree 里跑
-
适合:并行独立推进、不需要频繁协调的场景
-
-
Coordinator 模式:
-
一个 Coordinator 统筹,spawn 多个 Worker,自己不写代码,只负责任务拆解和资源协调
-
Worker 返回给 Coordinator 的是 XML 格式,更紧凑,对上下文压力更小
-
适合:需要频繁协调的场景
-
-
两模式对比(一句话记忆):
| Agent Team(去中心化) | Coordinator(中心化) | |
|---|---|---|
| 结构 | 多个平等 Agent | 1 个 Coordinator + 多个 Worker |
| 谁分工 | 共享任务清单,自取 | Coordinator 派活,自己不写代码 |
| 通信 | 邮箱互发 | Worker 把结果(XML)回给 Coordinator |
| 适合 | 并行独立、不需频繁协调 | 需频繁协调、要人统筹汇总 |
23. 多 Agent 之间用邮箱通信,为什么不用直接调用?
-
直接调用会出现同步阻塞 → Agent A 调用 Agent B 时整个 Loop 卡住
-
邮箱模型:
-
A 给 B 发消息立即返回,不阻塞;B 在自己的 Loop 里主动消费邮箱
-
消息存储用文件系统,每个消息一个 JSON 文件,天然解耦
-
工程综合
24. 你做这个 Agent,最大的工程挑战是什么?
-
多 Agent 协作带来的分布式状态同步
-
上下文预算管理
- 大结果落盘预览
- 接近上限LLM生成摘要替换历史
- 摘要本身超限时丢最早的轮次重试+熔断
-
模型的不确定性
25. 你的 Skill 系统是怎么设计的?Skill、MCP、Function Calling 三者是什么关系?
- Skill
- 优先级
- 项目级放在.minicoder/skills
- 用户级放home目录
- 内置的打包在代码里
- 执行模式
- inline模式:Skill的prompt注入当前会话,Agent带着额外指令继续跑
- fork模式:开一个独立子Agent,有自己的对话历史和过滤过的工具集
- 优先级
inline vs fork 对比(关键追问点)
| inline | fork | |
|---|---|---|
| 怎么跑 | Skill 的 prompt 注入当前会话,主 Agent 带着继续 | 开独立子 Agent 执行 |
| 上下文 | 共用主上下文 | 自己的对话历史,跑完不污染主上下文 |
| 工具 | 主 Agent 工具集 | 过滤过的工具集(只给它要的) |
| 适合 | 轻量、和当前任务连贯 | 重、独立、想隔离上下文 |
- 为什么要 fork:有些 Skill 跑起来产生一堆中间内容,塞主会话会污染上下文 + 烧 token;fork 出去让子 Agent 自己折腾,只把结果带回来——和 Multi-Agent 隔离同思路
Skill、MCP、Function Calling 三者关系(三个层次)
-
Function Calling:最底层的协议——模型↔工具之间怎么通信(tool_use / tool_result)
-
MCP:工具的一种来源——把工具放独立进程,最终还是通过 Function Calling 暴露给模型
-
Skill:最上层的能力封装——打包的是「知识和工作流」,本身不是工具,而是告诉模型「该用哪些工具、按什么步骤做」,按需加载
26. 为什么 Agent 需要工具?没有工具的 LLM 不也能回答问题吗?
- 感知 -> 决策 -> 行动 循环
工具是越多越好吗
-
工具数量影响模型的选择质量
-
工具描述的质量比数量更加重要
27. 为什么 Agent 需要记忆?没有记忆不也能完成任务吗?
-
跨会话的知识延续:用户偏好、纠正反馈、等。每次新会话开始时注入回对话历史
-
分层原因:因为不同知识的作用域不同。编码风格这种偏好等放用户级、项目的技术栈等放到项目级
CLAUDE.md这种项目指令文件跟记忆有什么区别?
-
CLAUDE.md这种是人写的项目指令,内容是项目约定和工程规范
-
记忆则是Agent自动提取的,从对话中抓取用户偏好和反馈,写进记忆文件里
项目对比与补充
28. 你的 MewCode 项目和 Claude Code 相比,核心差异是什么?有什么是你独有的设计?
-
定位和体量:Coding Agent的每一层架构走通作为目标
-
生态和精细度:
- CC做了LSP集成、OAuth、MCP官方注册表等。
- CC的上下文管理上有五六层压缩策略针对不同的粒度分别优化。MewCode只做了三层
- CC的工具数量上有50多个覆盖各种垂直场景。MewCode内置了8个核心工具+MCP扩展
29. 自己做 Agent 的时候,踩过最大的坑是什么?
-
对话历史的一致性问题:
-
Fuction Calling的硬约束:每个tool_use块必须有且仅有一个对应的tool_result块,缺了或多了,下一轮API调用直接报错,整个会话崩掉
-
场景:
- 用户中断
- 恢复会话
- 压缩
-
30. 从开发者的角度,做 Agent 最难的部分是什么?
-
确定性与不确定性混在一起
-
确定性问题:对话历史的协议合法性,工具分批的并发控制,权限五层的锻炼库
-
不确定性问题:
- Prompt问题:模型给了错误的参数
- 工程问题:上下文压缩丢了关键信息导致模型做了错误的决策
- debug的难题:唯一可靠的方法是回放完整的对话历史,逐轮看模型的推理和工具调用
-
AI 编程相关
31. 你用的是什么 AI 编程工具?用的哪个模型?
-
Claude Code —— 跑在终端里,底层用 Claude Opus 4.8(上下文 200K)
- ⚠️ 易错点:1M token 上下文是 Sonnet 的 beta 特性,不是 Opus;版本上也没有「Opus 4.6」(最新 Opus 是 4.8,4.6 是 Sonnet)。按你实际用的模型据实填
-
加轮次后的工具调用花的tokens数量明显更少
32. 在使用 Claude Code 时候的心得和技巧?
-
写好CLAUDE.md的重要性:写清楚项目的测试命令和lint命令,让Claude改完代码能自己验证
-
上下文资源的稀缺性:
/clear
33. 如何用 AI Coding 工具从需求到实现全流程?
-
第一阶段:需求对齐(Chat → Spec):将需求描述清楚,聊完以后让Claude整理成一个spec文件,确认无误再动手
-
第二阶段:方案设计(Plan Mode):需求确认下来就进了Plan Mode出方案,让Claude读完相关代码后出个实施方案
-
第三阶段:逐步实施(Spec/SDD 模式 + 小步 Commit):方案完成后,就用Spec模式,先让Claude生成需求规格和任务拆分,按照SDD的方式一步一步推进,改完一步commit一步。每步完成后让Claude自己跑测试、跑lint,通过了再继续
34. 你怎么用 AI 做项目的,全部交给 AI 生成还是每次只提一部分?
三档任务策略
-
小活(改名/格式/拼写):直接让 AI 做,无需前戏
-
中等(加功能/修 bug):给明确范围 + 验收条件,跑完测试收工
-
大活(架构/新模块):三阶段走↓
- 第一阶段·需求对齐(Chat → Spec):聊清楚需求,让 Claude 整理成 spec 文件,确认无误再动手
- 第二阶段·方案设计(Plan Mode):进 Plan Mode,让 Claude 读完相关代码后出实施方案,确认后再执行
- 第三阶段·逐步实施(SDD + 小步 Commit):Claude 生成任务拆分,每个子任务单独一轮,改完自动跑测试 + lint,通过再 commit,commit 完再继续
35. 你怎么保证 AI 写的代码是正确的?
三层质量保障
- 自动化兜底(Hooks):测试 + lint 自动跑,拦住大部分明显错误,但拦不住「happy path 写得很对,异常路径漏了」
- 人工审查(每次改完过 diff):重点看两个地方——边界条件有没有处理、和现有代码的交互是不是对的
- 第二个会话审查(关键改动):写代码的 Claude 已有偏见,换一个全新上下文的视角更容易发现问题
36. Claude Code 有哪些常用命令?
四个高频命令
/clear:每个独立任务前清一次上下文——一个会话里做太多事,后面输出质量会明显下降/compact:长任务必备,上下文涨到 70% 左右手动压缩一下,可带参数指定压缩时重点保留什么/plan:复杂任务前进 Plan Mode,Claude 只读不写,看完相关代码出方案,确认后再执行——避免上来就改然后方向跑偏/rewind:救命用,改完发现不对直接回退到上一个检查点,比手动git checkout方便
其他会用到的
- 命令:
/init、/review、/btw、/mcp(非每天必用) - 快捷键:
Esc中断、Shift+Tab切换模式
值得了解的冷门用法
/btw:任务中途想问不相关的问题,用/btw问完直接过去,不进对话历史、不影响后续上下文claude -c:CLI 参数,继续上一个会话claude -p "task":非交互模式,可以用在脚本
37. 有没有遇到过 AI 应用或工具无法解决的场景?
两个真实案例
- 流式 parser 问题:让 Claude 写 OpenAI 兼容协议的流式解析器,单工具调用没问题,一遇到多工具交错 delta 就乱——改了三四版都不对。最后自己画状态机理清路由逻辑,手写核心逻辑,只让 Claude 补边界处理和测试
- 压缩死循环 bug:压缩丢了关键
tool_result,症状是模型反复调同一个工具,因果链很长,AI 只会在症状位置打补丁——最后自己回放 JSONL 日志逐轮对比才找到根因
AI 搞不定的问题类型
- 跨多个层面的全局推理
- 需要隐性知识才能判断的问题(项目背景、历史决策)
这些局限未来能解决吗
- 能改善:上下文窗口变大、推理能力变强,「因果链长的 bug」会逐步好转
- 本质问题:隐性知识不是 AI 的问题,是信息没被显式化——把决策背景写进文档、写进
CLAUDE.md,AI 就能用上 → 这也是 Harness Engineering 强调知识库建设的原因
Claude Code 源码相关
38. 介绍一下 Claude Code 主循环 Query 的流程?
整体结构
-
主循环入口
QueryEngine.submitMessage()→ 并行拉取环境信息(系统提示词、CLAUDE.md、git status)拼好上下文 → 进入queryLoop() -
核心是一个
while(true)+ state 对象跨轮传递状态,每轮三步:上下文预处理(裁剪/压缩/摘要,防爆)→ 调模型拿流式响应 → 判断有无tool_use,有就执行工具把结果拼回对话 continue,没有就 break
两个设计细节
- Streaming Tool Execution:模型还在流式输出时,前面已完成的
tool_use block就已经并行执行了,不等整个响应结束——MewCode 实现了同样的思路,多工具场景延迟改善明显 - 为什么用循环不用递归:递归每轮叠一层帧,长任务几十上百轮有栈溢出风险;循环只在一层帧里跑,内存恒定,也方便断点恢复
终止条件:回复里无 tool_use → break;兜底 maxTurns 防死循环
39. Claude Code 的记忆架构是什么?
两套机制:静态注入 + 动态检索
-
静态注入——CLAUDE.md 层级加载:从当前目录往上层层遍历,收集各层配置文件全部拼在一起注入上下文:
-
项目根目录
CLAUDE.md、.claude/rules/规则文件 -
用户级
~/.claude/CLAUDE.md、企业全局配置 -
两个额外能力:
@include引入其他文件;paths: frontmatter条件注入(只有操作到某目录才加载对应规则)→ 让团队把编码规范、架构约定跟代码一起版本管理
-
-
动态检索——Auto Memory 系统
- 记忆文件存在
~/.claude/projects/<slug>/memory/,MEMORY.md做索引 - 每轮用户输入进来时,异步启动 prefetch,用用户消息跟记忆文件 frontmatter 做相关性匹配,选出最相关几条,工具执行后作为 attachment 注入
- 异步的好处:模型流式输出那段时间刚好把检索做完了,不阻塞主循环
- 记忆文件存在
-
Mewcode的简要实现:每隔几轮用 LLM 提取关键事实存进
auto_memory.json,下次全量注入——记忆条数少时全量反而比相关性检索更简单可靠
为什么用 LLM 做相关性判断而不是向量搜索?
关键词匹配搞不定语义差异(「别用 mock」≠「integration tests must hit a real database」);向量搜索要维护嵌入索引,记忆文件频繁增删改同步是额外负担;记忆文件通常就几十个,Sonnet 直接读 frontmatter 判断,成本低延迟可控
40. Claude Code 是如何去检索代码之间的相关性的?比如给一个中文需求怎么定位代码?
-
三个工具的调用
- GrepTool(正则搜内容)
- GlobTool(文件名匹配)
- FileReadTool(读文件)
-
搜索策略由模型自主决定:直接根据对代码库的理解推理关键词,线索不够就调整策略多轮迭代
-
大仓库效率:速度不是瓶颈(ripgrep 百万行只需几百毫秒),消耗在模型选关键词的 LLM 调用次数;好处是零预处理、任何语言通用
-
MewCode 实现:Mewcode标准库实现了简化版 GrepTool,核心思路一致,实测两三轮基本能定位目标代码
Harness 相关
41. Harness Engineering 是什么?
-
核心公式:Agent = Model + Harness
- Model = CPU,只管算;Context Window = RAM,断电就没;Harness = 操作系统,管调度、权限、I/O;Agent = 跑在上面的应用程序
- 裸模型没有记忆、没有工具、没有执行环境——Harness 就是补上这些能力的工程层
-
Harness 包含什么
- 知识库(CLAUDE.md 等项目指令文件)
- 工具集成(MCP、CLI)
- 权限约束(allow/deny 规则、沙箱)
- 自动验证(CI、lint、测试)
- 反馈回路(错误信号返回 Agent 让它自我修正)
- 状态管理(跨会话持久化)
-
核心思想(Mitchell Hashimoto 2026.2 提出)
- 每当发现 Agent 犯了一个错误,就花时间工程化一个解决方案,让这个错误结构上不可能再发生——不是靠 prompt 叮嘱它别犯错,而是从工程上让它犯不了
-
关键数据
-
LangChain 在 Terminal Bench 2.0 上,底层模型不动,只优化 Harness → 得分从 52.8% 飙到 66.5%,排名从第 30 跳到第 5
-
更好的 Harness 往往比更好的 Model 更重要
-
-
与传统框架/中间件的本质区别
- 传统框架面对的执行者是确定性的(代码写什么执行什么);
- LLM 行为是概率性的,prompt 说「不要删除文件」,1% 的情况会忘
- 所以 Harness 必须用确定性工程机制兜底概率性行为——本质是给「不完全可控的执行者」套一套「完全可控的约束系统」
42. 具体描述一下你对 Harness 工程的理解,它与 Context 工程/Prompt 工程的关系?
-
三者是包含关系,不是并列
-
Prompt 在 Context 里面,Context 在 Harness 里面
-
Prompt Engineering:管「怎么跟模型说话」,把指令写清楚写结构化——只作用于单轮对话
-
Context Engineering:管「给模型什么信息」,通过 RAG、检索、token 排序把正确知识塞进上下文窗口——但有盲区:信息给够了,模型可能拿着信息干危险的事,Context 层没有任何机制拦它
-
Harness Engineering:管「整个系统怎么运转」,在模型外围建确定性的约束、反馈和验证,让 Agent 跨多个 context window 都能稳定工作
-
-
MewCode 的体感
-
调 prompt 措辞:效果改善有限
-
加权限拦截、错误信息回传、工具输入校验(Harness 层):Agent 可靠性产生质变
-
-
换模型提升天花板,搭 Harness 提升落地能力:用确定性的工程机制把模型的不确定性兜住——Harness 可细化为约束、反馈、验证三层
43. 你这个项目有没有用到 Harness 的思想?
-
核心理解:Harness = 除了模型本身之外,所有让 Agent 能稳定交付的东西。换模型提升天花板,搭 Harness 提升落地能力。
-
三个重点模块
-
权限系统:五层权限约束,任何一层 deny 就短路,后面的层不会翻转——不靠 prompt 叮嘱,用工程机制硬拦
-
反馈回路:工具执行失败后结构化告诉模型哪一行出了什么问题、该怎么改;权限拒绝也作为
tool_result返回让模型调整策略——不光「别跑偏」,还要「出了错能自己爬起来」 -
知识库系统:
MEWCODE.md写项目规范、架构约定、编码习惯,Agent 启动自动加载;Auto Memory 让 Agent 从对话中提取用户偏好和反馈存下来,下次带上——一个是人写的显式规范,一个是 Agent 自动积累的隐式经验,投入产出比最高
-
-
其他覆盖的方向
-
上下文管理:两层压缩,大结果存磁盘只留预览,上下文到 80% 触发 LLM 摘要,预留 20K 压缩空间和 13K 当前轮次 buffer
-
System Prompt:结构化组装,七个来源三个通道注入,稳定内容走 Prompt Cache,动态信息走 system-reminder 不破坏缓存
-
工具系统:每个工具有元信息标记(只读/可开发),注册中心统一管理,分批执行时根据标记决定并行还是串行
-
Agent Loop:四种停止条件兜底(迭代上限、连续异常检测等)
-
Hook 系统:工具执行关键节点挂了 15 个生命周期事件,支持自动化 lint、格式化
-
其他:MCP 做 transport 抽象(stdio/HTTP 对上层透明)、会话持久化用 JSONL 追加写入、多 Agent 用 Git Worktree 文件隔离 + 邮箱模式异步通信
-
Agent 开发实习生八股题库
01 Agent 入门
1. 什么是大模型 Agent?它与传统的 AI 系统有什么不同?
-
基于LLM的决策:大模型的自回归生成能力进行推理
-
动态的工具调用:根据任务调用不同的外部工具
-
上下文记忆:通过上下文窗口或者外部存储维护长期记忆
-
可拓展性:LLM Agent可以无缝适配不同的任务
2. 🌟【重点】Agent 与 LLM / ChatBot(即 LLM 和 Agent)的本质区别是什么?
-
目标驱动性:LLM 是被动应答(你问一句答一句);Agent 是给定目标后自主推进直到完成
-
自主决策性:Agent 能自己决定下一步做什么、调用哪个工具,LLM 只生成文本
-
状态持续性:Agent 有记忆和中间状态,能跨多步、多轮维持上下文
-
一句话:LLM 是"大脑/能力本身",Agent = LLM + 工具 + 记忆 + 规划 + 循环(Agent Loop),把"会说"变成"会做"
3. 🌟【重点】Agent 和 Workflow(工作流)有什么区别?
-
Workflow:用预先写好的代码路径把 LLM 和工具串起来,流程固定、可预测(人定流程,模型填空)
-
Agent:由 LLM 自己动态决定下一步、调用哪个工具,路径不预先固定,靠 Agent Loop 循环推进(模型自己定流程)
-
控制权差异:Workflow 的控制权在开发者手里,Agent 的控制权交给了模型
-
取舍:流程确定、追求稳定可控、可预测成本 → Workflow;任务开放、步骤难以提前规划 → Agent(更灵活但更难控、成本和延迟更高)
-
实践建议(Anthropic 观点):能用 Workflow 解决就别上 Agent,需要灵活性和模型自主决策时才用 Agent
4. LLM Agent 的基本架构有哪些组成部分?
-
大脑:LLM,负责推理决策
-
规划:Planning,任务拆解
-
工具:Tools,与外部交互
-
记忆:Memory,短期上下文 + 长期存储
-
反馈:观察执行结果
5. LLM Agent 如何进行决策?能否使用具体的方法解释?
-
CoT
-
典型方法 ReAct:思考 → 行动 → 观察循环,拿真实反馈再决策
-
Self-Reflection
6. 对比 CoT、ReAct、ToT 的核心差异。
-
CoT:链式思考,只推理不行动,线性单路径
-
ReAct:推理 + 行动交替,可调工具拿真实反馈
-
ToT:树状思考,多路径探索 + 回溯,适合需要搜索的复杂问题
7. 如何让 LLM Agent 具备长期记忆能力?
-
向量数据库+RAG
-
分层记忆
- 短期记忆:保留最近的记忆
- 长期记忆:重要的信息进行外部的存储
-
预训练+知识图谱
8. LLM Agent 如何进行动态 API 调用?
-
通过 Function Calling:把 API 封装成工具,给出 name / description / 参数 schema
-
LLM 根据需求生成结构化调用参数(JSON)
-
执行后把结果返回 LLM,继续下一轮决策
9. LLM Agent 在多模态任务中如何执行推理?
-
用多模态模型(VLM)统一编码图像 / 音频 / 文本
-
或调用专用工具(OCR、ASR、图像识别)把结果转成文本再交给 LLM
-
LLM 在统一上下文里融合多模态信息做推理
10. LLM Agent 主要有哪些局限性?
-
幻觉、输出不可靠
-
长程任务易跑偏、误差累积
-
上下文窗口有限、成本高、延迟大
-
缺乏真正的规划与可解释性
11. 端到端 LLM 规划 vs 模块化 Agent 架构在长程任务中的瓶颈。
-
端到端:一次性生成完整计划,长程下误差累积、无法及时纠错
-
模块化:规划 / 执行 / 反思解耦,可局部纠错,但模块间协调成本高
-
共同瓶颈:上下文长度、状态一致性、错误传播
12. 除 ReAct 外的推理-行动范式有哪些?
-
Plan-and-Execute:先规划完整计划再逐步执行
-
Reflexion:执行后自我反思、改进重试
-
ToT / Graph of Thoughts:多路径搜索 + 回溯
-
Self-Ask、Least-to-Most 等分解式范式
13. 🌟【重点】Agent 有什么工作模式(编排范式)?
一、单 Agent 内部的推理范式
-
ReAct:推理 → 行动 → 观察 循环,最常用
-
Plan-and-Execute:先规划完整计划,再逐步执行
-
Reflection / Reflexion:执行后自我反思、改进重试
-
ToT / GoT:树/图状多路径搜索 + 回溯
二、Workflow 编排模式(Anthropic《Building Effective Agents》总结)
-
Prompt Chaining:链式拆解,前一步输出喂给下一步
-
Routing:先分类,再路由到不同处理分支
-
Parallelization:并行执行多个子任务后聚合
-
Orchestrator-Workers:协调者拆任务派给多个 worker,再汇总
-
Evaluator-Optimizer:生成 → 评估 → 改进的闭环
三、多 Agent 协作模式
-
中心化:Coordinator + Worker(主管派活)
-
去中心化:任务独立、Agent 平等协作
14. 为什么我们要使用 SDK 进行 Agent 开发?
-
封装模型api调用
-
提供统一接口调用不同模型,同时封装了认证,参数格式,流式输出等
15. tokenizer 是什么?
-
把文本切分成 token(模型最小处理单元)并映射成 id
-
常见算法:BPE、WordPiece
-
直接影响上下文长度计算和调用成本
02 关于主流 Agent 框架
16. 主流的 Agent 编程框架你知道哪些?
-
LangChain / LangGraph、LlamaIndex(外部数据结合,RAG)
-
AutoGPT(最早的自主任务循环 Agent,单体而非多 Agent)、BabyAGI(最小化的自主Agent)、CrewAI(多个Agent组成团队协作)、AutoGen、MetaGPT
17. 你为什么要用 LangGraph,而不是写一个普通 Python pipeline?
-
LangGraph 用图描述状态流转,天然支持循环、分支、条件路由
-
内置状态管理、检查点、可中断恢复
-
普通 pipeline 是线性 DAG,难表达 Agent 的循环和回退
18. 市面上有哪些主流的 LLM Agent 框架?各自的特点是什么?
-
LangChain:组件丰富、生态大;LangGraph:图式编排、可控
-
LlamaIndex:偏 RAG / 数据接入
-
CrewAI / AutoGen:多 Agent 协作
-
MetaGPT:SOP 驱动的多角色协作
19. LangChain 的核心组件有哪些?
-
Models:OpenAI、Anthropic、本地LLM
-
Prompts Templates:用户创建动态提示词,提高泛化能力
-
Memory:
- 短期记忆:存储对话上下文
- 长期记忆:结合向量数据库持久化存储
-
Chains:链式调用
- Simple Chains:单步任务
- Sequential Chains:串联多个步骤
-
Agents:通过ReAct
-
Tools:工具,访问API,Google搜索
20. LangChain Agent 的主要类型有哪些?
-
ReAct / Zero-shot-ReAct:LLM直接决定工具调用,不使用额外的提示信息
-
Conversational(带记忆的对话型):结合会话记忆
-
Structured Chat Agent:适用于结构化对话,如表单填充等
-
Self-Reflective Agent:具备自我反馈机制,可修正错误回答
21. 什么是 LangChain 中的提示模板(Prompt Template)?
- 预定义的文本结构
22. 什么是 LangChain 中的链(Chain)?
- 把多个组件(Prompt → LLM → 解析器)串成一个可调用流程
23. 什么是 LangChain 中的记忆(Memory)?
-
在多轮对话中保存历史并注入下一轮 Prompt
-
类型:Buffer、Window、Summary、向量检索记忆
-
解决 LLM 本身无状态的问题
24. 如何为 LangChain Agent 添加新的工具?
-
用
@tool装饰器或继承BaseTool,定义 name / description / 参数 -
把工具加入 tools 列表传给 Agent
-
description 要写清楚,直接影响调用准确率
25. LangChain Agent 如何处理复杂的多步骤任务?
-
通过 Agent Loop:思考 → 选工具 → 执行 → 观察,循环到完成
-
复杂任务可先 Planning 拆解再逐步执行
-
借助 Memory 维持中间状态
26. 解释 LangChain 中的"思考-行动-观察"循环,并讨论其在复杂任务解决中的作用。
-
Thought(推理下一步)→ Action(调工具)→ Observation(看结果),循环往复直到得出答案
-
作用:让模型基于真实反馈纠错,而非凭空生成,减少幻觉
-
适合需要外部信息、多步推进的复杂任务
27. LangChain Agent 如何确保输出的安全性和合规性?
-
输入 / 输出过滤,敏感词与内容审核
-
工具权限限制、人工确认(HITL)
-
结构化输出校验、Guardrails 约束
28. 如何评估 LangChain Agent 的性能?
-
任务成功率、步数、token / 成本、延迟
-
工具调用准确率、轨迹(trajectory)质量
-
用 LangSmith 做 trace 与评测、LLM-as-Judge 打分
29. LlamaIndex 如何与 LangChain 结合?
LlamaIndex主要是用于增强LangChain的外部数据访问能力
-
数据索引:预处理文档,将内容存入向量数据库
-
增强检索RAG:LangChain调用LlamaIndex进行查询
-
存储方式:支持FAISS、ChromaDB、Weaviate等
30. AutoGPT 如何实现自主决策?
-
给定目标后自主循环:生成任务 → 执行 → 反思 → 生成新任务
-
用记忆和工具持续推进,无需每步人工介入
-
缺点:容易跑偏、成本高、可控性差
31. BabyAGI 如何进行任务管理?
-
维护任务队列,按优先级取任务执行
-
执行后由 LLM 生成新任务并重排优先级
-
三个核心:执行 Agent / 任务创建 Agent / 优先级 Agent
32. CrewAI 如何管理多个 Agent 之间的协作?
-
定义角色(Role)、目标、任务和协作流程
-
Agent 间按流程(顺序 / 层级)协作
-
支持任务委派和共享上下文
33. LangChain 如何支持 API 调用?
-
把 API 封装成 Tool(如 RequestsTool 或自定义工具)
-
或用 OpenAPI / Functions 让 LLM 生成调用参数
-
Agent 在 Loop 中按需调用并消费返回结果
03 RAG
34. 🌟【重点】什么是 RAG?
-
Retrieval-Augmented Generation,检索增强生成
-
先从外部知识库检索相关内容拼进 Prompt,再让 LLM 生成答案
-
解决知识过时、幻觉、私有数据无法覆盖的问题;无需重训即可更新知识、可溯源
35. 🌟【重点】RAG 的整体工作流程(技术架构)是怎样的?
-
离线(建库):文档加载 → 分块 Chunking → Embedding 向量化 → 存入向量库
-
在线(问答):Query 改写 → 向量化 → 检索 Top-K(常配合 BM25 混合检索)→ Re-rank 重排 → 拼上下文 → LLM 生成(带引用溯源)
-
一句话:检索 + 重排决定上下文质量,生成决定表达——“garbage in garbage out”,检索质量是上限
36. 🌟【重点】RAG 和微调(Fine-tuning)各自的区别?什么场景用哪个?
-
RAG:往上下文"注入外部知识",不改模型参数;适合知识频繁更新、需要溯源、私有数据接入;成本低、上线快、可减少幻觉
-
微调(含 PEFT / LoRA):改的是模型"能力 / 风格 / 领域适配",把知识"焊进参数";适合固定领域风格、格式遵循、知识相对稳定
-
类比:RAG 像"开卷考试给资料",微调像"考前把知识背进脑子"
-
实践常组合:微调补能力 + RAG 补知识
37. RAG 常见的应用场景和数据源有哪些?
-
场景:企业知识库问答、智能客服、文档 / 代码助手、搜索增强、带依据的推荐解释
-
数据源:PDF / Word / Markdown / 网页;数据库 / API / 知识图谱;代码库、表格数据
38. 🌟【重点】RAG 中的文档切割(Chunking)策略有哪些?如何权衡?
-
为什么要切:适配上下文窗口、提升检索精度(粒度更细)
-
常见策略:固定长度切分、按语义 / 结构切(标题 / 段落)、重叠切分(overlap)、父子块(小块检索、大块喂模型)、加 metadata
-
权衡:块太小 → 语义不完整、检索碎片化;块太大 → 噪声多、稀释相关信息、浪费 token
-
解决"切断语义":重叠 + 父子块 + 语义切分
39. 在实际工程中,如何验证 Chunking 的质量?你会用哪些指标?
-
看检索召回率、答案正确率是否随分块策略变化
-
抽样人工检查块的语义完整性
-
A/B 对比不同分块策略的端到端指标
40. 🌟【重点】Embedding 有哪几种算法 / 类型?如何选 Embedding 模型?
-
发展脉络:
-
静态词向量:Word2Vec、GloVe、FastText(一词一向量,不区分上下文)
-
上下文相关:BERT 系(Sentence-BERT)、双塔 / 对比学习训练的句向量
-
主流商用 / 开源:OpenAI text-embedding-3、BGE、M3E、GTE、Cohere Embed 等
-
-
选型看:任务领域、语言、向量维度、最大长度、成本
-
评估:参考 MTEB 榜单,再用自己业务数据测召回率 / 命中率、相似度区分度、推理速度
41. 🌟【重点】Re-rank(重排)是什么?为什么需要?
-
召回为了快,常用双塔 / 向量近似检索,精度有限、会带回不够相关的块
-
Re-rank:在召回 Top-N 之后,用更强的 Cross-Encoder(把 query 和文档拼一起算相关性)重新精排,取 Top-K 给 LLM
-
作用:召回保"广"(高召回),重排保"准"(高精度),两段式提升上下文质量
-
常用:BGE-Reranker、Cohere Rerank 等
42. 🌟【重点】什么是多路召回(混合检索)?具体怎么做?
-
多路召回:同时用多种检索方式各取一批候选再融合,互补"字面"与"语义"
-
向量检索:语义相似(换种说法也能命中)
-
BM25 / 倒排:关键词精确匹配(产品型号、专有名词、缩写)
-
可加:知识图谱、父子块、Query 扩展 / HyDE
-
-
融合:用 RRF(倒数排名融合)或加权求和合并多路结果,再做 Re-rank
-
去冗余:MMR(最大边际相关)兼顾相关性与多样性,避免 Top-K 全是高度相似的重复内容
-
权重:没有固定值,关键词敏感 → BM25 权重高,用验证集调参
43. 🌟【重点】什么是向量数据库?如何做技术选型?
-
是什么:专门存储和检索高维向量的数据库,用 ANN(近似最近邻,如 HNSW / IVF)做相似度检索,支持元数据过滤
-
选型维度:数据规模、QPS、召回精度、是否需元数据过滤、部署方式(自托管 / 云)、成本、生态
-
常见对比:
-
Milvus:功能全、适合大规模生产
-
Qdrant:Rust 实现、性能好、过滤强
-
Weaviate:模块化、原生支持混合检索
-
pgvector:复用 Postgres、运维简单、规模中小
-
Faiss:是库不是服务、本地高性能、需自己包一层
-
44. 🌟【重点】Query 改写是什么?为什么要做?一般怎么做?
-
为什么:口语化 / 含指代 / 太短的 query 直接检索效果差
-
怎么做:
-
LLM 改写:指代消解、补全上下文、拆分子问题
-
同义词 / 实体扩展
-
HyDE:先让 LLM 生成"假设答案",再用它去检索(向量更接近文档)
-
-
效果:显著提升召回质量
45. RAG 如何在多轮对话中保持上下文?
-
把历史对话纳入 query 改写(指代消解、补全)
-
多轮记忆 + 当前 query 一起参与检索
-
维护会话状态,必要时摘要历史
46. 🌟【重点】怎么量化 / 评估 RAG 的效果?
-
检索侧:召回率、命中率、MRR / NDCG
-
生成侧:忠实度(faithfulness)、答案相关性、正确性
-
工具:RAGAS 等 + 人工 / LLM-as-Judge
-
排查思路:先分清是"检索没召回"还是"召回了但生成错"
47. 🌟【重点】什么是大模型幻觉?怎么降低幻觉?
-
是什么:模型生成看似合理但与事实不符 / 无依据的内容(参数化知识有限、过时,按概率"编"出来)
-
降低方法:
-
RAG:给真实依据 + 要求"基于检索内容作答"、给引用溯源
-
约束:结构化输出、让模型"不知道就说不知道"
-
校验:用工具 / 外部数据二次核验、多源交叉验证、置信度过滤
-
模型侧:换更强模型、降低 temperature、必要时微调
-
-
注意:RAG 能显著减少但不能根除幻觉(检索错 / 读错也会答错)
48. RAG 有哪些局限性?对效率有何影响?
-
受限于检索质量:检索不到就答不对;多跳推理弱、长文档整合难
-
引入检索 + 更长上下文 → 延迟、成本上升
-
可用缓存、精简上下文、混合检索 + 重排来优化
49. RAG 系统有问题,一般如何排查和解决?
-
分段定位:先判断是检索召回问题还是生成问题
-
检索结果不含答案 → 查分块 / embedding / query 改写
-
含答案但答错 → 查 Prompt / 模型 / 上下文顺序
50. 当 TPS 高的情况下,RAG 系统很容易崩,是模型容量不够吗?
-
不一定是模型容量;瓶颈常在检索链路(向量库、Embedding 服务、网络)
-
高并发下检索排队、显存 / 连接耗尽更先暴露
-
解法:缓存、限流、批处理、扩容、异步化
51. 如果小说长度远超上下文窗口,怎么回答其中的问题?
-
分块索引 + 检索相关片段(RAG)
-
分层摘要(map-reduce)逐层压缩
-
复杂问题做多跳检索 + 迭代回答
52. RAG 如何保证信息新鲜度?如何处理偏见和错误信息?
-
新鲜度:定时 / 增量更新索引、文档加时间戳、检索时按时间加权或优先返回最新版本
-
质量:把控数据源、清洗审核;引用溯源让用户可核验;多源交叉验证、置信度过滤
53. 点积(没有归一化)和余弦相似度的使用场景分别是什么?
-
余弦:只看方向、忽略模长,文本相似度常用
-
点积:同时受方向和模长影响
-
向量已归一化时两者等价,此时用点积更快
54. 用过哪些开源 RAG 框架(比如 RAGFlow)?如何选择合适场景?
-
RAGFlow、Dify、LangChain、LlamaIndex、Haystack
-
选型看:要开箱即用产品 vs 灵活自定义编排
-
RAGFlow 文档解析强;LlamaIndex 检索灵活;Dify 偏低代码平台
04 MCP / Function Calling
55. 🌟【重点】Function Calling(函数调用)是什么?
-
让 LLM 具备"调用外部函数/工具"能力的机制:把工具的 name、description、参数 JSON schema 告诉模型
-
模型在推理时判断要不要调用、调用哪个,输出结构化的调用请求(tool_use:工具名 + 调用 id + JSON 参数)
-
调用方实际执行函数,把结果(tool_result)拼回上下文,模型据此继续下一步
-
本质:模型 ↔ 程序之间的一次结构化通信协议,让"会说话的模型"具备"会动手"的能力(感知→决策→行动闭环的关键一环)
56. 🌟【重点】MCP 是什么协议?
-
MCP = Model Context Protocol(模型上下文协议),Anthropic 提出的开放标准
-
作用:统一"模型/Agent ↔ 外部工具、数据、资源"的连接方式,被称为"AI 应用的 USB-C 接口"
-
解决的问题:每个工具都要为每个框架单独适配的 M×N 难题 → 标准化后变成 M+N
-
三大角色:Host(宿主应用,如 IDE/Agent)/ Client(连接器,与 Server 一对一)/ Server(暴露 Tools、Resources、Prompts)
-
底层:基于 JSON-RPC 2.0,传输支持 Stdio / SSE / Streamable HTTP
-
与 Function Calling 关系:MCP 是工具的标准来源/接入层,工具最终仍通过 Function Calling 暴露给模型
57. MCP 与"函数调用/工具调用"有何关系?
-
MCP统一了工具与资源的“发现于描述”
-
实践:MCP暴露企业的api之后,Agent框架等可以通过MCP客户端适配层复用这些工具
58. Tool Calling 的核心机制是什么?
-
工具注册:name、description、参数JSON schema
-
识别意图:LLM在推理过程中判断是否需要调用工具,以及调用哪个工具。模型输出一个结构化对象(JSON)
-
参数解析与校验
-
安全执行:沙箱环境中执行工具调用,设置超时、权限和资源限制
-
结果注入
59. 举一个例子来说明 MCP 和 Function Calling 的区别。
-
查天气:FC 是在代码里写死
get_weather函数并注册给模型 -
MCP 是把 weather 能力做成独立 Server,任何 Agent 配置即可接入
-
FC 是应用内绑定,MCP 是跨应用复用的标准接口
60. 20+ 工具场景下的工具选择决策维度有哪些?
-
工具描述清晰度、命名区分度
-
按需加载 / 检索,减少无关工具干扰
-
分组、分层,用 router 先粗选再精选
61. 如何防止工具调用的无限循环?
-
第一层 硬性限制:设置全局最大步数(如 N 步)、单工具的最大重试次数
-
第二层 重复检测:监控最近N步的工具调用序列,判断是否出现相同工具+相同描述的调用
-
第三层 收敛性检测:追踪每步的进展指标,判断是否需要重新规划等
-
第四层 建模是否需要外部信息的决策边界
62. MCP 工具很多,全部塞给大模型可能导致内存池过大的问题,处理方法?
-
延迟加载:只注册名称,按需通过检索加载完整 schema
-
工具分组 / 命名空间隔离
-
按场景动态挂载需要的 Server
63. MCP 的核心角色有哪些?
-
Host:宿主应用(如 IDE、Agent)
-
Client:连接器,与 Server 一对一
-
Server:提供工具 / 资源 / 提示
64. MCP Server 能暴露哪些能力?
-
Tools:可执行操作
-
Resources:可读数据
-
Prompts:提示模板
65. MCP 与传统 REST / gRPC 的区别是什么?
-
MCP 面向 LLM,自带工具发现、schema 描述、提示等语义
-
REST / gRPC 是通用 RPC,需自己包装给模型
-
MCP 标准化了"模型↔工具"的交互层
66. 什么是"结构化输出(Structured Output)"?
-
让模型按指定 schema(如 JSON)输出
-
便于程序解析和下游处理
-
实现:JSON mode、Function Calling、约束解码
67. MCP 典型落地场景有哪些?
-
接数据库 / 文件系统 / API
-
接企业内部系统、第三方 SaaS
-
给 IDE / 桌面 Agent 扩展能力
68. MCP 与 OpenAI/Claude 等厂商的函数/工具生态关系?
-
MCP 是开放标准,厂商 FC 是各自实现
-
MCP 工具可被代理成厂商的 tool 定义
-
互补:FC 负责模型侧,MCP 负责工具侧标准化
69. MCP 的消息/接口是如何组织的?
-
基于 JSON-RPC 2.0
-
请求 / 响应 / 通知三类消息
-
初始化握手时协商 capabilities
70. 资源(Resource)与工具(Tool)的边界是什么?
-
Resource:只读数据,由应用决定何时读取(如文件内容)
-
Tool:可执行动作,由模型决定调用,可能有副作用
-
区别在"读 vs 做"和"谁触发"
71. 提示(Prompt)在 MCP 中的作用?
-
Server 提供可复用的提示模板
-
用户 / 应用可显式调用(如 slash command)
-
标准化常用交互流程
72. 结构化输出的协商方式是什么?
-
工具定义 input / output schema
-
初始化时协商双方 capabilities
-
支持返回结构化内容块
73. 会话/上下文如何跨工具调用传递?
-
由 Host / Agent 维护对话历史
-
工具结果以 tool_result 拼回上下文
-
Server 端一般无状态,状态留在 Client / Host
74. 服务能力(Capabilities)是什么?客户端如何发现/列举资源与工具?
-
初始化握手时双方声明支持的能力
-
通过 tools/list、resources/list 列举
-
列表变化时发通知更新
75. 日志与通知在 MCP 协议中的角色?
-
日志:Server 向 Client 上报运行信息,便于调试
-
通知:单向消息(如列表变更、进度)
-
提升系统可观测性
76. 是否支持图片/二进制内容?支持哪些传输?
-
支持文本和二进制(图片等)内容块
-
传输方式:Stdio、SSE、Streamable HTTP
77. 何时选择 Stdio?何时选择 Streamable HTTP?
-
Stdio:本地子进程,低延迟、部署简单
-
Streamable HTTP:远端 / 无状态部署,Serverless 友好
-
取决于部署位置和是否需要远程访问
78. 连接稳定性与超时重试如何设计?
-
设超时、重连、指数退避
-
异常隔离:单 Server 挂掉不影响整体
-
健康检查 + 降级
79. 如何在 Python 中定义一个最小化 FastMCP 服务器?
-
创建
FastMCP实例 -
@mcp.tool()装饰函数即注册为工具 -
mcp.run()启动(默认 stdio 传输)
80. 工具的输入/输出如何结构化?
-
用类型注解 / Pydantic 定义入参
-
返回结构化内容或文本
-
框架自动生成 JSON schema 给模型
81. 如何为 Tool 提供进度与日志?
-
通过 Context 对象上报进度(progress)
-
用
ctx.info / debug输出日志 -
长任务分阶段反馈
82. Prompt 的最佳实践?
-
参数化、职责单一
-
清晰命名和描述
-
复用常见工作流
83. 工具幂等性与重试策略?错误处理与用户提示?
-
写操作尽量幂等(带 id / 去重)
-
失败明确返回 is_error,让模型感知
-
区分可重试 / 不可重试错误,给清晰提示
05 Agent 进阶以及实际应用
84. 如何设计一个完整的 AI Agent 系统?
-
四要素:LLM(大脑)+ 工具 + 记忆 + 规划
-
加上 Agent Loop、权限 / 安全、可观测(日志 / trace)
-
按场景选单 / 多 Agent,定义工具集与评测
85. 常见的提示词优化方法有哪些?
-
明确角色、任务、输出格式
-
few-shot 示例、CoT 引导
-
结构化分区(指令 / 上下文 / 约束)、迭代调优
86. Prompt 注入是什么?有哪些攻击方式?如何防护?
-
用户 / 外部内容注入恶意指令,劫持模型行为
-
方式:直接注入、间接注入(污染检索内容 / 网页)
-
防护:指令与数据隔离、输入过滤、权限最小化、输出审查
87. 上下文窗口怎么设计?如何降低 token?怎么评测设计的质量?
-
设计:分区(系统 / 历史 / 检索 / 工具),保留关键、裁剪冗余
-
降 token:摘要、检索注入、工具结果落盘、延迟加载
-
评测:任务成功率、token 用量、关键信息保留率
88. 工具描述该怎么写能提升调用准确率?
-
名称语义化,描述讲清"做什么、何时用、何时不用"
-
参数 schema 清晰,给约束和示例
-
工具间边界明确,避免功能重叠
89. 如果做一个 Agent,遇到工具调用失败或者 LLM 幻觉怎么办?
-
工具失败:明确标 is_error 回传,让模型重试或换路
-
幻觉:用工具拿真实数据校验、要求引用、结构化约束
-
加重试上限、人工兜底
90. ReAct 实际怎么落地?提示词怎么设计?
-
提示里规定 Thought / Action / Observation 格式
-
提供工具列表与调用规范
-
框架解析 Action 执行,把 Observation 拼回,循环
91. 如何衡量 LLM Agent 的性能?
-
任务成功率、轨迹质量、步数
-
延迟、token / 成本
-
工具调用准确率、鲁棒性
92. 如何优化 LLM Agent 的性能?
-
模型选型 + 提示优化
-
上下文裁剪、缓存、并行工具
-
流式输出、小模型分流、规划减少无效步
93. Agent 服务的高可用是怎么保证的?
-
多副本、限流、降级、熔断
-
依赖(模型 / 向量库)超时重试与隔离
-
监控告警、灰度发布
94. 性能优化:LangGraph 的多 Agent 协作会带来延迟,如何通过流式等方式优化?
-
流式输出 token,先返回再继续
-
工具并行、节点并发执行
-
缓存中间结果、减少串行依赖
95. 构建 Agent 有哪些最佳实践?
-
从简单开始,能用单 Agent 就不上多 Agent
-
工具描述清晰、系统可观测、可评测
-
加边界(权限 / 轮次上限),持续迭代优化
96. LLM Agent 在企业应用中的典型场景有哪些?
-
智能客服、知识库问答
-
流程自动化(RPA + LLM)
-
数据分析、代码 / 运维助手
97. Agent 在实际应用中面临哪些挑战?
-
可靠性 / 幻觉、成本与延迟
-
安全与权限、评测困难
-
长程任务稳定性
98. 怎么做 Agent 的权限管理?
-
工具级权限、最小权限原则
-
规则引擎 + 危险操作检测
-
HITL 人工确认、沙箱隔离
99. 如果单一智能体的提示词过长,导致性能下降,如何将其拆分为多个智能体?
-
按职责 / 领域拆分,每个 Agent 提示精简
-
主 Agent 负责协调、分发子任务
-
子 Agent 各自独立上下文,减少干扰
100. 单 Agent 输出不可靠时的鲁棒性保障机制有哪些?
-
结构化输出校验 + 重试
-
自我反思 / 多次采样投票
-
工具校验、人工兜底
101. 单 Agent 和 Multi-Agent 你什么时候选哪个?怎么协作?
-
任务简单 / 串行 → 单 Agent
-
可拆分、需并行或不同专长 → 多 Agent
-
协作:共享任务清单 + 消息通信 / 主从协调
102. 多 Agent 相比单 Agent 有什么优势?如何选择?
-
优势:突破单上下文、并行提效、专业分工
-
代价:协调复杂、状态同步难
-
选择:收益大于协调成本时才用
103. 介绍一下多 Agent 系统的角色分工、通信与冲突协调。
-
分工:按角色 / 专长(规划、执行、审查)
-
通信:消息 / 共享内存 / 黑板模式
-
冲突协调:协调者仲裁、加锁 / 任务隔离
104. 中心化协调 vs 去中心化协作的适用条件?
-
中心化:需强一致、频繁协调 → Coordinator 统筹
-
去中心化:任务独立、并行推进 → Agent 平等协作
-
看协调频率和一致性要求
105. Multi Agent 子 Agent 需要把哪些信息传递给主 Agent,哪些没必要传?
-
传:任务结果、关键结论、状态 / 错误
-
不传:中间推理细节、冗长过程日志
-
原则:紧凑结构化,减轻主 Agent 上下文压力
106. Multi-Agent 如何实现团队协作?
-
共享任务清单 + 邮箱 / 消息通信
-
每个 Agent 独立工作区(如 Worktree)
-
通过协调者或自组织推进
107. 拆分多 Agent 之后,链路失败或局部失败时怎么处理?
-
局部重试、超时、降级
-
失败隔离,不拖垮整体
-
协调者感知并重新分配 / 兜底
108. 多 Agent 场景下,上下文传递为什么用 JSON / Slot 这类结构化方式?
-
结构化更紧凑、无歧义、易解析
-
减少上下文体积和误解
-
便于校验和路由
109. 多 Agent 的上下文污染怎么解决?
-
各 Agent 上下文隔离,只传必要信息
-
用结构化接口而非整段历史
-
清晰边界 + 摘要压缩
110. Planning 有哪些方法可以实现?分别讲一讲。
-
任务分解(Decomposition):拆成子任务逐个解决
-
Plan-and-Execute:先出完整计划再执行;ReAct:边做边规划
-
ToT / 反思迭代、层级规划
111. Agent 的 Memory 你怎么设计?
-
短期:对话历史 / 工作记忆(上下文)
-
长期:向量库 / 文件持久化 + 检索注入
-
加摘要、分层(用户级 / 项目级)
112. 你在写 Agent 的时候有用过长期记忆和短期记忆吗?
-
短期:当前对话上下文,存近期交互
-
长期:跨会话偏好 / 知识,持久化到外部存储
-
两者配合:短期负责工作,长期负责沉淀
113. Agent 短期记忆如何转化为长期记忆?
-
触发条件(重要 / 重复 / 用户指定)下提取
-
摘要成事实 / 偏好写入持久化存储
-
下次按相关性检索注入
114. 你觉得短期记忆里会存储 Function Call 的内容吗?如果不放进短期记忆会有什么问题?
-
会,tool_use 和 tool_result 都要留在历史
-
不放:模型不知道调过什么、拿到什么结果
-
后果:重复调用、配对断裂、上下文不一致
115. 如何界定短期记忆和长期记忆的边界,以及这两个记忆的存储方式还有存储什么?
-
短期:当前会话相关,存上下文窗口 / 内存
-
长期:跨会话有价值,存数据库 / 向量库 / 文件
-
内容:短期存对话细节,长期存提炼后的事实 / 偏好
116. 长上下文场景下的外部记忆增强机制有哪些?
-
向量检索(RAG)按需调取
-
摘要 / 分层记忆
-
落盘 + 引用、KV 缓存
117. 用户偏好是怎么得来的?
-
显式:用户直接设置 / 反馈
-
隐式:从历史行为 / 对话中提取
-
持久化并在相关场景注入
118. 记忆摘要的触发机制应考虑哪些指标?
-
上下文 token 占用 / 轮次
-
信息重要性 / 重复度
-
成本与延迟阈值
119. 意图识别阶段 Query 改写可能把关键信息改丢,你怎么发现这种问题?
-
对比改写前后语义 / 实体是否丢失
-
监控召回率下降、答非所问
-
加校验:保留原 query 做兜底检索
120. 如果记忆信息和当前聊天上下文冲突,你们怎么处理?以谁为准?
-
一般以当前对话 / 最新信息为准
-
记忆作为背景参考,冲突时降权
-
必要时向用户确认
121. 请介绍几个目前行业内广泛使用的 LLM 综合性基准测试,并说明它们各自的侧重点。
-
MMLU:多学科知识;GSM8K / MATH:数学推理
-
HumanEval:代码生成;HellaSwag:常识推理
-
MT-Bench / Chatbot Arena:对话与人类偏好
122. 什么是"LLM-as-a-Judge"?使用 LLM 来评估另一个 LLM 的输出,有哪些注意事项?
-
用强 LLM 给另一个模型输出打分 / 比较
-
注意:位置偏见、长度偏见、自我偏好
-
缓解:随机顺序、明确评分标准、多次投票
123. 你了解哪些专门用于评估 Agent 能力的基准测试?这些基准通常如何构建?
-
如 AgentBench、WebArena、GAIA、SWE-bench
-
构建:真实任务 + 可验证的成功判定
-
覆盖工具使用、多步推理、环境交互
124. 评估一个 Agent 的任务完成情况时,除了最终结果的正确性,还应该看哪些维度?
-
效率(步数 / token / 时间)
-
鲁棒性、安全合规
-
轨迹合理性、成本
125. 如何持续监控和评估一个已经部署上线的 LLM 应用或 Agent 服务的表现?
-
采集 trace、token、延迟、错误率
-
采样 + LLM-as-Judge 评质量
-
Bad case 回流、告警、定期评测
126. 不同 Agent 架构差别比较(单体/分层/多 Agent)。
-
单体:简单直接,复杂任务上下文吃紧
-
分层:规划 / 执行解耦,可控但有协调成本
-
多 Agent:并行专业分工,状态同步复杂
127. 项目中 Agent 执行一个进程有哪几种方式?
-
前台同步执行
-
后台异步 / Background 模式
-
子进程 / 子 Agent spawn
128. 什么时候使用图数据库或知识图谱来增强或替代传统的向量检索?
-
需要多跳关系推理、实体关联时
-
结构化、关系密集的领域知识
-
与向量检索结合做 GraphRAG
129. 如何选取使用具体哪个大模型?
-
看任务难度、上下文长度、成本、延迟
-
能力(推理 / 代码 / 多模态)匹配场景
-
闭源强但贵,开源可控可私有化;先评测再定
130. 知识图谱数据如何构造?
-
实体 / 关系抽取(规则 + LLM)
-
schema 设计、实体对齐去重
-
存入图数据库,持续更新维护
06 Agent 实际场景题
131. 你是如何利用 LangSmith 或类似工具进行 Trace 跟踪,定位 Agent 在哪一步出问题的?
-
全链路记录每步:输入、思考、工具调用、输出
-
定位:是检索没召回 / 工具参数错 / 模型决策偏
-
结合 token、延迟、错误标记逐步排查
132. 你监控了哪些指标?
-
质量:成功率、工具调用准确率、Bad case 率
-
性能:延迟(首 token / 端到端)、token / 成本
-
稳定:错误率、超时、重试次数
133. 你怎么设计的 Agent 循环执行?
-
while 循环 + 状态对象跨轮传递
-
每轮:拼上下文 → 调模型 → 判断有无工具调用 → 执行回填
-
终止:无 tool_use 或达 maxTurns
134. 多 Agent 架构:每个子 Agent 的模型选型是什么?为什么要这么选?
-
简单 / 高频任务用小快模型(省成本、降延迟)
-
复杂推理 / 规划用强模型
-
按任务难度分级,平衡效果与成本
135. System Prompt 怎么设计的?
-
角色定位、能力边界、行为准则
-
工具使用规范、输出格式
-
分区清晰、精简、必要约束
136. 端到端的延迟是多少?(肯定是不短的,只是好奇 Agent 方向的延迟)
-
取决于轮数 × 单轮(模型推理 + 工具)时间
-
多步 Agent 通常几秒到几十秒
-
优化:流式、并行工具、缓存、小模型分流
137. 你们是如何分析 Bad Case 的?
-
收集 + 分类(检索 / 工具 / 模型 / 提示问题)
-
回放 trace 定位根因
-
闭环:修提示 / 加规则 / 补数据,回归验证
138. Bad Case 闭环处理:“当用户说我睡不着,想听恐怖故事”(非法请求),Agent 怎么处理?
-
先判断意图与安全边界
-
不生硬拒绝,可共情 + 引导(讲轻松内容助眠)
-
涉违规明确拒绝并给替代方案
139. 手机里有个 Chatbot,我跟他说帮我点一份外卖,那么这个时候只有 Function A,那这个 Agent 该怎么处理?
-
能力不匹配时不能硬调 Function A
-
坦诚告知做不到,或用 A 能覆盖的部分
-
必要时引导到正确渠道,避免幻觉式乱调
140. 如果让你设计一个点外卖 Agent,你会怎么设计?【美团真题】如果用户说"随便",Agent 怎么处理?
-
组件:意图理解 + 槽位填充 + 推荐 + 下单工具
-
“随便”:用历史偏好 / 热门 / 场景推荐,给 2-3 个选项让确认
-
主动澄清而非瞎下单
141. 如果让你设计一个千问点奶茶的 Agent,你如何设计?
-
槽位:品类、规格、糖度、温度、加料
-
多轮澄清补全槽位 + 推荐
-
调下单 API,确认后提交
142. 请设计一个 LLM Agent,用于医学问答,它需要具备哪些关键组件?
-
权威知识库 + RAG(可溯源)
-
安全审查、免责声明、不替代诊断
-
意图识别,敏感场景转人工 / 就医提示
143. 关于对话历史,为什么要保留最近 20 轮对话,而不是 10 轮、30 轮?
-
平衡上下文完整性与 token 成本 / 延迟
-
太少丢上下文,太多噪声 + 贵 + 降智
-
20 是经验折中,可配合摘要保留更早信息
144. 如何构建一个 AI 照片助手,能够对用户上万张照片进行索引,并根据用户描述检索?
-
用多模态模型给图片生成 embedding / 标签
-
存向量库,支持以文搜图
-
加元数据(时间 / 地点)过滤,增量索引
145. Prompt 怎么知道效果好不好,怎么调优?
-
用评测集 + 指标(准确率 / 格式合规)
-
A/B 对比、case 分析
-
迭代:加约束 / 示例 / 调结构
146. 对大模型进行提示时有没有它的输出不符合指令的现象,是怎么解决的?
-
明确格式要求 + few-shot 示例
-
结构化输出 / JSON mode 约束
-
输出校验,不合规则重试
07 Skills
147. Skills 相比于传统 Agent 好处在哪里?工具 Skills 和产品 Skills 如何理解?
-
好处:能力按需加载,不占满上下文,可复用、可组合
-
工具 Skills:封装具体操作能力
-
产品 Skills:封装某产品 / 领域的方法论、规范和输出模板,偏业务任务
148. 🌟【重点】什么是 Skills?
-
把领域知识 / 工作流打包成可被 Agent 按需加载的能力包
-
核心是 SKILL.md + 脚本 / 参考资料
-
渐进式披露,用到才加载
149. Skills VS MCP:从工程视角理解差异;上下文管理策略的本质差异;互补而非竞争:Skills + MCP 的混合架构。
-
MCP:连接外部工具 / 数据(连接协议)
-
Skills:注入知识与流程(指导模型怎么做)
-
互补:MCP 给能力,Skills 给方法,可混合架构
150. 🌟【重点】Function Calling、MCP、Skills 三者有什么区别?
-
Function Calling:最底层的通信协议——规定模型↔工具之间怎么对话(tool_use / tool_result)
-
MCP:工具的一种标准来源/接入方式——把工具放到独立进程/服务,通过标准协议接入,最终仍通过 Function Calling 暴露给模型
-
Skills:最上层的能力/知识封装——打包的是"知识 + 工作流",告诉模型"该用哪些工具、按什么步骤做",渐进式按需加载
-
一句话:FC 是地基(怎么通信),MCP 是标准插座(从哪接工具),Skills 是说明书(教模型怎么把工具组合起来干活)
-
三者是分层、互补关系,不是竞争
151. Skills 的主要组成部分:SKILL.md 是什么?references/ 是什么?scripts/ 是什么?assets/ 是什么?四件套配合起来的样子。
-
SKILL.md:技能的工作手册
-
references/:参考资料;
- api doc等
- style-guide.md
- troubleshooting.md
-
scripts/:可执行脚本;
- python脚本/shell脚本:解析pdf/发邮件/查天气
-
assets/:模板 / 资源
- ppt模板,logo
- 字体,图片等
152. Skills 的渐进式加载机制:第一层元数据(Metadata);第二层技能主体(Instructions);第三层附加资源(Scripts & References);渐进式披露的效果:从 16k 到 500 Token。
-
一层元数据:name + description,常驻、占用极小
-
二层指令主体:命中后才加载 SKILL.md
-
三层附加资源:用到才读 scripts / references → 整体从一次性 16k 降到约 500 token
153. 大模型如何理解一个 Skill 的好与不好,Skill 该如何做评测?
-
看是否在该用时被正确触发、用对
-
评测:触发准确率、任务成功率、对比有无 Skill
-
收集 bad case 迭代 description 与内容
154. Skills 实战案例——员工分析 SQL 查询:技能文件结构;SKILL.md 核心内容示例;技能的使用效果。
-
文件结构:SKILL.md + 表结构 references + 查询脚本
-
SKILL.md 核心:说明何时用、库表 schema、SQL 规范
-
效果:模型按规范生成正确查询,少出错
155. skill_creator:使用案例。
-
一个用来创建 Skill 的 Skill
-
引导用户描述需求,自动生成 SKILL.md 与目录结构
-
降低手写 Skill 的门槛
156. 你自己有手搓过哪些 Skills?
-
可举:代码审查、提交规范、项目专用查询 / 部署流程
-
动机:把重复工作流和团队规范沉淀成 Skill
-
强调评测与迭代(按真实经历作答)
08 开放性问题 & 前沿知识
157. 平常会用 Vibe Coding 吗?使用过哪些工具?有哪些经验总结?
-
用过,如 Claude Code / Cursor
-
经验:明确需求、小步迭代、及时审查
-
不盲信,关键逻辑自己把关
158. 你觉得使用 AI Coding 工具后,程序员应该更关注的点是哪些?【美团】
-
需求拆解、架构设计、问题定义
-
代码审查与质量把关
-
系统思维、领域知识,而非纯敲码
159. 平常 AI Coding 时,如何减少 token 用量?
-
精准上下文、按需提供文件
-
及时
/clear、/compact -
复用规则文件(CLAUDE.md),避免重复解释
160. 怎么让 AI Coding 工具符合团队的代码规范,减少幻觉?
-
把规范写进 CLAUDE.md / 规则文件
-
提供示例和约束,让它先读现有代码
-
测试 + 审查兜底
161. SDD 了解吗?
-
Spec-Driven Development,规范 / 规格驱动开发
-
先写清晰规格 / 设计再让 AI 实现
-
减少跑偏,便于验证
162. 怎么接触 AI 前沿知识的?
-
论文(arXiv)、官方博客、技术社区
-
Twitter / X、GitHub trending
-
动手复现 + 实践
163. 哪些可以看最新模型榜单的地方?
-
LMArena(Chatbot Arena)、OpenLLM Leaderboard
-
各 benchmark 官网、SWE-bench
-
厂商发布与第三方评测
164. Codex 上下文窗口过大后降智了怎么办?
-
及时压缩 / 清理上下文
-
拆任务、分多个会话
-
只给相关上下文,避免噪声
165. 如不知道最近的 Harness Engineering,结合具体场景讲讲。
-
围绕模型搭的"脚手架":上下文、工具、记忆、反馈、约束
-
让模型在真实任务里稳定发挥
-
场景:把项目知识 / 流程 / 规则喂给 Agent 提升可靠性
166. 🌟【重点】什么是 A2A 协议?
-
A2A = Agent-to-Agent Protocol,Google 于 2025 年提出的开放协议(后捐给 Linux 基金会),用于不同 Agent 之间互相通信、协作
-
解决的问题:不同厂商/框架做的 Agent 彼此孤立,A2A 让它们能跨平台发现、对话、协同完成任务
-
核心概念:
- Agent Card:用 JSON 描述 Agent 的能力、地址、认证方式(通常放在
/.well-known/agent.json,用于"发现") - Task:A2A 以任务为单位,支持长任务、流式更新和状态同步
- Client Agent / Remote Agent:发起方与执行方
- Agent Card:用 JSON 描述 Agent 的能力、地址、认证方式(通常放在
-
底层:基于 HTTP + JSON-RPC 2.0,流式用 SSE
-
与 MCP 的区别(高频):MCP 解决"Agent ↔ 工具/数据"的连接;A2A 解决"Agent ↔ Agent"的协作,两者互补,常一起用
167. 如果现在用 Harness Engineering,你的 Agent 项目会怎么做?
-
完善上下文工程(记忆 / 规则 / 检索)
-
强化工具与反馈闭环、可观测
-
把隐性知识显式化进知识库
168. 如何看待 AI 的发展?如何不被 AI 淘汰?
-
AI 是放大器,替代重复劳动
-
提升不可替代能力:判断、设计、跨域整合
-
学会用 AI、驾驭 AI
169. 如果用 AI Coding 来重做项目,你会怎么做?
-
先理清需求与架构(Spec / Plan)
-
模块化、小步迭代 + 测试
-
用规则文件约束、关键处人工把关
170. Claude Code 的 Memory 三层逻辑设计,为什么这么设计?
-
用户级(跨项目偏好)、项目级(项目知识)、本地级
-
分层匹配作用域,避免污染、便于共享与版本管理
-
按需注入,控制上下文成本
171. 未来 LLM Agent 可能有哪些技术突破?
-
更强长程规划与记忆
-
更可靠的工具使用与自我纠错
-
多模态、具身、低成本与可控性
172. 平常使用 AI 吗,都用来干嘛?如果我想使用 AI,比如 Coding 领域,你有何建议?
-
编码、查资料、写作、总结
-
建议:从小任务上手、明确需求、审查产出
-
边用边学原理,别当黑盒
173. Cursor 如果上下文过长有没有性能下降的现象?千问的上下文窗口多大?
-
会,过长会注意力稀释 / 降智,应精简上下文
-
千问(Qwen)多数版本支持 128K,长上下文版本更大
-
实际看具体型号
174. 对于 Agent 未来 to C 和 to B 在技术和架构上觉得未来可能会有什么发展?
-
to C:个人助理,强调体验 / 隐私 / 个性化
-
to B:流程自动化,强调可靠 / 安全 / 集成
-
架构上 to B 更重权限、审计、私有化
175. 你认为当前 LLM 距通用人工智能(AGI)还有多远?最关键的缺失能力是什么?
-
仍有距离,难给确切时间
-
缺:可靠推理 / 规划、持续学习、真正理解与因果
-
自主性与可信度仍不足
176. 你如何看待开源模型和闭源模型生态系统的竞争与共存?
-
闭源领先能力,开源追赶且可控可私有
-
长期共存、互相促进
-
选型按场景:能力 vs 成本 / 可控
177. 具身智能(Embodied AI),即 LLM 与机器人的结合,被认为是 AI 的下一个浪潮。你认为 LLM 将如何赋能机器人?
-
当"大脑"做高层理解、规划、指令分解
-
结合感知与底层控制
-
挑战:实时性、安全、物理世界泛化
178. 了解过哪些模型吗?
-
闭源:GPT / Claude / Gemini
-
开源:Llama、Qwen、DeepSeek、Mistral
-
按能力 / 成本 / 场景选型
179. 你认为目前限制 Agent 能力和普及的最大瓶颈是什么?
-
可靠性 / 幻觉,长程稳定性
-
成本与延迟、安全与信任
-
评测与可控性
180. 你对大模型时代的 AI 安全怎么看?
-
内容安全(有害 / 偏见)、对齐问题
-
隐私与数据安全、滥用风险
-
Prompt 注入等新型攻击,需纵深防御
181. 个性化是 LLM 应用的重要方向。在实现高度个性化的 Agent 或助手的过程中,我们应如何平衡效果、隐私和安全?
-
数据最小化、本地 / 脱敏处理
-
用户可控(授权 / 删除)
-
分层存储 + 权限,在效果与隐私间权衡
182. 展望未来 3-5 年,你认为 LLM 和 Agent 技术最有可能在哪个行业或领域率先实现颠覆性应用?为什么?
-
软件开发、客服、内容创作较快落地
-
原因:数字化程度高、可验证、ROI 明显
-
言之有理即可
183. 你如何看待 Agent 领域的"涌现能力"?我们应该追求更强大的基础模型,还是更精巧的 Agent 架构?
-
二者都要:强基础模型是上限,精巧架构是发挥
-
当前阶段架构 / Harness 工程能显著提效
-
长期靠模型能力突破
09 OpenClaw
184. 🌟【重点】什么是 OpenClaw?(用过吗?写过 Skills 吗?)
-
开源的通用型 Agent(智能体),把"模型 + 工具 + 记忆 + Skills + MCP"这套 Harness 工程做成了开箱即用的产品
-
定位:用自然语言驱动 Agent 自主完成多步任务(写代码、查资料、操作文件 / 浏览器等)
-
作答提示:用过就举真实例子(写过哪些 Skill、接过哪些 MCP);没用过则讲对其机制的理解
185. 🌟【重点】OpenClaw 的核心亮点是什么?
-
开源 + 开放生态:Skills(能力包)+ MCP(接外部工具)可自由扩展、社区共建
-
Harness 工程成熟:上下文工程、记忆、工具反馈闭环、权限 / 安全做得完整
-
渐进式能力加载:Skills 渐进披露,用到才加载,省上下文
-
模型能力到位 + 工程打磨:体验好、可自托管、数据可控
186. 🌟【重点】OpenClaw 与传统 Agent 有什么区别?
-
传统 Agent(如早期 AutoGPT):流程脆弱、容易跑偏、生态封闭、扩展难
-
OpenClaw:以 Harness 为核心——强调上下文工程 + Skills / MCP 开放生态 + 文件式记忆
-
可扩展性:能力按需挂载(Skills / MCP),而不是把所有逻辑写死在代码里
-
工程化:完整的权限、可观测、上下文压缩,长程任务更稳
187. 🌟【重点】OpenClaw 的记忆机制是怎么实现的?
-
分层 + 文件式(markdown)记忆:
-
短期:当前会话上下文,超长就上下文压缩 / 摘要
-
长期:写进项目级 / 用户级 markdown 记忆文件,新会话开始时注入
-
-
作用域分层:项目级(放仓库、团队共享约定)vs 用户级(个人偏好)vs 内置
-
与项目指令文件(类 CLAUDE.md)区别:指令是人写的工程规范;记忆是 Agent 自动从对话里提取的偏好 / 反馈
-
知识多时配合向量库 / RAG 召回相关记忆
188. OpenClaw 到底解决了什么痛点?为什么爆火?
-
痛点:之前 Agent 要么能力弱、要么闭源 / 不可控、要么扩展难,落地体验差
-
解法:开源可自托管(数据可控)+ 生态可扩展(Skills / MCP)+ 工程成熟(稳定可用)
-
爆火时机:模型能力到位 + Harness 工程成熟 + 开源社区共建,正好凑齐
189. 🌟【重点】OpenClaw 有什么缺点?为什么那么烧 token?
-
烧 token 的原因:
-
Agentic Loop 多轮"思考-行动-观察",每轮都带着完整上下文重复进模型
-
大系统提示 + 工具定义 + 记忆 / 检索内容长期占用上下文
-
多工具结果、长文件内容回灌上下文,越滚越大
-
-
其他缺点:成本 / 延迟高、长程任务仍会跑偏、对模型能力依赖强、自主执行命令的安全性需兜底
-
缓解:上下文压缩、Skills 渐进加载、按需挂载工具、缓存、及时清理上下文
190. OpenClaw 的文件目录结构是怎样的?
-
大致:配置文件(模型 / 权限 / MCP 配置)+ skills/(每个技能一个目录,含 SKILL.md、scripts/、references/、assets/)+ markdown 记忆文件 + 项目指令文件
-
优先级:项目级放仓库目录、用户级放 home 目录、内置打包在代码里
-
(以实际使用版本为准,作答时结合自己跑过的目录讲)
191. Coze、n8n 和 OpenClaw 的区别在哪里?
-
Coze:字节的低代码 Agent / Bot 搭建平台,可视化、偏 SaaS,上手快但灵活性 / 可控性有限
-
n8n:通用工作流自动化(iPaaS),节点编排、确定性流程,不以 LLM 自主决策为核心
-
OpenClaw:代码级、开源,以 LLM 自主决策 + Skills / MCP 生态为核心,更灵活、可自托管,但更吃工程能力和 token
-
一句话:n8n 是"固定工作流",Coze 是"低代码搭 Bot",OpenClaw 是"开源自主 Agent"
MewCode 项目学习
目录
- 初识 Coding Agent
- 让 AI 开口说话
- 工具系统
- 让 Agent 自己干活
- System Prompt 设计
- 权限系统 —— 给 Agent 装上安全刹车
- MCP 协议 —— 开放式工具生态
- 上下文管理 —— 当 Token 开始烧钱
- 记忆系统 —— 跨会话的 Agent 记忆
- Slash Command —— 内置命令框架
- Skill 系统 —— 可复用的技能包
- Hook 系统 —— 生命周期钩子与自动化
- SubAgent —— 子 Agent 与任务分发
- Worktree —— Git 工作树并行开发
- Agent Teams —— 从一次性子任务到长期协作团队
- 回顾与展望 —— 从一个空壳到一支团队
1. 初识 Coding Agent
- 用户:通过自然语言下命令
2. 让 AI 开口说话
- 做什么:完成模型接入,让 CLI 能接收用户输入、调用大模型并流式展示回复。
- 怎么实现:抽象统一的模型 Provider 和消息结构,处理鉴权、模型配置、流式事件、错误与重试。
- 关键设计 / 取舍:统一接口与厂商特性的平衡;流式输出与非流式输出的差异;配置和密钥如何安全管理。
- 面试追问点:一次模型请求由哪些消息组成?流式响应如何拼接?如何适配不同模型服务?网络异常和限流如何处理?
3. 工具系统
-
工具描述决定工具使用的质量:
- 例如:1. 做什么;2. 什么时候使用;3. 什么时候不该使用;4. 参数约束;5. 返回格式;6. 与其他工具如何配合。大文件可先用 Grep 定位,再用 ReadFile 读取指定范围。
-
工具接口设计不能只有名字和执行方法:
- 用 JSON Schema 描述参数,让模型能够稳定地产生结构化调用。
- 执行结果和错误都要结构化返回,因为错误也是 Agent 后续决策的有效信息。
- 抽取通用基础实现,避免每个工具重复处理校验、超时、截断和日志。
- 不同语言中采用各自惯用的接口与错误处理模式。
-
工具注册中心:通过统一的
toAPIFormat()遍历所有启用工具,把名称、描述和入参 Schema 转换成模型 API 所需格式;同时负责工具查找、启停和执行分发。
4. 让 Agent 自己干活
-
Function Calling:告诉模型怎么来调用工具
- 告诉模型有哪些工具:通过
tools参数来告诉模型工具的列表(每个工具有名字、描述、参数格式) - 模型决定调用工具
role:assistant:他会在回复里输出一个结构化的请求,想调哪些工具,参数有哪些——tool_use - 进行工具的执行
role:user,把结果告诉模型:tool_use->tool_result返回给模型 - 模型继续
- 告诉模型有哪些工具:通过
-
Agent Loop:用户输入 → 模型决策 → 执行一个或多个工具 → 将
tool_result回填消息历史 → 模型继续判断,直到输出最终答案。 -
循环终止条件:模型不再请求工具、达到最大轮数、用户取消、出现不可恢复错误,或权限系统拒绝关键操作。
-
关键设计 / 取舍:并行工具调用的收益与冲突风险;工具结果顺序和
tool_use_id配对;如何避免死循环与重复调用。 -
面试追问点:完整的一轮 Agent Loop 怎么走?模型为什么知道该调用哪个工具?多个工具能否并行?如何处理中断、超时和失败?
5. System Prompt 设计
- 做什么:
- 怎么实现:
- 关键设计 / 取舍:
- 面试追问点:
6. 权限系统 —— 给 Agent 装上安全刹车
- 做什么:
- 怎么实现:
- 关键设计 / 取舍:
- 面试追问点:
7. MCP 协议 —— 开放式工具生态
-
由哪些部分构成:
-
运行时的角色
- Host: 真正的AI应用本体
- Client: Host里的一个连接组件,负责和某一个Server建立连接、发送请求、接收相应。可声明支持的能力
- Root: 告诉Server当前项目的工作目录
- Stampling 允许Server反过来请求Host调用LLM
- Elicitation:允许Server请求Host追问用户额外信息
- Server: 对外暴露能力的程序,有可能在本地or远程
-
协议层
-
Data Layer层:定义消息长什么样,怎么列工具、调用工具等等——JSON-RPC 2.0
- Request: Client->Server
id,method,params - Response: Server->Client
id,result,error - Notification: 通知不需要响应
method
- Request: Client->Server
-
Transport Layer:定义消息怎么在两边传过去
- stdio: 项目启动一个子进程来运行MCP Server。然后通过这个子进程的stdin和stdout的管道来通信,消息是UTF-8编码的JSON-RPC消息
- stdout:读取相应 JSON-RPC 推送给Host
- stderr:调式日志,不参与协议。负责调试与排查
- Streamable HTTP: 依靠HTTP请求post给远程Server,然后Server返回json相应
- Accept声明:
application/json,text/event-stream
- Accept声明:
- stdio: 项目启动一个子进程来运行MCP Server。然后通过这个子进程的stdin和stdout的管道来通信,消息是UTF-8编码的JSON-RPC消息
-
-
-
MCP双方提供什么东西
- Tools:暴露一组工具(名字、描述和参数的JSON Schema)。项目的工具在进程内执行,MCP的tool使用则是在外部工具中执行
- Resources:可读取的数据源:url/name/mimeType等。有点类似RAG中的上下文源
- Prompts:预定义提示词模板,是由工具定义方提供
-
一次完成的MCP会话
- 初始化握手:Client<->Server 请求和回应声明协议版本,支持的能力,身份的信息
- 工具发现:Client发送
tools/list请求,获取Server提供的所有工具定义 - 工具调用:Client决定使用某个MCP工具时,Client发送
tools/call请求
-
项目的具体做法
- 请求——响应的异步:使用map来管理等待中的请求,id号进行匹配
- 工具包装:适配器模式,MCP工具包装成Tool接口(设计模式)
- Host可以连接Server列表:用户配置。yaml中(项目级/用户级)
- 完整流程
-
- 启动:读取配置文件获取MCP Server列表
- 2.选择Transport 根据Server配置
- 3.后台连接:启动时异步连接所有配置的Server
- 4.初始化:发送initialize+notifications
- 5.工具发现:tools/list
- 6.包装注册:MCPToolWrapper,注册到ToolRegistry,也就是适配器模式
- 7.Agent使用:Agent决定是否调用MCP工具
- 8.工具调用:Agent调用->MCPToolWrapper.execute->MCP Client->MCP Server
- 9.结果返回: MCP Server返回结果->MCPToolWrapper转换->Agent处理
-
- 工具延迟加载:
- 1.MCP工具注册时标记自己为延迟工具
MCPToolWrapper.ShouldDefer() = true - 2.Agent Loop每轮生成工具列表时跳过延迟工具的完整schema,只列名字
- 3.模型看到名字列表,先调用ToolSearch拉取完整的定义
- 4.在客户端的Registry里找到工具,返回完整schema,标记为已发现
- 1.MCP工具注册时标记自己为延迟工具
8. 上下文管理 —— 当 Token 开始烧钱
目的:让Agent在有限的Token窗口里长时间工作
-
两层压缩(自动)
-
大结果落盘:原因(工具结果超阈值)预防
-
单个结果超出阈值50KB:完整结果写磁盘文件,对话历史放预览+文件路径,ReadFile读取该文件即可
-
每条消息的聚合限制:每个工具都是40k,加起来超过了200k。超过聚合限制的最大结果集已被存盘,剩余结果合计大小低于限制200k
-
幂等写入:文件名
tool_use_id,而且用wx模式写入(文件已存在则跳过) 防止每一轮重写同样的文件 -
Prompt Cache
-
原理:新一轮请求的消息列表前缀和前一轮完全一样,api可以跳过前缀部分的处理。cache持续命中,则处理增量,如果cache反复失效,每轮都要重新处理几万甚至十几万token前缀
-
决策冻结(项目做法):系统维护一个ContentReplacementState,记录每个tool_use_id的替换决策。
seenIds,replacements- 已替换过的:缓存的预览字符串原样重放
- 已决定不替换的:永远保留原文,不再评估
- 正常评估是否需要替换,做出决策后冻结
-
-
-
全量压缩 兜底
-
触发时机:第一层落盘不够用了,上下文仍然接近爆炸,调用LLM自己来生成一份对话摘要,替换旧消息 依旧20k对话历史+13k预留空间
-
为什么是写死固定值13k:
- 因为ReadFile工具读取的内容都是那么大,buffer要防止的风险是下一轮突然多了一个大工具结果,这个风险取决于单次工具结果有多大,和总窗口无关
- 防止两次检查之间一个意外偏大的工具结果出现把上下文撑爆
-
预留的20k给摘要输出
- 9个的结构化部分
-
摘要Prompt设计
-
-
-
手动/compat
9. 记忆系统 —— 跨会话的 Agent 记忆
-
工作记忆:200k token就是Agent的大脑带宽,当前正在处理的所有信息总和
-
长期记忆:对应到所有持久化到磁盘的信息
-
会话持久化:和Agent的每次对话
- 存储格式:JSONL格式(
role,content,timespan)。好处:追加写入、奔溃安全、增量加载 - 文件组织:
.minicoder/sessions/yyyymmdd-hhmmss-xxxx后缀随机防止冲突 - 会话管理器:一个
SessionManager进行管理,他维护.minicoder/sessions/目录,提供所有会话操作的入口,进行会话的创建、恢复、列表、删除- 恢复会话:
- 逐行解析JSONL:逐行读取,遇到解析失败则跳过
- 验证消息链完整性:JSONL文件可能因为崩溃而截断。所以需要追踪未完成的工具调用-
tool_result - 检查
token量,如果恢复的会话很长,token量可能已经超过压缩阈值,进行压缩 - 插入时间跨度prompt: 上次会话是什么时候,中间可能有代码变更,建议重新读取相关文件
- 过期会话清理:sessions目录会堆积大量的旧会话文件。超过30天没有活跃的会话,在启动时会自动清理。会话列表按照最后活跃时间倒序排列
- 恢复会话:
- 存储格式:JSONL格式(
-
项目指令文件:预先写好的项目知识和编码规范,
-
优先级排列:项目级->.minicoder级别->用户级 。流程:检查文件->—分割线拼接->system-reminder注入到messages中
-
@include:如果所有指令都在minicoder.md中会变得很臃肿,比如一个微服务项目,每个服务的编码规范可能不一样,让他可以在minicoder.md中引入其他文件的内容
-
-
自动记忆:Agent在对话中自动累计的经验
- 用户偏好:用户的编码习惯和风格要求
- 纠正反馈:用户明确指出的反馈
- 项目知识:当前项目的具体技术信息
- 参考信息:外部链接和资料(API文档等)
-
10. Slash Command —— 内置命令框架
- 做什么:
- 怎么实现:
- 关键设计 / 取舍:
- 面试追问点:
11. Skill 系统 —— 可复用的技能包
-
是什么: 写给Agent的SOP(标准操作流程)
-
面试回答:最上层的能力封装——打包的是「知识和工作流」,本身不是工具,而是告诉模型「该用哪些工具、按什么步骤做」,按需加载
-
Anthropic的定义:【把专家经验、操作流程和最佳实践打包成可复用的能力】
-
特点:一致性(行为一致)、知识固化(定下的规范)、跨平台复用
-
和Slash Command
-
相同点:都是把一端固定的Prompt模板交给Agent来执行,而且prompt经过精心设计后质量会更加稳定
-
skill:把prompt从源码搬进独立的markdown文件,任何用户都能新增和修改
-
Skill自动注册成命令:遍历所有的skill,在Slash中心新建一个【PROMPT】类型指令,命令名取frontmatter里的
name,描述取description+【skill】
-
-
-
Skill设计
-
Md文件:yaml方便解析结构化数据。LLM可以直接理解prompt body。方便更改和新增
-
FrontMatter中的字段:name、description、allowedTools、model、mode(inline or fork)、content(full/recent/none)
-
分级:项目级(.minicoder/skills),用户级(~/.minicoder/skills)
-
-
inline/fork:
-
inline:默认的模式:skill的prompt注入到当前对话中。和之前的消息一样走Agent Loop
-
fork:隔离上下文进行执行,不影响也不受当前对话影响。执行完后只把结果摘要返回到主对话。适合/review
-
-
ARGUMENTS:让Skill接受用户参数
-
-
Agent选择Skill流程
-
两阶段加载
-
轻量注册:启动时只加载每个Skill的frontmatter(name、description),不加载完整的prompt body和专属工具。放在system prompt里,可以放到prompt cache的稳定前缀区,但每轮要多带一段token
-
按需加载:判断匹配上的Skill时,调用LoadSkill工具,把Skill.md的完整prompt body激活到Agent的环境上下文。加载tool.json里申明的专属工具并注册到当前会话
-
-
目录Skill:支持意图识别和专属工具的Skill。多一个
tool.json文件(注册工具)。具备一个好处(整套能力的打包移植:单元,sop,工具schema,工具实现代码,长文档参考,辅助脚本等) -
完整流程:
- 启动:扫描skill目录,加载所有的Skill的frontmatter轻量
- 注入messages:告诉Agent有哪些Skill可用(name+description)
- 注册命令:注册为Slash Command,支持/commit显式调用
- 用户输入
- 意图识别:Agent判断匹配 skill
- Agent调用loadSkill
- 完整SKILL.md+工具加载到user message动态上下文之前
- 执行
-
-
三个内置的skill:资源嵌入机制编译进二进制,跟MewCode一起进行分发
- commit:分析diff生成规范提交
- review:在隔离上下文做客观审查
- test:负责测试并分析结果
12. Hook 系统 —— 生命周期钩子与自动化
- 做什么:
- 怎么实现:
- 关键设计 / 取舍:
- 面试追问点:
13. SubAgent —— 子 Agent 与任务分发
- 做什么:
- 怎么实现:
- 关键设计 / 取舍:
- 面试追问点:
14. Worktree —— Git 工作树并行开发
- 做什么:
- 怎么实现:
- 关键设计 / 取舍:
- 面试追问点:
15. Agent Teams —— 从一次性子任务到长期协作团队
- 做什么:
- 怎么实现:
- 关键设计 / 取舍:
- 面试追问点:
16. 回顾与展望 —— 从一个空壳到一支团队
- 做什么:回顾 MewCode 从模型对话、工具调用到多 Agent 协作的完整演进路径,总结当前能力边界。
- 怎么实现:串联各子系统的数据流和控制流,形成端到端架构视图,并用真实任务复盘系统如何协同工作。
- 关键设计 / 取舍:功能复杂度、可靠性、成本和用户控制权之间如何平衡;哪些设计已稳定,哪些仍需实验验证。
- 面试追问点:项目中最难的问题是什么?做过哪些重构?目前最大的局限是什么?下一步会如何改进和评估?