2026/10/23 6:46:14

AI Agent入门:先学底层基本功,再碰LangChain等框架

AI Agent入门:先学底层基本功,再碰LangChain等框架 最近两年AI Agent成了技术圈最热的关键词我几乎每天都能收到类似的问题“我是做前端的想转AI应该从哪学起”“刚毕业想入行是不是该直接啃LangChain”“看了一堆Agent框架文档越看越懵怎么办”先说结论新手和转行的人别一上来就啃框架。框架是爽但那是给已经会走的人准备的加速器不是给还不会走路的人准备的学步车。这篇东西就是写给想入行AI Agent但还没起步的朋友看的。我会把自己带过的几个新人走过的弯路、踩过的坑摊开讲清楚告诉你入门AI Agent真正该先学什么、为什么要先学那些底层的东西以及在你碰框架之前应该先做的一件小作业是什么。1. 先搞清楚Agent到底是个什么东西别被概念绕晕1.1 Agent不是聊天机器人是“接了活就能自己干”的执行者很多人对Agent的理解是模糊的觉得“能对话就是Agent”“接了上下文就是Agent”这个认知不到位后面全白搭。我给你的一个区分标准聊天机器人的核心是“说话”Agent的核心是“闭环”。你给聊天机器人一个问题它给你一段回答结束。你给Agent一个目标它会把这个目标拆成步骤、调用外部工具、拿到结果、检查结果对不对、不对再调整、直到输出最终成果。整个链路是完的不是一问一答就散了。用一个比喻帮新同学理解聊天机器人像一个知识渊博但只会动嘴的顾问Agent像个接了任务会自己去查资料、做实验、写报告的项目助理。你要的是“把事办了”不是听它说。那它为什么这两年是爆发式增长的核心原因是模型能力到了能当“大脑”指挥工具的程度。以前让程序自动做一件事每一步逻辑都要人工写死现在你可以给模型一个目标让它自己决定调用哪个函数、按什么顺序调、怎么根据返回结果调整下一步。这带来的变化是从“生成文本的工具”变成了“可以控制系统动作的调度器”。1.2 Agent的底层运行逻辑感知、决策、行动、反馈不管你是用原生API自己搭还是用某个框架Agent背后跑的永远是同一个循环感知Perception→ 决策Decision→ 行动Action→ 反馈Feedback→ 再感知……举个例子。你让Agent帮你查一下某家公司的近期动态并整理成简报。它的工作过程大致是它先理解目标决定“我需要先去搜索网页”。它调用搜索工具拿到一批网页标题和摘要。它读一下结果判断“这批信息不够全有些来源不可靠我再细分去翻一下具体页面”。它把几篇关键页面抓取下来总结成简报最后给你一个结构化输出。这一圈就是Agent最核心的工作方式。框架做的所有事情——记忆、工具编排、任务分解、反思重试——本质上都是在帮你把这个循环跑得更顺。你只有亲手把每一环都搭过一遍才知道哪里容易断、怎么修、怎么加料。1.3 认识Agent的边界别被唬住了新手很容易被短视频带节奏以为Agent什么都能干。事实是Agent目前能做好的是“目标明确、工具可得、反馈可校验”的任务它还经常“翻车”。你大概知道三个事实后面的学习才踏实Agent不会“真正思考”它是在概率性地生成下一个token所以同一个问题跑两次结果可能不一样。Agent对“步骤的记忆”是有限且脆弱的步骤一长前面做了什么它可能就忘了或者开始“自由发挥”。Agent的每一步错误是会累积的第一步错、第二步错得更离谱这是“级联错误”多步任务里必须刻意设计校验。清楚了边界你才不容易在碰到失败时自我怀疑“是不是我不适合做这行”不是的是Agent本来就会这样你要学会的是怎么驯服它。2. 三个信号说明你还没到碰框架的时候2.1 信号一说不清Token和上下文窗口是怎么回事如果你听到“Token”“上下文窗口”这两个概念还只能跟上句“就是给模型输入的字数限制”那我建议你先停一下。Token可以粗暴理解为“模型读文本的最小单位”中文里一个汉字大约对应1到2个Token一个英文单词大约对应1到2个Token。上下文窗口就是这个模型一次能读进耳朵的总量比如8K、32K、128K都是指Token数。为什么这个对你很重要因为Agent的所有工作都在窗口里发生。你给它的任务说明占多少、工具返回内容占多少、历史步骤占多少都要精打细算。窗口满了模型要么忘掉最早的内容要么直接报错你的Agent就会像一个记性很差、又被塞满了一脑子事的人一样短路。框架能帮你部分处理上下文但它不会替你理解为什么要这样处理。你连基本概念都没有出了问题就是瞎试。2.2 信号二Prompt还停留在“和聊天框说话”的水平很多人口中的“会写Prompt”其实是“会用自然语言描述一个任务”。这不叫会。对Agent来说Prompt是给它的一套工作说明书角色是什么、目标是什么、输入有哪些格式、输出是什么格式、不能做什么、遇到异常怎么处理。如果你现在写Prompt还只是一句“帮我查一下XXX然后总结一下”后面跑复杂任务你连错误出在哪一环节都难定位。我见过一个新手用框架接了一个搜索Agent每次结果都跑偏他反复调节“模型版本”“温度参数”折腾了两天。我帮他看了看他最初的Prompt发现里面对“信息来源优先级”“结果总条数”“总结的结构”一点都没定义。这就是典型的舍本逐末。Prompt不过关调什么都白调。2.3 信号三报错只会复制进搜索框不会分层排查一个Agent项目跑起来报错大致来自几层API层限流、超时、余额不够、格式层模型输出不符合你定义的JSON、逻辑层调了错误的工具、漏了一步和业务层结果不对、状态错误。新手最常见的错误是把API层报错当成逻辑层问题去查或者把所有问题混在一起越搞越乱。框架的抽象层会让你更难看出问题发生在哪一层。因为框架帮你把API调用、工具调用、消息管理都封装好了报错信息也可能是“框架风格”而不是“接口风格”的。底子不牢的人面对这种多层嵌套的错误第一反应是重跑、换模型、重启完全没有任何排查思路。这三个信号不强求全部消失才碰框架但至少你得先努力补齐大半。否则你去啃框架文档大概率是“每个字都认识、连起来不知道在说什么”。3. 转行入门最该先学的五项底层技能与框架无关3.1 把Prompt从“说话”升级成“结构化命令”这可能是投入产出比最高的一项。你会写结构化Prompt等于你天然就会调试Agent。我自己的一个通用模板是这样的你是[角色]擅长[任务类型]。 目标完成[某件事]。 输入我提供[字段A]、[字段B]格式为[格式]。 要求 1. 先[做什么]再[做什么]。 2. 必须输出JSON格式字段为[summary, sources, next_steps]。 3. 如果信息不足输出{summary: null, reason: 缺什么}。 4. 不要编造不存在的信息。表面上看只是“写得细了一点”但它的价值是你在给模型搭约束框架。你会发现Prompt第一步定义角色本质是把输出语气、范围框住第二步定义输入结构让你的程序能稳定地把数据喂给模型第三步定义输出结构让你程序能稳定地解析模型的结果第四步定义异常路径让模型不会出于“好心”瞎编。新手不用急着学复杂的CoT思维链、few-shot样例。先把上面这套“输入-任务-约束-输出格式”的结构用熟你就已经超过大多数停留在聊天水平的用户了。3.2 学会和模型API打交道限流、重试、超时做Agent你不是只“对话”一次而是一个循环里要调好几次模型模块之间还有来回多次的相互调用。所以API调用的工程问题会立刻暴露出来。我踩过的第一个坑是“重试风暴”。当时设计的一个小工具里如果一次调用失败就让程序立刻重试结果模型接口连续被限流原本只需要几十次调用的任务短时间内打出数百次请求直接把账户额度耗了一大截。正确的做法是采用指数退避重试——第一次失败等1秒第二次等2秒第三次等4秒最多重试N次同时给单次重试加一点随机抖动。另外要设置合理的超时时间普通文本生成任务通常30到60秒是合理的超时就果断放弃那一步不要傻等。在你的Agent框架学习计划里这一课是被跳过的。因为框架帮你封装了retry策略你不太会主动去了解这背后的必要性。可一旦线上出了问题你连排查入口都找不到。3.3 上下文窗口管理Agent能不能跑得稳就看这一项做Agent久了你就发现最贵的不是API价格而是Token预算。上下文管理能力是把一个Agent从玩具做到能用的分水岭。你需要具备的基本功大概三条第一估算Token。中文场景下一个汉字大约对应1到2个Token粗略可以按1.5估。一段1000字的对话文本不含标点的算紧凑预算至少2000 Token很稳妥。英文按750个单词约1000 Token估。不准没关系但要心里有数。第二选择截断策略。目标信息如果来自多轮工具返回你可以做“滑动窗口”只保留最近N轮的消息作为上下文给模型更早的用摘要替代。这一步要提前设计不能等上下文超了再临时砍。第三引入外部记忆。真正的Agent一般要有长期记忆做法是把历史关键信息向量化存进向量数据库需要时检索相关内容重新放回上下文。新手可以先不搭完整方案但要理解这个“外部存储按需召回”的套路。我见过很多半途而废的新手项目跑了两天突然发现“越跑越乱它好像把自己前面说过的都忘了”。这不是Agent能力不行是你没给它装记忆。上下文管理就是Agent的记忆系统设计。3.4 结构化输出别再让模型“自由发挥”了新手常常犯一个毛病让模型输出自然语言然后用字符串匹配去解析结果。这是一个巨大的坑。模型文本稍微换个说法你的解析就崩了。正确做法是让模型输出结构化数据比如JSON然后在代码里严格解析和校验schema。下面是一个非常简单的例子import json response_text model.call( 判断这段评论的情感并输出JSON格式为{sentiment: positive|negative|neutral, confidence: 0~1} ) try: result json.loads(response_text) assert result[sentiment] in [positive, negative, neutral] print(解析成功:, result) except (json.JSONDecodeError, KeyError, AssertionError): print(模型输出不符合预期原始文本:, response_text)这套“让模型输出JSON→校验JSON→不合规就重试”的链路是最小Agent的骨架之一。做Agent之前先把自己所有涉及模型输出的环节都用这个套路过一遍你会发现程序的稳定性提升一个档次。3.5 理解工具调用Agent是怎么“伸手”操作世界的Agent真正“干活”的接口就是工具调用Function Calling / Tool Use。这件事的原理并不复杂你定义一批函数把函数的名称、功能描述、参数结构告诉模型模型在需要时会返回一个结构化指令“请调用函数A参数为B”然后你的程序负责真正执行这个函数再把执行结果返回给模型继续处理。为什么模型不自己执行因为它只是个模型没有手。你给它提供的手就是工具函数。拿一个实际的例子演示定义一个“获取天气”的函数。def get_weather(city: str) - str: # 实际项目里这里调用真实天气API return f{city} 今天的天气是晴温度21-28℃ tools [ { type: function, function: { name: get_weather, description: 获取指定城市的天气情况, parameters: { type: object, properties: { city: {type: string, description: 城市名称} }, required: [city] } } } ]然后你在循环里判断模型返回了哪个工具调用指令执行对应函数把结果重新给模型。这个循环就是Agent的一双“手”。很多框架把这层封装得很好但新手必须先自己亲手做一遍这个循环才能理解后续所有复杂的编排都是在“循环工具注册表记忆”上面叠加出来的。4. 一次作业不靠框架用原生API写一个最小Agent4.1 场景与目标我建议每个新手都做一次这个作业做一个“信息查询归纳总结”的最小Agent不依赖任何第三方Agent框架只调用模型API和标准库。任务设计成这样一个用户输入一个话题关键词你的Agent负责去搜索引擎查询相关信息然后总结成一个简报。这里搜索工具你可以用假数据模拟重点是训练那个循环。4.2 代码骨架可以直接抄走下面是一个极简的Python实现核心是循环调用模型直到拿到满意结果import json # 模拟的工具注册表 TOOL_REGISTRY { search_web: lambda query: f关于{query}的搜索结果共找到3条。 f第一条某公司在人工智能领域有最新融资。 f第二条该领域今年市场规模持续增长。 f第三条相关产品用户数量显著上升。 } SYSTEM_PROMPT 你是信息助手。你需要根据用户需求使用工具获取信息最后输出简报。 输出格式严格为JSON {final_answer: 简报内容, steps: [步骤说明]} AGENT_LOOP_INSTRUCTION 现在请判断下一步动作 1. 你需要工具帮助时输出 {tool_call: 工具名, arguments: ...} 2. 信息足够了直接输出 final_answer。 def call_llm(messages): # 实际换成真实的模型接口调用 # 模拟返回根据上一条消息选择工具 last_msg messages[-1][content] if search in last_msg.lower() or 没有足够 in last_msg: return {tool_call: search_web, arguments: {query: AI Agent 行业动态}} return {final_answer: AI Agent行业近期动态融资活跃、市场增长、产品用户上升。, steps: [1. 调用搜索工具, 2. 总结信息]} def run_agent(user_input): messages [ {role: system, content: SYSTEM_PROMPT}, {role: user, content: f请帮我查询{user_input}} ] # 用一个循环控制Agent的步数最多5轮 for step in range(5): response call_llm(messages) if tool_call in response: tool_name response[tool_call] arguments response[arguments] tool_result TOOL_REGISTRY[tool_name](arguments[query]) messages.append({role: assistant, content: json.dumps(response, ensure_asciiFalse)}) messages.append({role: tool, content: tool_result}) elif final_answer in response: return response else: # 模型输出格式不符合预期强制纠正 messages.append({role: user, content: 请重新按指定格式输出。}) return {final_answer: 达到最大循环次数任务未完成。, steps: []} if __name__ __main__: result run_agent(AI Agent行业最新动态) print(json.dumps(result, ensure_asciiFalse, indent2))你实际做的时候把call_llm换成真实的API调用把TOOL_REGISTRY换成真的搜索接口或工作流工具这个代码马上就能变成能用的雏形。4.3 这个作业逼你搞懂的五个问题这个作业看起来简单但真正动手你会被五个问题卡住怎么判断模型返回的是“需要调用工具”还是“已经完成”——这是Agent的决策节点设计问题。工具返回结果很长怎么塞进下一轮上下文而不把窗口撑爆——这是上下文管理。如果模型连续调用同一个工具三次是不是死循环了——这是循环控制和异常退出。如果模型输出的JSON格式偶尔坏了程序怎么处理——这是容错重试。最后结果不可信怎么办——这是校验和防幻觉机制。这五个问题是任何Agent项目都躲不开的。你把它们亲手解决一遍再回头看框架一眼就能看出它哪里做了封装、哪里替你做决定、哪里留了后门让你自定义。5. 到这里才建议碰框架怎么选、怎么学、怎么不迷路5.1 框架替你做了什么以及它不做什么当你用原生API把上面最小的循环跑通之后可以正式接触框架了。框架的价值主要体现在这几件事上提供了统一的工具注册格式你写工具时不用自己造规范。内置了记忆管理方案帮你把对话历史、向量存储、摘要滚动都处理了一部分。封装了多模型切换你换供应商不用大改代码。提供了一堆现成的Agent模板、多步骤编排器。但框架不帮你判断“你的Agent规划得好不好”也不会替你解决“你的工具本身有问题”。它只是在下游提高效率不改变你上游设计的质量。5.2 选框架的几个判断标尺不要因为哪个火就选哪个。我见过好几个团队项目后期从A框架迁移到B框架的折腾得要命就是当初选型太随便。新手可以参考这几个标尺你当前项目是单Agent还是多Agent协作。单Agent场景很多框架是杀鸡用牛刀直接原生API更清爽。你需要在哪些生态里运行。如果你主要用某个云平台优先看平台的官方Agent方案跟基础设施结合最紧密。社区的活跃度和文档质量。冷门框架偶尔会更新很勤但没人讨论你遇到问题只能自己摸索。对照一下场景建议快速做学习Demo、研究概念原生API 手写循环业务上需要一个稳的编排框架LangChain类通用框架需要Agent团队成员分工协作多智能体框架如AutoGen、CrewAI要深度绑定云生态云厂商自带Agent编排服务这里的重点是不要为了用框架而用框架。框架是手段不是目的。5.3 高效读框架源码的方法很多人一上来就看官方文档从头到尾翻翻完还是不会写自己的Agent。我的建议是“反着看”先看文档里的快速入门示例跑通一遍然后别急着写业务先把示例里那个工具调用循环拆出来对着源码看它怎么实现我们前面手写的那个决策、行动、反馈环节再看它的上下文管理策略在哪个环节做了截断在哪个环节调用了向量库最后再看它提供了哪些“钩子”允许你把自己的校验逻辑插进去。照着这个路径读一个主流框架你花一周时间效果比刷十套视频课强得多。因为你是带着问题去读知道自己缺什么、要什么而不是漫无目的接收信息。6. 常见问题速查表新手最容易卡住的环节现象可能原因排查方法Agent跑起来随机性很大结果时好时坏模型温度偏高、Prompt约束不足、工具结果没有结构化调低温度检查输出schema是否强制工具返回是否被正确解析任务步骤一长Agent忘记前面做了什么上下文被截断、没有记忆机制做历史摘要或引入向量库保存关键信息按需检索放回上下文模型频繁调用同一个工具陷入死循环缺少循环次数上限和工具去重机制增加最大步数限制检测到重复工具调用时强制终止工具返回了结果但Agent忽略它继续乱猜工具结果被放在了模型不“注意”的位置或工具输出格式混乱把工具结果放在消息末尾强制要求模型先引用工具结果再生成回答看框架文档能懂一下手写就懵缺少“从最小循环开始”的实践经验从零写一次工具调用闭环再来写业务如果你卡在某一步两天都解决不了而且你根本说不清楚是API层、格式层、编排层还是结果校验层出了问题那基本可以断定底层的基本功还没到位。这时候别硬顶着框架调了退回去把“最小Agent循环”再写一遍。最后说几句我带过的新人里凡是按这个路径先啃底层、再做最小实现、最后上框架走过来的普遍在1到2个月内就能自己搭出一个能跑的Agent小工具凡是上来就盯着框架文档啃的三个月后还在“跟着教程改例子”。我个人并不反对用框架生产环境里我自己的项目也重度依赖它。我只是觉得顺序很重要。先裸手写一遍循环知道每个环节的真实成本和脆弱点再让框架帮你省事。这个时候框架对你是杠杆而不是依赖。如果你现在正处在“想入行但不知道先学什么”的阶段我的建议很具体停掉囤积的框架教程先自己做一个上文里那个最小Agent作业。跑通了你再来学框架会顺畅得多。