Function Call 的原理及简单应用总结

Function Call 的原理及简单应用总结

1. 什么是 Function Call?

Function Call 是大语言模型(如 ChatGPT、ChatGLM 等)与外部功能或 API 进行交互的能力。它允许模型在生成文本的过程中,根据用户需求动态调用预定义的函数,从而获取实时数据或执行特定任务。这一功能由 OpenAI 在 2023 年 6 月 13 日正式公布,现已被多家主流大模型支持。

核心特点:

  • 外部集成:模型可以调用外部 API 或自定义函数,突破自身知识局限。
  • 参数传递:模型仅返回函数调用的参数(JSON 格式),实际执行由开发者完成。
  • 增强交互:使模型能够处理需要实时数据或复杂计算的任务,如天气查询、数据库操作等。

解决的问题:

  • 大模型的静态知识无法覆盖动态信息(如实时天气、航班数据)。
  • 无法直接执行外部操作(如数据库查询、发送邮件)。

2. Function Call 的工作原理

基础流程对比:

无 Function Call有 Function Call
用户 → 服务端 → 模型 → 直接响应用户 → 服务端 → 模型 → 返回函数参数 → 执行函数 → 返回结果 → 模型生成最终响应

详细步骤:

  1. 用户请求:发送 prompt 和函数定义(tools)至服务端。
  2. 模型决策
    • 若需调用函数,返回结构化参数(如 {"location": "北京"})。
    • 否则直接生成文本响应。
  3. 函数执行:服务端根据参数调用对应函数(如 get_current_weather("北京"))。
  4. 结果整合:函数返回数据(如天气信息)送回模型,生成自然语言响应。

关键注意:
模型仅生成参数,不直接执行函数,需开发者实现函数逻辑。


3. 单一函数应用:天气查询机器人

实现步骤:

  1. 函数定义

    def get_current_weather(location):
        # 调用天气API获取数据
        return {
            "location": location,
            "temperature": "33℃",
            "condition": "晴天"
        }
    
  2. 函数描述(告知模型如何调用):

    tools = [{
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string", "description": "城市名称"}
                },
                "required": ["location"]
            }
        }
    }]
    
  3. 交互流程

    • 用户输入:“北京今天天气如何?”
    • 模型返回:{"location": "北京"}
    • 服务端调用 get_current_weather("北京"),返回天气数据。
    • 模型生成最终响应:“北京今天晴天,最高气温33℃。”

4. 多函数应用:航班查询系统

场景:查询航班号及票价。
函数设计:

  • 航班号查询get_plane_number(date, start, end)
  • 票价查询get_ticket_price(date, number)

交互流程:

  1. 用户输入:“查询2024年4月2日郑州到北京的航班票价。”
  2. 模型首次调用 get_plane_number,返回航班号 1123
  3. 模型二次调用 get_ticket_price,返回票价 668元
  4. 整合结果:“航班号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元。”

总结与价值

核心优势:

  1. 动态扩展:集成实时数据源(API、数据库)弥补模型静态知识的不足。
  2. 任务自动化:通过函数链实现复杂操作(如航班查询需两步调用)。
  3. 标准化流程:定义 → 参数生成 → 执行 → 响应生成,易于开发维护。

典型应用场景:

  • 实时信息查询(天气、股票、航班)。
  • 业务系统交互(数据库、CRM)。
  • 自动化任务(发送邮件、数据分析)。

数学表示(可选):
若将函数调用视为映射关系,可表示为:

y = f(x)

其中:

  • xxx:用户输入(prompt)。
  • fff:函数调用逻辑(如 get_current_weather)。
  • yyy:最终输出(结合函数结果的文本响应)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值