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

一、FunctionCalling——大模型的外部能力接口,实现工具调用与任务执行

Function Calling函数调用是LLM 工程化、AI 智能体的核心基石。如果大模型是大脑那 Function Calling 就是让大脑「指挥手脚干活」的标准协议——它规定了大模型如何描述工具、如何输出调用指令、程序如何执行、如何回传结果。一、Function Calling 是什么一句话定义Function Calling 是一套固定的 JSON 数据协议让大模型以结构化格式告诉程序我需要调用哪个函数、传什么参数。它的核心分工LLM理解意图 → 生成规范的调用格式程序解析格式 → 执行函数 → 返回结果LLM整合结果 → 生成最终回答二、Function Calling 标准格式拆解Function Calling两套核心格式工具定义格式告诉 LLM 有什么函数可用模型返回格式LLM 告诉程序要调用什么2.1 格式1工具定义格式传给大模型的格式描述函数的名字、功能、参数。完整标准结构[ { type: function, function: { name: 函数名称英文程序中真实存在, description: 函数功能描述LLM靠这个判断是否调用, parameters: { type: object, properties: { 参数1: { type: 参数类型string/number/boolean, description: 参数说明 }, 参数2: { type: string, description: 参数说明 } }, required: [必填参数1] } } } ]字段作用必须name函数名程序与模型的唯一对应标识✅ 必须description功能描述LLM 调用的依据✅ 必须写不清楚就调用失败parameters参数定义容器✅ 必须properties所有参数的详细描述✅ 必须required声明哪些参数必填✅ 推荐2.2 格式2模型返回格式LLM 接收到工具描述后需要调用时会返回固定 JSON 格式{ role: assistant, content: null, tool_calls: [ { function: { name: 调用的函数名, arguments: {\参数1\:\值1\,\参数2\:\值2\} } } ] }关键字段name模型选择的函数arguments模型生成的参数JSON 字符串三、Function Calling 怎么用5 步法定义工具函数写业务代码计算器/查天气/查数据库封装为标准 FC 格式上文的工具格式传给 LLM让模型知道可用工具LLM 返回调用指令程序解析并执行函数把结果回传给 LLM生成最终答案四、JSON 工具封装1. 手动封装 JSON步骤 1定义原始函数# 原始业务函数 def calculator(num1: float, num2: float, operator: str) - str: if operator : return f结果{num1num2} if operator -: return f结果{num1-num2} if operator *: return f结果{num1*num2} if operator /: return f结果{num1/num2} return 无效运算符步骤 2严格按照标准封装 JSON# 手动封装计算器工具 JSON tool_json [ { type: function, function: { name: calculator, # 对应函数名 description: 计算器工具支持加减乘除计算, # 功能描述 parameters: { type: object, properties: { num1: { type: number, description: 第一个计算数字 }, num2: { type: number, description: 第二个计算数字 }, operator: { type: string, description: 运算符支持 - * / } }, required: [num1, num2, operator] # 必填参数 } } } ]步骤 3多工具合并封装如果有多个工具直接放在数组里即可# 双工具封装计算器 天气查询 tools_json [ # 计算器工具 { type: function, function: {name: calculator, ...: ...} }, # 天气查询工具 { type: function, function: {name: weather_query, ...: ...} } ]步骤 4原生调用验证无框架直接把 JSON 传给模型完成调用。4.2 LangChain 自动封装核心原理函数与JSON 映射关系Python 函数元素自动封装为 JSON 字段函数名function.name函数注释docstringfunction.description参数类型注解properties.type参数说明properties.description查看 LangChain 自动生成的 JSON这是最直观的验证方式运行代码就能看到封装结果from langchain.tools import tool # 1. 定义工具函数 tool def calculator(num1: float, num2: float, operator: str) - str: 计算器工具支持加减乘除计算 if operator : return f结果{num1num2} return 计算失败 # 2. 打印自动封装的 JSON 格式 print( LangChain 自动封装的工具 JSON ) print(calculator.args_schema.model_json_schema()) LangChain 自动封装的工具 JSON {description: 计算器工具支持加减乘除计算, properties: {num1: {title: Num1, type: number}, num2: {title: Num2, type: number}, operator: {title: Operator, type: string}}, required: [num1, num2, operator], title: calculator, type: object}五、实战代码可直接运行用双工具计算器天气查询完整演示框架使用 LangChain自动处理格式无需手写 JSON。1. 完整可执行代码from langchain_openai import ChatOpenAI from langchain.tools import tool from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain.prompts import ChatPromptTemplate import os from dotenv import load_dotenv # 加载配置 load_dotenv() # 1. 初始化模型 llm ChatOpenAI( modelqwen3.5-flash, api_keyos.getenv(DASHSCOPE_API_KEY), base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0.1, ) # 2. 定义工具自动封装FC格式 # 工具1计算器 tool def calculator(num1: float, num2: float, operator: str) - str: 计算器工具执行加减乘除 参数 num1: 数字1 num2: 数字2 operator: 运算符( - * /) if operator : return f结果{num1num2} if operator -: return f结果{num1-num2} if operator *: return f结果{num1*num2} if operator /: return f结果{num1/num2} return 无效运算符 # 工具2天气查询 tool def weather_query(city: str) - str: 查询城市天气 city: 城市名称 data {北京:晴 25℃,上海:多云 28℃,广州:小雨 26℃} return data.get(city, 暂无数据) # 工具列表 tools [calculator, weather_query] # 3. 构建调用流程 prompt ChatPromptTemplate.from_messages([ (system, 你是工具调用助手必须严格按格式调用工具), (human, {input}), (placeholder, {agent_scratchpad}), ]) # 创建智能体自动处理FC格式 agent create_tool_calling_agent(llm, tools, prompt) executor AgentExecutor( agentagent, toolstools, verboseTrue, # 打印完整格式日志 max_iterations3 ) # 4. 执行测试 if __name__ __main__: # 测试1计算 print( 测试110乘以6.5 ) print(executor.invoke({input: 10乘以6.5等于多少})[output]) # 测试2天气 print(\n 测试2查询北京天气 ) print(executor.invoke({input: 北京今天天气怎么样})[output])3. 运行日志 测试110乘以6.5 Entering new AgentExecutor chain... Invoking: calculator with {num1: 10, num2: 6.5, operator: *} 结果65.010乘以6.5等于65。 Finished chain. 10乘以6.5等于65。 测试2查询北京天气 Entering new AgentExecutor chain... Invoking: weather_query with {city: 北京} 晴 25℃北京今天天气晴朗气温25℃。 Finished chain. 北京今天天气晴朗气温25℃。五、Function Calling 用法核心规则1. 工具描述决定调用成功率LLM 不看代码只看描述描述越清晰调用越准确。2. 参数类型必须严格定义数字、字符串不能混淆否则格式解析失败。3. 必须限制调用次数防止无限循环生产环境必加max_iterations。六、总结Function Calling 一套固定 JSON 协议两个核心格式工具定义格式 模型返回格式5步固定用法定义工具→封装格式→传给LLM→执行→回传工程落地工具描述是关键框架自动处理格式

相关文章:

一、FunctionCalling——大模型的外部能力接口,实现工具调用与任务执行

Function Calling(函数调用)是LLM 工程化、AI 智能体的核心基石。 如果大模型是大脑,那 Function Calling 就是让大脑「指挥手脚干活」的标准协议——它规定了大模型如何描述工具、如何输出调用指令、程序如何执行、如何回传结果。一、Functi…...

离散数学|代数系统核心概念与应用场景全解析

1. 代数运算:从买菜到编程的通用语言 第一次接触代数系统时,我盯着那些奇怪的符号发呆了半小时。直到有天在菜市场,看到大妈用计算器按"3515",突然意识到:这不就是二元运算吗?代数运算本质上就是…...

西门子S7-1500PLC大型程序实战:FB块PTO控制多轴运动,S7-1200PLC智能IO...

西门子S7-1500PLC大型程序,各种FB块PTO控制20多个轴,5台S7-1200PLC智能IO通讯,ModbusRTU通讯轮询,完整威纶通触摸屏程序,是学习西门子PLC通信、伺服好帮手 程序结构分明,注释详细,有机械结构图&…...

Windows 11终极清理指南:Win11Debloat一键优化你的系统体验

Windows 11终极清理指南:Win11Debloat一键优化你的系统体验 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter a…...

SHT30温湿度传感器项目避坑指南:从IIC地址冲突到数据校验的5个常见问题

SHT30温湿度传感器实战避坑手册:5个高频问题深度解析 第一次拿到SHT30传感器时,我以为按照手册接上线就能轻松读取数据。结果连续三天卡在各种奇怪的问题上——从设备无应答到数据校验失败,甚至出现温度值跳变到300℃的离谱情况。这篇文章不…...

Midscene Chrome扩展:如何用AI快速实现零代码浏览器自动化?

Midscene Chrome扩展:如何用AI快速实现零代码浏览器自动化? 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 还在为重复的浏览器操作而烦恼…...

LFM2.5-1.2B-Thinking-GGUF开发工具链整合:在IDEA中配置模型调试环境

LFM2.5-1.2B-Thinking-GGUF开发工具链整合:在IDEA中配置模型调试环境 1. 为什么要在IDEA中配置模型调试环境 对于Java开发者来说,IntelliJ IDEA是最常用的集成开发环境。将LFM2.5-1.2B-Thinking-GGUF模型的调试环境直接集成到IDEA中,可以显…...

Steam版《极限竞速:地平线5》总闪退?试试关闭这个容易被忽略的控制器设置

Steam版《极限竞速:地平线5》频繁闪退?可能是控制器设置惹的祸 最近在Steam社区和各大游戏论坛上,不少玩家反映《极限竞速:地平线5》在启动时频繁闪退,尤其是在使用外设控制器的情况下。这个问题困扰了许多热爱赛车游戏…...

51单片机 proteus仿真 直流电机

电路仿真代码#include <reg51.h>#define uchar unsigned char #define uint unsigned int #define LCD_Data P0 sbit IN1 P3^0; sbit IN2 P3^1; sbit ENA P3^2;sbit back P2^0; sbit forword P2^1; sbit up P2^2; sbit down P2^3; sbit stop P2^4; sbit LCD_RS…...

Cadence Allegro 17.4进阶指南:PCB Editor高效布线技巧与实战解析

1. Cadence Allegro 17.4 PCB Editor布线核心技巧 作为PCB设计领域的工业标准工具&#xff0c;Cadence Allegro 17.4的PCB Editor提供了强大的布线功能。在实际项目中&#xff0c;掌握这些技巧可以显著提升设计效率。我经手过多个高速PCB设计项目&#xff0c;深刻体会到合理使用…...

cve_2018_16509(ghostscript)漏洞复现报告

名称: vulfocus/ghostscript-cve_2018_16509:latest​描述: ​GhostScript 被许多图片处理库所使用&#xff0c;如 ImageMagick、Python PIL 等&#xff0c;默认情况下这些库会根据图片的内容将其分发给不同的处理方法&#xff0c;其中就包括 GhostScript。​在 9.24 之前的 Ar…...

Windows内核驱动手动映射终极指南:KDMapper完全攻略

Windows内核驱动手动映射终极指南&#xff1a;KDMapper完全攻略 【免费下载链接】kdmapper KDMapper is a simple tool that exploits iqvw64e.sys Intel driver to manually map non-signed drivers in memory 项目地址: https://gitcode.com/gh_mirrors/kd/kdmapper 还…...

CSL编辑器:重新定义学术文献样式编辑的智能方案

CSL编辑器&#xff1a;重新定义学术文献样式编辑的智能方案 【免费下载链接】csl-editor cslEditorLib - A HTML 5 library for searching and editing CSL styles 项目地址: https://gitcode.com/gh_mirrors/csl/csl-editor 你是否曾为学术论文的引用格式而烦恼&#x…...

傲梅分区助手 使用教程:免安装硬盘分区管理工具

一、工具简介 傲梅分区助手是一款功能强大的硬盘分区管理工具&#xff0c;支持无损数据调整分区大小、合并/拆分分区、迁移系统到 SSD 等操作。 安装包下载&#xff1a;https://pan.xunlei.com/s/VOpm6nKehfUHH-MDyIbMIhGkA1?pwdpm5g# 二、使用步骤 1. 解压工具包​ 右键点…...

LangChain揭秘:AI“大脑”+“手脚”+“记忆”,OpenClaw如何轻松打造智能助手?

LangChain是一个Python开发框架&#xff0c;用于定义AI流程、集成RAG&#xff08;知识库&#xff09;和Skills&#xff08;工具箱&#xff09;&#xff0c;控制逻辑。RAG提供信息&#xff0c;Skills执行任务。OpenClaw是集成RAG和Skills的完整AI助手框架&#xff0c;具备记忆和…...

保姆级教程:用两张RTX 4090本地搭建企业级TranslateGemma翻译引擎

保姆级教程&#xff1a;用两张RTX 4090本地搭建企业级TranslateGemma翻译引擎 1. 为什么选择本地化翻译系统&#xff1f; 在当今全球化的工作环境中&#xff0c;高效准确的翻译工具已成为刚需。但常见的在线翻译服务存在几个痛点&#xff1a; 数据隐私风险&#xff1a;敏感技…...

为什么要做 GeoPipeAgent那

指令替换 项目需求&#xff1a;将加法指令替换为减法 项目目录如下 /MyProject ├── CMakeLists.txt # CMake 配置文件 ├── build/ #构建目录 │ └── test.c #测试编译代码 └── mypass2.cpp # pass 项目代码 一&#xff0c;测试代码示例 test.c // test.c #includ…...

Spring Cloud进阶--分布式权限校验OAuth控

一、核心问题及解决方案&#xff08;按踩坑频率排序&#xff09; 问题 1&#xff1a;误删他人持有锁——最基础也最易犯的漏洞 成因&#xff1a;释放锁时未做身份校验&#xff0c;直接执行 DEL 命令删除键。典型场景&#xff1a;服务 A 持有锁后&#xff0c;业务逻辑耗时超过锁…...

RAG 还是 Lucene:私有化部署客服系统的 AI 知识库架构选型窗

在之前的文章中&#xff0c;我们花了大量的篇幅&#xff0c;从记录后端pod真实ip开始说起&#xff0c;然后引入envoy&#xff0c;再解决了各种各样的需求&#xff1a;配置自动重载、流量劫持、sidecar自动注入&#xff0c;到envoy的各种能力&#xff1a;熔断、流控、分流、透明…...

IINA:macOS原生级视频播放体验的现代化解决方案

IINA&#xff1a;macOS原生级视频播放体验的现代化解决方案 【免费下载链接】iina The modern video player for macOS. 项目地址: https://gitcode.com/gh_mirrors/iin/iina 在macOS平台上寻找一款既能提供专业级播放功能&#xff0c;又保持系统原生体验的视频播放器&a…...

如何永久保存你的数字记忆:WeChatMsg聊天记录导出与年度报告生成终极指南

如何永久保存你的数字记忆&#xff1a;WeChatMsg聊天记录导出与年度报告生成终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub…...

被忽视的Windows网络加速技巧:禁用QoS保留带宽到底有没有用?(附gpedit.msc完整配置)

被忽视的Windows网络加速技巧&#xff1a;禁用QoS保留带宽到底有没有用&#xff1f; 在Windows系统优化的江湖传说中&#xff0c;"禁用QoS保留带宽提升网速"这个技巧已经流传了十几年。从Windows XP时代开始&#xff0c;各种技术论坛和优化指南都会提到这个"秘技…...

从Java转行大模型应用,Dify 本地部署和可视化智能体创建全流程(低代码 + 脚本)

Dify 是开源低代码 AI 应用开发平台&#xff0c;支持Docker 一键本地私有化部署&#xff0c;通过可视化拖拽即可创建智能体&#xff0c;无需复杂编码&#xff0c;还可通过脚本自动化部署与智能体配置。以下是完整实操方案&#xff1a;一、本地部署&#xff08;Docker Compose&a…...

化工园区智能一体化巡检平台

平台以数字孪生、AI智能研判、多模态感知为核心技术底座&#xff0c;整合全域数据&#xff0c;实现"一张屏管园区"的高效管控。数据可视化大屏&#xff1a;实时呈现园区设备状态、巡检轨迹、隐患告警等核心信息&#xff0c;支持3D园区模型缩放、旋转&#xff0c;精准…...

嵌入式图形渲染的跨平台解决方案:Adafruit GFX Library技术深度解析

嵌入式图形渲染的跨平台解决方案&#xff1a;Adafruit GFX Library技术深度解析 【免费下载链接】Adafruit-GFX-Library Adafruit GFX graphics core Arduino library, this is the core class that all our other graphics libraries derive from 项目地址: https://gitcode…...

YOLO 11 + Qwen3.5打造一站式视频智能监控分析平台

&#x1f9e0; 整体思路&#xff1a;大小模型协同这套方案的核心在于“大小模型协同”&#xff1a;YOLO11 (小模型 - 感知层)&#xff1a;负责底层的实时感知&#xff0c;快速完成目标检测、追踪等任务。Qwen3.5 (大模型 - 认知层)&#xff1a;对YOLO11提取的关键信息进行深度理…...

Spring Boot 4.0 Agent-Ready架构调优:为什么93%的团队在-Dspring.aot.enabled=true后反而变慢?3个反模式+2个HotFix配置

第一章&#xff1a;Spring Boot 4.0 Agent-Ready架构性能调优导论Spring Boot 4.0 引入了原生支持 Java Agent 的运行时增强能力&#xff0c;标志着 JVM 应用可观测性与性能治理进入新阶段。Agent-Ready 并非仅指兼容字节码增强工具&#xff0c;而是通过标准化的 Instrumentati…...

银河麒麟系统(arm64)下基于CMake的GEOS3.8.2编译实战指南

1. 银河麒麟系统与GEOS编译背景 最近在国产化替代的大背景下&#xff0c;越来越多的开发者开始接触银河麒麟操作系统。作为一款基于Linux的国产系统&#xff0c;银河麒麟在arm64架构上的表现相当出色&#xff0c;但同时也带来了新的挑战——很多常用的开源库并没有现成的arm64…...

OpenClaw权限管理:千问3.5-35B-A3B-FP8操作边界精细控制方案

OpenClaw权限管理&#xff1a;千问3.5-35B-A3B-FP8操作边界精细控制方案 1. 为什么需要权限管理&#xff1f; 去年夏天&#xff0c;我差点因为一个自动化脚本酿成大祸。当时我让OpenClaw帮我整理财务表格&#xff0c;结果因为模型误解了指令&#xff0c;差点删除了整个账本目…...

LabView用户登录程序:密码登录系统、用户管理、Access数据库制作

labview用户登录程序&#xff0c;可以直接用做密码登录系统&#xff0c;用户管理&#xff0c;实用强&#xff0c;使用方便&#xff0c;采用access数据库制作。最近在搞一个LabVIEW的项目&#xff0c;需要实现一个用户登录系统&#xff0c;顺便还带点用户管理的功能。琢磨了一下…...