工程师实战——AI Agent 的底层逻辑与实战落地
一、先说清楚你以为的 Agent 和真正的 Agent我是薛定谔的悦一名大厂储能算法工程师。最近这段时间“AI Agent这个词已经泛滥到了某种程度。朋友圈里、技术论坛上、各种产品发布会的PPT里这个词满天飞。但你要是认真问一圈大多数人说不出个所以然来——顶多是哦就是那种能自己做事的 AI嘛”。这个回答没错但太粗了。作为储能领域的工程师近一年来一直接触AI同时也研究把AI Agent引入工作流程中我见过太多人把概念搞混。有人把带了个搜索插件的 ChatGPT 叫 Agent有人把自动回复邮件的脚本叫Agent也有人把真正能自主规划、执行、反馈的系统叫 Agent。这三个东西底层差了不止一个量级。所以我想从工程师的角度给你捋清楚几件事第一Agent 不是一个非此即彼的概念它是一条连续的谱系不同系统落在这条谱系的不同位置。第二从普通问答到真正的自动化Agent中间差的那层东西跟模型本身没太大关系关键在模型外面怎么搭。第三搭一个能用的 Agent 并不难工具链现在已经很成熟了一个下午就能跑起来一个能用的东西。先把这个框架立住后面说的所有东西都往这个框架里装。二、谱系这件事从聊天到全自动差在哪里我们做系统设计的时候有个习惯——遇到复杂问题先画边界把它拆成一个坐标轴搞清楚各个点分别意味着什么。Agent这个问题也一样。最左端纯问答模式你打开任何一个大模型的对话框输入一个问题模型吐出一个答案交互结束。这是最基础的使用方式。它的特征很明显单轮或多轮对话但每次只有输入输出模型的影响范围不超出这个对话窗口。它不会去改一个文件、不会调一个接口、也不会在你关掉窗口之后继续做任何事。这类场景很多很多日常的使用确实就停留在这一层完全够用。往右走一步配了工具的对话这是现在很多产品所处的位置。模型在给你回答的过程中会自己决定去调某些工具——搜一下网页、读一个文件、查一条数据库记录然后把结果整合进回答里。注意这里的关键词模型自己决定。不是你告诉它先搜索再回答而是它在推理过程中判断需要用工具然后调了。这个自主决策的能力是向 Agent 迈出的第一步。典型例子你问一个配了 Web Search 工具的模型今天特斯拉股价多少它自己去搜然后告诉你结果。你没有分步骤指挥它它自己知道该怎么做。再往右多步骤自动工作流这一层开始进入我认为真正有意思的区域了。你给模型一个高层目标它自己把这个目标拆解成子任务按顺序或者并行地执行中间根据每一步的结果调整后续计划最后给你一个成品。举个例子你告诉它帮我整理一份本周AI 行业的重要动态格式是摘要加分析输出到一个 markdown文件里。它会自己去搜索相关新闻、筛选、提炼重点、组织结构、写内容最后存文件。你全程没有做任何中间步骤的决策。这和上一层的本质区别是任务不是一步就完成的中间有多个环节而且环节之间有依赖关系需要根据上一步的结果决定下一步怎么做。最右端全自动、持续运行的 Agent这才是严格意义上的 Agent。特征是不需要人在循环里。你部署好之后它按照自己的计划定时运行监控外部输入处理事件调用服务完成任务。你设定一次目标然后它自己跑你只需要定期看结果、做策略层面的调整。这类系统从工程角度看已经接近一个普通的后台服务了只不过决策核心换成了大模型。三、构成 Agent 的三要素抛开各种营销话术从工程实现的角度来说一个 Agent区别于普通聊天的核心就是三件事。这三件事你加得越多自动化程度就越高你需要亲自介入的部分就越少。要素一工具调用能力Tool Use这是 Agent 能对外部世界产生影响的基础。没有工具调用模型就是一个嘴上说的系统——它能告诉你答案但它自己做不了任何改变。加上工具之后模型就能真正执行操作往数据库写数据、发一封邮件、调用第三方 API、在本地创建或修改文件、运行一段代码等等。从实现角度看工具调用的机制并不复杂。你定义一批工具每个工具有名称、描述和参数规格。模型在推理时如果判断需要某个工具就生成一个结构化的调用请求你的应用层解析这个请求实际执行对应的操作把结果回传给模型模型基于结果继续推理。这个循环是 Agent 能力的底层基础设施。要素二持久记忆Memory上下文窗口是模型的工作内存——对话窗口里的内容它都能看到但一旦超出窗口限制或者会话结束这些信息就没了。真正的 Agent 需要比这更持久的记忆机制。通常有几种做法会话级记忆在同一个会话内维护对话历史让模型能引用前面说过的事。跨会话持久化把重要信息存到文件或数据库下次启动时加载回来。语义检索记忆把历史信息向量化存起来需要的时候用语义搜索找相关内容注入上下文适合信息量很大的场景。记忆机制的质量直接影响 Agent 在长任务中的表现。没有好的记忆管理Agent 会失忆——忘掉最初的目标、做过的决策、你设定的约束。要素三执行循环Agentic Loop普通的问答是一次性的你输入模型输出结束。Agent 是循环的目标输入 → 规划 → 执行步骤 → 观察结果 → 调整计划 → 继续执行 → 直到目标达成。这个循环是 Agent 能完成复杂任务的关键。它让系统能够处理失败——某一步出错了可以重试或者换一个方法它让系统能够处理不确定性——不需要在开始时就把每一步都规划好可以根据实际情况动态调整。这三个要素缺了哪一个你的系统就只能算接近 Agent而不是真正的 Agent。四、Agent 能干什么几种典型落地形态理论讲完了来看实际能落地的场景。以下这几类我觉得是当前阶段最有实用价值的。研究型 Agent场景你有一个需要大量信息收集和整理的任务——调研某个技术方向、整理竞品分析、写一份行业报告。传统做法你自己去搜索引擎一个个查读文章、做笔记、整理成结构化的文档可能要花半天甚至更长。Agent 做法你描述清楚要研究的问题Agent自动拆解成几个核心子问题分别搜索评估来源质量提取有效信息汇总成结构化报告。整个过程几分钟到十几分钟。关键点你得在system prompt里告诉它什么叫高质量来源、输出格式是什么、对不确定的事情要怎么处理。这些指令越清晰结果质量越稳定。写作型 Agent场景你需要持续产出内容但不想每次都从零开始。核心价值不是让AI “替你写”而是让 AI 按照你定义的风格和规范来写你只需要做最后的审核和调整。实现方式把你的写作风格、用词偏好、内容结构、目标读者全都写进 system prompt作为固定的约束。这样每次的输出都在你的风格框架内减少大量来回修改的成本。代码型 Agent这是目前落地最成熟的场景也是整个行业里工具链最完善的方向。Claude Code、GitHub Copilot Workspace、Cursor 这些工具本质上都在做同一件事让模型不只是给代码建议而是能直接操作文件系统、运行代码、读取报错、根据报错修改代码、再运行、再验证形成完整的开发闭环。对个人开发者来说用这类工具来搭建自己的小工具、自动化脚本、内部系统效率提升是实实在在的。业务流程Agent适合处理那些重复性高、规则清晰、但量大到人工处理很费时间的任务——客户邮件分类回复、数据报表生成、合同文本提取关键信息等等。这类场景的重点是把业务规则翻译成清晰的 prompt然后验证边界情况的处理是否符合预期。五、实战零代码搭一个 Telegram Agent说了这么多理论来做点实际的。我们用 Claude Code 搭一个跑在服务器上的 Telegram 机器人它用Claude当大脑具备基本的对话能力和持久记忆。你不需要会写代码。整个流程需要的技能能打字、能看懂终端输出、能在Telegram 里操作。环境准备你需要三样东西Claude API 密钥去 console.anthropic.com 注册开发者账号申请 API Key。注意这是按token 用量计费的不是包月的那种。对个人机器人来说日常聊天量的话每月开销大概在几美元以内具体取决于你选哪个模型和使用频率。Telegram Bot Token在 Telegram 里搜索 BotFather这是 Telegram 官方的机器人管理工具。跟它发送/newbot按提示操作几分钟就能拿到一个 BotToken。一台Linux VPS跑一个 Telegram 机器人对服务器配置要求极低1 核 CPU、1GB内存就够了。DigitalOcean、Hetzner、Vultr 都有基础套餐一个月4-6 美元。国内的话阿里云轻量应用服务器也行。服务器拿到之后SSH 进去装 Claude Codenpm i -g anthropic-ai/claude-code模型选择在开始之前先决定好用哪个模型这影响成本和能力上限。Haiku 4.5最便宜响应快适合任务简单、对话量大的场景。Sonnet 4.6性价比最高的选择能力足够处理绝大多数个人用途推荐大多数人用这个。Opus 4.7能力最强成本最高只在需要做复杂分析、处理长文档、答案质量要求很高的时候才值得用。个人机器人日常用途Sonnet 4.6 完全够用。第一步让机器人跑起来进入服务器终端启动 Claude Code把下面这段描述贴进去Build me a Telegram bot that uses the Claude API as its brain. Requirements: - Language: Python - Library for Telegram: python-telegram-bot - Claude model: claude-sonnet-4-6 - The bot receives a message, sends it to Claude API, and returns Claudes response to Telegram - Maintain conversation history per user — each user has their own context within the session - Add a /start command that introduces the bot - Add a /clear command that resets conversation history for that user Create all necessary files: main bot file, requirements.txt, and a .env file template for API keys. Do not hardcode any API keys — read them from environment variables.这段prompt 在做的事是告诉 Claude Code 用 Python 写一个 Telegram 机器人每个用户有独立的对话上下文有/start 和/clear 两个命令API 密钥从环境变量读取而不是写死在代码里这是安全实践的基本要求。Claude Code 会生成代码、创建 requirements.txt、生成 .env 模板文件。你把你的实际 API 密钥填进 .env文件然后按它给你的指令运行就行了。第二步做成系统服务机器人代码能跑起来了但现在是手动在终端里运行的。你关掉 SSH 连接机器人就停了。需要把它配置成 systemd 服务让它在后台持续运行服务器重启后自动启动崩了自动重启Create a systemd service file so this bot runs automatically on my Linux VPS and restarts if it crashes. The service should: - Start automatically when the server boots - Restart automatically if it crashes - Load environment variables from the .env file in the project folder - Save logs to a file I can check later Also write me the exact terminal commands to install the service, start it, check if it is running, and view the logs.执行完这步之后你的机器人就是一个常驻的后台进程了跟 nginx 这类服务没有本质区别。第三步加上持久记忆现在有个问题机器人重启之后之前所有用户的对话历史全丢了。对于一个助理类的机器人这体验很差。修复方法是把对话历史持久化到文件The bot loses conversation history when it restarts. Fix this. Save each users conversation history to a JSON file on disk after every message. Load it back automatically when the bot starts. Add a maximum history length — keep only the last 20 messages per user so the context window never gets too long.这里有个细节要注意为什么要设最大历史长度因为模型的上下文窗口有token上限历史消息不加限制地积累最终会超出限制同时历史越长每次请求的 token 消耗也越多成本线性增长。保留最近 20条是个合理的折中——既保留了足够的上下文又控制了成本。六、扩展功能一步步让你的 Agent 更强基础框架搭好了接下来可以按需往上加能力。每加一个功能就是写一段新的prompt丢给 Claude Code让它把功能实现进来。联网搜索给 Agent 加上实时信息获取的能力。当用户问的是需要最新信息的问题时股价、新闻、最近发生的事Agent自动判断是否需要联网搜索而不是只靠训练数据里的知识来回答Add web search capability to the bot using the Tavily API. When the user asks something that requires current information — news, prices, recent events — the bot automatically searches the web and includes the results in its response. The bot should decide on its own when to search and when to answer from memory. Add TAVILY_API_KEY to the .env file template. Use Claudes tool use feature to implement this cleanly.Tavily 是专门为 LLM 集成优化的搜索 API比直接用通用搜索 API 的效果要好而且有免费额度够个人用途用。笔记存储让 Agent 能记住你说过的重要信息——想法、任务、研究结论随时可以调取Add a note-saving feature to the bot. When the user says save this, remember this, or note:, the bot saves the content to a notes.txt file with a timestamp. Add a /notes command that returns the last 10 saved notes. Add a /clearnotes command that deletes all saved notes.这个功能简单但实用尤其是把机器人当成随身助理用的场景。访问控制默认情况下任何人只要知道你机器人的用户名就能发消息给它消耗你的 API 额度。如果这个机器人是私人用的加一个用户 ID白名单是有必要的Add user restriction to the bot so only I can use it. Add my Telegram user ID to the .env file as ALLOWED_USER_ID.If anyone else messages the bot, it responds with This bot is private. and ignores all further messages from that user. Also add how I can find my own Telegram user ID — either through the bot itself or another method.这不是什么复杂的安全机制就是最基本的访问控制——不加这个你的机器人就是一个向全世界开放的免费 AI服务由你的账户付费。费用追踪Claude API 按 token 计费长期用着用着你可能不知道花了多少钱。加个简单的费用追踪Add basic cost tracking to the bot. After each Claude API response, log the number of input tokens and output tokens used.Keep a running total in a costs.json file. Add a /costs command that shows: total tokens used today, total tokens used all time, and an estimated cost in USD based on claude-sonnet-4-6 pricing.这个功能对控制成本意识很有帮助。当你能看到具体的 token 消耗你会自然而然地开始优化 prompt 的长度。定时主动推送让 Agent 主动给你发消息不是被动等你问Add a scheduled daily briefing to the bot. Every day at 8:00am, the bot sends me a message with: 1. A motivational one-liner (short, not cheesy) 2. A reminder to check my top priority for the day 3. One random useful fact about productivity or AI Send it to my Telegram user ID from the .env file. Use the schedule or APScheduler library to implement this.这个功能把机器人从被动响应模式推进了一步——有了主动触发它开始更像一个真正的助理了。七、日常维护几个你肯定会用到的操作机器人部署起来之后有几个操作你迟早会用到。修改 Agent 的系统人格打开机器人的主Python 文件找到文件顶部定义 system prompt的那个变量直接改文本内容保存文件然后sudo systemctl restart你的服务名重启完成后新的人格立即生效。不需要改任何其他代码。检查机器人运行状态sudo systemctl status 你的服务名看到 active (running) 就是正常运行中。看到 failed 就去查日志。查日志journalctl -u 你的服务名 -n 50看最近 50 行日志。出问题的时候错误信息都在这里找到具体的报错信息拿去问Claude Code 怎么修。新增功能进到项目目录启动 Claude Code直接描述你想要的功能它会读你现有的代码在不破坏已有功能的前提下把新功能加进去然后告诉你是否需要重启服务。八、最难搞的问题上下文管理如果你真的把Agent 用起来做一些持续时间长、步骤多的任务你一定会遇到这个问题Agent 开始忘事儿了。具体表现是任务做到一半它忘了最开始的目标或者做完一轮下次打开新会话之前做的进展全没了从头开始又或者任务跑着跑着它开始重复已经做过的步骤。这不是模型变傻了是上下文管理没做好。理解它发生的原因才能有针对性地解决。原因一上下文窗口溢出所有大模型的上下文窗口都有 token 上限。当对话历史超过这个上限时模型会截掉最早的内容——而最早的内容往往是最重要的你设定的任务目标、约束条件、已经做出的关键决策。这些东西丢了模型的行为就开始漂移。解法让 Agent 定期做上下文压缩。每隔 10-15条消息主动让它把到目前为止的进展、关键决策、剩余任务压缩成一段摘要用这段摘要代替原来的长历史继续运行The conversation is getting long. Compress everything important into a summary: 1. Original goal 2. What has been done and what was found 3. Key decisions made 4. What still needs to happen After writing the summary, continue from there. Treat this summary as the new starting point.原因二会话中断关掉浏览器、SSH 断线、重启服务——任何中断都会导致会话历史清空。下次打开Agent 从零开始不知道之前做到哪里了。解法在任务的关键节点主动让 Agent 生成一份检查点笔记存到文件里Before we continue, write a brief checkpoint: 1. What have you completed so far? 2. What are the key decisions or findings from this session? 3. What still needs to be done? 4. What context would you need to continue this task in a new session? Keep it under 200 words.下次打开新会话时把这个检查点贴进去Agent 就能从中断的地方继续而不是重来。完整的记忆文件格式After completing each major step, write a memory note in this format: STEP COMPLETED: [what was done] KEY DECISIONS: [choices made and why] CURRENT STATE: [where the task stands now] NEXT STEP: [what should happen next] This note will be used to resume the task in a new session without losing context.原因三任务中途被打断Agent 不知道中断之前执行到哪一步了下次恢复时可能会重复执行已经完成的步骤或者跳过某个步骤。解法任务开始前就把恢复机制设计好而不是出问题了再补救。用下面这个 prompt 恢复中断的任务We are resuming a task from a previous session. Here is the context: [paste your memory note here] Based on this: 1. Confirm your understanding of where we are 2. Identify the next step 3. Ask any questions needed to continue Do not repeat work that has already been completed.原因四关键信息没有固化有些信息是全程都需要的——你对任务的定义、对输出格式的要求、不能做某些事情的约束。这些放在对话历史里随着对话变长会被截掉。解法把这类信息直接写进 system prompt。System prompt在每次请求时都会被包含在上下文里不受对话历史截断的影响是最稳定的工作记忆。九、往更大处想Agent 的设计原则做了这么多我想最后提炼几条经验出来这是我在实际使用和开发过程中慢慢总结出来的指令要具体不要模糊“帮我写一篇好文章和帮我写一篇面向技术背景读者的 AI 行业分析1500字观点要有具体数据支撑结构是问题-分析-结论”效果差了一个数量级。模型的输出质量上限很高但下限很取决于你的 prompt质量。每个 Agent 只干一件事做个人助理的就别让它也去管代码写内容的就别同时让它做数据分析。单一职责在Agent 系统里同样适用——边界清晰的Agent更可靠出问题更好调试也更容易迭代。把不变的信息放 system prompt把变化的信息放对话历史你的写作风格、任务的基本约束、输出格式要求——这些是不变的放system prompt。当前任务的上下文、这次对话里产生的信息——这些是变化的放对话历史。分清楚这两类信息上下文管理会容易。