.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系统调用
✅ 多步骤任务: 自动化工作流
开发注意事项
- 函数描述要精准: 模型依赖
description判断是否调用 - 参数定义要完整: 使用标准 JSON Schema 格式
- 错误处理要健壮: 函数执行失败时的降级策略
- 上下文要保留: 多轮对话需维护完整消息历史
下一步学习
Function Calling 的定义和调用需要手动处理较多细节, 下一节介绍如何基于MEAI 完成函数调用,具体实现敬请期待。
📚 参考资料
👆面向.NET开发者的AI Agent 开发课程【.NET+AI | 智能体开发进阶】已上线,欢迎扫码加入学习。👆
关注我的公众号『向 AI 而行』,我们微信不见不散。
阅罢此文,如果您觉得本文不错并有所收获,请【打赏】或【推荐】,也可【评论】留下您的问题或建议与我交流。 你的支持是我不断创作和分享的不竭动力!
作者:『圣杰』
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号