周末清晨,林远被一个突然涌现的念头唤醒。
“小众清单”上线四个月后,竞品们的动作越来越密集。他打算系统化地开展调研,可每次打开浏览器,就陷入无尽点击与滚动——哪个产品更新了功能?那家产品融资多少?用户评价到底如何?
“要是能有个人帮我搞定这些就好了。”
林远回顾自己已解锁的两项能力:
- Vision:AI 能看懂截图内容
- Tool Use:AI 能查询数据库
但这两者有个共同的局限:他必须先告诉 AI 该做什么。截图发过去,AI 才解读;查数据的问题发过去,AI 才生成 SQL。整个过程依然停留在“你问我答”的模式。
“我真正渴望的是一个能自主规划任务的助手。我只需给出目标,它就能自己分解任务、调用工具、汇报结果。”
这个愿望,最终在 Claude Cookbooks 的 claude_agent_sdk 目录中找到了答案。
Agent SDK:从“工具”到“助手”的质变
林远打开第一个教程:00_The_one_liner_research_agent.ipynb。标题令他震惊:一行代码就能构建研究 Agent。
from claude_agent_sdk import ClaudeAgentOptions, query
async for msg in query(
prompt="调研 AI Agent 领域的最新趋势,给我一个简短的总结和相关链接",
options=ClaudeAgentOptions(model="claude-sonnet-4-6", allowed_tools=["WebSearch"])
):
print(msg)
就这些?林远半信半疑地跑了一遍代码,看着终端里逐行跳出的输出:
? Using: WebSearch()
? Using: WebSearch()
? Using: WebSearch()
✓ Tool completed
✓ Tool completed
✓ Tool completed
? Thinking...
AI 自主决定执行三次搜索,然后综合结果给出答案。
“等等,我并没有告诉它要搜索几次,也没指定搜索什么关键词。”
这就是 Agent 的核心魔力:AI 自己决定如何行动,而非被告知怎么做。官方教程里有一段话解释得透彻:研究任务是 Agent 的理想场景,因为信息不在输入中,Agent 必须主动获取;而且搜索路径会在探索过程中自然浮现,无法提前预设。
林远豁然开朗。此前他使用 Tool Use 查数据库时,每次都是他先想好问题、构造 prompt、等待答案。但在 Agent 模式下,他只需给出一个目标,剩下的全由 AI 自主决策。这就好比从“遥控器”直接升级到了“自动驾驶”。
从一行代码到生产级系统
教程接着深入展开。一行代码的研究 Agent 固然酷炫,但它有一个明显的限制:缺乏记忆。每次查询都是孤立的,上一次的结果不会带入下一次。假如林远先问“有哪些公司?”,再问“它们的产品有什么区别?”,第二个问题就会断片——因为 Agent 不记得第一个问题的答案。
解决方法是用 ClaudeSDKClient 来维持会话状态:
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
async with ClaudeSDKClient(
options=ClaudeAgentOptions(
model="claude-sonnet-4-6",
allowed_tools=["WebSearch", "Read"], # 既可以搜索,也可以读取文件
system_prompt="你是一个专业的市场研究助手。回答时请附上来源链接。"
)
) as agent:
# 第一个问题
await agent.query("帮我调研一下 Notion 和 Obsidian 的最新动态")
async for msg in agent.receive_response():
print(msg)
# 第二个问题——会保留第一个问题的上下文
await agent.query("它们的产品定位有什么区别?")
async for msg in agent.receive_response():
print(msg)
林远注意到几个关键要点:
1. allowed_tools:工具权限的精细化控制
allowed_tools=["WebSearch", "Read"]
这告诉 Agent:你可以搜索网页,也可以读取本地文件。Agent 会在需要时自动调用这些工具,无需你手动触发——这才是真正的“主动”。
2. system_prompt:为 Agent 设定角色与行为规范
system_prompt="你是一个专业的市场研究助手。回答时请附上来源链接。"
这让 Agent 的回答更专业、更可信,相当于赋予它一个“人设”。
3. 多模态能力的加持
Read 工具赋予 Agent 读取图片、PDF 等文件的能力。林远想起上一章的 Vision 能力——现在 Agent 可以自动读取图表并分析,无需他手动传图。从“我看图”进化成了“AI 自己看图”。
竞品调研实战:三分钟搞定原本半天的活
林远决定用 Agent 来完成一次真实的竞品调研。他编写了一个脚本:
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
import asyncio
RESEARCH_PROMPT = """
帮我调研以下内容:
1. "小众清单" 的三个主要竞品(清单类应用):它们的最新版本更新了什么功能?
2. 这些竞品的用户评价有什么共性问题?
3. 我们可以从中学到什么?
请给我一个结构化的报告,包含来源链接。
"""
async def research_competitors():
async with ClaudeSDKClient(
options=ClaudeAgentOptions(
model="claude-sonnet-4-6",
allowed_tools=["WebSearch", "Read"],
system_prompt="""你是一个专业的竞品分析师。
回答时请:
- 附上来源链接
- 结构清晰,用 markdown 格式
- 给出可操作的建议"""
)
) as agent:
await agent.query(RESEARCH_PROMPT)
result_text = ""
async for msg in agent.receive_response():
if hasattr(msg, 'content'):
for block in msg.content:
if hasattr(block, 'text'):
result_text += block.text
return result_text
# 运行
report = asyncio.run(research_competitors())
print(report)
Agent 开始工作:
? Using: WebSearch("清单类应用竞品分析 2024")
? Using: WebSearch("TickTick Todoist Microsoft To Do 最新功能更新")
? Using: WebSearch("清单类应用用户评价 常见问题")
✓ Tool completed
✓ Tool completed
✓ Tool completed
? Thinking...
仅仅三分钟后,一份完整的竞品分析报告便呈现在眼前:
竞品调研报告
一、主要竞品及最新功能
TickTick
- 最新版本 (v6.6.0) 新增智能日期识别...
- 来源: [TickTick 更新日志](...)
Todoist
- 推出 AI 任务分解功能...
- 来源: [Todoist Blog](...)
...
林远看得目瞪口呆。过去做这样的调研至少要花费半天时间,如今只需三分钟。而且整个过程中完全不需要手动输入搜索词、逐一点击链接阅读——Agent 自主规划搜索路径、自动筛选信息、自行组织答案。“这才是真正的 AI 助手啊。”他感叹道。
进阶能力:让 Agent 调用脚本
林远继续往下翻阅教程,发现了更强大的功能:Bash 工具。Agent 可以调用 Python 脚本来执行复杂计算或数据处理。官方示例中有一个 hiring_impact.py 脚本,用于计算招聘对财务的影响:
async with ClaudeSDKClient(
options=ClaudeAgentOptions(
model="claude-sonnet-4-6",
allowed_tools=["Bash", "Read"],
cwd=".", # 工作目录
)
) as agent:
await agent.query("用 hiring_impact.py 计算一下招 5 个工程师对我们现金流的影响")
async for msg in agent.receive_response():
print(msg)
Agent 会自行找到脚本、理解用法、执行计算并返回结果。林远脑中瞬间冒出许多想法:把数据分析脚本接上,Agent 能自动生成报表;把数据库查询脚本连上,Agent 能回答业务问题;把 API 调用脚本挂载上,Agent 能自动同步数据。
“这不就是把 Tool Use 升级成了 Agent 吗?”是的。之前是他手动调用工具,现在是 Agent 自主决定何时调用什么工具。
更进一步:多 Agent 协作
教程里还有一个更高级的示例:Chief of Staff Agent。这是一个协调多个子 Agent 的主 Agent:主 Agent 接收用户请求,分析所需能力,把任务分发给专门的子 Agent(财务分析师、招聘专员等),最后汇总结果,生成综合报告。
async with ClaudeSDKClient(
options=ClaudeAgentOptions(
model="claude-opus-4-6",
allowed_tools=["Task"], # Task 工具让 Agent 可以调用子 Agent
system_prompt="财务相关问题交给 financial-analyst 子 Agent 处理。"
)
) as agent:
await agent.query("我们应该招 5 个工程师吗?分析一下财务影响。")
async for msg in agent.receive_response():
print(msg)
运行时输出:
? Thinking...
? Delegating to subagent: financial-analyst
└─ Task: 分析招聘 5 名工程师的财务影响
? [financial-analyst] Using: Bash()
? [financial-analyst] Using: Read()
? [financial-analyst] Using: Bash()
✓ Tool completed
✓ Tool completed
✓ Tool completed
? Thinking...
主 Agent 把任务交给了 financial-analyst 子 Agent,子 Agent 调用脚本分析数据,最后返回结果。林远想到了他的“小众清单”:可以设立一个 user-feedback-analyst 专门分析用户反馈;配置一个 feature-researcher 调研竞品功能;再安排一个 bug-triage 分类和处理 bug 报告。“这不就是一支 AI 团队嘛!”他兴奋地说。
Plan Mode:先规划再执行
最后一个让林远印象深刻的功能是 Plan Mode。在此模式下,Agent 会先制定详细计划,但不会执行任何修改操作(如 Write、Edit、Bash 等)。林远可以审阅计划,再决定是否让 Agent 执行:
async with ClaudeSDKClient(
options=ClaudeAgentOptions(
model="claude-opus-4-6",
permission_mode="plan", # 开启计划模式
cwd=".", # 工作目录
)
) as agent:
await agent.query("帮我重构前端组件库,提升性能和可维护性")
async for msg in agent.receive_response():
# Agent 会输出计划,但不会执行任何修改操作
pass
# 审核计划后,如果满意,继续执行:
# await agent.query("按计划执行", continue_conversation=True)
Agent 会分析现有代码结构、依赖关系,然后输出一份详细的重构计划。林远可以审阅这份计划,提出修改意见,或者直接让 Agent 执行。一个典型的计划输出示例:
重构计划
第一阶段:分析现状
- 盘点现有组件数量和依赖关系
- 识别性能瓶颈组件
- 分析重复代码和设计不一致
第二阶段:制定规范
- 建立组件命名规范
- 设计统一的 API 接口
- 定义性能基准
第三阶段:分批重构
- 优先重构高频使用组件
- 逐步迁移低频组件
- 更新文档和示例
风险评估
- 可能影响现有功能,建议配合测试覆盖
- 团队需要时间学习新规范
“这个功能真是太实用了。”林远感慨道。以前让 AI 执行任务,总担心它乱来。现在可以提前查看计划,不满意就调整,满意了再执行。就像装修前先看设计图,心里有底。
回顾:从被动到主动的进化之路
林远打开他的开发日志,回顾这三个月来的探索历程:
第一个月:让 AI 看见—— Vision 能力让 AI 能够理解截图、图片、文档。用户发来的模糊反馈截图,AI 能解读出关键信息。
第二个月:让 AI 动手—— Tool Use 让 AI 能查数据库、调 API。用户说“数据不对”,AI 能自己生成 SQL 去查。
第三个月:让 AI 自主—— Agent SDK 让 AI 能自主规划任务、调用工具、汇报结果。给一个目标“调研竞品”,AI 自己决定搜索什么、读什么、如何总结。
这三项能力,构成了林远心中“AI 分身”的进化路线:
看得懂 → 动得了 → 能自主
每一步都是前一层的自然延伸。Vision 给了 AI “眼睛”,Tool Use 给了 AI “手”,Agent SDK 则赋予 AI 一个“大脑”——能思考、能决策、能主动行动。
尾声:分身已就位
林远把这三章的内容整理成了一篇博客,发布在“小众清单”的开发日志里。文章最后,他写道:
独立开发者最大的困境是“分身乏术”——一个人要兼顾产品、运营、客服、市场、数据分析……
三个月前,我开始探索 Claude API 的能力。起初只想让 AI 帮我看截图,后来发现它还能查数据、跑脚本、自主规划任务。
现在我的工作流发生了根本性改变:
- 用户发截图反馈 → AI 自动解读关键信息
- 用户说数据不对 → AI 自己查数据库核实
- 我需要调研什么 → AI 自己搜索、阅读、总结
我开始相信,独立开发者真的可以拥有“分身”。分身做的事情越多,我能专注在创造上的时间就越多。
这只是开始。Agent SDK 的能力远不止于此——多 Agent 协作、Plan Mode、Hook 机制……每一个都值得深入探索。
下一步?我想做一个“自动运营 Agent”,每天自动收集用户反馈、分析数据、生成报告,我只负责看报告和做决策。
分身已就位,接下来看它能帮我把产品带向何方。
代码参考
本文涉及的完整代码均来自官方教程中的示例 notebook:
00_The_one_liner_research_agent.ipynb- 一行代码的研究 Agent01_The_chief_of_staff_agent.ipynb- 多 Agent 协作的 Chief of Staff
系列回顾:
- 那些截图里的秘密 - Vision 让 AI 看见
- 让 AI 动手查数据 - Tool Use 让 AI 动手
- 本文 - Agent SDK 让 AI 自主
本文属于「独立开发者的 AI 分身进化论」系列,记录一个独立开发者如何逐步解锁 Claude API 的各项能力。
