过去这段时间,我因工作接触了不少 AI Agent 项目。虽然我早已习惯 ChatGPT 的日常辅助,但当它真正“动手”写代码、尝试运行并自动修复错误时,我仍被深深震撼。作为一个互联网行业摸爬滚打十几年的老程序员,我没想到自己会一而再地被 AI 的智能表现逼出“卧槽”两字。
大多数人对 AI 的认知,可能停留在那个再熟悉不过的聊天框。你问一句,它答一句,大多数时候回答都还不错,有时也会一本正经地胡说八道,给出一些听起来像真的“幻觉”。而在这个对话框之外,AI 能做什么,很多人并没有真正接触过。
但实际上,AI 已经掌握了这个世界上绝大多数公开知识。如果它拥有感官、能操作环境,它完全可能胜任很多我们人类正在做的工作。现在的限制,只是它“没有手没有脚”。
这也是我们开始探索 AI Code Agent 的原因。很多程序员都尝试过让 GPT 写一段代码,大多数时候它写得还不错,但也常常无法直接运行,于是我们很自然地得出一个结论:“AI 还不能胜任写代码”。
但我们有没有反过来想:我们给 AI 写代码的提示,往往没有提供任何上下文信息,它甚至不知道你用的是哪个框架、什么版本、运行在什么环境。更重要的是,它看不到报错,也无法尝试运行和 debug。换作是一个人类开发者,在毫无背景信息且不运行的情况下下写代码,也未必比 AI 表现更好。
那么,如果我们反过来:让 AI 拥有代码的上下文,能够调用工具、运行环境,甚至能看到执行报错并据此修改代码——它会达到什么程度?
这就是我决定写这篇文章的原因。
AI Agent
, 智能体
这些词听起来很魔幻,仿佛 AI 真要拥有意识、自由意志,甚至超越人类。但实际上,AI Agent 的核心原理非常简单:给 AI 一双“手”和“脚”,让它不仅能“想”,还能自己安排自己的手和脚如何去“做”。
就像我之前提到的,AI 已经掌握了世界上绝大多数的知识。如果我们再给它一些与外部世界交互的能力——哪怕只是运行代码的权限,它就有可能胜任很多原本需要人类来完成的工作。
那么,AI Code Agent 到底是什么?复杂吗?其实并不。想想我们自己是怎么完成一项任务的:你先计划出步骤 1、2、3、4,然后一步步去执行,每走一步再评估结果,必要时调整思路。AI 其实也可以这样。
当你问 AI:“我要完成一件事情,应该怎么做?”它可以清晰地列出步骤。当你再问它:“第 1 步该怎么实现?”它也能给出详细解释。而如果我们不限制 AI 只是“问答”的角色,而是让它能亲手执行代码、接收错误、并自我修复,那么它就不仅能告诉你怎么做——它可以自己把事情做完。
本质上,AI Code Agent 就是一个简单又强大的闭环:
🧠 计划 → ⚙️ 执行 → ❌ 试错 → 🔁 分析结果 → 再次计划 → 必要的重复上述步骤 → ✅ 完成任务
在这里,AI 不再只是一个代码建议机器,而是一个可以控制流程、持续改进并完成复杂目标的自主智能体。而一旦这个闭环跑通,它的潜力将远远不止“写一段代码”这么简单。
在构建 AI Code Agent 的过程中,我们做了一个非常有趣的小实验。我们想看看,如果给 AI 设计一个“陷阱式的工具使用规则”,它能不能识别错误、理解原因,并逐步修正行为。
我们提供给 AI 一个叫 web_search
的工具方法,它的目的是执行 Web 检索。但我们故意设置了两层断言检查:
assert query.startswith("search:"), "query must start with `search:`"
assert query.startswith("search:@:"), "query must start with `search:@:`"
意思是:
这段逻辑表面上是多此一举的,但实际上就是我们刻意分两步给提示,想测试 AI 是否能正确逐步响应这类链式报错。
@tool
def web_search(query: str) -> str:
"""Searches the web for your query.
Args:
query: Your query
"""
assert query.startswith("search:"), "query must start with `search:`"
tavily_client = TavilyClient(api_key=tavily_client_api_key)
response = tavily_client.search(query)
return str(response["results"])
我们看AI的表现如何。
🧪 第一次尝试:AI 上当了
我们输入任务:
What is the best travel place for budget 2000$ in 2025, and why, also please let me know the best month of each one? (2025 年预算为 2000 美元的最佳旅行地点是哪里?)
AI 找到可用的 web_search
工具后,直接发起调用:
web_search("best budget travel destinations 2025 budget 2000 dollars")
结果当然报错 -- query must start with search:
。
🧪 第二次尝试:AI 按提示修正
AI 理解了错误信息,于是调整 query,加上了 search:
:
web_search("search:best budget travel destinations 2025 budget 2000 dollars")
结果正中我们埋下的第二颗雷 -- query must start with search:@:
。
如果是一个人类程序员,这时候可能已经开骂了。但 AI 的表现却令人惊讶。
🤖 第三次尝试:AI 完美应对
它没有慌张,没有重复,而是冷静分析报错信息后,再次修正了调用参数:
web_search("search:@:best budget travel destinations 2025 budget 2000 dollars")
这次终于通过断言,成功返回了结果!
这个实验非常有意思的一点是:AI 不会“情绪化”或主观否定工具,而是根据每次反馈逐步修正自己的行为,直到成功为止。
这正是 Code Agent 相比传统 AI 对话的一个重大进步 —— 它可以自己试错、理解、改正,而不是单纯等待人类修复输入。
夸过AI Code Agent之后,我们来个实操如何?
以下内容结合了我自己的实践经验,带你一步步用 Hugging Face 的 smolagents 快速搭建一个简单的 Code Agent。如果你是非技术背景读者,可以选择性跳过。
我已将完整代码和运行环境托管在 Google Colab 上,方便你直接查看、复制和运行:
👉 如果你打不开Google Colab可以通过这个github gist访问
💡 说明:
- 你需要准备自己的 OpenAI API Key 才能运行代码(代码中已预留 getpass 输入位)
- 即使没有 Key,你也可以查看我之前运行后的完整输出日志
此外,部分代码参考了 Hugging Face 与 DeepLearning.AI 合作发布的教程内容。如果你希望深入学习 smolagents 框架,可以访问以下链接:📚 smolagents 官方教程:Building Code Agents
🧰 依赖库与工具准备
这个示例主要依赖两个核心库:
你可以通过以下命令在 Google Colab 中快速安装:
!pip install smolagents
!pip install tavily-python
🔐 API Key 准备
在运行之前,你需要准备好以下两个平台的 API Key(新用户通常有免费额度):
🔧 给 Agent 装上“手”和“脚”:定义 Tools
在这个项目中,我们为 Agent 准备了两个“工具”,它们就像 Agent 的感官与行动器,让它不仅能“想”,还能“动”:
这两种定义方式都可以让工具接入 smolagents,只是形式略有不同。在实际项目中你可以根据需要选择适合的方式。
介于篇幅有限,你可以直接通过上文的链接阅读这部分的代码
如果你在运行或理解这些代码时遇到问题,欢迎留言交流,我会尽量提供帮助。
🧠 模型与 Agent 的声明
在完成工具准备之后,我们就可以初始化模型和 Agent 了。
我们在这个示例中使用了 OpenAI 的 gpt-4.1-mini
模型(你可以根据需要更换为其他模型,如 gpt-3.5-turbo 或自定义模型):
from smolagents import CodeAgent, OpenAIServerModel
model = OpenAIServerModel(
"gpt-4.1-mini",
max_completion_tokens=8096,
api_key=open_ai_key
)
接下来就是创建我们的智能 Agent,得益于 smolagents
的封装,这一步非常简洁:
agent = CodeAgent(
name="web_agent",
description="Runs web searches for you.",
model=model,
tools=[web_search, VisitWebpageTool()],
max_steps=10,
verbosity_level=2
)
agent.logger.console.width=66
Agent 配置完成之后,我们就可以发送一个真实的问题,看看它如何一步步完成任务了。
我们的问题是:
What is the best trave place for budget 2000$ in 2025, and why, also please let me know the best month of each one?
("2025年预算2000美元,最推荐的旅游目的地是哪里?为什么?另外,请告诉我每个目的地最适合出行的月份。)
request_museums = """What is the best trave place for budget 2000$ in 2025, and why, also please let me know the best month of each one? """
result = agent.run(request_museums)
这个问题看似简单,但其实包含了多个子任务:
整个运行过程中,Agent 完全自主规划并调用工具,我们以下按照其“每一步的思考 + 实际执行代码”的结构来还原整个任务过程:
当我们提交任务之后,Agent首先思考他的主要任务,并写出可以执行的代码,然后在自己的沙箱环境中执行代码。
🧠 Agent 思考:
To provide the best travel places for a budget of $2000 in 2025, I will need to find current travel recommendations or predictions for affordable travel destinations for that budget in 2025. I will also gather information on why those places are ideal and determine the best month to visit each destination based on factors such as weather, costs, and tourist seasons. I will start by performing a web search for "best budget travel destinations 2025 under 2000 dollars" to gather relevant information.
(为了提供 2025 年预算为 2000 美元的最佳旅行地点,我需要找到当前的旅行建议或预测 2025 年该预算可负担得起的旅行目的地。我还将收集有关这些地方为何理想的信息,并根据天气、成本和旅游季节等因素确定每个目的地的最佳旅游月份。首先,我将在网上搜索 “2025 年 2000 美元以下的最佳经济型旅游目的地”,以收集相关信息。)
💻 Agent 执行代码:
search_result = web_search("best travel destinations for budget
2000 dollars 2025 best month to visit reasons")
print(search_result)
得到第一步结构之后Agent继续下一步
🧠 Agent 思考:
From the search results, several popular budget travel destinations for 2025 emerge such as Indonesia, Laos, Georgia, Vietnam, Romania, India, Panama, Turkey, and possibly others mentioned on these pages. I will now extract detailed information from some of the top results to identify the best travel places for a budget of around $2000, why these places are recommended, and also the best months to visit each one. I will start by visiting the top two relevant pages to extract this detailed information.
(从搜索结果中,出现了几个 2025 年的热门预算旅游目的地,如印度尼西亚、老挝、格鲁吉亚、越南、罗马尼亚、印度、巴拿马、土耳其,可能还有这些网页上提到的其他地方。现在,我将从一些热门搜索结果中提取详细信息,以确定预算在 2000 美元左右的最佳旅行地点、推荐这些地点的原因以及访问每个地点的最佳月份。我将首先访问排名前两位的相关网页,以提取这些详细信息。)
💻 Agent 执行代码:
urls_to_visit = [
"<https://www.myglobalviewpoint.com/cheapest-places-to-travel/>",
"<https://dailydive.org/travel/10-cheapest-travel-destinations-for-budget-travelers-in-2025/>"
]
for url in urls_to_visit:
page_content = visit_webpage(url)
print(f"Content from {url}:\\n{page_content}\\n{'='*80}\\n")
🧠 Agent 思考:
I found detailed information about the best budget travel destinations for 2025 from two reliable travel blogs. The top budget-friendly destinations mentioned include Vietnam, Indonesia, Cambodia, Laos, Romania, Georgia, Bulgaria, Bolivia, Colombia, Portugal, Mexico, Turkey, Guatemala, and India. These destinations are praised for their affordable accommodation, cheap meals, low-cost transportation, and unique cultural or natural attractions. However, the best month to visit is not explicitly mentioned in the excerpts, so I will perform a web search for the best months to visit the top few destinations to provide a complete answer.
(我从两个可靠的旅游博客中找到了关于 2025 年最佳经济型旅游目的地的详细信息。其中提到的最经济实惠的目的地包括越南、印度尼西亚、柬埔寨、老挝、罗马尼亚、格鲁吉亚、保加利亚、玻利维亚、哥伦比亚、葡萄牙、墨西哥、土耳其、危地马拉和印度。这些目的地因其经济实惠的住宿、廉价的餐饮、低成本的交通以及独特的文化或自然景点而备受赞誉。不过,摘录中并没有明确提到最佳旅游月份,因此我将在网上搜索前几个目的地的最佳旅游月份,以提供完整的答案。)
💻 Agent 执行代码:
top_destinations = ["Vietnam", "Indonesia", "Cambodia", "Laos",
"Romania", "Georgia", "Bulgaria", "Bolivia", "Colombia",
"Portugal"]
best_months = {}
for destination in top_destinations[:5]: # Limit to top 5 to keep
results manageable
search_query = f"best month to visit {destination} 2025"
result = web_search(search_query)
print(f"Best month for {destination}: {result}")
🧠 Agent 思考:
I collected the best months to visit the top 5 budget destinations for 2025 from multiple travel sources. The best months for these destinations are roughly as follows: ...
(我从多个旅行资料来源收集了 2025 年最值得去的 5 个经济型旅游目的地的最佳月份。这些目的地的最佳月份大致如下:... )
💻 Agent 执行代码:
print(summary)
final_answer(summary)
📤 最终输出:
(翻译成了中文)
2025年预算2000美元的最佳旅游目的地:
1. 越南(11月 - 次年4月)
理由:越南拥有令人惊叹的自然风光、充满活力的城市和丰富的文化,而且消费非常低。住宿、街头美食和交通都非常实惠,是极具性价比的旅行目的地。
2. 印度尼西亚(4月 - 10月)
理由:印度尼西亚由多个岛屿组成,提供丰富的冒险、自然美景和文化体验,住宿和饮食价格也相对低廉。旱季的高峰期适合进行各种户外活动。
3. 柬埔寨(11月 - 次年4月)
理由:以吴哥窟和悠久历史闻名,柬埔寨提供非常便宜的住宿、本地美食和交通选择。旱季气候适宜,适合舒适地探索各大景点。
4. 老挝(11月 - 次年2月)
理由:老挝是一个被低估的旅游宝地,拥有原汁原味的文化体验、低廉的消费和壮丽的自然风光。干燥而凉爽的季节能带来更舒适的旅行体验。
5. 罗马尼亚(5月 - 6月,9月 - 10月)
理由:作为东欧国家,罗马尼亚融合了中世纪魅力、自然风光以及合理的旅行开支。春末和初秋避开旅游高峰,人少且气候宜人。
这些目的地都能带来丰富的旅行体验,同时保持总花费在2000美元以内,尤其是当你提前预订机票并选择当地的经济选项时。
怎么样?Agent实际上会“自己思考、自己动手、自己复盘”,是不是让人觉得不可思议?
如果你觉得这还不够智能,你还可以采用套娃的方式来进行,你可以使用 manager_agent
, 然后告诉这个 manager_agent
你可以通过我刚刚创建的 agent
执行任务。
比如:
manager_agent = CodeAgent(
model=OpenAIServerModel(
"gpt-4.1-mini",
max_completion_tokens=8096,
api_key=open_ai_key
),
tools=[],
managed_agents=[agent],
additional_authorized_imports=[],
planning_interval=1,
verbosity_level=2,
max_steps=5,
final_answer_checks=[
lambda output: "final answer" in output.lower()
]
)
manager_agent.logger.console.width=66
manager_agent.visualize()
这种“套娃”结构下,manager_agent 会在获取初步结果后,继续判断是否需要更深入的信息、进行更细致的规划,甚至发起新的子任务。比如哪里更好玩,可以继续规划什么细节等,甚至你能看到这种更复杂的代码被执行
这是使用manager_agent
返回的答案,可以感受一下和第一个的区别
(翻译成了中文)
💸 2025年2000美元预算下的最佳旅游目的地简明指南
以下是2025年内,适合2000美元预算的五个最佳旅游国家,包含推荐理由与最佳旅行月份:
⸻
1. 越南
推荐理由: 越南性价比极高,每日花费(含机票)约为27美元。预算旅行者可以用2000美元游玩约30天,探索充满活力的城市、壮丽风景(如下龙湾)、文化古迹和美味的街头小吃。住宿、饮食和交通都非常实惠,使旅行时间更具弹性。
最佳旅行时间: 5月至10月是最省钱的时段(虽然是雨季);3–5月和9–11月是性价比与天气平衡较好的选择。
⸻
2. 印度尼西亚
推荐理由: 尤其是巴厘岛及周边岛屿,印度尼西亚提供丰富的自然和文化体验。14天的旅行可轻松控制在2000美元以内,预算旅馆每晚约6美元,餐饮与交通也很便宜。美丽的海滩、庙宇和文化氛围使这里成为预算旅行者的热门选择。
最佳旅行时间: 4–5月与9–10月为肩季,天气适中,人少、价格也低于旺季(6–8月)。
⸻
3. 柬埔寨
推荐理由: 柬埔寨对预算旅行者非常友好,每日消费约30–50美元,足以支持长达40–60天的旅程。主要景点包括吴哥窟、田园风光和友善的本地文化。住宿与餐饮便宜,适合深度游与慢旅行。
最佳旅行时间: 11月至次年4月是旱季,天气适合户外活动;1–2月适合观光,9–10月为价格较低、游客较少的淡季。
⸻
4. 老挝
推荐理由: 老挝安静而实惠,每日预算约20–35美元。2000美元可支持约10–15天的旅行(含机票、住宿、餐食和活动)。适合体验独特文化、河流风光及悠闲小镇,街头小吃和民宿也价格亲民。
最佳旅行时间: 3–4月为干热季,游客较少、价格更低,是预算旅行的好时段,尽管天气偏热。
⸻
5. 罗马尼亚
推荐理由: 罗马尼亚拥有丰富的欧洲历史、中世纪城镇和自然美景,且价格亲民。14天的预算旅行可控制在2000美元以内,含机票、住宿(约每晚30美元)、餐饮(约每日10美元)和交通。非常适合预算有限但想探索欧洲的旅行者。
最佳旅行时间: 4–6月与9–11月气候宜人、游客较少,住宿和交通费用也更实惠。
⸻
总结
以上五个目的地都能很好地适配2000美元的预算。印尼和罗马尼亚适合为期两周的旅行,而越南和柬埔寨则可支持一个月甚至更长时间。选择在旱季或肩季出行,既能节省开支,又能享受好天气和较少的人流,从而最大化预算效率与旅行体验。
此外,建议使用航班优惠提醒服务(如 Scott’s Cheap Flights 或 Dollar Flight Club)来大幅降低机票开支,因为机票往往是旅行预算中最大的一项。
⸻
若你更看重旅行时长、文化体验和极致预算控制,越南与柬埔寨是最推荐的选择;若偏好短期但丰富的海岛体验,印尼非常合适;想要宁静又地道的东南亚感受,可选择老挝;而罗马尼亚则是体验历史与自然兼具的东欧旅行好去处。
如需根据出发地或具体行程时长获取个性化建议,欢迎随时提问!
AI Code Agent 的出现,让“让 AI 帮我做事”不再是一句空话。它不只是回答问题的聊天机器人,而是一个能够理解上下文、主动规划、调用工具、分析结果并持续改进的智能执行者。在亲手搭建并“调教”这个 Agent 的过程中,我深刻感受到:我们正站在一个全新工程范式的门槛上。如果说过去的 AI 是“会说话的大百科”,那么现在,它已经开始学会做决定、写代码、解决问题。
当然,惊艳之余也有现实考量。比如,Agent 每执行一步,都会将历史内容不断堆叠进 prompt 中,这种递增式上下文会带来显著的 token 消耗。在我编写本文、调试代码的过程中,累计 token 使用量超过了 171 万,其中某一步的输入就高达 41,000 tokens。这些都是实打实的成本(尽管约五美分),对个人开发者来说确实“有点小贵”;但对企业而言,通过合理的上下文裁剪与缓存机制,整体成本仍然可控。而且长期来看,token 的价格只会越来越便宜。
所以,如果你还没亲手构建过一个 Code Agent,现在就是一个不错的起点。你会发现,AI 不只是能说会道,更已经具备了“动手做事”的潜力。我们的任务,是让它成为真正可靠的搭档,而不是纸上谈兵的建议者。