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

23 阅读2分钟

一句话概括

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": {
	                "https://www.falvce.com/
	                "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. 上下文要保留: 多轮对话需维护完整消息历史