大模型Agent开发入门:从零构建你的第一个智能体
发布时间:2026/11/2 13:29:12 锦皓数字建站

1. 大模型Agent开发入门从零到一构建你的第一个智能体很多人第一次听到“大模型Agent”这个词脑子里浮现的可能是科幻电影里那种能自己思考、自己行动的AI。其实没那么玄乎。我做了几个Agent项目之后最大的感受是Agent本质上就是给大模型装上了手脚和记忆。大模型本身只能“说”你问它什么它答什么但Agent能让它“做”——去调用工具、去查数据库、去操作文件、去多步推理完成一个复杂任务。这篇文章适合谁看如果你已经用过大模型对话知道什么是提示词会一点Python那就可以直接上手。如果你完全没接触过大模型也没关系我会把每个环节的基础知识都补上。目标很明确读完你就能自己搭一个能跑起来的Agent知道每一步为什么这么做踩过的坑我也一并告诉你。我自己的学习路径是先跑通一个最简单的Agent理解它的核心循环然后再逐步加上工具调用、记忆系统、多Agent协作。这个顺序很重要反过来先啃框架文档会非常痛苦。下面我就按这个思路把大模型Agent开发入门的完整路径拆开讲。2. 先搞明白Agent到底是个什么东西2.1 大模型和Agent的本质区别大模型LLM是一个无状态的文本生成器。你给它一段输入它给你一段输出结束。它不记得你上次说了什么除非你把历史对话一起塞进去它也不能主动去做任何事情。就像一个知识渊博但被关在房间里的人你递纸条进去他递纸条出来。Agent则是在大模型外面套了一层控制循环。这个循环做的事情是让大模型思考当前该做什么然后执行一个动作观察执行结果再决定下一步做什么直到任务完成。用伪代码表示就是while not task_done: thought llm.think(context) # 大模型思考 action llm.decide_action(thought) # 决定做什么 result execute(action) # 执行动作 context.append(result) # 把结果加入上下文这个循环就是Agent的心脏。所有的Agent框架不管包装得多花哨底层都是这个逻辑。理解这一点后面看任何框架都不会迷路。2.2 Agent的四大核心组件一个能用的Agent至少需要四个东西大脑LLM负责推理和决策。选哪个模型直接决定了Agent的智商上限。目前主流选择是GPT-4系列、Claude系列国内也有不少可选项。入门阶段建议先用API调用别急着本地部署。工具ToolsAgent能调用的外部能力。比如搜索、计算器、读写文件、调用API。没有工具的Agent只能聊天有了工具才能真正“做事”。记忆Memory短期记忆就是对话历史长期记忆通常用向量数据库存储。入门阶段先把短期记忆做好长期记忆可以后面再加。规划Planning把复杂任务拆成子任务的能力。最简单的做法是在提示词里要求大模型先列步骤再执行。这四个组件缺一不可。我见过很多新手一上来就想搞多Agent协作结果连单Agent的工具调用都没跑通最后卡在各种奇怪的报错上。2.3 为什么现在学Agent开发正当时三个原因。第一大模型的能力已经跨过了及格线。两三年前的模型做多步推理经常胡言乱语现在的主流模型已经能稳定完成大部分日常任务。第二工具生态成熟了。不管是LangChain、LlamaIndex还是各家自己出的Agent框架基础设施都比以前好用太多。第三落地场景清晰了。代码助手、数据分析、客服自动化、科研辅助这些场景已经有大量成功案例。说白了现在学Agent开发不是在做实验是在学一门能直接用的手艺。3. 开发环境搭建与工具选型3.1 编程语言和基础依赖Python是绝对的主流选择。Agent开发涉及的库——大模型SDK、向量数据库客户端、Web框架——Python生态最全。版本建议3.10以上因为很多新库已经不支持3.8了。核心依赖清单pip install openai langchain langchain-community chromadb python-dotenv这里解释一下每个包的作用。openai是调用大模型API的官方SDK即使你用的不是OpenAI的模型很多国产模型也兼容这个接口格式。langchain是目前最流行的Agent开发框架提供了工具、记忆、链式调用的抽象。chromadb是轻量级向量数据库用来做长期记忆。python-dotenv用来管理API密钥避免把密钥硬编码在代码里。注意不要一上来就装几十个包。先把最小的依赖集跑通遇到缺什么再装什么。我见过有人环境里装了几百个包最后连哪个包冲突了都查不出来。3.2 大模型的选择策略入门阶段我建议直接用API不要本地部署。原因很简单本地部署一个能用的模型至少需要一张显存16G以上的显卡而且部署完之后推理速度、稳定性都是问题。API调用按量付费几块钱就能跑很多次实验。选哪个模型几个考量维度维度说明入门建议推理能力决定Agent能不能正确拆解任务选第一梯队的模型函数调用是否支持结构化输出和工具调用必须支持价格按token计费Agent循环会消耗大量token选性价比高的延迟影响Agent响应速度入门阶段不太敏感上下文长度决定能塞多少历史信息至少32K我自己的做法是开发调试阶段用一个便宜且支持函数调用的模型等逻辑跑通了再切换到更强的模型做最终测试。这样能省不少钱。3.3 开发框架怎么选目前主流的几个选择LangChain生态最全文档多社区活跃。缺点是抽象层太厚出了问题不好排查。适合快速原型开发。LlamaIndex在RAG检索增强生成场景下更强Agent功能也在不断完善。如果你的Agent需要大量知识检索可以优先考虑。自己手写不依赖任何框架直接用大模型SDK加一个while循环。优点是可控性极强每一行代码你都知道在干什么。缺点是什么都要自己实现。我的建议是第一个Agent手写第二个再用框架。手写一遍之后你就知道框架帮你做了什么用框架的时候遇到问题也能定位到根因。4. 从零构建第一个Agent4.1 最小可运行Agent的实现先不依赖任何框架用最朴素的方式实现一个Agent循环。这个Agent能用的工具只有一个计算器。import json from openai import OpenAI client OpenAI(api_keyyour-key, base_urlyour-base-url) # 定义工具 tools [ { type: function, function: { name: calculator, description: 计算数学表达式输入一个合法的Python数学表达式字符串, parameters: { type: object, properties: { expression: { type: string, description: 要计算的数学表达式例如 2 3 * 4 } }, required: [expression] } } } ] def calculator(expression: str) - str: try: result eval(expression) return str(result) except Exception as e: return f计算错误: {e} def run_agent(user_input: str, max_steps: int 5): messages [ {role: system, content: 你是一个数学助手可以使用计算器工具来解答数学问题。}, {role: user, content: user_input} ] for step in range(max_steps): response client.chat.completions.create( modelgpt-4o-mini, messagesmessages, toolstools, tool_choiceauto ) msg response.choices[0].message # 如果没有工具调用说明Agent认为任务完成 if not msg.tool_calls: return msg.content # 把Agent的决策加入消息历史 messages.append(msg) # 执行每个工具调用 for tool_call in msg.tool_calls: func_name tool_call.function.name func_args json.loads(tool_call.function.arguments) if func_name calculator: result calculator(func_args[expression]) # 把工具执行结果加入消息历史 messages.append({ role: tool, tool_call_id: tool_call.id, content: result }) return 达到最大步数限制任务未完成 # 测试 print(run_agent(帮我算一下 (15 27) * 3 减去 100 等于多少))这段代码虽然短但包含了Agent的所有核心要素系统提示词定义了Agent的角色工具定义告诉大模型有哪些能力可用循环控制保证了多步执行消息历史维护了上下文。4.2 关键参数的计算与选择max_steps怎么定这个参数控制Agent最多执行多少轮。设太小复杂任务做不完设太大万一Agent陷入死循环会烧很多token。我的经验值是简单任务3-5步中等复杂度10步复杂任务20步。同时一定要设一个token总消耗的上限作为兜底。temperature怎么设Agent场景建议设低一些0到0.3之间。因为Agent需要稳定地选择正确的工具和参数太高的随机性会导致它做出莫名其妙的决策。创意写作场景可以调高但Agent执行任务时稳定压倒一切。工具描述怎么写这是最容易被忽视但极其重要的环节。大模型完全依赖工具描述来决定什么时候调用、怎么传参。描述要写清楚这个工具做什么、什么时候用、参数是什么格式、有什么限制。我踩过的坑是工具描述写得太模糊导致大模型该调用的时候不调用不该调用的时候乱调用。4.3 提示词工程在Agent中的特殊用法Agent场景的提示词和普通对话不一样。普通对话你只需要告诉模型“你是一个什么角色”Agent还需要告诉它工作流程先做什么再做什么什么情况下停止工具使用规则什么情况用哪个工具参数怎么填错误处理工具调用失败后怎么办输出格式最终结果以什么形式呈现一个实用的Agent系统提示词模板你是一个{角色}你的任务是{任务描述}。 你可以使用以下工具 {工具列表} 工作流程 1. 首先分析用户的需求 2. 如果需要计算或查询调用相应的工具 3. 根据工具返回的结果继续推理 4. 当你有足够信息回答用户时直接给出最终答案 注意事项 - 每次只调用一个工具 - 工具调用失败时尝试换一种方式或告知用户 - 不要编造工具返回的结果这个模板看起来简单但每一条都是实践中总结出来的。特别是“不要编造工具返回的结果”这一条早期版本没有这句话的时候大模型经常在工具还没返回结果时就自己编一个。5. 工具调用与记忆系统的实战细节5.1 工具调用的完整流程与常见坑工具调用的完整链路是大模型输出一个结构化的工具调用请求包含工具名和参数你的代码解析这个请求并执行对应的函数然后把执行结果以特定格式返回给大模型。听起来简单但实际开发中有一堆细节问题。坑一参数格式不对。大模型返回的参数是JSON字符串需要反序列化。但有时候大模型会返回不合法的JSON比如多了一个逗号或者少了引号。解决办法是在解析时加try-except解析失败就把错误信息返回给大模型让它重新生成。坑二工具执行超时。如果工具是调用外部API网络延迟可能导致长时间等待。一定要设超时超时后把“工具执行超时”作为结果返回让大模型决定下一步。坑三并行工具调用。新版的大模型支持一次返回多个工具调用请求。如果你的代码只处理了第一个后面的就被忽略了。处理方式是遍历所有的tool_calls逐个执行然后把所有结果都加入消息历史。坑四工具返回值太长。如果工具返回了几千字的文本会占用大量上下文窗口。解决办法是在工具函数内部做截断或摘要只返回关键信息。5.2 短期记忆的管理策略短期记忆就是对话历史。Agent每执行一步消息列表就增长一些。问题是上下文窗口是有限的不可能无限增长。几种管理策略滑动窗口只保留最近N轮对话。简单粗暴但可能丢失早期的重要信息。摘要压缩当消息数量超过阈值时用大模型把前面的对话压缩成一段摘要。保留关键信息的同时减少token消耗。关键信息提取从对话中提取结构化的关键信息比如用户的需求、已完成的步骤、待办事项只保留这些。我自己的做法是组合使用日常用滑动窗口当窗口快满时触发一次摘要压缩。摘要的提示词大概是“请把以下对话压缩成不超过200字的摘要保留所有关键决策和未完成的任务”。5.3 长期记忆的入门实现长期记忆让Agent能记住跨会话的信息。最简单的实现方式是向量数据库加检索。流程是把重要信息通过Embedding模型转成向量存进数据库下次需要时用相似度检索找出相关的记忆。import chromadb client chromadb.Client() collection client.create_collection(agent_memory) # 存入记忆 def save_memory(text: str, metadata: dict None): collection.add( documents[text], metadatas[metadata or {}], ids[fmem_{collection.count()}] ) # 检索记忆 def recall_memory(query: str, n_results: int 3): results collection.query( query_texts[query], n_resultsn_results ) return results[documents][0] if results[documents] else []入门阶段不需要搞太复杂。先把“存”和“取”跑通后面再优化检索策略和记忆的重要性排序。实操心得长期记忆最大的坑是“存了太多没用的东西”。如果什么都往数据库里塞检索出来的结果会充满噪音。我的做法是只存三类信息用户的偏好和习惯、已完成任务的关键结论、明确的待办事项。6. 常见问题排查与避坑指南6.1 Agent陷入死循环怎么办这是最常见的问题。Agent反复调用同一个工具或者在不同工具之间来回跳转就是不给最终答案。排查思路检查工具描述是否有歧义。如果两个工具的功能描述很接近大模型会犹豫不决反复尝试。检查系统提示词是否缺少停止条件。明确告诉Agent“当你获得足够信息时直接给出答案不要再调用工具”。设置硬性步数限制。不管Agent是否完成达到max_steps就强制停止并返回当前状态。加入循环检测。如果连续三次调用了同一个工具且参数相同强制中断并提示Agent换一种方式。6.2 工具调用返回错误怎么处理工具执行失败是常态关键是怎么让Agent优雅地处理。我的做法是把错误信息结构化后返回给大模型def safe_execute(tool_func, args): try: result tool_func(**args) return {status: success, data: result} except TimeoutError: return {status: error, error_type: timeout, message: 工具执行超时请尝试简化输入或稍后重试} except Exception as e: return {status: error, error_type: execution_error, message: f工具执行失败: {str(e)}}这样大模型能根据错误类型决定是重试、换工具还是告知用户。6.3 常见问题速查表问题现象可能原因解决方法Agent不调用工具工具描述不清晰或系统提示词没提工具优化工具描述在提示词中明确工具用途Agent反复调用同一工具缺少停止条件或工具返回结果不明确加停止条件确保工具返回清晰的结果工具参数格式错误大模型对参数格式理解有误在参数描述中给出具体示例响应速度慢模型推理慢或工具执行慢换更快的模型给工具加超时token消耗过大消息历史太长或循环步数太多加摘要压缩限制max_stepsAgent回答与工具结果矛盾大模型没有正确使用工具返回值在提示词中强调“必须基于工具返回结果回答”6.4 几个我踩过的坑坑一把API密钥硬编码在代码里。这个不用多说了用环境变量管理.env文件加到.gitignore里。坑二没有做日志记录。Agent的决策过程是黑盒出了问题没有日志根本没法排查。建议把每一步的输入、输出、工具调用、执行结果都记下来。坑三一开始就追求完美。我第一个Agent写了三天想把所有功能都加上结果一个都没跑通。后来推倒重来先做一个只能算加减法的Agent跑通了再逐步加功能反而快得多。坑四忽视成本控制。Agent循环会消耗大量token一个复杂任务可能调用几十次大模型。一定要设预算上限开发阶段用便宜的模型。7. 从入门到进阶的学习路径7.1 分阶段的学习计划第一阶段1-2周跑通最小Agent。目标是不依赖框架手写一个能调用1-2个工具的Agent。重点理解Agent循环、工具调用、消息管理这三个核心概念。第二阶段2-3周加上记忆系统。实现短期记忆的滑动窗口和摘要压缩再接入向量数据库做长期记忆。重点理解记忆的存取时机和检索策略。第三阶段3-4周引入框架。用LangChain或类似框架重写之前的Agent对比手写版本理解框架的抽象。重点学习框架的工具定义、链式调用、回调机制。第四阶段持续多Agent协作和复杂任务规划。学习如何让多个Agent分工合作如何做任务分解和结果汇总。这个阶段需要结合实际项目来练。7.2 值得深入的方向Agent安全如何防止Agent被提示词注入攻击如何限制Agent的操作权限如何审计Agent的行为。这是企业落地必须解决的问题。Agent评估怎么判断一个Agent好不好用需要建立评估指标体系包括任务完成率、步骤效率、工具调用准确率等。多模态Agent让Agent能处理图片、音频、视频。比如让Agent看图回答问题或者根据语音指令操作电脑。Agent部署与并发单个Agent跑通不难难的是同时服务几百个用户。需要考虑并发控制、资源调度、状态隔离等问题。7.3 推荐的学习资源吴恩达的Agent系列教程质量很高适合入门。LangChain的官方文档和示例代码是最实用的参考资料。另外建议多逛GitHub上的Agent项目看别人怎么组织代码、怎么设计工具、怎么处理错误。我个人觉得最有效的学习方式是找一个实际需求比如“自动整理下载文件夹”或者“每天帮我汇总行业新闻”然后动手做一个Agent来解决它。有真实需求驱动学习效率比看教程高十倍。8. 写在最后Agent开发这个领域变化很快新的框架、新的模型、新的最佳实践层出不穷。但核心的东西没变让大模型在循环中调用工具来完成任务。把这个核心吃透了上层的东西怎么变都不慌。我自己的体会是入门阶段最大的障碍不是技术难度而是信息过载。网上有太多框架、太多教程、太多“最佳实践”反而让人不知道从哪里开始。我的建议是关掉那些花里胡哨的介绍文章打开编辑器从上面那段50行的Agent代码开始一行一行敲进去跑通它然后改它。改着改着你就入门了。最后分享一个实用小技巧调试Agent的时候把每一步的完整消息历史打印出来。你会看到大模型是怎么“思考”的它看到了什么信息做了什么决策。这个习惯帮我定位了至少一半的bug。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。