.NET+AI | MEAI | Function Calling 基础(3)

news/2025/11/21 20:14:16/文章来源:https://www.cnblogs.com/sheng-jie/p/19254368

.NET+AI | MEAI | Function Calling 基础

一句话概括

Function Calling 是让大模型能够识别用户意图并返回结构化函数调用指令的能力,而不是模型主动调用函数。

为什么需要Function Calling?

大模型虽然强大,但它只能基于训练数据生成文本回复,无法:

  • 📊 获取实时数据(天气、股票等)
  • 🔧 执行具体操作(发邮件、查数据库)
  • 🌐 访问外部系统(API调用)

Function Calling 打破了这个限制,让 LLM 与外部工具建立连接,极大拓展了应用边界

💡 一句话总结
Function Calling = 大模型的"插件系统",让 AI 从"能说会道"变成"能说会做"。

核心工作原理

完整生命周期(5步)

用户提问 → 模型识别意图 → 返回函数调用参数 → 应用执行函数 → 模型生成最终回复

实战案例:查询天气

场景: 用户问"深圳今天天气怎样?"

步骤1️⃣: 发送请求(含函数定义)

{"messages": [{"role": "user","content": "深圳今天的天气怎样"}],"tools": [{"type": "function","function": {"name": "get_current_weather","description": "获取指定城市的天气","parameters": {"type": "object","properties": {"city": {"type": "string","description": "城市名"}},"required": ["city"]}}}]
}

关键点:

  • tools: 告诉模型可用的函数列表
  • description: 帮助模型理解函数用途(越清晰越好)
  • parameters: 定义函数所需参数的 JSON Schema

步骤2️⃣: 模型返回函数调用信息

{"choices": [{"message": {"role": "assistant","tool_calls": [{"function": {"name": "get_current_weather","arguments": "{\"city\": \"深圳\"}"}}]},"finish_reason": "tool_calls"}]
}

重点: 模型识别出要调用 get_current_weather("深圳")

步骤3️⃣: 应用执行函数

// 解析模型返回,调用本地函数
string result = get_current_weather("深圳");
// 返回: "36℃,小雨"

步骤4️⃣: 回传结果给模型

{"messages": [// ...前面的对话历史{"role": "function","name": "get_current_weather","content": "36℃,小雨"}]
}

步骤5️⃣: 模型生成友好回复

{"choices": [{"message": {"role": "assistant","content": "深圳今天小雨,气温36摄氏度。"}}]
}

关键要点总结

误区 真相
❌ 模型会自动调用函数 ✅ 模型只返回调用指令,需开发者执行
❌ Function Calling 是新技术 ✅ 本质是语义识别+结构化输出
❌ 只有 OpenAI 支持 ✅ 国内外主流模型均已支持

实际应用场景

数据查询: 天气、股票、新闻
系统操作: 发邮件、创建日程
业务集成: CRM、ERP系统调用
多步骤任务: 自动化工作流

开发注意事项

  1. 函数描述要精准: 模型依赖 description 判断是否调用
  2. 参数定义要完整: 使用标准 JSON Schema 格式
  3. 错误处理要健壮: 函数执行失败时的降级策略
  4. 上下文要保留: 多轮对话需维护完整消息历史

下一步学习

Function Calling 的定义和调用需要手动处理较多细节, 下一节介绍如何基于MEAI 完成函数调用,具体实现敬请期待。


📚 参考资料

  • OpenAI Function Calling 官方文档
  • Semantic Kernel Function Calling 实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/972525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发智联笔记项目时所遇问题(8)

问题:运行项目文件时报错:D:\Pycharm-workspace\pytorchdemo2\project\static>curl -o static/jsmind.js https://cdn.jsdelivr.net/npm/jsmind@0.4.6/js/jsmind.js % Total % Received % Xferd Average Spee…

高中学习机五大品牌终极横评:优缺点一览,找到最适合你的那一款!

进入高中,学习的难度、强度和节奏都发生了质的变化。面对海量的知识点、频繁的考试以及最终的升学压力,一款得力的学习机或许能成为你逆袭路上的“神助攻”。然而,市面上品牌繁多,功能各异,如何选择?今天,我们就…

NCHU-23207335-面向对象程序设计-BLOG-1

NCHU-23207335-面向对象程序设计-BLOG-1Java 实现电梯调度系统:基于单一职责原则的仿真设计 在日常场景中,电梯的高效运行依赖于合理的调度逻辑。本文将围绕一道经典的电梯调度编程题,从题目解析、类设计、核心逻辑…

开发智联笔记项目时所遇问题(4)

问题如图:从图片中的错误信息可以看出,问题出现在 index.html 第209行,错误是 TypeError: %s enable_sheets to see a function。这通常与 jsmind 的初始化或节点操作有关。 问题诊断与解决方案 1. 检查控制台完整错…

开发智联笔记项目时所遇问题(3)

问题:设置节点不自由 在脑图中显示 [object Object] 是因为节点数据结构不正确。jsMind 期望的节点数据结构与当前的数据格式不匹配。 解决方案 1. 修改创建脑图时的数据结构 在 index.html 中,修改 createMap() 函数…

20251121周五日记

20251121周五日记今日: 1.早上起床去学一新店买了几个面包去实验室,碰见亮子和飞一起分享。打两把炉石看了看何恺明新文章去吃午饭。 2.中午依旧减脂餐,吃完回实验室看看文章睡会觉。 3.下午天气很好,出去遛遛,发…

卡码网94: bellman_ford算法

卡码网94: bellman_ford算法算法思想 1.从边入手,对路径进行松弛操作 2.每次更新最短路径(松弛n-1)次 特:可有负权边,但是不能包含负权回路(可以判是否存在负权回路) https://kamacoder.com/problempage.php?…

2025广东Facebook运营公司推荐 推广、广告、获客、营销一站式解决方案

随着全球化数字贸易的深度发展,Facebook推广已成为企业拓展国际市场的核心引擎。本榜单基于技术专业性、区域服务能力、跨境营销效果三大维度,结合行业权威数据与客户反馈,全面解析2025年广东地区五大Facebook推广服…

CrewAI 上手攻略:多 Agent 自动化处理复杂任务,让 AI 像员工一样分工协作

CrewAI是一个可以专门用来编排自主 AI 智能体(Autonomous AI Agents) 的Python 框架,你可以把它理解为在代码层面组建一个“虚拟团队”,给每个 Agent 分配特定的角色、目标,让它们协同处理那些单个 LLM 搞不定的复…

题解:AT_agc067_d [AGC067D] Unique Matching

题意:定义 \(n\) 个区间是好的,当且仅当:\(1 \leq l_i \leq r_i \leq N\)。 存在唯一的 \(N\) 阶排列 \(x_1,x_2,\cdots,x_N\),使得 \(x_i \in \left[ l_i , r_i\right]\)给定整数 \(N\)、素数 \(P\)。 求有多少组…

开发智联笔记项目所遇问题

所遇问题:D:\Pycharm-workspace\pytorchdemo2\project>curl -o static/jsmind.draggable.js https://jsd.onmicrosoft.cn/npm/jsmind@0.8.7/es6/jsmind.draggable-node.js % Total % Received % Xferd Average…

计算机视觉——从环境配置到跨线计数的完整实现基于 YOLOv12 与质心追踪器的实时人员监控优秀的系统

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【记录】MAC本地微调大模型(MLX + Qwen2.5)并利用Ollama接入项目实战

实用指南:【记录】MAC本地微调大模型(MLX + Qwen2.5)并利用Ollama接入项目实战2025-11-21 19:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overf…

搜维尔科技:利用MANUS数据手套实现灵巧远程操作:对20自由度灵巧手进行控制

实现人类级别的灵巧性需要精准、低延迟的人机控制。ByteDexter系统集成了MANUS Quantum Metagloves和Meta Quest 3,能够实时远程操控20自由度连杆驱动的拟人化机械手。该系统可实现精准的捏握、稳定的强力抓取和高级的…

CTF reverse入门记录

好吧,今天正式入坑CTF的reverse和pwn了,当然先从reverse开始入手。 先是写一下buuctf的writeup和一些ida的技巧 一个是显示二进制编码 显示中文 导出数据 显示动态字符串 处理反编译失败黄粱一梦,终是一空本文来自博…

开发智联笔记项目时的js问题

问题分析 应用需要以下JS文件:jsmind.js - 核心脑图库 jsmind.draggable.js - 拖拽功能 jsmind.undo.js - 撤销重做功能解决方案 1. 获取缺失的JS文件 需要下载这些JS文件并放在 static 目录下: jsmind.js - 核心文件…

nju实验一选择器

本次实验将介绍几种常用的多路选择器的设计方法;Verilog语言中的always语句块、if-else语句和case语句的使用等。最后请读者自行设计一个多路选择器,熟悉电路设计的基本流程和Quartus的使用。实验一选择器 2选1多路选…

上海金蝶代理商推荐——上海宝蝶信息技术有限公司

一、企业概况 上海宝蝶信息技术有限公司成立于2016年,总部位于上海市松江区,是金蝶集团在上海地区的铂金合作伙伴,专注服务于国内ERP应用市场。 公司深耕中小制造企业全栈数字化服务,以金蝶云PLM+ERP、灵当CRM、致…

11.21模拟赛

T1 分层图板子,代码在 luogu。 T2 给定长度为 \(n\) 的数列 \(a\),维护 \(m\) 次操作,每次操作包括以下两种:1 x:要求输出包含 \(a_x\) 的最大子段和,即求 \(\max_{1 \leq l \leq x \leq r \leq n} \left\{ \sum…