Function Call 的原理及简单应用总结
1. 什么是 Function Call?
Function Call 是大语言模型(如 ChatGPT、ChatGLM 等)与外部功能或 API 进行交互的能力。它允许模型在生成文本的过程中,根据用户需求动态调用预定义的函数,从而获取实时数据或执行特定任务。这一功能由 OpenAI 在 2023 年 6 月 13 日正式公布,现已被多家主流大模型支持。
核心特点:
- 外部集成:模型可以调用外部 API 或自定义函数,突破自身知识局限。
- 参数传递:模型仅返回函数调用的参数(JSON 格式),实际执行由开发者完成。
- 增强交互:使模型能够处理需要实时数据或复杂计算的任务,如天气查询、数据库操作等。
解决的问题:
- 大模型的静态知识无法覆盖动态信息(如实时天气、航班数据)。
- 无法直接执行外部操作(如数据库查询、发送邮件)。
2. Function Call 的工作原理
基础流程对比:
| 无 Function Call | 有 Function Call |
|---|---|
| 用户 → 服务端 → 模型 → 直接响应 | 用户 → 服务端 → 模型 → 返回函数参数 → 执行函数 → 返回结果 → 模型生成最终响应 |
详细步骤:
- 用户请求:发送
prompt和函数定义(tools)至服务端。 - 模型决策:
- 若需调用函数,返回结构化参数(如
{"location": "北京"})。 - 否则直接生成文本响应。
- 若需调用函数,返回结构化参数(如
- 函数执行:服务端根据参数调用对应函数(如
get_current_weather("北京"))。 - 结果整合:函数返回数据(如天气信息)送回模型,生成自然语言响应。
关键注意:
模型仅生成参数,不直接执行函数,需开发者实现函数逻辑。
3. 单一函数应用:天气查询机器人
实现步骤:
-
函数定义:
def get_current_weather(location): # 调用天气API获取数据 return { "location": location, "temperature": "33℃", "condition": "晴天" } -
函数描述(告知模型如何调用):
tools = [{ "type": "function", "function": { "name": "get_current_weather", "description": "获取指定城市的天气信息", "parameters": { "type": "object", "properties": { "location": {"type": "string", "description": "城市名称"} }, "required": ["location"] } } }] -
交互流程:
- 用户输入:“北京今天天气如何?”
- 模型返回:
{"location": "北京"}。 - 服务端调用
get_current_weather("北京"),返回天气数据。 - 模型生成最终响应:“北京今天晴天,最高气温33℃。”
4. 多函数应用:航班查询系统
场景:查询航班号及票价。
函数设计:
- 航班号查询:
get_plane_number(date, start, end) - 票价查询:
get_ticket_price(date, number)
交互流程:
- 用户输入:“查询2024年4月2日郑州到北京的航班票价。”
- 模型首次调用
get_plane_number,返回航班号1123。 - 模型二次调用
get_ticket_price,返回票价668元。 - 整合结果:“航班号1123,票价668元。”
技术要点:
- 需处理多步骤函数链式调用。
- 每次函数结果需作为上下文传递给模型。
5. 数据库查询应用
功能:将自然语言转换为 SQL 并查询。
核心代码:
def ask_database(query):
# 连接MySQL执行查询
conn = pymysql.connect(host='localhost', user='root', password='123456', database='it_heima')
cursor = conn.cursor()
cursor.execute(query) # 示例:SELECT ename, sal FROM emp ORDER BY sal DESC LIMIT 1
return cursor.fetchall()
交互示例:
- 用户输入:“工资最高的员工是谁?”
- 模型生成 SQL:
SELECT ename, sal FROM emp ORDER BY sal DESC LIMIT 1。 - 数据库返回:
("KING", 5000)。 - 最终响应:“工资最高的员工是KING,工资5000元。”
总结与价值
核心优势:
- 动态扩展:集成实时数据源(API、数据库)弥补模型静态知识的不足。
- 任务自动化:通过函数链实现复杂操作(如航班查询需两步调用)。
- 标准化流程:定义 → 参数生成 → 执行 → 响应生成,易于开发维护。
典型应用场景:
- 实时信息查询(天气、股票、航班)。
- 业务系统交互(数据库、CRM)。
- 自动化任务(发送邮件、数据分析)。
数学表示(可选):
若将函数调用视为映射关系,可表示为:
y = f(x)
其中:
- xxx:用户输入(
prompt)。 - fff:函数调用逻辑(如
get_current_weather)。 - yyy:最终输出(结合函数结果的文本响应)。
4422

被折叠的 条评论
为什么被折叠?



