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

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

.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.gsyq.cn/news/56713.html

相关文章:

  • 开发智联笔记项目时所遇问题(3)
  • 2025广东Facebook运营公司推荐 推广、广告、获客、营销一站式解决方案
  • 2025-11-21 早报新闻
  • 开发智联笔记项目时的js问题
  • Mac 安装 JDK 8u281(JDK-8u281-1.dmg)详细步骤(附安装包)
  • chrome: 允许远程调试
  • 推荐一款超级好用的命令行工具 http-server
  • J 组要考,S 组也要考
  • day11-Dify智能体-发布-工作流
  • puff-pastry靶机
  • Day37:2025年10月27日,星期一,上班。
  • Day40:2025年10月30日,星期四,上班。
  • Day39:2025年10月29日,星期三,休息。
  • Day41:2025年10月31日,星期五,上班。
  • 详细介绍:基于自抗扰控制ADRC的永磁同步电机仿真模型(Simulink仿真实现)
  • 2025年热门的成都打印机行业内知名租赁公司排行榜
  • 深入解析:深度学习——Logistic回归中的梯度下降法
  • 2025年11月北京/东城区/西城区/朝阳区/海淀区/丰台区/石景山区遗产继承、遗产纠纷,遗产咨询律师事务所权威排行榜单:专业律所推荐与选择指南
  • 目前需要我去更新的东西
  • Linux初级命令练习:通过awk、sed如何批量创建用户
  • sqli-labs 1(Less-1-Less-10)新手解题思路 - 指南
  • PyMAF 2023 单张照片估计参数化人体
  • 轻松速通:TTS播放、文件播放与录音的核心功能解析!
  • 修改DTS适配遥控用户码
  • nginx性能优化之tcp调优
  • UModel 数据治理:运维世界模型构建实践
  • 2025年11月21日
  • James Watsons
  • 计算机网络:物理层 - 实践
  • MongoDB 平替新方案:金仓多模数据库驱动电子证照国产化落地 - 详解