深入浅出Function Calling③-零基础保姆级教程

发布时间:2026/10/18 5:02:47

深入浅出Function Calling③-零基础保姆级教程 第 5 章工程细节 —— 让工具调用达到生产级5.1 工具描述写作军规模型乱调工具时90% 先改这里军规BadGood说清何时用查天气查询城市当前实时天气。用户问天气/气温/穿衣/带伞时使用历史天气不支持参数给格式与示例城市城市中文名如北京。用户未提及城市时先追问不要猜测划清边界无只支持数学表达式不含变量/函数日期计算请改用 date_diff 工具定义返回无返回格式城市: 天气 温度失败时返回以天气查询失败开头的错误说明补一条系统提示词侧的黄金句式你已经在用了涉及 X 的问题必须使用工具禁止凭记忆回答/心算——把该用工具时不用的漏调率打下来。5.2 用 Pydantic 自动生成 Schema少写 30 行样板手写 JSON Schema 又长又易错。Pydantic 的model_json_schema()一键生成class WeatherArgs(BaseModel): 查询指定城市的当前实时天气。用户询问天气/气温/穿衣建议时使用。 city: str Field(..., description城市中文名如北京) def pydantic_to_tool(model_cls) - dict: schema model_cls.model_json_schema() return {type: function, function: { name: schema.get(title, model_cls.__name__).lower(), description: model_cls.__doc__.strip(), parameters: {type: object, properties: schema[properties], required: schema.get(required, [])}}}LangChaintool装饰器把这一步也自动化了读函数签名docstring 直接生成——你现在已看穿它的全部魔法。5.3 敏感操作先申请人来批准绝不允许模型直调退款/转账/删除/群发类函数。生产范式——工具只返回待确认单真执行等人点头def request_refund(order_id: str, amount: float) - str: 发起退款申请。注意本工具只创建待确认的申请单不会直接扣款。 if amount 2000: return f已创建退款申请单 R-{order_id}金额{amount}元超过阈值已转人工审核模型无权继续操作。 return f已创建退款申请单 R-{order_id}{amount}元。请向用户复述金额并获得明确同意后调用 confirm_refund 工具。这就是human-in-the-loop的最小实现。5.4 其余四条速记工具结果限长return result[:2000]或先摘要——工具灌爆上下文是 Agent 变笨主因第 2 批 17.5。工具历史要不要长留本轮任务内必须留模型靠它推理跨任务的旧 tool 消息可在历史裁剪时优先清退信息密度低、体积大。幂等设计查询类随便重试写操作类下单要防重复执行——传入唯一请求号。给工具也加超时requests.get(..., timeout10)你已在做慢工具会卡死整个循环。第 6 章错误处理、重试与成本控制6.1 SDK 异常家族对号入座表import openai try: r client.chat.completions.create(modelMODEL, messagesmessages, timeout30) except openai.AuthenticationError: # 401Key错误/被吊销 → 查 .env不要重试 ... except openai.RateLimitError: # 429限流/欠费 → 指数退避重试见下 ... except openai.BadRequestError as e: # 400参数错/上下文超限 → 修请求别重试 ... # 报错含 context length 字样 → 该裁历史了 except openai.APITimeoutError: # 超时 → 可重试 ... except openai.APIConnectionError: # 网络不通 → 可重试 ... except openai.APIStatusError as e: # 5xx 服务端故障 → 退避重试 print(e.status_code, e.response)分两类记该重试的429/超时/网络/5xx——问题在环境与不该重试的401/400——问题在你重试一百次也一样。6.2 重试双方案方案 A · SDK 自带最省事处理网络类错误client OpenAI(api_key..., base_url..., max_retries2, timeout30.0)方案 B · tenacity 装饰器可精确控制哪些异常、退避曲线01 教程 17.2 装饰器知识变现# pip install tenacity from tenacity import retry, stop_after_attempt, wait_exponential_jitter, retry_if_exception_type retry(retryretry_if_exception_type((openai.RateLimitError, openai.APITimeoutError, openai.APIConnectionError, openai.APIStatusError)), waitwait_exponential_jitter(initial1, max30), # 指数退避随机抖动 stopstop_after_attempt(4)) def safe_chat(messages, **kw): return client.chat.completions.create(modelMODEL, messagesmessages, **kw)为什么要抖动jitter并发的 100 个请求同时 429、又同时在第 2 秒重试 集体二次撞墙各自随机等待错峰重试才是解。这是面试429 怎么处理的满分尾句。6.3 成本记账器挂进综合项目class CostTracker: # 价格随行就市以官网为准单位元/百万token PRICES {deepseek-chat: (2.0, 8.0)} # (输入, 输出) 量级示意 def __init__(self): self.prompt_tokens self.completion_tokens self.calls 0 def record(self, usage, model: str deepseek-chat): self.calls 1 self.prompt_tokens usage.prompt_tokens self.completion_tokens usage.completion_tokens def report(self, model: str deepseek-chat) - str: pin, pout self.PRICES[model] cost self.prompt_tokens/1e6*pin self.completion_tokens/1e6*pout return (f调用{self.calls}次 | 输入{self.prompt_tokens} f输出{self.completion_tokens} tokens | 约 ¥{cost:.4f})省钱三板斧回顾稳定前缀吃缓存DeepSeek 响应里的prompt_cache_hit_tokens字段能直接看到命中量好奇就打出来、历史裁剪、小任务用小模型。
延伸阅读

更多相关文章

2026/10/16 12:57:50

渲染管线噔噔噔

一、前言:这里是随机一次的梦到哪句讲哪句环节二、渲染管线简要描述1.应用阶段:决定并准备要画什么,例如更新场景、摄像机、动画、模型和材质,然后提交绘制命令。(应用阶段决定画什么)2.几何阶段&#xff1…

2026/10/18 5:02:17

基于CenterNet与轻量CNN的车牌识别计费系统毕业设计

简介:本资源是一套完整落地的本科毕业设计项目——基于Python实现的智能停车场车牌识别与自动计费系统,面向计算机、软件工程及人工智能方向的本科生,解决停车场车辆进出管理、车牌精准识别与动态计费等实际问题,亦适合作为期末大…

2026/10/18 5:02:17

告别UA正则:2025年Safari与iOS版本检测的新思路

2025年,前端做浏览器适配,最容易踩的一块砖头就是版本检测。以前用navigator.userAgent一行正则就能判断 Safari、取出 iOS 版本号的日子,已经彻底过去了。Chrome 从第 117 个大版本开始,UA 字符串里的平台版本号被统一改成了 0.0…

2026/10/18 5:02:17

CPU指令流水线、乱序执行与缓存一致性:多线程性能优化核心机制

1. 从一条指令的生命周期说起很多程序员写了多年代码,对CPU的理解始终停留在“它很快”这个层面。面试被问到“什么是指令流水线”“为什么分支预测失败代价大”“内存屏障到底在挡什么”,往往只能背出几个名词,说不出所以然。这篇内容承接上…

2026/10/18 5:02:17

数码管识别实战:光学-结构-时序耦合的工业视觉方案

简介:本资源是一套基于Python实现的数码管实时检测与识别系统源码,面向计算机视觉初学者、图像识别实践者及嵌入式仪表开发人员,解决工业场景中数码管数字在复杂光照与多角度下的自动识别难题。压缩包共192个文件,大小98.12MB&…

2026/10/18 5:02:17

Windows下PC-lint Plus 2.0静态分析工具配置与CI集成实战

简介:PC-lint Plus 2.0 for Windows 是一款面向 C/C 开发者的静态代码分析工具,适用于嵌入式、汽车电子及对代码质量要求较高的工程团队,帮助在编码阶段发现潜在缺陷、提升代码可靠性。资源包共 27 个文件,约 25.15MB,…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑