当前位置: 首页 > news >正文

AI请你喝奶茶?背后其实是Function Calling

Function Calling

  • 最近,千问“请大家喝奶茶”火了一把,这背后是一次真实的接口调用。
  • AI它不是在聊天,而是在“调接口[下单系统]”。这种能力,就叫Function Calling。
  • 当大模型从“生成文本”升级为“调用工具”,AI 才真正开始从对话助手,变成执行系统。

Function Calling的步骤

Function Calling 的完整流程包括以下步骤:

  • 定义工具(tools):告诉 AI 你有哪些函数/工具可以调用,每个函数的参数是什么
  • 第一次调用大模型API[如何调用大模型API]:AI 分析用户输入,决定是否需要调用函数/工具
  • 检查响应:如果 AI 返回了tool\_calls,说明它想调用函数/工具
  • 执行函数/工具:根据 AI 的请求,执行实际的函数调用
  • 第二次调用大模型API:将函数/工具执行结果返回给 AI
  • AI 生成最终回复:结合函数/工具结果,生成用户可读的回答

完整示例:天气查询工具

2.1 定义工具——调用get_weather API查询天气

#定义工具 tools = [ { "type": "function", "function":{ "name": "get_weather", "description": "获取指定城市的实时天气信息", "parameters":{ "type": "object", "properties": { "city": { "type": "string", "description": "城市名称,例如:北京、上海" }, "unit": { "type": "string", "enum": ["celsius","fahrenheit"], "description":"温度单位:celsius(摄氏度)或fahrenheit(华氏度)" } }, "required": ["city"] #city是必填参数 } } } ] print("工具schema已定义") #这里我们自己定义下get_weather工具[实际使用时我们调用天气API] def get_weather(city: str, unit: str = "celsius") -> str: """ 获取指定城市的天气信息(Mock函数,实际调用天气API) Args: city: 城市名称 unit: 温度单位(celsius或fahrenheit) Returns: 天气信息的JSON字符串 """ #模拟天气数据 weather_data = { "北京": {"temperature": 15, "condition": "晴天", "humidity": 45}, "上海": {"temperature": 20, "condition": "多云", "humidity": 60}, "深圳": {"temperature": 28, "condition": "小鱼", "humidity": 75}, } #检查城市是否存在于模拟数据中 if city in weather_data: data = weather_data[city] if unit == 'fahrenheit': data['temperature'] = int(data['temperature'] * 9/5 + 32) return json.dumps({ "city": city, "temperature": data["temperature"], "unit": unit, "condition": data["condition"], "humidity": data["humidity"] }, ensure_ascii = False) else: return json.dumps({"error": f"未找到 {city} 的天气数据"}, ensure_ascii = False) print("测试天气查询函数:") print(get_weather('北京')) print(get_weather('上海', 'fahrenheit'))

2.2 第一次调用大模型API

import json import os from openai import OpenAI from dotenv import load_dotenv load_dotenv(override=True) client = OpenAI( api_key = os.getenv("DASHSCOPE_API_KEY"), base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1") #用户提问 user_query = "北京现在的天气怎么样?" #初始化信息 messages = [ {"role": "system", "content": "你是一个友好的天气助手,可以查询天气信息。"}, {"role": "user", "content": user_query} ] print(f"用户: {user_query}\n") #第一次调用:让AI决定是否需要调用工具 response = client.chat.completions.create( model = 'deepseek-v3.2', messages = messages, tools = tools, #传递工具定义 tool_choice = 'auto' #"auto"为自动决定 )

2.3 检查AI的响应:是否想调用函数/工具

if response.choices[0].message.tool_calls: print('AI决定调用工具:') #提取工具调用信息 tool_call = response.choices[0].message.tool_calls[0] function_name = tool_call.function.name function_args = json.loads(tool_call.function.arguments) print(f" 函数名: {function_name}") print(f" 参数: {function_args}")

2.4 执行函数/工具:根据 AI 的请求,执行实际的函数调用

if function_name == 'get_weather': function_result = get_weather(**function_args) print(f"函数执行结果:{function_result}\n")

2.5-2.6:第二次调用 大模型API,AI生成最终回复

#将函数结果添加到消息历史 messages.append(response.choices[0].message) #AI的工具调用请求 messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": function_result }) # 第二次调用:让AI根据函数结果生成最终回复 final_response = client.chat.completions.create( model = 'deepseek-v3.2', messages = messages ) final_answer = final_response.choices[0].message.content print(f"AI 最终回复:{final_answer}")

2.7 测试如下

Function calling的其他应用

这里给大家精心整理了一份全面的AI大模型学习资源包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

👇👇扫码免费领取全部内容👇👇

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

4. 2026行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战

学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

7. 资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

http://www.jsqmd.com/news/523550/

相关文章:

  • 避坑指南:UniApp里用DeepSeek流式API,为什么你的代码高亮和复制功能总打架?
  • 避开中文用户名陷阱:Proteus安装报错There is a problem...的3种修复方案
  • Milvus单机版升级集群版实战:用milvus-backup搞定数据迁移(附完整配置文件)
  • LM35D温度传感器嵌入式驱动库设计与滤波实践
  • AutoCAD多线段导出CSV实战:手把手教你用AutoLisp实现3D打印路径规划
  • matlab代码:基于元胞自动机的交通模型(三车道),用于模拟车辆在多车道道路上的行驶情况。 ...
  • Windows环境下编译运行C语言程序,合适工具与方法很关键
  • 计算机毕业设计springboot农村阅览室管理系统 基于SpringBoot的乡村数字图书馆服务平台设计与实现 SpringBoot框架下村镇公共文化空间智能管理系统开发
  • 【实战指南】CKA认证:从零到Kubernetes管理高手的通关秘籍
  • 从Sonnet 4.5迁移到Opus 4.5:一个真实项目重构的成本与效率复盘
  • 华三交换机流策略避坑指南:常见配置错误与解决方案
  • GPAI模数转换驱动设计与RT-Thread ADC适配
  • TaskManagerIO:嵌入式轻量级协作式任务调度库
  • Fortran老项目迁移实录:用Intel oneAPI替代已停更的Composer XE(VS2022适配版)
  • PLC计数器避坑指南:如何用C0实现5次循环自动清零(三菱FX系列)
  • Linux文件查找实战:find、locate与grep高效用法解析
  • Verdi高效调试实战指南:从信号追踪到问题定位
  • Docker Compose一键部署Harbor镜像仓库(附SSL证书配置避坑指南)
  • 基于fpga实现千兆以太网通信,纯Verilog代码,也有基于三速以太网IP核的(带仿真)接口...
  • Python Xgboost/Catboost随机森林/树模型/任意模型/线性模型/SVR/G...
  • 2026年全网热议北京小程序开发服务推荐榜单,解锁本凡科技的新优势
  • 不用写代码!用UE5蓝图10分钟搞定回合制游戏摄像机(缩放+旋转+移动三合一教程)
  • 从碎片到全貌:2026 案发现场快速处理刑侦现场精准还原系统公司推荐 - 品牌2026
  • 从珠海少年到Nature封面:DeepSeek天才郭达雅的AGI征途
  • Genus水平共现网络图实战:如何用R语言快速处理OTU数据(附完整代码)
  • 程序员为啥都要学C语言?带你了解C语言的重要性和优势
  • 手把手教你给CH32V307VCT6移植FatFS:SD卡读写与文件管理实战(附源码)
  • 群晖NAS音乐库外网访问终极指南:5分钟搞定内网穿透+手机端秒播(附免费工具推荐)
  • BJT三极管工作原理图解:从物理结构到电流放大(附NPN/PNP对比)
  • 从零到一:基于 Astro 与 Cloudflare Pages 的极速博客实战