ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

Claude AI应用开发入门到工程化:API调用与Function Calling实战

Claude AI应用开发入门到工程化:API调用与Function Calling实战 先说结论Claude AI 应用开发的入门成本比大多数人想象的低。它不是需要本地显卡跑推理的框架而是以 API 为中心的模型服务。只要一段 Python 代码就能完成第一次对话之后无论你想做聊天机器人、代码辅助工具还是带工具调用的 Agent 应用都是在同一条消息链路上扩展。这也是“25 分钟从想法到应用”能够成立的前提智能能力由 API 提供你只需要专注业务逻辑和交互设计。如果你之前没接触过 Anthropic 的接口这篇文章可以直接收藏。我会按工程化路线完整带你跑一遍账号与 API Key 准备、Python 环境搭建、Claude Code 快速生成项目骨架、Messages API 的对话与流式输出、Function Calling 工具调用、批量任务与成本控制最后是常见错误排查。整个流程跑完你手里会有一套可复用的 Claude 应用开发脚手架而不是零散抄来的代码片段。适合的读者也很明确想做 AI 应用原型验证的产品和技术人员想给现有系统接入模型能力的后端开发者以及想把“读代码、写代码、跑测试”交给 Agent 的工程师。Claude 相关开发的核心门槛不在硬件而在 API 的正确使用方式和工程化习惯。1. Claude AI 开发核心能力速览能力项说明项目类型大模型 API 服务 应用开发模型方Anthropic 旗下 Claude 系列模型主要能力文本生成、代码生成、长文本理解与总结、对话、工具调用、Agent 编排本地硬件门槛无独立 GPU 要求开发机只需能正常访问模型 API开发语言Python、TypeScript / JavaScript 等官方提供对应 SDK接入方式Anthropic API、Python SDK、Node SDK、Claude Code 终端工具Agent 扩展支持 Function Calling / Tool Use并可通过 MCP 等协议扩展工具以官方文档为准批量任务可通过脚本自由实现目录批处理、并发控制与重试上下文能力Claude 系列支持长上下文具体长度随模型版本变化以官方文档为准计费方式按输入输出 token 计费用量以 API 返回的 usage 字段为准适合场景聊天应用、代码辅助、文档处理、快速原型验证、Agent 开发这套组合最大的价值是省掉了模型部署环节。你不需要买显卡、不需要配置推理服务只要申请到 API Key模型能力就是随时可调用的服务。对于个人开发者和中小团队来说这意味着从“想法”到“能跑的原型”之间少了很多基础设施工作量。2. 适用场景与使用边界先说适合做什么。Claude API 最典型的场景有三类第一类是内容生成和文档处理。比如写周报、整理会议纪要、抽取合同关键字段、把一篇文章改写成不同风格。这类任务对模型的要求是理解和改写能力强Claude 的长文本能力在这里比较有优势。第二类是代码生成和代码问答。你可以让模型根据需求生成函数、补全单元测试、解释一段看不懂的历史代码也可以接入 IDE 插件或写一个命令行工具。第三类是 Agent 应用。通过 Function Calling模型可以决定何时调用你定义的函数比如查询天气、查数据库、调内部接口最终完成一个多步骤任务。这些场景的共同特点是输入输出是文本或结构化数据任务边界相对清楚而且结果可以由人来复核。边界也要讲清楚。Claude API 不适合离线环境也不适合对数据出境有严格限制的场景。如果你所在的公司要求所有数据必须留在本地那就不能直接走公有 API需要评估私有化部署方案或换用本地模型。另一个边界是成本虽然按 token 计费看起来单次很便宜但批量任务跑起来之后token 消耗会快速增长必须在设计阶段就加入成本控制和限额。最后一个边界是结果可靠性。模型生成的内容不一定全部正确尤其是代码和事实性回答上线前需要人工审核和自动校验。合规方面必须强调三点第一API Key 属于敏感凭据不要提交到 GitHub不要在客户端代码里写死。第二用户数据在发送给模型之前要做脱敏不要在 prompt 里放入身份证号、手机号、密码等敏感信息。第三生成内容不能用于违法用途涉及真实人脸、声音、版权材料时要确认授权。模型生成结果对外发布前建议走审核流程避免出现事实错误或不当内容。3. Claude AI 开发环境准备开发 Claude 应用不需要 GPU但环境准备仍然要做完整。我这里给出一套通用检查清单按顺序确认即可。操作系统建议使用 Linux 或 macOSWindows 也可以开发但涉及 Claude Code 这类终端工具时Windows 建议用 PowerShell 或 WSL 环境。Python 版本建议 3.9 以上Node.js 用于安装 Claude Code 和 TypeScript SDK建议 18 以上。第一步先确认网络环境。Anthropic 的 API 域名是api.anthropic.com开发机需要能正常访问该域名。不同地区的网络连通性差异较大如果调用超时先检查能否直连、是否有代理配置、防火墙是否拦截。如果本地网络无法直连需要在服务器或云主机上开发这部分按你实际能用的环境处理。第二步准备 API Key。登录 Anthropic 控制台在 API Keys 页面创建一个密钥。密钥通常以sk-ant-开头创建后只会完整显示一次务必马上保存。更稳妥的做法是不要直接写入代码而是放到环境变量里。export ANTHROPIC_API_KEYsk-ant-你的密钥第三步创建项目目录和虚拟环境。mkdir claude-app cd claude-app python -m venv venv source venv/bin/activate # Windows 下使用 venv\Scripts\activate第四步安装官方 SDK。pip install anthropic安装完成后用一段最简单的代码验证 Key 是否可用。import anthropic client anthropic.Anthropic() message client.messages.create( modelclaude-3-5-sonnet, max_tokens1024, messages[ {role: user, content: 请只回复两个字成功} ] ) print(message.content[0].text)这里需要说明model参数的具体取值是claude-3-5-sonnet还是其他版本取决于你的账号权限和官方当前开放的模型列表。建议以官方文档的模型名称为准代码里的名字只是一个可运行的示例。如果这段代码能返回“成功”说明账号、网络、SDK 三个环节都通了后面所有功能都建立在这个基础上。如果报 401检查 API Key如果超时检查网络环境。这两个问题在第四、第五步出现得最多。4. 从想法到应用Claude Code 快速原型Claude Code 是 Anthropic 官方的终端 Agent 工具可以直接在项目目录里理解代码、生成代码、执行命令、运行测试。它就是“25 分钟从想法到应用”最关键的加速器。用传统方式开发一个 Web 应用要先搭框架、写路由、写数据库模型、写接口再启动调试用 Claude Code你可以直接把需求丢给它让它把骨架搭好你来检查和修改。安装方式在 Node 环境下比较直接官方推荐通过 npm 全局安装具体命令以官方 README 为准npm install -g anthropic-ai/claude-code安装完成后验证版本claude --version进入一个空目录开始第一个任务mkdir todo-api cd todo-api claude进入交互式终端后输入这样一段提示词创建一个 Todo 应用的 REST API技术栈使用 FastAPI 和 SQLite。 需要支持创建任务、查询任务列表、更新任务状态、删除任务。 提供 README 说明启动方式。Claude Code 会在项目目录里生成对应的文件结构、依赖文件和启动脚本。它还会在需要执行命令时征求你的确认避免在不该执行的操作上越权。生成完成后你可以直接启动服务进入测试阶段。需要澄清一点25 分钟不是对每个想法都成立的承诺。Claude Code 在“需求清晰、技术栈常见、项目规模较小”时效率最高如果需求含混、涉及多系统集成、或者要对接内部业务规则时间会拉长。实际使用中更稳妥的做法是先花几分钟把需求拆成几个明确的小任务再分步交给 Claude Code 完成。拆需求越清楚它的产出就越准确返工越少。在使用 Claude Code 时注意不要让它在包含真实密钥、密码、隐私数据的仓库里运行。它读取项目文件来理解上下文敏感项目需要先做隔离。另外它对大型老仓库的理解速度会变慢可以先用项目结构文档和模块说明来引导而不是直接丢给它整个遗留系统。5. 用 Claude API 构建核心功能Claude Code 适合搭原型和写胶水代码而真正面向用户的产品功能通常还是通过 API 直接调用。这一节我按“对话、流式输出、代码生成、Function Calling”四个维度展开。5.1 基础对话Messages API 是 Claude 核心接口核心请求结构是messages数组里面按顺序放对话历史。下面是 Python SDK 的基础对话示例import anthropic client anthropic.Anthropic() def chat(user_input: str, history: list[dict]) - str: messages history [{role: user, content: user_input}] message client.messages.create( modelclaude-3-5-sonnet, max_tokens1024, system你是一个乐于助人的技术助手。回答要简洁、准确。, messagesmessages ) return message.content[0].text留意system参数它用来设定模型的行为边界和风格相当于系统级提示词。把系统提示词和用户输入分开管理会让后续迭代更清晰。5.2 流式输出真实用户体验不能等完整回复生成完才展示。流式输出可以在生成第一个 token 时就逐步反馈代码里用messages.streamimport anthropic client anthropic.Anthropic() with client.messages.stream( modelclaude-3-5-sonnet, max_tokens2048, messages[{role: user, content: 写一段 200 字的产品介绍}] ) as stream: for text in stream.text_stream: print(text, end, flushTrue)流式输出需要在前端配合 SSE 或 WebSocket 把增量结果推给用户。如果只是做后端批处理可以不使用流式直接拿到完整结果即可。5.3 代码生成与结构化输出代码生成是 Claude 的高频用法。建议在提示词里明确语言、依赖、输入输出格式并要求输出可运行代码。让模型输出结构化数据时用“只输出 JSON”的方式配合max_tokens控制长度避免模型把解释文字也混进结果。import anthropic import json client anthropic.Anthropic() message client.messages.create( modelclaude-3-5-sonnet, max_tokens2048, messages[ {role: user, content: 请将下面需求转换为 JSON 格式的接口设计只输出 JSON\n需求用户注册接口字段包含用户名、邮箱、密码} ] ) design message.content[0].text.strip() print(design)后续可以用json.loads(design)直接解析但要注意模型偶尔会在 JSON 前后夹杂 markdown 代码块标记解析前可以先做清洗。更可靠的做法是把 JSON Schema 直接提供给模型让它按 Schema 输出。5.4 Function Calling 工具调用Function Calling 是 Claude 应用最有价值的一部分。它让模型不只能“说话”还能决定调用你准备好的函数。下面是一个天气查询示例import anthropic client anthropic.Anthropic() def get_weather(city: str) - str: # 这里替换成真实天气服务的查询逻辑 return f{city} 晴气温 25 摄氏度 tools [ { name: get_weather, description: 查询指定城市的当前天气, input_schema: { type: object, properties: { city: {type: string, description: 城市名} }, required: [city] } } ] message client.messages.create( modelclaude-3-5-sonnet, max_tokens1024, toolstools, messages[ {role: user, content: 北京天气怎么样适合跑步吗} ] ) if message.stop_reason tool_use: for block in message.content: if block.type tool_use: city block.input[city] result get_weather(city) print(f模型选择调用 get_weather城市{city}) print(f工具返回{result})这里的关键是stop_reason tool_use它表示模型希望调用工具。生产环境里你要把工具结果作为新的消息拼回对话再次调用 API直到模型给出最终回复。上面的示例只演示了单次工具调用完整的多轮工具调用需要维护一个messages列表把模型返回的tool_use块和工具返回的tool_result块都追加进去。工具调用让 Agent 应用成为可能。你可以定义“查询数据库”“调用内部接口”“发送通知”等工具让模型在对话过程中自主决定执行序列。这比硬编码流程灵活但也意味着模型的行为不完全可预期必须对工具调用加权限和人工确认机制。6. 接口封装与批量任务工程化6.1 用 FastAPI 封装 Claude 服务实际项目中不建议让业务代码直接散落调用 SDK可以先用 FastAPI 封装一层统一接口。这样前端、移动端、内部系统都通过 HTTP 调用逻辑收敛在服务端。from fastapi import FastAPI, HTTPException from pydantic import BaseModel import anthropic app FastAPI() client anthropic.Anthropic() class ChatRequest(BaseModel): prompt: str max_tokens: int 1024 class ChatResponse(BaseModel): reply: str app.post(/chat, response_modelChatResponse) def chat(req: ChatRequest): try: message client.messages.create( modelclaude-3-5-sonnet, max_tokensreq.max_tokens, messages[{role: user, content: req.prompt}] ) return ChatResponse(replymessage.content[0].text) except Exception as e: raise HTTPException(status_code500, detailstr(e))启动服务uvicorn main:app --host 127.0.0.1 --port 8000请求示例curl -X POST http://127.0.0.1:8000/chat \ -H Content-Type: application/json \ -d {prompt: 用一句话介绍 Claude}再次提醒生产环境不要把服务绑定在0.0.0.0上暴露到公网。至少要加 API 鉴权、请求频率限制并记录调用日志。把模型复用逻辑封装成一个独立模块会让后续排查问题方便很多。6.2 批量任务设计Claude API 适合做文件批量处理但需要自己设计任务队列。基本流程是读取目录文件 - 逐个调用模型 - 输出结构化结果。下面是一个用AsyncAnthropic实现的多文件并发处理示例import asyncio import json from pathlib import Path from anthropic import AsyncAnthropic async def process_file(client, file_path, semaphore, out_dir): async with semaphore: text file_path.read_text(encodingutf-8) message await client.messages.create( modelclaude-3-5-sonnet, max_tokens2048, messages[ {role: user, content: f请提取下面文档的核心要点输出 JSON\n\n{text[:5000]}} ] ) result message.content[0].text out_file out_dir / f{file_path.stem}.json out_file.write_text(result, encodingutf-8) return out_file async def main(): client AsyncAnthropic() input_dir Path(./inputs) out_dir Path(./outputs) out_dir.mkdir(exist_okTrue) semaphore asyncio.Semaphore(5) # 控制并发上限 tasks [ process_file(client, p, semaphore, out_dir) for p in input_dir.glob(*.txt) ] results await asyncio.gather(*tasks, return_exceptionsTrue) for r in results: if isinstance(r, Exception): print(f任务异常{r}) if __name__ __main__: asyncio.run(main())这里并发数不能设太高。Claude API 有单位时间请求限制超过后会返回限流错误。稳妥的做法是从低并发开始比如 3 到 5观察有没有 429 错误再逐步调高。每个文件的读取长度也要控制超长文档要分段处理避免上下文溢出产生大量 token 消耗。6.3 失败重试与成本控制API 调用不可避免会遇到限流、超时和瞬时错误。重试是必须的但要用指数退避策略不能失败后立刻重试否则会加剧限流。一个简单的重试循环import time import anthropic def call_with_retry(prompt, retries3, base_delay1.0): client anthropic.Anthropic() for attempt in range(retries): try: return client.messages.create( modelclaude-3-5-sonnet, max_tokens1024, messages[{role: user, content: prompt}] ) except anthropic.RateLimitError: delay base_delay * (2 ** attempt) time.sleep(delay) except anthropic.APIError as e: if attempt retries - 1: raise e time.sleep(base_delay) return None成本控制要从三个角度同时做。第一是控制max_tokens输出 token 是费用大头不给上限可能导致高额账单。第二是控制 prompt 长度系统提示词和上下文越长输入 token 越多。第三是设置任务总预算批量任务启动前先估算单条 token 消耗乘以文件数量得到预期成本。正式跑全量之前先用少量样本测一遍延迟和 token 用量再决定是否扩大规模。7. 资源占用与性能观察Claude 是远端的 API 服务本地不存在 GPU 显存占用问题。但“没有显存占用”不代表没有性能指标需要关注。对依赖 API 的应用来说性能观察重点是延迟、吞吐和 token 消耗。7.1 关键观察指标指标说明首 token 延迟从发送请求到收到第一个 token 的时间直接决定交互体验端到端延迟完整回复的耗时批量任务更关心这个指标输出速率单位时间生成的 token 数影响流式输出的流畅度token 消耗每次请求的 input_tokens 和 output_tokens直接对应费用错误率4xx、5xx、529、超时的比例决定服务稳定性并发上限账号或 Key 的 RPM、TPM 限制以官方文档为准7.2 如何记录和观察最简单的方式是在请求封装层记录耗时和 usage 字段。SDK 返回的 response 里通常包含usage.input_tokens和usage.output_tokens把这两个字段和耗时一起写入日志。import time import anthropic client anthropic.Anthropic() start time.time() message client.messages.create( modelclaude-3-5-sonnet, max_tokens1024, messages[{role: user, content: 测试}] ) elapsed time.time() - start usage message.usage print(f耗时{elapsed:.2f}s) print(f输入 token{usage.input_tokens}) print(f输出 token{usage.output_tokens})把这类日志按天汇总就能算出真实成本和平均延迟。如果首 token 延迟突然变高多半要检查网络链路如果经常出现 529说明上游过载要加大重试间隔或降低并发。7.3 降低延迟和成本的策略交互类应用优先使用流式输出用户感知的等待时间会明显缩短。批量任务则可以关闭流式减少连接开销。提示词要精简把不必要的历史消息裁剪掉长对话只保留最近几轮和关键上下文。如果业务支持可以在非高峰时段跑批量任务但具体是否有效取决于 API 端的负载策略不能一概而论。8. Claude AI 开发常见问题与排查方法问题现象可能原因排查方式解决方案返回 401 认证错误API Key 错误或未设置检查环境变量和密钥前缀重新生成 Key确认环境变量已生效返回 400 参数错误请求模型名不存在、messages 格式不对查看错误信息中的详情感应按官方文档修正参数返回 403 或 429权限不足或触发限流检查账号权限和使用限制降低并发、加重试退避、查看配额返回 529上游服务过载查看服务状态页退避重试避免短时间高频请求请求超时网络不稳定或生成内容过长测试 ping 和 curl 接口耗时启用流式输出、调大超时时间、重试输出被截断max_tokens 设置过小查看输出长度是否接近上限调大 max_tokens 或要求模型精简输出解析 JSON 失败模型输出夹杂代码块标记打印原始输出检查清洗 markdown 标记后再 json.loads模型调用工具出错工具定义不符合 Schema 格式查看 tool_use 块内容和报错修正 input_schema 定义批量任务卡住单个文件内容过长或并发过高查看任务日志和耗时分布限制文件长度、降低并发、增加超时最值得提醒的是前两个问题。大部分联调卡在 401 和 400而不是模型能力本身。遇到问题先看 API 返回的完整错误体里面会给出明确原因。不要把错误信息只打印一半排查效率会低很多。9. 最佳实践与使用建议把 Claude 接入真实项目之前建议先建立一套稳定的工程习惯。第一保留一套最小可运行示例。就是把第 3 节的验证代码独立保存任何环境出问题时先用它验证 API Key 和网络是否正常。这能快速区分“环境问题”和“业务代码问题”。第二模型服务先做封装层。所有调用都走统一模块统一处理超时、重试、日志和 token 统计禁止业务代码里到处直接 new Client。第三提示词和代码分开管理。系统提示词不要散落在业务逻辑里集中放到配置文件或配置表中方便版本管理。第四批量任务要做好日志和可恢复性。每个文件的处理结果都要落盘失败任务记录原因下次只重跑失败的批次而不是全量重来。成本控制要常态化。可以写一个简单的预算守卫每次请求后记录 token 消耗当日累计消耗超过阈值时自动熔断避免异常流量打爆账户。对长时间运行的 Agent 任务还要设置最大轮次和超时时间防止模型在工具调用循环里空转。权限和审计也要从第一天就设计好。API Key 单独建一个服务账号权限范围最小化。接口层增加访问控制内部工具不能无限制被外部调用。所有模型输入输出都做审计日志这既是排查问题的基础也是合规要求。涉及真实用户数据、人脸、声音、版权素材的功能必须确认授权范围和内容审核流程后再上线。10. 总结与下一步Claude AI 开发最值得尝试的点是它把“模型能力”和“应用开发”彻底分离了。你不用关心推理资源只关注业务逻辑这让从想法到可运行原型的时间被大幅压缩。对开发者来说最先应该验证的功能不是花哨的 Agent 编排而是最基础的 Messages API 调用和流式输出。只要这两条路能跑通后面加工具调用、封装接口、做批量任务都是顺势扩展。最容易踩的坑有三个一是 API Key 泄露二是对 token 消耗没有预估三是工具调用缺少权限控制。前两个会让你在财务或安全上被动第三个会让 Agent 在不受控的情况下做出不该做的操作。所以不管项目多小这三条底线都要守住。下一步建议按这样的顺序推进先跑通基础对话再做带 Function Calling 的单轮工具调用然后封装成 HTTP 服务接着给服务加鉴权和日志最后用一个小型数据集验证批量任务的稳定性和成本。等这套基础设施稳定了再考虑接 MCP 扩展工具、做多 Agent 协作、或接入更长上下文的模型版本。真正让你成长的不是“能调用模型”而是你能把模型调用组织成稳定、可控、可维护的服务。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表