loading image

新手怎么造属于自己的 agent(最小路径)

先说一件上周发生的事 上周五,早上 10 点半,我约了一个新客户。 9 点 55 分,我开车前往,路上才想起来:我还没研究过这家公司。 做过 BD 的人应该懂这一刻。往常得在打车路上一边晕车,一边翻官网、LinkedIn、最近半年的新闻,赶在客户开口前硬挤出三个能聊的切入点。 但

Posted by Enovace on June 3, 2026

先说一件上周发生的事

上周五,早上 10 点半,我约了一个新客户。

9 点 55 分,我开车前往,路上才想起来:我还没研究过这家公司。

做过 BD 的人应该懂这一刻。往常得在打车路上一边晕车,一边翻官网、LinkedIn、最近半年的新闻,赶在客户开口前硬挤出三个能聊的切入点。

但那天我没翻手机。

我出门前,只在终端敲了一行命令。

到客户楼下的时候,手机里已经躺着一份 4 页的客户背景简报:高管履历、近期融资和业务动作、可能的预算痛点,还有三个适合作为破冰话题的新闻引子。

做这个东西,我花了多久?

一个下午。代码不到 40 行。

我讲这件事,不想显得自己多会写代码。这个东西真的很基础,老练的工程师看了大概会笑。可它跑起来以后,我对“造 agent”这件事的感觉彻底变了。

在那之前,我一直以为造 agent 得先啃几篇长文,装一堆框架,配一堆 key,想清楚架构,画好流程图,再拿三天时间搭一个工程项目。

结果真动手才发现,我之前花在“想”上面的时间,远远超过真正写代码的时间。

后来这个小东西我又陆续加了几样能力:见完客户当晚,把录音转成会议纪要和跟进邮件草稿;每周一早上,把上周所有进行中的客户进展整理成一份给老板看的周报;偶尔也帮我盯一下我关注的几只美股的盘后新闻。

每一项加起来都不超过 50 行代码。每一项都帮我每周省下几个小时。那些以前死活推不掉、又没什么创造性的杂活,突然少了一大截。

Image

而我做这些事之前,没有学过 Python 的“AI 工程”那一套,没看完任何一门 agent 课,也没读完那本被无数人推荐的 12-Factor Agents。

这篇写给和我当时一样的人:想造一个属于自己的 agent,又被各种概念压得不敢动手。

我不写完整的“系统课”。这里只给你四样东西:

  1. 一份新手能看懂的行话翻译,不下定义,只给类比
  2. 一个第一天就能下的决定,帮你绕开工具栈瘫痪
  3. 一个下午能跑通的最小例子,照着抄就能出结果
  4. 一段我自己当年卡在哪的回忆,让你知道“原来你也菜过”

一、四个词的翻译:agent、tool、context 和 workflow

新手卡住的第一道坎,很多时候不在技术。

是那几个词本身就没读懂。

我不给你定义。定义一搜全是,看完还是糊。

我给你类比。对工程出身的人来说,这几个类比够用了,不求严丝合缝。

agent ≈ 一个会自己开终端跑命令的实习生你给他一个任务,他自己决定下一步是查资料、写文件,还是回来问你。

他不按写死的 if-else 走。每一步都要重新想:“我接下来该干啥?”

他可能绕路,可能卡住,也可能做出超出你预期的事。这就是 agent 的脾气,别一上来就把它当 bug。

tool ≈ 给实习生的 API 文档实习生不知道你的内部系统怎么用。你得告诉他:“要查天气,敲这个接口,传这两个参数,返回结果长这样。”

每多写一个 tool,他能做的事就多一件。

这里有个很值钱的小经验:tool 的描述写得好不好,直接决定他用得对不对。这件事比选哪个模型重要得多。

context ≈ 实习生此刻的短期记忆你跟他说过的所有话,他自己执行过的命令,命令返回的结果,都按时间顺序堆在他脑子里。

但他的脑子有上限。塞太多,他就开始忘前面的事。

你给他喂资料的时候要挑重点。别把整个公司的 wiki 一口气全塞进去。

workflow ≈ 写死的流水线你提前画好箭头:第一步干 A,第二步干 B,第三步干 C,让实习生照着走。

他只能按这条路走。

有个反常识的点:大多数你以为该用 agent 的地方,用 workflow 就够了。流水线没那么性感,可它稳、便宜、好调试。


如果你还想扩一下词表:

  • prompt ≈ 你写给实习生的工牌和岗位说明书,开工时塞给他的那张纸
  • memory ≈ 实习生的工作日记,跨次对话也带着的那本
  • skill 和 sub-agent ≈ 实习生手里的一本本说明书,碰到某类问题就翻这本
  • MCP ≈ 一个统一的接口标准,让所有工具能用同一种方式接给实习生,不用每个工具都重写一遍说明书

这套类比的核心很简单:这些词全都是为了让实习生干活才存在的辅助物。

你要造的 agent,说到底就是雇这个实习生,再给他配齐干活要用的东西。

Image

二、第一天就下的决定:别比较,照下面这条走

新手最容易死在选择瘫痪。

“我应该用 LangChain 还是 LangGraph?”

“OpenAI SDK 还是 Anthropic SDK?”

“要不要先学 RAG?”

“要不要先看 12-Factor Agents?”

“先 Python 还是 TypeScript?”

我建议你今天先把这些问题全部关掉。

先沿着下面这条路跑一遍。别比较,别犹豫,跑通以后再换也来得及。

工具栈:选其中一个

如果你完全不想写代码,用 Claude Code 写一个 markdown 文件作为你的 agent。一个文件就是一个 agent,门槛低到有点不真实。

如果你愿意写一点 Python,装一个叫 smolagents 的小库。30 行左右,就能跑出一个会调外部工具的 agent。

如果你已经在用 OpenAI 全家桶,用它官方的 Agents SDK。文档最完整,出问题也容易查。

这三个里随便选一个。不要花超过 10 分钟比较。

你跑通第一个之后,会发现它们的差别没想象中那么大。

Image

第一个任务:也选其中一个

新手最常犯的错,是第一个 agent 就想做成完整产品。

比如“自动帮我找选题、写文、配图、发布”。

你先别碰这个。专业团队做几个月都未必稳定。

第一天的 agent,目标只要这么小:让它读一个东西,输出另一个东西。

可以从这些里面挑:

  • 读一篇文章,整理成三句话
  • 读你的 Inbox,挑出 3 封需要回复的邮件
  • 读一个网页,提取里面所有的人名和公司
  • 读一段会议录音文字稿,整理成行动项

就这种级别。一个输入,一个输出,一个 tool 调用。

为什么要这么简单?因为这一天的真正目的,并非做出一个马上改变人生的 agent。你只是先把“agent 这件事”从抽象的恐惧,变成手指真的敲过的东西。

跑通这一步以后,你才有资格继续想:“如果我再加一个 tool 会怎样?”“如果它读完邮件还能自动归档,会怎样?”

到那时候,瘫痪会自己松开。

三、一个下午能跑通的最小例子

下面给你两个版本。任选一个,不要两个都做。

我自己更推荐版本 A,因为它更接近未来扩展的方向。版本 B 更适合完全没写过 Python 的人。


版本 A:30 行 Python,一个会上网搜东西的 agent

这是给“愿意写一点点代码”的人。

前置准备,10 分钟以内:

pip install smolagents

然后准备一个 LLM 的 API key。OpenAI、Anthropic、Hugging Face 免费的那个都行。

完整代码:

from smolagents import CodeAgent, DuckDuckGoSearchTool, LiteLLMModel

# 1. 选一个模型作为这个实习生的"脑子"
model = LiteLLMModel(model_id="anthropic/claude-haiku-4-5")

# 2. 给他配一个工具:能上网搜
agent = CodeAgent(
    tools=[DuckDuckGoSearchTool()],
    model=model,
)

# 3. 给他一个任务
agent.run("查一下 2026 年 5 月美联储议息会议的结果,用一段话总结")

跑起来。

你会在终端里看到它自己思考,自己决定要调用搜索,自己读返回结果,再自己总结。

这已经是一个 agent 了。

它没有 AutoGPT 那种花哨的全自动,也没有复杂的多 agent 协作。可它确实满足 agent 的核心:下一步怎么走,由模型自己决定。


版本 A++:再加一个你自己的 tool,5 行

跑通之后你大概会想:“那我能不能让它做点别的?”

能。

加一个 tool 很简单。用一个 @tool 装饰器,把任何 Python 函数变成 agent 能用的工具:

from smolagents import tool

@tool
def get_stock_price(ticker: str) -> str:
    """查询美股某只股票的当前价格。

    Args:
        ticker: 股票代码,比如 AAPL、NVDA
    """
    # 这里你随便接一个免费的金融数据接口
    # 比如 yfinance 之类
    import yfinance as yf
    return f"{ticker} 当前价格:{yf.Ticker(ticker).info['currentPrice']}"

agent = CodeAgent(
    tools=[DuckDuckGoSearchTool(), get_stock_price],
    model=model,
)

agent.run("查一下 NVDA 现在的价格,再搜一下今天有什么相关新闻")

注意那个 docstring。它就是你给实习生的 API 文档。

写得越清楚,它用得越准。

这一步跑通之后,“agent 是什么”这件事就不再悬空了。


版本 B:10 行 Markdown,零代码

这是给“我真的不想碰 Python”的人。

前置:装一个 Claude Code,命令行版的 Claude。

然后创建一个文件 ~/.claude/agents/newsletter-summarizer.md:

---
name: newsletter-summarizer
description: 当用户提供一篇英文文章或 newsletter 时,提取关键观点并总结成中文。
tools: WebFetch, Read
model: haiku
---

你是一个专门读英文 newsletter 的助手。

当用户给你一个 URL 或一段英文文本时:
1. 读完整篇
2. 提取最重要的 3 个观点
3. 每个观点用一句中文和一句原文佐证
4. 最后给一句你的个人评价

格式要严格按这个来,不要加多余的解释。

保存。在 Claude Code 里输入:

帮我用 newsletter-summarizer 整理这篇 https://stratechery.com/某一篇

完事。

一个 markdown 文件就能变成一个 agent。

第一次见到这件事的人,通常都会觉得离谱。但它真的能跑。


不管你选 A 还是 B,跑通之后,请做一件事:

关掉电脑,去散步十分钟。

然后回来问自己一个问题:“这个东西,如果我再加一个 tool,或者改一段 prompt,能用来帮我处理生活里的哪件小事?”

那个答案,才是你接下来真正要造的 agent。

四、考古:我新手时卡在哪

我尽量回想了一下第一次接触 agent 时的卡点。这部分越具体,对你越有用。


卡点 1:以为 agent 必须像电影里那种“全自主 AI”

我最早看到 agent 这个词,脑子里跳出来的是 AutoGPT,是 Devin 那种“我给一个目标,它自己开始建一整个 SaaS”的 demo。

我一上来就在想:“那我得先搭一个能规划任务、能记长期记忆、还能多 agent 协作的系统。”

结果很尴尬。

一行代码也没写。

后来我看明白了:agent 更像一根连续的滑杆。

最左边一格:LLM 决定走路径 A 还是路径 B。这就已经有一点 agent 的味道了,只是程度很低。

往右一格:LLM 决定调哪个工具、传什么参数。

再往右:LLM 决定要不要继续下一步、什么时候停。

最右边那种全自主系统,只是滑杆的尽头。你 99% 的需求,都会落在中间偏左的位置。

新手该造的 agent,就从左边那一段开始:一个会决定调哪个工具的 LLM。

先别管 AutoGPT。


卡点 2:agent 和 workflow 我分不清

我有很长一段时间觉得它俩是一回事,反正都是“多个 LLM 调用串起来”。

直到有一天我才反应过来,区别其实很短:

workflow 是你画好了流程图,LLM 沿着箭头走。

agent 是你只给目标,LLM 自己决定下一步往哪走。

举个例子。

我要做一个“把英文文章翻译成中文小红书风格”的东西。

  • workflow 版:先调 LLM 翻译,再调 LLM 改写成小红书风,最后输出。流程写死。
  • agent 版:告诉 LLM“目标是出一篇中文小红书帖子”,再给它一个翻译工具和一个查小红书爆款的工具,让它自己决定先干啥。

90% 的情况,workflow 版就够用,而且更稳、更便宜、更可调试。

新手很容易在该用 workflow 的地方硬上 agent。结果通常是慢、贵,还不稳定。

我现在的判断标准很土:“这个任务的步骤,我能不能提前画出来?”

能画出来就 workflow。画不出来,再考虑 agent。


卡点 3:context 和 memory 是一回事吗

很长时间里,我以为 LLM“记得”我之前说过的话,就说明它有记忆。

后来才明白:

  • context 是这一次对话里塞给 LLM 的所有文本,包括 system prompt、历史消息、工具返回。对话结束就没了。
  • memory 是你主动写到外面的东西,可能是文件、数据库、向量库。下一次对话开始时,你再把它读出来,塞回 context。

换句话说,LLM 本身没有那种人类意义上的“记忆”。

所谓 memory,大多是你在外面手动给它存取东西。

这件事一想通,很多困惑都会消失:为什么聊太长它会忘?因为 context 满了。为什么 ChatGPT 现在能记住你?因为它在背后做了 memory 的存取。

新手不需要立刻搞 memory。

你第一天的 agent,完全不需要“记得昨天发生了什么”。等你跑通了,再加也不晚。


卡点 4:我以为是模型不行,其实是 prompt 没写好

我早期跑出来的 agent,经常做蠢事:选错工具、传错参数、提前停止。

我第一反应是:“这模型不行。”

然后换更贵的模型。

问题没解决。

后来才意识到,很多问题出在我的 tool 描述和 prompt。

举两个具体的例子:

  • 我有个 tool 描述写的是 "查询用户信息"。模型完全不知道什么时候该用它。后来我改成 "根据邮箱地址查询该用户的订单历史和最近一次登录时间。当用户问'我上次什么时候来过'这类问题时使用此工具。" 调用就对了很多。
  • 我有个 agent 总是在中间步骤就 return。后来发现是 prompt 里写了“完成任务后请尽快返回结果”。“尽快”这两个字把它催早了,删掉就好。

写 tool 描述,比选模型重要得多。

这句话听起来没那么酷,但从工程角度看,真挺值钱。


卡点 5:选不出工具栈

LangChain?LangGraph?LlamaIndex?CrewAI?AutoGen?smolagents?Pydantic AI?OpenAI Agents SDK?Anthropic Agent SDK?

我曾经花了整整一周比较这些东西。

一周之后,什么都没造出来。

后来我接受了一件事:新手期,工具栈的选择大多是噪音。它们的差别,要等你真的开始造复杂系统之后才会显出来。

新手选工具栈,就看一个标准:哪个上手最快,就先用哪个。

等你跑通 3 到 5 个小项目,你自然知道该换哪个。

写在最后

这篇里反复出现的意思其实就一个:完成比完美重要。

我自己造第一个 agent 的时候,最大的收获还真不在那个 agent 本身。

是我突然发现,原来我以为很高大上的“AI 应用”,本质上就是写一个 prompt,给它接几个工具,再让它跑一个循环。

听起来朴素得让人有点失望。

可你亲手跑通过一次以后,看整个 AI 领域的感觉会变。

你看到一篇 Anthropic 的论文,不会再觉得它离你特别远,因为你知道它大概在讲哪一层。

你看到一个很炫的 demo,会本能地拆:“它大概用了几个 tool?循环怎么停?中间有没有 workflow?”

慢慢地,你会冒出一个念头:

我好像也能造一个。

Image

这种感觉装不出来。它只能靠那一个下午、那 30 行代码、那个能跑出结果的小东西换来。

别看完这篇文章就关掉。

挑一个版本,A 或 B 都行。再挑一件你生活里经常烦的小事,比如“要是有个东西能帮我做这个就好了”。

今天下午就去跑。

跑出 bug 没关系。

跑得很笨也没关系。

怎么样都没关系的。

只要它跑起来了,你就已经从“看 agent 的人”,变成了“造 agent 的人”。

中间没有过渡阶段。

就那一刻。

关于作者Kyrie**— 前国内大厂 R&D 工程师,现居曼谷,做中国科技企业出海 BD。持续分享出海一线真实记录、AI 在业务里的实战用法,偶尔也聊聊美股投资和国外生活。