我之前面试了一家做 AI + web3 业内比较厉害的公司,但是没有通过吧,面试之后面试官给我了一份《Agent工程师入门指南》。我把它整理了一下,分享出来给大家提供参考,这是一份很详细很详细的、关于如何成为 Agent 工程师的文档,并且补充上我自己的学习心得
当时给我的答复是 我的工程能力不太行,AI 这一块是没有什么太大的问题的 可能计算机基础的一些东西吧 在那之后 我也去恶补了很多 MySQL、计算机网络那些八股文吧
所以我觉得这份材料比较有参考价值的地方,是它把知识点、学习文档、项目要求和验收标准放到了一起
你可以顺着它去学 LLM 基础、Prompt Engineering、RAG、Agent 应用和后端工程,也可以对照看看,自己目前还缺哪一块
我把技术内容重新整理成了下面这条路线,对应的学习文档就放在每个知识点下面,读到哪里,就可以点进去继续学
这些链接用于学习参考,每个知识点也都可以结合 AI 继续追问、做实验,再回到文档和实际结果里核对
知识点和项目要求来自这份材料,里面的例子和入门取舍,是我补充的理解
这里讨论的是 AI 应用开发方向:围绕已有模型,把检索、工具、上下文和业务系统接起来,让 Agent 能完成具体任务
读的时候,可以带着一个问题:这一部分学完之后,我能做出什么,又该怎么验证自己确实学会了?
LLM 基础:先把一次模型调用看明白
这部分是后面所有内容的底座
需要了解 Transformer、预训练、指令微调、RLHF / RLAIF,以及模型怎样生成内容
这里的自回归生成,对应 Next Token Prediction,也就是根据已有内容继续预测下一个 Token;上下文学习对应 In-Context Learning,要理解模型怎样利用当前给到的指令、资料和示例完成任务
对应用开发来说,先建立基本认识,再把精力放到调用过程中真正影响系统行为的几个问题上
这部分可以看 图解 Transformer,先理解注意力机制、模型结构和生成过程,再逐步补训练与对齐的基础
Token 和上下文窗口,决定了模型这一轮能看到多少信息
要理解 Tokenization,也就是文本怎样切分成 Token,再分清输入 Token、输出 Token、Context Window、最大输入长度和最大输出长度,也要知道 Token 与汉字、单词之间没有固定的一一对应关系
你放进去的 System Prompt、历史消息、工具说明和检索资料,都要占用输入空间,还需要按照模型的限制给生成结果留出余量
还要处理上下文溢出:请求超过模型允许的范围时,是裁剪历史、压缩资料,还是调整输入,要有明确的处理方式
上下文很长,也不代表每条信息都能被同样有效地利用,原文特别提到了 Lost in the Middle,也就是重要信息放在长上下文中间时可能不容易被模型利用的问题
所以后面学习上下文裁剪、摘要和压缩时,要知道自己在解决什么
可以看 Token 与计数文档,学习文本怎样切成 Token,以及输入、输出和上下文限制之间的关系
采样参数,需要知道作用和适用边界
Temperature、Top-p、Top-k、Frequency Penalty、Presence Penalty、Seed、Stop Sequences,原文都列了出来
学习时关注它们怎样影响采样范围、重复倾向和输出终止,再查具体模型与供应商支持哪些参数
这一块要理解确定性、创造性、重复控制和输出终止之间的取舍,Seed 也需要结合具体实现理解,不能直接当成结果完全一致的承诺
不要把这份参数清单当成所有 API 都支持的统一接口,也不要把低 Temperature 当成答案正确性的保证
参数含义可以参考 vLLM SamplingParams 文档,这是材料引用的 v0.6.4 版本,实际调用时还要对照你所用模型的接口说明
模型类型和 API 协议,要分开理解
普通 Chat Model、Reasoning Model、多模态模型、Embedding Model、Rerank Model、语音与实时模型,各自承担的任务不同
Embedding 用来把内容表示成向量,Rerank 用来给候选内容重新排序,它们在应用中的位置与生成回答的模型不同
接口层面,原文要求理解 Chat Completions、Responses、Messages 这些 API 的基本抽象
至少要看懂 message、role、content,以及 system、user、assistant、tool 这些角色各自的职责,知道指令、用户输入、模型回复和工具结果分别怎样进入请求
还要读懂模型选择、工具定义、工具选择策略、结构化输出设置、stream、usage 和响应结束原因这些信息,字段名称与事件结构以所用 API 为准
对应到字段,要能认识 model、messages / input、instructions / system prompt、tools、tool_choice、response_format、stream、usage、finish_reason,换一种协议时也能找到对应的信息
这部分可以对照着看 Chat Completions、Responses 和 Claude Messages,比较它们怎样组织请求和响应;响应为什么结束,可以看 Claude Stop Reasons
实际创建请求时,还可以单独看 Responses Create 接口,逐项核对请求参数和返回结构
流式输出,需要处理完整的事件过程
理解 SSE、event stream、delta 和增量文本,也要处理工具参数逐步到达、连接中断、用户取消和响应未完成的情况
前端出现打字机效果,只是这条链路最容易看见的一部分
可以看 OpenAI 流式响应 和 Claude Streaming,学习怎样接收增量事件、拼接内容和判断响应是否完成
需要查具体事件类型时,可以看 Responses Streaming 事件参考
结构化输出,要让程序能稳定接住结果
JSON Mode 主要解决 JSON 格式问题,按 Schema 约束的 Structured Outputs 进一步限定字段、类型和结构
但结构符合要求,不代表字段里的事实与业务判断就一定正确,应用仍要处理拒绝、截断、校验失败以及必要的修复或重试
可以看 JSON Schema 基础 和 Structured Outputs,学习字段类型、必填项、枚举、嵌套对象,以及怎样约束模型的输出结构
材料还附了 Structured Outputs 的介绍文章,可以用来理解这项能力最初要解决什么问题,具体使用以当前文档为准
工具调用,要弄明白模型和业务系统各自做什么
Function Calling 则要把模型请求调用工具和工具真正执行区分开
以自己实现的查询工具为例,你提供工具描述和参数 Schema,模型生成调用请求,业务系统校验并执行,再把结果返回给模型,模型继续回答或请求下一次调用
tool_call_id、参数、tool result 和错误返回都需要正确对应,否则模型可能拿不到结果,或者把结果关联到错误的调用上,还要理解并行工具调用怎样分别返回结果
可以看 OpenAI Function Calling 和 Claude Tool Use,跟着文档走完工具定义、调用请求、实际执行和结果返回的完整过程
多轮会话,要知道历史信息怎样传进下一轮
会话连续性需要由系统管理,既可以自己维护历史,也可以使用供应商提供的状态管理接口,采用哪种方式都要搞清楚实际传入了哪些信息
独立的生成请求通常不会自动继承你在应用里的聊天记录,需要管理历史消息、摘要、短期记忆、长期记忆、上下文压缩和会话状态,再根据接口约定传入需要的信息
可以看 会话状态文档,学习怎样组织多轮消息,以及怎样继续之前的对话
材料还附了 Claude 对话中途的系统消息与工具变更,可以进一步学习会话过程中指令与工具怎样变化,具体支持条件要对照文档
Embedding,先理解文本怎样变成向量
这一块要了解文本向量、语义相似度、向量维度、归一化、Cosine / Dot Product / L2、Embedding 模型选型、批量生成与向量缓存,后面做 RAG 时还会用到
可以看 Embedding 文档,先跑通文本向量生成和相似度计算,再带着问题去学检索
这部分学完,可以做一个 大模型 API Playground,把上面的能力放到同一个小应用里
做一个能支持普通对话、流式响应、结构化输出、工具调用,以及 Embedding 生成和相似度计算的小应用
每次调用记录模型、输入、输出、Token 用量和耗时,并对比至少两个模型或两个供应商的 API 差异
验收时,要能解释一次请求到响应的全过程,清楚说明 message、role、tool call、tool result、stream、usage 的含义,演示完整工具调用,也要演示结构化输出失败后怎样处理
仓库里留下 README、运行说明、示例请求和测试用例,这一步做扎实,后面会少很多“框架跑起来了,但不知道里面发生了什么”的困惑
Prompt Engineering:把任务、材料和验收要求说清楚
这玩意儿老生常谈了 但还是挺重要的
Prompt Engineering 没有单独安排一个项目,而是贯穿后面所有项目
我觉得这个安排挺实用的,因为 Prompt 的效果需要放到具体任务里验证
先掌握最基本的组成:角色与职责、任务描述、上下文、输入数据、输出格式和约束条件,对应 Role / System Prompt、Instruction、Context、Input、Output Format、Constraints
比如做知识库助手,需要说明回答依赖什么资料,资料不足时怎么办,引用怎样呈现,哪些请求超出了系统的职责
可以看 OpenAI Prompt Engineering 和 Claude 提示词指南,学习怎样组织指令、上下文和约束,再结合自己的项目去写
Zero-shot 是不给示例直接完成任务,Few-shot 则通过少量示例表达分类标准、格式或者风格
当模型反复误解某个边界时,一组贴近真实任务的例子,往往比继续往提示词里堆形容词更方便验证
Few-shot 可以看 这篇学习材料,了解怎样通过示例表达任务标准和输出格式
接下来可以了解 CoT、ReAct、Self-Critique / Reflexion 这几种组织任务的思路
CoT 关注怎样拆解问题、逐步推理、先分析后回答,可以用在复杂推理、判断和规划类任务中,再通过测试验证是否有帮助,可以看 CoT 学习材料
ReAct 对应 Reasoning + Acting,关注怎样决定是否调用工具、观察工具结果,再结合反馈推进任务,可以看 ReAct 学习材料,后面理解 Agent Loop 时,可以把两部分联系起来
Self-Critique / Reflexion 关注怎样检查、反思和修正已有结果,代码生成、报告生成和复杂任务复核都可以拿来练习,可以看 Reflexion 学习材料
这里补一个使用边界:针对一些推理模型,强行加上“请一步一步思考”未必有收益
这一点可以对照 推理模型提示建议 来看,别把同一种提示方式套到所有模型上
按任务提供清晰目标、必要材料和验收条件,再通过测试判断是否需要示例或拆解流程,会更稳妥
模型自查之后也要有外部依据,例如测试结果、引用证据、字段校验或人工复核,不能只凭它说“检查完成”就认定结果正确
这部分的实践要求很具体:每个项目至少记录 3 个 Prompt 修改前后的效果对比
README 里说明用了哪些结构,为什么这样设置 System Prompt 和约束,是否用了 Few-shot,怎样控制格式,以及怎样处理不确定回答、越界回答和格式错误
比较时尽量使用同一组输入,记录改善了哪些问题、有没有引入新的失败,再决定是否保留这次修改
RAG:把资料变成可检索、可引用的证据
当应用需要使用私有文档、持续更新的资料或特定领域知识时,就会遇到 RAG
它把外部资料检索出来,放进这一轮模型能看到的上下文,为回答提供依据
学习时顺着完整链路走:文档加载与解析、分块、Embedding、索引、召回、重排、上下文组织、回答生成、引用溯源和效果评估
解析和分块,会直接影响后面的检索
PDF、Word、HTML、Markdown、代码、表格、图片 OCR 和多模态文档解析,都在这一块的学习范围里,不能默认按同一种方式处理
一张表被解析得行列错位,一个章节标题丢失,或者一段代码被切断,检索到内容之后也可能难以正确使用
可以看 LlamaIndex 文档加载,学习不同来源的资料怎样进入检索系统
分块需要了解固定长度、递归分块、语义分块、按 Markdown / Code 结构分块、父子分块,以及滑动窗口和 overlap
可以拿自己的资料测试:块太小会不会丢上下文,块太大会不会混进太多无关内容,重复部分带来了多少额外成本
分块可以看 Pinecone 分块策略 和 LlamaIndex 节点解析,结合资料结构选择切分方式
检索要同时考虑语义、关键词和元数据
向量检索需要结合 Embedding 模型选型、向量维度、归一化、Cosine / Dot Product / L2 来理解,再掌握 Top-K、相似度阈值和向量缓存
这一块可以接着看 Embedding 文档,把向量生成与相似度计算衔接到实际检索中
向量库方面,原文列了 FAISS、Milvus、Qdrant、Weaviate、Chroma、Pinecone、pgvector、Redis Stack,也列了 FLAT、IVF、HNSW、PQ 等索引方式
入门时可以先选一种,把写入、更新、检索和删除跑通,再根据数据量、延迟和召回效果学习索引取舍
可以看 向量数据库学习材料,理解向量存储和索引在系统中负责什么
遇到产品型号、报错码、专有名词等问题,还要考虑 BM25 等关键词检索,与向量检索做混合召回,再了解 RRF、多查询改写这些融合与扩展方式
可以看 Hybrid Search,学习关键词检索和向量检索怎样组合
标题、章节、来源、时间戳、文档版本和用户权限也要作为元数据抽取和管理,尤其是权限过滤,应该由系统执行
还要理解先过滤后检索、先检索后过滤的取舍,既考虑召回效果,也要保证未经授权的资料不会进入模型上下文或返回给用户
元数据可以看 LlamaIndex Metadata Extraction,学习怎样为文档片段补充可检索、可追踪的信息
Rerank 则是在召回候选内容之后,进一步判断哪些片段更贴近当前问题,这里要了解 Bi-Encoder、Cross-Encoder,以及粗排加精排的二阶段检索思路
材料列出的具体例子有 bge-reranker、Cohere Rerank、Jina Rerank,可以在理解流程之后,再比较适合自己任务的实现
可以看 Cohere Reranking,学习怎样把候选片段重新排序,再选择进入生成阶段的内容
生成回答时,要让引用和拒答都有依据
检索到资料后,还要决定放哪些片段、怎样排序、是否压缩,以及怎样把引用对应回原始位置
这里也要考虑 Lost in the Middle,避免关键证据在长上下文里被忽略,并明确要求回答依据检索内容,减少没有来源支撑的扩展
资料没有覆盖的问题,应该明确表示证据不足,检索出来的内容也可能过时、冲突或不相关
RAG 能为回答补充依据,但仍然可能答错,需要分别检查检索效果和生成效果
可以看 RAG 完整流程,把检索、上下文组织和生成回答这几步联系起来理解
评估时要看检索准确率、召回率、答案忠实度、上下文相关性和幻觉率,并用测试集持续验证
可以看 Ragas 文档,学习怎样建立评估流程,再根据自己的任务选择指标
Query Rewrite、HyDE、Self-Query、Agentic RAG、GraphRAG 属于后面的进阶内容,先在基础版本里找到具体失败,再判断是否需要引入
这些内容对应复杂查询、跨文档推理和多轮检索等问题,基础流程跑通后,还要逐项了解它们怎样改变检索链路
GraphRAG 可以看 官方项目,带着“它能解决我哪类检索问题”去读,会更容易判断是否需要使用
这一阶段的项目是 RAG + Tool Calling Agent
支持上传或导入 Markdown / PDF,完成切分、Embedding 和向量检索,回答能引用来源,在资料不足时拒答
至少实现 2 个工具,例如网页搜索、计算器、文件查询或时间查询,由 Agent 根据问题决定是否检索、是否调用工具
还要记录每一步的 reasoning 摘要、工具请求、实际返回和最终结果,方便复盘;这里的摘要用于解释任务进展,不把它当成模型内部推理的完整记录
按照这份材料的要求,还要准备 不少于 20 条测试问题
我的建议是覆盖直接能查到的、需要跨文档查找的、需要工具计算的、资料里没有答案的,以及工具失败的情况
验收时能讲清 RAG 链路、模型工具调用与普通函数调用的区别,并提供检索结果、回答质量和失败案例分析
Agent 应用:理解循环,再补齐状态、上下文与边界
到这里,再来看 Agent,就能把前面几部分接起来了
这一块要理解 Prompt、RAG、工具调用、工作流、状态管理、记忆、评估和安全怎样组合,不管用什么框架,都需要能解释这些核心能力的关系
先做一个容易理解的划分:Chatbot 偏对话,Workflow 偏预先确定的流程,Agent 偏根据任务和反馈动态决定下一步
这不是所有产品都严格遵守的分类,但对学习架构很有帮助
固定流程有清晰的代码路径,Agent 则让模型动态决定执行过程和工具使用,具体选择取决于任务是否需要这种灵活性
可以看 Anthropic 的 Building Effective Agents,学习两者的架构区别,也看看什么情况下一个简单流程就已经够用
材料中的概念入门还可以看 Agent 白皮书中文译文,这是翻译材料,适合辅助理解
Agent Loop,先追踪一次完整任务
Agent 的核心循环可以先记成一句话:模型提出下一步,系统执行并返回结果,模型根据新结果继续推进,直到完成任务或触发停止条件
可以看 Agent Loop 文档,学习模型调用、工具执行和结果反馈怎样连成循环
补充:也可以用 Pi 理解 Agent Loop 和 Harness
这里我想再补充一个工具:Pi
我自己在学习的过程中觉得,如果你想理解 Agent 是怎么运行的,可以从 Pi 的 Agent Loop 入手,把它作为一个学习 Agent Loop 和 Harness 的工具,因为 Pi 的harness是最极简的,也是最容易理解和上手的
可以看看我之前写的一些帖子还有看看 @xiaomovps 的帖子