资讯动态

用Claude Agent SDK 5分钟构建你的第一个AI Agent实战指南

发布时间:2026/10/22 4:24:17 来源:尧图企业网站定制
这两年“AI Agent”这个词几乎被聊烂了但我在各种技术社区里看到的问题大多还停在概念层面Agent和普通聊天式AI到底差在哪为什么别人说“写个Agent”像是打开了新世界轮到自己却不知道从哪里下手我的建议很直接——别去背概念直接装好SDK跑通一个最小可用的Agent所有疑问都会在代码里找到答案。这也是我写这篇指南的初衷用Claude Agent SDK在5分钟内搭出第一个真正意义上的AI Agent让它具备自主调用工具、完成多步任务的能力而不是只会陪你聊天的问答机器。Claude Agent SDK解决的是Agent应用开发中“从零到一”的那个环节把大模型能力、工具调用、会话管理、任务编排这些底层复杂度封装好让你专注在业务逻辑上。这篇指南适合有基础Python使用经验、手头有可用的API Key的开发者不会过度纠缠源码而是直接把能跑的代码和踩过的坑摆给你看。1. Agent不是新聊天框先搞懂核心差异1.1 自主循环才是Agent的“灵魂”很多人第一次接触Agent习惯拿聊天机器人的思维去套这最容易走偏。普通API调用是一次性的你发prompt模型返回answer交互结束。哪怕你写个循环把对话拼接起来本质上还是“你指挥一句、它执行一句”所有决策权都在你这端。Agent的逻辑完全不同把任务交出去之后它会自己判断“这个信息我不确定需要去查一下”“这个计算我自己算容易犯错应该调用计算器”然后主动发起工具调用拿到结果后再决定下一步。这个过程叫Agent Loop是Agent区别于普通AI应用的真正分水岭。我用一个生活类比来解释普通API调用像你每次都打电话给一个专家问一句答一句所有中间判断都得自己做Agent则是你把整件事委托给一个带办公桌的助手他需要查资料就自己去查需要计算就自己按计算器最后给你一份完整交付。中间的过程你基本不用干预。1.2 工具层与编排层Claude Agent SDK替你干了什么要让Agent真正“干活”光有大模型肯定不够它得能被允许去调用外部工具——比如读文件、执行代码、查数据库、调接口。这就是工具层要解决的问题。Claude Agent SDK的核心价值在于它把工具注册、参数解析、结果回灌、会话记忆、任务编排这些繁琐的底层逻辑都封装掉了。你只需要写一个普通Python函数加一个装饰器SDK就会自动把函数的描述、参数结构转换成模型能理解的格式并在模型决定调用时帮你执行它把结果再传回给模型。整个过程对开发者几乎是透明的。1.3 为什么我推荐Claude Agent SDK我也用过其他Agent框架但Claude Agent SDK在原生体验上确实更省心。第一是官方出品对Claude模型本身的工具调用、长上下文支持做得最顺第二是同时提供Python和TypeScript版本前后端团队各取所需第三是工具调用的决策质量比较稳尤其是“一次调用多个工具、把上一个工具结果作为下一个工具输入”这种复杂场景我在几个框架里做过对比测试它的成功率明显更高。2. 5分钟计时开始先把环境扫干净2.1 版本要求与安装命令先说环境要求。实测下来Python 3.10以上版本是最稳妥的不太建议用老版本因为SDK涉及类型注解、异步支持老版本容易出现兼容性问题。安装本身很简单一条命令pip install claude-agent-sdk装完可以顺手确认版本pip show claude-agent-sdk如果你本地有Python虚拟环境管理工具建议先创建一个虚拟环境再安装避免污染全局环境、防止和项目其他依赖打架。这是个通用习惯很多新手会跳过等出了依赖冲突才后悔。2.2 API Key配置别硬编码在代码里运行Agent需要API Key。我的做法是放到环境变量里而不是直接写进代码。export ANTHROPIC_API_KEY你的密钥代码里这样读import os api_key os.environ[ANTHROPIC_API_KEY]这样做的原因有两个一是密钥不会因为代码分享、提交到仓库就泄露二是切换环境时改环境变量比改代码方便得多。我见过有人把密钥写死在代码里结果项目一上库密钥跟着暴露云账号直接被刷爆。这种教训真的不希望你再犯。提示API Key属于最高等级的敏感凭据建议在官方控制台开启权限限制功能并定期轮换。一旦怀疑泄露立即吊销重建。2.3 用最小示例验证环境装完、配好密钥后先跑一个最小的例子确认链路通畅import os from claude_agent_sdk import Agent agent Agent( api_keyos.environ[ANTHROPIC_API_KEY], system_prompt你是一个测试助手请用一句话回答所有问题。, ) result agent.run(你好请回复环境正常。) print(result.text)这里有个细节system_prompt不要写太复杂因为这一步只验证连通性。如果这个脚本能正常打印“环境正常”说明安装、密钥、网络所有环节都对了可以正式进入实战。agent.run()是同步接口适合快速测试实际项目里如果对性能有要求可以利用SDK的异步接口后面的进阶内容会提到。3. 第一个Agent实战让AI真正“动手干活”3.1 场景设计用“时间助手”逼出工具调用能力为了让第一次体验能直观感受到Agent和普通聊天的差别我选择做一个“时间助手”让它能获取当前时间、计算两个日期之间相差多少天、做加减乘除运算。为什么选这个场景因为这几个任务有一个共同特点模型本身不适合直接完成但非常适合通过调用工具来精确完成。日期计算模型经常算错数学计算也一样——这就逼着Agent必须去调用工具你能亲眼看到它做出“自己决定去用工具”这个动作。3.2 完整代码以下是基于当前版本SDK的常见写法具体类名和函数签名建议以官方最新文档为准import os from datetime import datetime, date from claude_agent_sdk import Agent, tool # 1. 定义工具函数 tool def get_current_time() - str: 获取当前日期时间返回格式如 2025-01-01 14:30:00 return datetime.now().strftime(%Y-%m-%d %H:%M:%S) tool def days_between(date_start: str, date_end: str) - int: 计算两个日期之间相隔的天数。 参数格式YYYY-MM-DD 返回结束日期减去开始日期的天数数值可正可负。 d1 date.fromisoformat(date_start) d2 date.fromisoformat(date_end) return (d2 - d1).days tool def simple_calc(expression: str) - float: 执行简单数学运算。 参数说明expression 为数学表达式字符串例如 (35)*2 注意仅支持加减乘除和括号不支持复杂函数。 return eval(expression, {__builtins__: {}}, {}) # 2. 创建Agent并注册工具 agent Agent( api_keyos.environ[ANTHROPIC_API_KEY], system_prompt你是一个擅长处理时间和计算任务的助手。 涉及时间、日期、数学计算时必须优先使用工具不要自己凭记忆回答。, tools[get_current_time, days_between, simple_calc], ) # 3. 交互循环 if __name__ __main__: while True: user_input input(你: ) if user_input.strip().lower() in (exit, quit, 退出): break result agent.run(user_input) print(Agent:, result.text) print(- * 40)3.3 逐段拆解每个细节都在解决什么问题先看工具函数的定义部分。每个函数上面的docstring不是摆设它会成为模型判断是否调用这个工具的重要依据。工具描述写得越清楚模型就越能在合适的时机调用正确的工具——这是Agent开发中最容易被忽略、但影响最大的细节之一。装饰器tool是关键。它做的事情比你想的多自动读取函数签名和docstring生成一份结构化的工具定义包括参数名、类型、说明然后在后台把这份定义发给模型。模型根据用户问题和工具定义决定“我现在要调用get_current_time”并生成对应的参数。SDK拿到这个决定后会在本地执行你的Python函数再把结果组织成模型能读的消息格式发送回去。再来看simple_calc里的eval这个用法我在生产环境是坚决不推荐的属于“演示专用”。因为eval执行任意字符串存在安全风险一旦输入被注入恶意代码就麻烦了。我在代码里用{__builtins__: {}}限制了内建函数但仍然不建议在真实业务里直接这么做。后面进阶部分会讲如何用更安全的方式实现类似功能。3.4 运行效果亲眼看看Agent“自主思考”的过程把上面代码保存为first_agent.py跑起来后试试输入你: 今天是几号离2025年元旦还有多少天如果一切正常你会看到类似这样的输出Agent: 今天是2025-06-20距离2025年元旦已经过去了170天。注意这里真正的精彩不是最终输出而是过程——Agent先判断出“今天几号”需要调用get_current_time然后判断“离元旦还有多少天”需要调用days_between并且会先把时间工具的结果抓出来再传给日期工具。也就是说它在一个回合内自主规划了“先查现在、再算差值”的两步流程工具间的数据流是它自己接起来的。我在第一次跑通时确实有点小震撼。之前用普通prompt方式你得自己在代码里把两步串联的逻辑写死而在Agent里模型自己就完成了任务拆解和依赖编排。如果在你的环境里它没有自动调用工具多半是工具描述写得不够清晰或者system_prompt里没强调“必须使用工具”。这个问题在后面的常见问题部分会重点讲。4. 核心机制深挖Agent如何思考与行动4.1 工具调用决策模型到底在做什么从表面看Agent“好像有了智能”但本质上它不是真的在自由思考而是在一个受限的决策框架里做选择。模型根据系统提示、用户消息、工具定义共同决定下一步动作。这里的本质是模型生成的不是最终答案而是一个“行动指令”。这个指令一般有两种形态要么是“我需要调用某个工具参数是xxx”要么是“任务已完成直接输出最终回复”。SDK在后台持续解析这些指令一旦发现工具调用指令就去执行工具再把结果加入对话上下文让模型继续决策直到模型认为任务完成、输出最终答案。这也解释了为什么工具描述重要。模型在看到days_between(date_start: str, date_end: str)和它的docstring时实际上是把“这个工具能算什么、参数是什么意思”都纳入了自己的决策上下文。描述模糊决策质量就下降。我在实测里发现一个规律把工具的功能边界、参数格式、典型使用场景写清楚工具被正确调用的概率可以从60%提升到接近95%这个提升幅度在Agent开发里非常可观。4.2 上下文管理别让Agent“失忆”多轮对话中最让新手困惑的是“Agent怎么记得之前说过的话”。答案在一个叫上下文窗口的概念里每次调用模型时SDK会把历史消息包括之前的自我介绍、之前的工具调用、工具返回结果都发给模型让模型基于完整上下文做决策。这意味着上下文会不断增长。短对话问题不大但长会话里塞进来的内容越来越多可能出现上下文窗口溢出的报错。这是所有Agent应用都会遇到的问题。我的经验是在会话中对历史做精简或摘要比如只保留最近几轮消息、把重要的工具结果摘要成一句话可以明显延长单次会话的可用时长。4.3 多Agent协作把复杂业务拆给不同角色Claude Agent SDK还支持多Agent编排这个功能在多步骤业务场景里特别实用。举个例子你做一个“周报生成器”可以拆成一个“数据收集Agent”负责查数据、一个“文案润色Agent”负责整理成周报两个Agent各司其职再由一个主Agent负责协调。这种设计的好处是隔离性和可维护性每个Agent的system_prompt、工具集都可以独立调整出问题时定位也快。不过我个人建议第一次接触时先别急着上多Agent把单Agent玩熟、把工具设计和任务拆解的基本功练扎实再进入多Agent会顺畅很多。一上来就搞多Agent的常见结果不是模型混乱就是上下文爆炸然后花大量时间调参反而劝退。5. 进阶实战做一个能整理文件的Agent5.1 场景设计一次真实的业务串联单Agent搞定多工具协同之后我们来做更贴近实际需求的例子文件整理Agent。它的功能很简单给定一个目录自动扫描里面的文件按扩展名分类移动到对应子目录比如图片进images、文档进docs、代码进code并在最后生成一份整理报告告诉你每个类型各整理了哪些文件。这个Agent最大的价值在于它需要综合运用“列目录”“创建目录”“移动文件”“生成报告”多个工具且工具之间还有先后依赖。这才是Agent开发中更真实的业务形态。5.2 工具函数实现import os import shutil from pathlib import Path from claude_agent_sdk import Agent, tool BASE_DIR Path(./demo_files) tool def list_files() - str: 扫描当前工作目录返回所有文件及文件夹的清单。 if not BASE_DIR.exists(): return 目录不存在 items [] for p in BASE_DIR.iterdir(): items.append(f{p.name} ({目录 if p.is_dir() else 文件})) return \n.join(items) if items else 空目录 tool def move_file(filename: str, target_dir: str) - str: 移动指定文件到目标子目录。 filename: 文件名不包含路径 target_dir: 目标子目录名称相对于工作目录 src BASE_DIR / filename dst_dir BASE_DIR / target_dir dst_dir.mkdir(exist_okTrue) dst dst_dir / filename shutil.move(str(src), str(dst)) return f已移动 {filename} 到 {target_dir}/ tool def write_report(content: str) - str: 将整理报告内容写入 report.txt 文件。 report_path BASE_DIR / report.txt report_path.write_text(content, encodingutf-8) return f报告已写入 {report_path}5.3 创建Agent与实测agent Agent( api_keyos.environ[ANTHROPIC_API_KEY], system_prompt你是一个文件整理助手。任务流程为先列出文件 再按扩展名规划目录逐个移动文件最后生成整理报告并保存。, tools[list_files, move_file, write_report], ) result agent.run(请整理当前目录下的所有文件图片放到images文档放到docs其他文件放到misc最后生成报告。) print(result.text)实测时你会发现Agent真的会先执行list_files然后看着列出来的文件名一个个规划这是jpg、这是png应该是图片这是txt、这是pdf应该是文档然后逐个调用move_file。整个过程你只需要给一个目标指令剩下的拆解和操作都由它自己完成。这里有个细节值得说我给Agent的目标里没有写“遇到不认识的类型怎么办”它自己会根据常识丢到misc里因为我system_prompt里写了“其他文件放到misc”。这个设计很实用——Agent的任务拆解能力正好体现在“目标明确但步骤留白”的场景。5.4 给工具加上安全边界前面我们用了eval在这里演示一个更安全的做法。比如如果你真的需要一个计算工具与其直接eval不如把计算逻辑限制在“浮点数四则运算”或者做成白名单模式只对固定形式的表达式求值。用Python的ast模块做语法树校验是目前比较稳妥的方案。这其实是Agent工具设计的一条通用原则工具权限最小化。Agent调用的工具就是你的代码在用户面前暴露的能力边界。工具越强Agent越能干但风险也越大。一个能执行任意shell命令的工具和一个只读的工具安全性天差地别。给Agent配工具要像给系统开权限一样谨慎。6. 常见问题与排坑实录6.1 高频问题速查表现象大概率原因解决方法提示没有找到claude_agent_sdk当前Python环境不对确认在安装SDK的同一环境运行用虚拟环境隔离提示API Key缺失或无效环境变量未设置或失效检查环境变量名在官方控制台重新生成Agent完全不复用工具直接凭记忆回答系统提示没强调工具优先明确在system_prompt里写“涉及xx必须调用工具”工具被调用了但传入的参数不对工具docstring描述不清晰把参数格式、取值范围、示例都写清楚长对话后出现上下文溢出历史消息累积过多精简历史、对旧消息做摘要、控制单轮工具结果长度同步接口阻塞太久任务本身较复杂改用异步接口给工具调用设置合理超时Agent陷入循环反复调用同一个工具工具缺少输出边界在工具实现里加入防重复、去重、最大调用次数等控制6.2 容易被忽略的细节忠告先说工具描述的“边界感”。我见过很多人写工具函数时docstring只写一句话“计算两个日期差值”结果模型真的会拿它去算“今天到某日期的差值”却没用对参数格式生成的日期字符串老出错。后来我把docstring里的参数类型、日期格式、示例都补全调用准确率才上来。写工具描述就把自己当成在给工具写说明书越详细越好。再说超时与错误处理。Agent工具一旦抛异常如果SDK没做兜底很可能整个对话直接中断。我给所有工具都加了防御式编程先检查输入合理性出错时返回“错误原因”而不是直接抛异常。这样模型能读到错误内容并决定下一步比如“用户给的日期格式不对我来纠正一下”整个流程会健壮非常多。最后是成本控制。Agent是多轮循环每多一次工具调用就多一次模型请求花费自然比单次对话高。实测里一个带三四个工具的Agent解决问题常常会进行五六轮模型交互。我建议在开发阶段把工具逻辑收敛一些能一个工具干完的事不要拆成三个既省时间也省钱。我在实际操作中最大的体会是Agent开发的经验曲线很陡但只要你亲手跑通一个最小闭环后面的所有概念就都有了附着点。Claude Agent SDK最大的贡献不是省去你写调用的代码而是帮你把“模型自主决策”这件事变得可观察、可调试。如果你现在正卡在“不知道从哪动手”不用再搜更多教程了把上面的代码复制下来改一改工具函数跑起来再去改进它。第一个5分钟带来的正反馈比看十篇概念文章都管用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑