写在前面
笔者也是在晚上骑电动车的时候有这个想法,我并不认为agent开发是一个十分高大上的东西,技术是服务于人的,面试中的八股反而是一种技术霸凌,就应该介绍自己最出手的东西。笔者是现在一名底层的央企员工,但是也独自开发了很多个智能体。这次人工智能革命在我看来是一场打破了技术壁垒,学术壁垒,资产壁垒的革命。当然这些文章也将是由ai编辑,我不排斥ai编辑,我只想把好的方法和想法分享给大家。从去年的browseruse到年初的OpenClaw,本质上智能体其实就是大模型自动化办公一种的体现。你的任何自动化软件甚至脚本接入大模型后都是一种智能体,希望这个专栏能带给你启发,技术平权是每个极客的梦想,也希望每个二十多岁的年轻人能在迷茫的时候抓住技术这个稻草(兄弟们你如果真的不想先掏钱买token,找我吧,笔者还是能给你们申请点自己权限内能做的事情,能免费用一段时间,谁都有拮据的时候)
1.1 大白话解释Agent
我猜你打开这个专栏的时候,心里大概有这么几个疑问:
- Agent到底是个啥?
- 我能学会吗?我连Python都写不利索。
- 这玩意儿是不是得懂什么Transformer、注意力机制才行?
一个一个来。
Agent就是个会自己想办法干活的AI助手
先扔掉所有术语。你想象一下你带了个实习生------你跟他说"去把上个月的销售数据整理成报表",他不会站在那等你手把手教,而是自己打开系统、找到数据、用Excel拉个表、发到你邮箱。
Agent就是那个实习生。
只不过这个实习生是AI。你给它一句话,它自己想步骤、自己找工具、自己执行、自己检查结果,直到把活干完。
跟传统程序有啥区别?
传统程序是这样的:
你写规则 → 程序按规则执行 → 输出结果
比如你要写个自动发邮件的脚本,你得写清楚:连接哪个邮箱服务器、从哪读收件人、邮件标题是什么、正文模板是什么、什么时候发。每一步都得你提前想好。
Agent是这样的:
你给个目标 → AI自己想怎么做 → 自己执行 → 遇到问题自己调整 → 输出结果
同样是发邮件,你只需要跟Agent说"把周报发给张总",它会自己去找张总的邮箱、自己生成邮件内容、自己发出去。中间哪一步卡了,它还会换个思路再试。
你看出区别了吗?传统程序靠人写规则,Agent靠AI自己推理。
这就是为什么Agent火了------以前你得写500行代码才能搞定的事,现在一句话就行。
不需要理解Transformer也能做Agent
这句话我放在这,你记住:
你不需要理解发动机原理也能开车。
懂Transformer、会推导注意力函数,那是算法工程师的事。做Agent开发,你需要的是:
- 会写Python(能跑起来就行,不要求优雅)
- 理解API调用(说白了就是发HTTP请求)
- 会读别人的代码(GitHub上抄......啊不,学习,github就是你最好的学习园地,不会写项目,不会参考吗?)
- 有一个真实的业务需求(这个最重要,没有需求你做不出好东西)
后面这些东西,我会在这一章里带你全部搞定。
1.2 拆解browser-use项目(国内:https://gitee.com/mirrors/browser-use,原项目:https://github.com/browser-use/browser-use)

既然说了Agent就是"看情况→想下一步→动手→重复",那我们来找一个真实的项目验证一下。
browser-use,GitHub上98.6k Star的项目,2024年底爆火,已经拿了千万美元融资。它干的事情很简单:让AI控制你的浏览器,替你自动操作网页。
比如你说一句"去淘宝搜索笔记本电脑,按销量排序,把前10个商品名和价格整理成表格",它就会自己打开浏览器、输入搜索词、点击排序、抓取数据、生成结果。
听起来很神奇对吧?我们拆开看看它到底怎么做的。
先跑起来再说
安装就三步:
bash
# 第1步:装Python 3.12(如果没装的话)
# 去python.org下载安装,别用3.14,3.12最稳
# 第2步:装browser-use和浏览器
pip install browser-use
browser-use install # 这一步会自动装Chromium
# 第3步:设置API Key(在.env文件里)
# 四选一,不会弄?往下看
API Key怎么搞?你有四个选择:
| 选项 | 环境变量 | 怎么拿 |
|---|---|---|
| Browser Use官方 | BROWSER_USE_API_KEY= |
注册就送5个免费任务 |
| 选个多模态模型 | QWEN3= |
硅基流动、阿里、各个运营商 |
| OpenAI | OPENAI_API_KEY= |
充值 |
| Anthropic | ANTHROPIC_API_KEY= |
充值 |
没钱?一个皮肤的钱都没有?
然后写个最简单的代码:
python
from browser_use import Agent, ChatOpenAI
import asyncio
async def main():
agent = Agent(
task="去百度搜索'今天天气',把搜索结果的第一条标题告诉我",
llm=ChatOpenAI(model="gpt-4.1-mini"),
)
result = await agent.run()
print(result.final_result())
asyncio.run(main())
跑一下,你会看到浏览器自动打开、自动输入搜索词、自动点搜索、自动提取结果。
5行代码,一个能干活的Agent就跑起来了。
打开引擎盖:它到底怎么跑的
跑起来了,但光跑起来没用,你得知道它里面是怎么转的。
browser-use的核心是一个叫Agent的类,它的执行逻辑说白了就是一个循环,每次循环做5件事:
┌─────────────────────────────────────┐
│ 第1步:看一眼当前页面 │
│ 截个图、读一下DOM树(前端的组件)、看看URL │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 第2步:把看到的东西告诉大模型 │
│ "当前页面长这样,任务是这个, │
│ 你觉得下一步该干啥?" │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 第3步:大模型告诉你要做什么 │
│ "点击搜索框,输入'今天天气'" │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 第4步:照做 │
│ 真的点击、真的输入 │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 第5步:记录下来,回头看看 │
│ 这一步做了啥、花了多少Token │
└──────────────┬──────────────────────┘
│
▼
没干完?回到第1步
干完了?输出结果
这就是全部。没有黑魔法,没有玄学。
你把它抽象一下:
Agent = 观察 + 思考 + 行动 + 记录 + 重复
这五个词你记住,后面所有Agent框架的底层逻辑都是这个。LangChain是、AutoGPT是、MetaGPT也是。区别只是谁来做"思考"那一步(用什么模型)、"行动"那一步(用什么工具)、"记录"那一步(用什么存储)。
关键代码在哪里
browser-use的源码结构长这样:
browser-use/
├── browser_use/ ← 核心代码在这
│ ├── agent/
│ │ └── service.py ← Agent主类,run()和step()都在这
│ ├── browser/ ← 浏览器控制
│ ├── tools/ ← 工具定义(点击、输入、滚动等)
│ └── prompts.py ← 系统提示词(130行,精华在这)
├── examples/ ← 示例代码
└── pyproject.toml ← 项目配置
最核心的文件是agent/service.py,里面有run()和step()两个方法。run()是主循环,反复调用step();step()就是上面说的5步。
我强烈建议你打开这个文件自己读一遍。不用全懂,找到run()方法,看看那个while循环,你会发现------这不就是我上面画的那个图吗?
做个实验:改一行提示词看效果
browser-use的提示词在prompts.py里,有130行。这是整个项目最精华的部分------所有"智能"都藏在这130行里。
找个好玩的实验:打开prompts.py,找到系统提示词里关于"你是一个浏览器操作助手"那部分,改成:
你是一个急性子的浏览器操作员,做事要快,不要犹豫,不要反复确认。
然后再跑一次同样的任务。你会发现Agent的行为明显变了------操作变快了,但也更容易出错。
这就是提示词的力量。你改一行字,Agent的"性格"就变了。
1.3 五分钟跑通第一个Agent
上面用browser-use跑了一个Agent,但它有点重------得装浏览器、得装Chromium、得等它启动。
我们来做一个更轻的:一个会搜索的AI助手,5行代码,不需要浏览器。
环境准备
你需要两样东西:
- Python 3.10以上(装了吗?装了就跳过)
- 一个API Key(OpenAI的或者国内的都行)
没钱买API Key?私信作者吧,作者有体验卷,或者用Ollama,本地免费跑(免费的都是最贵的给你个方法):
bash
# 安装Ollama(去ollama.com下载安装包)
# 装完之后拉一个模型
ollama pull qwen2.5:7b
# 模型下载完就自动启动了,默认在 localhost:11434
Ollama第一次下载模型可能比较慢(7B模型大约4GB),耐心等。后面用的时候是秒启动,不花钱。
最小代码:5行搞定
用OpenAI的API:
python
from openai import OpenAI
client = OpenAI() # 自动读环境变量 OPENAI_API_KEY
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "中国有多少个省份?"}]
)
print(response.choices[0].message.content)
用Ollama本地模型(免费):
python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
response = client.chat.completions.create(
model="qwen2.5:7b",
messages=[{"role": "user", "content": "中国有多少个省份?"}]
)
print(response.choices[0].message.content)
看到没?两个代码唯一的区别就是base_url不同。Ollama故意把接口做成跟OpenAI一模一样,所以你的代码几乎不用改。
这已经很酷了,但它还不能算Agent------它只是你问它答,不会自己"想办法"。
我们加一步,让它能用搜索工具:
python
import json
from openai import OpenAI
client = OpenAI() # 或用Ollama
# 定义一个"搜索"工具
tools = [{
"type": "function",
"function": {
"name": "search",
"description": "搜索互联网获取最新信息",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "搜索关键词"}
},
"required": ["query"]
}
}
}]
# 第1步:问模型
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{"role": "user", "content": "今天的新闻有什么?"}],
tools=tools
)
# 第2步:看模型要不要调工具
message = response.choices[0].message
if message.tool_calls:
for tool_call in message.tool_calls:
if tool_call.function.name == "search":
args = json.loads(tool_call.function.arguments)
print(f"模型想搜索:{args['query']}")
# 这里你可以接入真正的搜索API
# 比如用requests调用百度/Google
search_result = f"搜索'{args['query']}'的结果:今天是晴天,没有大新闻"
# 第3步:把搜索结果喂回模型
response2 = client.chat.completions.create(
model="deepseek",
messages=[
{"role": "user", "content": "今天的新闻有什么?"},
message,
{"role": "tool", "tool_call_id": tool_call.id, "content": search_result}
],
tools=tools
)
print(response2.choices[0].message.content)
else:
print(message.content)
这段代码虽然长了点,但逻辑非常清晰:
- 告诉模型你有一个搜索工具
- 模型收到问题后,自己判断要不要用搜索
- 如果用,它会告诉你搜什么
- 你去搜索(这里我用了假数据,你可以换成真API)
- 把搜索结果喂回模型,它给你最终答案
看到了吗?模型自己决定要不要用工具、用什么工具。 这就是Agent跟普通聊天机器人的根本区别。
把这段代码跑通,恭喜你------你已经理解了Agent最核心的机制。
常见问题排雷
问题1:报AuthenticationError或401
你API Key没填对。检查一下:
bash
# 看看环境变量设了没
echo $OPENAI_API_KEY # Mac/Linux
echo %OPENAI_API_KEY% # Windows CMD
没设的话:
bash
# Mac/Linux
export OPENAI_API_KEY="sk-你的key"
# Windows
set OPENAI_API_KEY=sk-你的key
或者创建一个.env文件,写一行OPENAI_API_KEY=sk-你的key,代码里加from dotenv import load_dotenv; load_dotenv()。
问题2:报RateLimitError或429
调用太快了,API有限额。免费账号每分钟3次,付费账号每分钟500次以上。解决办法:
- 加
time.sleep(1)在两次调用之间 - 或者换Ollama本地跑,没限额
问题3:Ollama下载模型太慢
国内网络访问Ollama的模型库可能很慢。两个办法:
- 设置镜像:
export OLLAMA_HOST=https://ollama.ai-llm.xyz - 手动下载GGUF文件,用
ollama create本地导入
问题4:模型返回的JSON解析报错
这是常态,不是你的问题。大模型有时候返回的JSON格式不太标准,加个try-except:
python
try:
args = json.loads(tool_call.function.arguments)
except json.JSONDecodeError:
args = {"query": "默认搜索词"} # 兜底
本章的坑
-
browser-use需要Chrome浏览器 ,服务器上没装?用headless模式:
Agent(task=..., llm=..., browser_profile=BrowserProfile(headless=True)) -
Ollama本地模型首次下载慢,7B模型大约4GB。换国内镜像源,或者先下载GGUF文件手动导入。
-
API Key填错了报401 ,99%的情况是环境变量没生效。用
echo命令确认一下,别光设了就以为好了。 -
pip install browser-use报错 ,大概率是Python版本不对。browser-use要求3.10以上,推荐3.12。用
python --version确认一下。或者换成国内的镜像源,我建议还是阿里的,毕竟是大厂。 -
deepseek没有这个模型 ,说明你的API账户还没开通。换成
别的名字试试,或者用Ollama本地模型。
本章配套论文
无。这章是纯动手,不用看论文。下一章我们开始讲历史和生态的时候会提到。
下一章预告
第2章我们要聊一个问题:凭什么你一个普通人也能做Agent开发?以前这活不是博士干的吗?
答案是:这次AI革命,把技术壁垒、学术壁垒、资产壁垒全打破了。我们会用OpenClaw这个60天涨25万Star的项目来证明------你不需要写多少代码,也不需要多少预算,你只需要一个好想法和一台能上网的电脑。