做了一段时间 Agent 开发,又花了大量时间把市面上主流的 Agent 开源项目和课程翻了一遍,一个最直接的感受是:Agent 开发的学习资料不缺,缺的是能让人按顺序练完、练完就能写进简历、贴近真实业务需求的项目清单。
很多人一上来就追着 AutoGPT、MetaGPT 这些大火项目跑 demo,跑完只知道“能自动写代码”,但对 Agent 的核心机制——记忆、工具调用、规划、多 Agent 协作——没有任何掌控力。面试时被问一句“你的 Agent 怎么管理上下文窗口”,直接卡壳。
这篇文章整理了一份15 个 Agent 实战项目清单,从最容易上手的 Prompt 封装开始,一直做到可以部署到生产环境的企业级 Agent 应用。每个项目都标注了涉及的知识点、技术栈、推荐实现思路,以及做完之后能写在简历里的语言表达。整个清单覆盖了 Agent 开发的主流链路:基础 Prompt 工程、Function Calling、RAG、工作流、多 Agent 协作、记忆机制、框架封装。
如果你正打算系统学习 Agent 开发,或者已经学了一些基础但不知道下一步做什么,按这个清单逐个做完,你对 Agent 的理解会有一个质的提升。
1. Agent 开发前先搞清楚这 3 个概念
很多人在学习 Agent 开发时,第一个卡住的地方不是代码,而是概念。
拿到一个需求,先得判断:这到底应该用传统程序解决,还是用 LLM 加提示词解决,还是真正需要一套 Agent 架构?
1.1 Agent、LLM 和传统程序的区别
先给三者的边界做个简单区分:
- LLM(大语言模型):它是一个“大脑”,擅长文本理解、生成、推理,但它本身不会主动调用工具,也不知道你的业务系统中有什么接口。
- 传统程序:它是一个“手脚”,擅长执行确定性的逻辑,比如读取数据库、调用第三方 API、定时任务、规则引擎。但它不能理解自然语言,也不能在未知场景下做推理。
- Agent(智能体):可以简单理解为LLM + 工具 + 记忆 + 规划循环。Agent 使用 LLM 作为决策核心,根据用户目标自己决定调用哪些工具、按什么顺序调用、如何处理中间结果,直到完成目标。
用一句话概括:
传统程序是“我给你什么,你就执行什么”;Agent 是“我给你一个目标,你来决定怎么执行”。
1.2 Agent 的四个核心组成模块
无论你用哪种框架,Agent 的核心组件基本都是这四块:
| 组成模块 | 作用 | 常见实现 |
|---|---|---|
| 规划(Planning) | 把大目标拆解成子任务,并决定执行顺序 | ReAct、Plan-and-Execute、思维链(CoT) |
| 工具(Tools) | 让 Agent 能调用外部系统,比如搜索、数据库、API | Function Calling、工具注册表 |
| 记忆(Memory) | 保存对话历史、关键信息、长期偏好 | 短期对话记忆、长期向量记忆 |
| 行动(Action) | 执行规划好的任务,并观察结果 | 代码执行、API 调用、文件读写 |
需要注意,这四个模块并不是每次都需要全部用上。很多入门级 Agent 项目只需要“LLM + 少量工具”就够了,硬塞一个规划器反而会增加复杂度和不稳定性。
1.3 为什么要用专门的项目来练手
观察过很多人的学习路径,最容易踩的坑是:只跟着教程跑框架 demo,不自己设计需求。
框架 demo 往往已经把每一步都封装好了,你按下回车看到输出,表面上“学会”了,实际上对内部机制还是黑的。比如 LangChain 的AgentExecutor,很多人用它跑通了 ReAct agent,但里面发生了什么?模型为什么选择这个工具?中间推理步骤为什么是那样?如果没人拆解,下次遇到国产大模型或者企业私有化部署场景,换了框架就不会做了。
所以实战项目的原则是:每一个项目都必须独立完成,不能只跑官方示例。你必须自己设计 Prompt、自己注册工具、自己处理报错,才能把技能变成自己的。
2. Agent 开发环境与学习路线规划
开始做项目之前,先把学习环境和整体路线规划好。这样后面十几个项目可以复用同一套环境,不用每次重来。
2.1 推荐的技术栈组合
做 Agent 开发,技术栈不需要像传统后端那样复杂,但有几样是必备的:
- 编程语言:首选 Python。Agent 生态里大部分框架、示例、教程都是 Python 写的。
- 大模型访问方式:需要一个可用的 LLM API 或本地模型服务。国内开发者常用的方案有 OpenAI 兼容接口的各类平台、DeepSeek、通义千问、智谱 GLM 等。建议在代码里统一使用兼容接口,这样切换模型时不用改业务代码。
- Agent 基础框架:从 LangChain 或 LlamaIndex 入门。前者生态全、工具多,后者在 RAG 场景下更友好。
- 服务化框架:学到中后期,需要把 Agent 封装成 HTTP 接口,建议掌握 FastAPI。
- 前端交互(可选):流式输出、聊天界面,可以用 Gradio 快速搭建,也可以用 Streamlit。
2.2 学习路线的四个阶段
结合 15 个项目,我把 Agent 学习路线规划为四个阶段:
- 基础理解阶段:搞清楚 LLM 的原理边界、Prompt 工程、上下文窗口限制。对应项目 1-3。
- 工具与 RAG 阶段:掌握 Function Calling、向量检索、文档加载切分。对应项目 4-7。
- 框架与系统设计阶段:学会用框架组织代码,理解 Agent 的规划、记忆、多智能体协作。对应项目 8-12。
- 工程化与就业冲刺阶段:做接近真实业务的项目,学会部署、日志、评估、性能优化。对应项目 13-15。
先明确一点:项目只是载体,知识点才是核心。下面逐个展开 15 个项目的具体做法。
3. 15 个 Agent 实战项目详解(从入门到进阶)
下面我按照从易到难的顺序,把 15 个项目完整拆开。每个项目都会说明:
- 项目目标
- 涉及知识点
- 实际业务场景
- 实现思路
- 简历语言
3.1 入门级项目(第 1-4 个):先动手,建立手感
前面四个项目不追求复杂的架构,核心目标是:让 LLM 在你规定的工作流里解决实际问题。
项目 1:基于 Prompt 的智能写作助手
- 项目目标:实现一个输入主题、输出结构化文章的写作助手。
- 涉及知识点:Prompt 模板设计、输出格式约束、角色设定。
- 业务场景:新媒体运营需要批量生成文章;学生需要基于大纲扩写内容;电商需要生成商品卖点文案。
实现思路:
- 设计一个大纲生成 Prompt,让模型先输出文章大纲;
- 把大纲拆成多个章节,逐章节生成内容;
- 最后对全文做一致性梳理和润色。
这里不用任何 Agent 框架,只用标准的 API 调用,但关键点在于设计好 Prompt 模板,保证输出格式稳定。
# -*- coding: utf-8 -*- """ 项目 1:基于 Prompt 的智能写作助手 设计一套稳定的 Prompt,让 LLM 输出结构化的文章 """ from openai import OpenAI client = OpenAI(base_url="https://YOUR_API_BASE", api_key="YOUR_API_KEY") def generate_outline(topic: str) -> str: prompt = f""" 你是一名资深的科技类文章编辑,擅长规划清晰的文章结构。 请为主题《{topic}》设计一份文章大纲,要求: 1. 包含 5-8 个章节标题,结构由浅入深; 2. 每个章节需要说明核心内容要点; 3. 最终只需要输出大纲,不要输出文章正文。 """ resp = client.chat.completions.create( model="gpt-4o-mini", # 按你的实际模型调整 messages=[{"role": "user", "content": prompt}], temperature=0.7, ) return resp.choices[0].message.content def generate_section(title: str, outline: str) -> str: prompt = f""" 你是一名技术写作者,请根据以下大纲,为《{title}》章节撰写正文。 要求:语言通顺,结合技术细节,字数控制在 500 字左右。 整体大纲: {outline} """ resp = client.chat.completions.create( model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}], temperature=0.8, ) return resp.choices[0].message.content if __name__ == "__main__": topic = "什么是 Agent" outline = generate_outline(topic) print("=== 大纲 ===") print(outline)这个项目做完后,你对 Prompt 模板、输出稳定性、上下文格式这些 Agent 的基础问题会有直观感受。
项目 2:智能客服问答机器人(单轮 + 多轮)
- 项目目标:基于知识文档,做一个能回答售前售后问题的问答机器人。
- 涉及知识点:对话历史管理、上下文窗口截断、系统提示词、意图判断。
- 业务场景:电商售前、售后、企业官网在线客服。
这个项目不引入向量数据库,先用简单的“关键词匹配 + 知识库文件搜索”来做。比如把常见问题整理到一个 Markdown 文件里,用正则或简单的字符串匹配定位相关内容,再把定位到的内容组装进 Prompt。
# -*- coding: utf-8 -*- """ 项目 2:智能客服问答机器人(多轮对话版) 先做基于关键词检索的版本,后续可以升级为 RAG """ import json from openai import OpenAI client = OpenAI(base_url="https://YOUR_API_BASE", api_key="YOUR_API_KEY") # 模拟一个存储对话历史的结构 conversation_history = [ {"role": "system", "content": "你是某电商平台的客服助手,回答要简洁友好。"} ] def simple_search(query: str): """简单关键词搜索,返回知识库中相关内容""" knowledge_base = [ {"keywords": ["退货", "退款"], "content": "退货政策:签收后7天内可申请无理由退货。"}, {"keywords": ["发货", "物流"], "content": "发货时间:付款后48小时内发货,节假日顺延。"}, {"keywords": ["发票"], "content": "发票说明:下单时可填写发票抬头,电子发票将在签收后7个工作日内发送。"}, ] for item in knowledge_base: if any(kw in query for kw in item["keywords"]): return item["content"] return "抱歉,这个问题我暂时无法回答,请转接人工客服。" def chat(user_input: str) -> str: # 1. 先在知识库中检索 knowledge = simple_search(user_input) # 2. 把检索结果注入用户消息 enriched_input = f"用户问题:{user_input}\n\n参考知识:{knowledge}" conversation_history.append({"role": "user", "content": enriched_input}) # 3. 调用 LLM 生成回答 resp = client.chat.completions.create( model="gpt-4o-mini", messages=conversation_history, ) answer = resp.choices[0].message.content conversation_history.append({"role": "assistant", "content": answer}) # 4. 控制历史长度,防止上下文溢出 keep_history = conversation_history[-10:] return answer if __name__ == "__main__": while True: user_input = input("你:") if user_input == "exit": break answer = chat(user_input) print(f"机器人:{answer}")这个项目做完,你会理解对话历史管理是 Agent 开发中非常基础但非常关键的能力。如果上下文无限累积,很快会把模型窗口撑爆。
项目 3:网页内容总结与提取 Agent
- 项目目标:输入一个网址,自动抓取网页正文,输出摘要和关键信息。
- 涉及知识点:HTTP 请求、HTML 解析、文本预处理、Prompt 总结。
- 业务场景:舆情监控、竞品分析、研究报告自动生成。
实现思路:
- 用
requests获取网页 HTML; - 用
BeautifulSoup提取正文,去掉 script、style、导航等干扰信息; - 对长文本做切分,分别总结,再合并成最终摘要。
这一步的关键是学会处理“脏数据”。网页内容是海量且杂乱的,Agent 无法直接处理原始 HTML,必须做数据清洗。很多真实项目卡住的地方不是模型不好,而是输入的数据质量太差。
项目 4:个人知识库助手(基于本地 Markdown 文件)
- 项目目标:读取本地笔记文档,实现“问一句、答一句”的知识库问答。
- 涉及知识点:文本分割、向量化、相似度检索、重排序(Ranking)。
- 业务场景:个人笔记管理、企业内部文档问答。
这个项目开始真正接触 RAG(检索增强生成)。你需要:
- 把 Markdown 文档按标题或段落切分成 chunk;
- 用 embedding 模型向量化每个 chunk;
- 用户提问时,向量化问题,做相似度检索;
- 把检索到的内容塞进 Prompt,让 LLM 基于这些内容回答。
# -*- coding: utf-8 -*- """ 项目 4:个人知识库助手 - RAG 最小实现 使用 chromadb 做向量存储,使用简单的相似度检索 """ from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_community.embeddings import OpenAIEmbeddings from langchain_community.vectorstores import Chroma # 1. 读取文档 with open("my_notes.md", encoding="utf-8") as f: content = f.read() # 2. 切分文本 splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50, ) chunks = splitter.split_text(content) # 3. 向量化并存储 embeddings = OpenAIEmbeddings() vectorstore = Chroma.from_texts( texts=chunks, embedding=embeddings, persist_directory="./chroma_db", ) # 4. 检索 query = "如何配置数据库连接?" results = vectorstore.similarity_search(query, k=3) for i, doc in enumerate(results): print(f"--- 结果 {i+1} ---") print(doc.page_content)这个项目可以作为 RAG 入门的里程碑。做完后,你应该能理解:RAG 的核心不是“向量搜索”,而是“检索质量决定回答质量”。
3.2 进阶级项目(第 5-9 个):掌握 Agent 的核心技能
前面四个项目,整体上还是“单次问答 + 固定流程”的模式。从第五个项目开始,我们引入“Agent 自己决策”的概念。
项目 5:Function Calling 实战——天气查询 + 日程管理 Agent
- 项目目标:让 Agent 根据用户意图调用不同的函数,比如查天气、添加日程、读日历。
- 涉及知识点:Function Calling、工具函数定义、参数解析。
- 业务场景:语音助手、办公自动化助手。
核心思路:
给 LLM 暴露几个 JSON Schema 格式的工具描述,让模型判断该调用哪个工具,并返回结构化的参数。
# -*- coding: utf-8 -*- """ 项目 5:工具调用 Agent 最小实现 """ import json from openai import OpenAI client = OpenAI(base_url="https://YOUR_API_BASE", api_key="YOUR_API_KEY") # 定义工具 tools = [ { "type": "function", "function": { "name": "get_weather", "description": "查询指定城市的当前天气", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "城市名称,例如 北京、上海、广州" } }, "required": ["city"] } } }, { "type": "function", "function": { "name": "add_schedule", "description": "添加一条日程安排", "parameters": { "type": "object", "properties": { "time": { "type": "string", "description": "日程时间,格式 YYYY-MM-DD HH:MM" }, "event": { "type": "string", "description": "日程内容" } }, "required": ["time", "event"] } } } ] def get_weather(city: str): # 这里替换为真实天气 API return f"{city}:晴,25℃,东南风 3 级。" def add_schedule(time: str, event: str): # 这里替换为写入日历或数据库 return f"已添加日程 [{time}] {event}" # 工具分发表 tool_functions = { "get_weather": get_weather, "add_schedule": add_schedule, } def call_agent(user_input: str): # 第一轮:让模型决定是否调用工具 resp = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": user_input}], tools=tools, tool_choice="auto", ) msg = resp.choices[0].message # 如果模型要求调用工具 if msg.tool_calls: # 执行工具 for tool_call in msg.tool_calls: fn_name = tool_call.function.name fn_args = json.loads(tool_call.function.arguments) result = tool_functions[fn_name](**fn_args) print(f"[工具调用] {fn_name}({fn_args}) -> {result}") # 第二轮:把工具结果返回给模型生成最终答案 messages = [ {"role": "user", "content": user_input}, msg, { "role": "tool", "tool_call_id": tool_call.id, "content": result, }, ] final_resp = client.chat.completions.create( model="gpt-4o", messages=messages, tools=tools, ) return final_resp.choices[0].message.content else: return msg.content if __name__ == "__main__": print(call_agent("帮我查一下北京的天气")) print(call_agent("明天下午 3 点安排一个产品评审会"))做完这个项目,你会彻底理解工具调用的原理:Agent 并不是“会使用工具”,而是 LLM 根据 function 描述生成结构化调用指令,外层代码负责真实执行。
项目 6:数据分析 Agent(对接 CSV / Excel)
- 项目目标:用户用自然语言提问数据相关问题,Agent 自动生成 Python 代码执行分析,并返回结论。
- 涉及知识点:代码生成、代码执行沙箱、pandas、错误重试。
- 业务场景:业务数据分析师日常数据处理、运营报表自动生成。
实现思路:
- 给 Agent 提供 pandas 工具,描述数据文件的列结构;
- 用户提问后,Agent 生成 Python 代码;
- 在受限环境中执行代码(注意安全),返回结果;
- 如果执行报错,把错误信息反馈给模型,让它修正后重试。
这个项目能让你的 Agent 开发技能和数据分析技能结合起来。在做之前建议先系统学一下 pandas 的基础操作。
项目 7:自动化报告生成 Agent
- 项目目标:给定数据日报,Agent 自动生成包含文字结论、图表建议、异常预警的分析报告。
- 涉及知识点:多步骤工作流、结构化输出、图表调用。
- 业务场景:数据周报、销售日报、行业研报自动生成。
这个项目的关键不是调用 LLM 写文字,而是设计一个稳定的、可复现的报告流水线。比如:
- 数据预处理:读取数据,做基本统计;
- 异常发现:自动计算环比、同比,标记异常波动;
- 总结生成:基于统计结果生成文字结论;
- 报告组装:把文字、数字、图表统一渲染到 Markdown 或 HTML。
做完这个项目,你的 Agent 就不只是一个“聊天机器人”了,而是能完成真实业务任务的“生产力工具”。
项目 8:多工具复杂任务 Agent(搜索 + 代码执行 + 文件读写)
- 项目目标:做一个能自主完成“竞品调研 → 生成分析报告 → 保存文件”全流程的 Agent。
- 涉及知识点:ReAct 模式、工具编排、子任务规划、错误处理。
- 业务场景:行业分析、技术调研、竞品监控。
这个项目的难点在于 Agent 需要自己决定工具调用顺序。比如,用户说“调研一下最近一年向量数据库的发展趋势”,Agent 可能需要:
- 调用搜索工具获取资料;
- 调用网页全文工具阅读关键文章;
- 调用总结工具生成初步结论;
- 调用存储工具保存报告。
到这里,你应该开始尝试验证 Agent 中间过程的可靠性:它有没有选错工具?有没有陷入死循环?有没有漏掉关键步骤?这些都是 Agent 工程化中真正需要解决的问题。
项目 9:多 Agent 协作系统(Planner + Worker + Reviewer)
- 项目目标:设计一个由多个角色 Agent 组成的协作系统,比如一个负责拆解任务,一个负责执行,一个负责质量控制。
- 涉及知识点:多智能体架构、消息传递、状态管理、结果校验。
- 业务场景:复杂项目的自动化交付、内容生成与审核流程。
架构思路:
用户输入 ↓ Planner(规划者):拆解任务,生成任务列表 ↓ Worker(执行者):逐个子任务调用 LLM 或工具执行 ↓ Reviewer(质检员):检查执行结果是否符合要求 ↓ 不通过 → 返回 Worker 修改 通过 → 返回给用户多 Agent 协作的核心是设计好 Agent 之间的消息协议。每个 Agent 的输入输出格式必须稳定,否则协作会非常混乱。
3.3 高级项目(第 10-15 个):面向真实业务场景
做到第 9 个项目,你已经具备独立的 Agent 开发能力。后面这几个项目,更倾向“工程化落地”方向。
项目 10:基于特定领域微调的垂直 Agent
- 项目目标:针对法律、医疗、金融等垂直领域,构建一个比通用大模型表现更专业的 Agent。
- 涉及知识点:领域知识库构建、RAG 优化、提示词增强、模型微调流程。
- 业务场景:企业私有化知识助手、行业法规问答、病历辅助分析。
这个项目更考验“领域理解能力”而不是“代码能力”。你需要:
- 收集领域数据并清洗;
- 设计领域专属 Prompt;
- 评估模型在领域样本上的表现;
- 必要时用 LLaMA Factory 或类似工具做 LoRA 微调。
项目 11:Agent 记忆机制的完整实现(短期 + 长期)
- 项目目标:解决 Agent “聊着聊着就忘了”的问题,实现短期对话记忆和长期偏好记忆。
- 涉及知识点:对话缓存、向量记忆、记忆压缩、相关性召回。
- 业务场景:私人助手、教育陪练、心理咨询类应用。
实现思路:
- 短期记忆:维护一个消息滑动窗口;
- 长期记忆:每轮对话结束后,提取重要实体和偏好,存入向量库;
- 启动新会话时,检索与当前话题相关的历史记忆注入系统提示词。
记忆机制是 Agent 从“玩具”走向“产品”的关键一步。没有记忆,Agent 永远只能回答单轮问题,无法提供个性化服务。
项目 12:基于工作流的业务流程 Agent(如工单处理)
- 项目目标:将 Agent 接入企业真实业务流程,比如工单自动分类、自动分派、自动回复。
- 涉及知识点:流程状态机、权限校验、人工审批节点、异常兜底。
- 业务场景:IT 运维工单、客服工单、审核流。
这个项目要特别注意:生产环境中 Agent 的自主性必须受到约束。不是所有场景都适合让 Agent 完全自主。常见的做法是:
- 先让 Agent 做信息提取和分类;
- 大概率正确的动作自动执行;
- 涉及资金、权限、对外发布等高风险操作,必须插入人工审批节点。
项目 13:企业级知识库助手平台(后端 + 前端 + 权限)
- 项目目标:做一个多用户可访问的知识库问答平台,支持文档管理、权限控制、问答记录。
- 涉及知识点:FastAPI 后端、向量数据库、用户认证、并发管理、日志监控。
- 业务场景:企业内部知识管理、团队资料库。
这个项目已经开始偏向“全栈开发”,你可以选择熟悉的后端框架来实现。很多同学喜欢用若依(RuoYi)这类脚手架快速搭权限管理系统,再集成 Agent 能力,这也是目前企业级项目比较主流的做法。
需要注意的是:Agent 嵌入企业系统时,最难的不再是模型能力,而是权限、审核、追踪、审计这些工程能力。
项目 14:Agent 部署与性能优化实战
- 项目目标:把训练好的 Agent 服务部署到服务器,支持并发访问,完成性能和稳定性调优。
- 涉及知识点:FastAPI 异步接口、流式输出、Docker 部署、接口限流、日志追踪。
- 业务场景:Agent 应用上线前的最后一公里。
核心要点:
- 使用流式输出(SSE)改善用户体验;
- 使用 Redis 缓存重复问答结果;
- 使用异步任务队列处理耗时的 Agent 任务;
- 监控每次 Agent 调用的 token 消耗、时延、失败率。
项目 15:垂直行业 Agent 全流程落地
- 项目目标:从需求分析、方案设计、数据准备、Agent 开发、测试评估到上线运维,完整走一遍。
- 涉及知识点:需求文档、架构设计、效果评估、成本控制、灰度发布。
- 业务场景:适合作为独立项目或毕业设计,也适合写进简历。
最后这个项目不规定具体行业,但要求你完整走完一个需求链路。可以选一个你熟悉的行业,比如电商、教育、HR,把一个真实的业务诉求用 Agent 落地。
做完这个项目,你应该能独立回答这类问题:
- 这个需求适不适合用 Agent 做?
- 应该选哪种架构:单 Agent、多 Agent、还是工作流?
- 用什么模型、什么向量库、什么部署方案?
- 如何评估 Agent 的效果?如何控制成本?
4. Agent 主流框架怎么选:LangChain、LlamaIndex、Dify、Coze
做完前面基础项目,你自然会对“框架”产生需求。这里把主流选择做一个横向对比。
| 框架 | 定位 | 适合人群 | 特点 |
|---|---|---|---|
| LangChain | Agent 开发框架 | 程序员、需要深度定制 | 生态最大、组件最全、学习曲线陡 |
| LlamaIndex | 数据 / RAG 框架 | 需要做复杂知识库 | 索引、检索能力极强,Agent 能力稍弱 |
| Dify | 可视化开发平台 | 产品、运营、快速落地 | 可直接部署,有 UI 界面,支持自定义工具 |
| Coze(扣子) | 国内低代码平台 | 非程序员、快速尝鲜 | 不用写代码,内置大量插件 |
我的建议是:入门阶段先用 LangChain 或 LlamaIndex 打好代码功底,理解原理后,再用 Dify 这类平台提效。
不要一开始就用可视化平台拖拽搭建,那样虽然能快速做出 demo,但对框架内部机制没有感知。反而等你理解了 Agent 原理,再去看 Dify 的节点配置,会非常顺。
LangChain 还是 LlamaIndex?
如果你主要做“对话式 Agent + 工具调用”,优先 LangChain。如果你主要做“文档问答 + 知识库检索”,优先 LlamaIndex。
实际项目中,两个人也经常混用:用 LlamaIndex 做索引检索,用 LangChain 做 Agent 编排。
5. Agent 项目面试考察点与简历怎么写
很多读者做项目是为了找工作。做完了项目,还要能把项目“讲出来”。我见过不少人项目做得不错,但面试时讲不出来,非常可惜。
5.1 面试官最常问的 6 个问题
结合最近一些 Agent 开发岗位的面试情况,面试官高频考察的问题集中在这几个方向:
- 原理类:Agent 的 ReAct 模式是怎么工作的?为什么 Agent 有时会陷入死循环?
- RAG 类:你的知识库检索为什么用向量搜索?如果检索结果不准怎么办?chunk 大小怎么设置?
- 上下文类:Context 窗口有限,你怎么设计记忆机制?长对话会爆窗吗?
- 工具类:Function Calling 的返回参数如何校验?如果模型生成了非法 JSON 怎么办?
- 工程类:Agent 怎么保证不会乱调用高风险接口?线上如何监控 Agent 的行为?
- 成本类:你的 Agent 平均一次请求消耗多少 token?怎么降低成本?
这些问题的答案,只有在你真正做完那些项目后才能答得出来。背概念是没用的。
5.2 简历中的项目描述建议
简历上不要只写“使用 LangChain 开发了一个智能客服机器人”,这是无效描述。建议按照下面的模式写:
智能知识库问答 Agent(个人项目)
- 基于 LangChain + FastAPI + Chroma 构建企业知识库问答系统,支持 Markdown、PDF、Excel 多格式文档解析,检索准确率达 92%;
- 设计并实现了滑动窗口短期记忆 + 向量库长期记忆的双层记忆机制,支持跨会话偏好召回;
- 针对常见引用错误问题,通过引入 rerank 重排序和引用溯源模块,将回答幻觉率降低 35%;
- 封装为 RESTful API 服务,支持流式输出,单机 QPS 达到 50+。
这种写法突出三个东西:用了什么技术、解决了什么问题、达到了什么效果(有数字更好)。
6. Agent 开发常见问题与排查思路
做了这么多项目,每天都会遇到各种各样的报错。这里整理几个高频问题的排查思路。
6.1 Agent 死循环:工具反复调用停不下来
| 排查方向 | 具体操作 |
|---|---|
| 检查工具描述 | 工具 description 是否模糊,导致 Agent 反复选择一个工具 |
| 设置最大迭代次数 | 在循环外层加max_iterations限制,防止无限循环 |
| 观察中间输出 | 打印每一步的推理过程,看 Agent 在哪个环节陷入循环 |
| 检查结果判断逻辑 | 有些工具返回成功,但 Agent 误判为失败,会重试 |
6.2 模型“忘了”之前的内容
| 排查方向 | 具体操作 |
|---|---|
| 检查会话历史传递 | 确认每次请求都带着完整 messages 列表 |
| 检查上下文截断策略 | 是否把关键信息截断了 |
| 检查多轮消息顺序 | user / assistant / tool 消息顺序是否错乱 |
| 检查用的是否是同一会话 | 某些请求中断后重新创建了 session |
6.3 输出 JSON 格式不稳定
| 排查方向 | 具体操作 |
|---|---|
| 使用 JSON Mode | 部分模型支持强制 JSON 输出 |
| 加强 schema 说明 | 在 Prompt 里给出完整 JSON 示例 |
| 增加解析容错 | 用json_repair这类库对损坏 JSON 做修复 |
| 结合 Function Calling | 用工具定义替代自由文本输出,会让结构化更稳定 |
6.4 流式输出时前端显示乱码
| 排查方向 | 具体操作 |
|---|---|
| 检查编码 | 确保使用 UTF-8,SSE 响应设置Content-Type: text/event-stream; charset=utf-8 |
| 检查空格截断 | 流式输出会在 markdown 语法中间截断,前端需要容错渲染 |
7. 关于 Agent 开发的几个重要观点
最后说几点做 Agent 开发这么久以来的个人感受,希望对你有帮助。
7.1 Agent 开发的重点不是“壳”,而是“场景”
很多初学者会说“我学会了 LangChain”,但真正到了业务中却发现难点不在 LangChain,而在:
- 如何把用户的自然语言需求转换为 Agent 能执行的任务;
- 如何设计工具让 Agent 调用得顺手;
- 如何保证 Agent 的输出质量和安全性;
- 如何评估系统的整体效果。
这些能力没有捷径,只能在大量实践中积累。
7.2 不要迷信“通用 Agent”
2023 年以来出现过很多“通用 Agent”概念,比如“只需要一句话,Agent 自动完成所有事”。但以目前的模型能力来看,通用 Agent 落地难度极大。
更务实的做法是做“限定场景的垂直 Agent”:限定领域、限定任务、限定工具集。范围越小,可控性越强,落地概率越大。
7.3 工程能力和评估能力是分水岭
两个初学者能力差不多时,区别在哪?在工程能力。
- 同样一个 Agent,有些人只会用 Jupyter Notebook 跑跑测试;
- 有些人能把它封装成 API、加日志、做监控、设计评估集、迭代优化。
如果你的目标是“练完即可就业”,那从第 10 个项目开始,就应该把自己当作一个后端工程师,而不是“Prompt 调包侠”。
8. 下一步怎么做:给你一个 30 天执行计划
最后,给按 15 个项目练完之后,但不知道下一步怎么走的人一个参考计划。这个计划是我综合了很多学习路径之后总结出来的,按 30 天来排,每天投入 2-3 小时。
| 时间 | 项目 | 核心产出 |
|---|---|---|
| 第 1-3 天 | 项目 1、2 | 可运行代码 + Prompt 模板 |
| 第 4-7 天 | 项目 3、4 | RAG 基础流程 + 向量库使用经验 |
| 第 8-12 天 | 项目 5、6 | Function Calling 工程实践 |
| 第 13-18 天 | 项目 7、8、9 | 多工具 + 多 Agent 架构 |
| 第 19-25 天 | 项目 10、11、12 | 记忆机制 + 垂直场景 |
| 第 26-30 天 | 项目 13、14、15 | 全栈 Agent 平台 + 部署上线 |
当然,这个计划只是参考,你可以根据自己的时间灵活调整。但有一个原则不能变:每天都要有代码提交,每天都要有可运行的结果。
如果这篇文章对你有帮助,哪怕只有其中一个项目让你少踩了一个坑,我都会觉得非常值得。收藏起来,然后从项目 1 开始动手吧。只有真正敲起来的代码,才算是你学会的东西。
祝你 Agent 开发顺利,早日做出自己的第一个 Agent 产品。