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

大模型FunctionCall-知识整理

大模型FunctionCall-知识整理

介绍FunctionCall的核心知识要点+智谱AI+DeepSeek的FunctionCall示例

文章目录

  • 大模型FunctionCall-知识整理
    • @[toc]
    • 1-参考网址
    • 2-思路整理
      • 1)知识前提
      • 2)学习思路
      • 3)有什么问题
    • 3-知识点
      • 一、Function calling功能诞生背景
      • 二、Function calling外部函数库创建方法
      • 三、Function calling通信数据格式
      • 四、Functions参数解释与定义过程
      • 五、JSON Schema对象解释
      • 六、Function calling first response
        • 1-第一次请求参数
        • 2-第一次请求响应
      • 七、Function calling second response
        • 1-第二次请求参数
        • 2-第二次请求响应

1-参考网址

智谱AI+DeepSeek的FunctionCall示例和博文如下

  • DeepSeek-FunctionCall博客
  • 智谱AI-FunctionCall博客
  • JsonSchema大模型Prompt
  • B站视频学习参考

2-思路整理

1)知识前提

网络请求是什么数据格式进行->JSON(很对版本的演进后目前JSON最火)-所以大模型最好也是使用JSON交互

2)学习思路

  • 1)先定义API或者Function函数(输入->[内容处理]->输出)
  • 2)再定义工具描述->[API/函数]需要什么参数,什么参数必填(但是貌似没有定义输出)
  • 3)然后定义JsonSchema->建立大模型的调用工具参数(为大模型添加外部API工具)
  • 4)大模型调用

3)有什么问题

  • 1)参数提取不准确,会导致函数调用失败或返回错误的结果->毕竟不是手动填写
  • 2)需要手动编写JsonSchema(即使大模型可以帮我们编写)

3-知识点

一、Function calling功能诞生背景

在人工智能快速发展的今天,大型语言模型(LLM)已经成为处理自然语言任务的强大工具。然而,随着应用场景的不断拓展,仅仅依靠模型生成文本已经无法满足复杂多样的实际需求。Function calling功能应运而生,它使LLM能够根据用户的输入与外部工具、API和功能进行互动。这一功能的出现,极大地拓展了模型的应用范围,使其可以 ’ 从“仅仅说”转变为“实际操作” ’ ,例如查询实时天气、获取股票信息等,从而为用户提供更精准、更有价值的服务。

二、Function calling外部函数库创建方法

创建外部函数库是实现Function calling的关键步骤。首先,开发者需要明确模型需要调用的外部功能,例如查询天气、获取股票数据等。然后,针对每个功能编写相应的函数,并定义好函数的参数和返回值。例如,定义一个查询天气的函数,需要指定地点和日期作为参数,并返回天气信息。接着,将这些函数封装成一个函数库,以便模型在需要时能够调用。在实际操作中,可能还需要设置API接口和认证信息,以确保函数能够正确访问外部数据源。

三、Function calling通信数据格式

Function calling的通信数据格式通常采用JSON(JavaScript Object Notation),这是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。在Function calling中,模型通过生成一个结构化的JSON对象来请求调用特定的函数,并传递相应的参数。例如,当用户询问天气时,模型会生成一个包含函数名(如get_weather)和参数(如地点和日期)的JSON对象。外部函数执行后,也会将结果以JSON格式返回给模型,模型再将这些结果整合到最终的自然语言回复中。

四、Functions参数解释与定义过程

在Function calling中,参数是连接模型和外部函数的关键。参数的解释和定义需要非常精确,以确保模型能够正确理解用户的意图,并生成符合函数要求的参数值。首先,开发者需要为每个函数定义好参数的类型、描述和是否必填等信息。例如,在查询天气的函数中,地点是一个必填的字符串参数,而日期可能是一个可选的字符串参数。然后,模型在解析用户的自然语言输入时,会根据这些定义来提取和生成相应的参数值。如果参数提取不准确,可能会导致函数调用失败或返回错误的结果。

五、JSON Schema对象解释

在Function calling中,JSON Schema是一个非常重要的概念,它用于描述函数参数的结构和约束。JSON Schema是一个基于JSON的格式,用于定义JSON数据的结构和验证规则。通过使用JSON Schema,开发者可以确保模型生成的参数符合函数的要求,从而减少错误调用的可能性。例如,在定义查询天气的函数时,可以使用JSON Schema来指定地点和日期的格式,以及哪些参数是必填的。模型在生成参数时,会根据这些Schema定义来验证参数的合法性,如果参数不符合要求,模型会尝试重新生成或提示用户修正输入。

六、Function calling first response

Function calling的第一次响应是指模型在接收到用户的自然语言输入后,生成的包含函数调用请求的响应。在这个阶段,模型会首先解析用户的意图,判断是否需要调用外部函数来完成任务。如果需要调用函数,模型会生成一个结构化的函数调用请求,包括函数名和参数,并将其作为响应的一部分返回。例如,当用户询问“今天北京的天气怎么样?”时,模型会生成一个调用get_weather函数的请求,并传递地点“北京”和日期“今天”作为参数。这个请求随后会被发送给外部函数执行。


1-第一次请求参数
[
    {
        "role": "system",
        "content": "不要假设或猜测传入函数的参数值。如果用户的描述不明确,请要求用户提供必要信息"
    },
    {
        "role": "user",
        "content": "帮我查询1月23日,北京到广州的航班"
    }
]

2-第一次请求响应
{
    "content": null,
    "role": "assistant",
    "tool_calls": [
        {
            "id": "call_-8929800266402085722",
            "function": {
                "arguments": "{\"date\": \"2024-01-23\", \"departure\": \"北京\", \"destination\": \"广州\"}",
                "name": "get_flight_number"
            },
            "type": "function",
            "index": 0
        }
    ]
}


七、Function calling second response

Function calling的第二次响应是指在外部函数执行完成后,模型根据函数的执行结果生成的最终回复。在这个阶段,模型会将外部函数返回的结果整合到自然语言回复中,以向用户提供完整的信息。例如,当外部函数返回北京今天的天气信息后,模型会生成一个如“北京今天晴天,25℃”的回复。如果函数调用失败或返回错误信息,模型也可能会生成相应的提示信息,告知用户出现问题,并可能建议用户修正输入或稍后重试。

Function calling作为大模型的一项重要功能,极大地拓展了模型的应用能力。通过与外部函数的交互,模型可以从生成文本转变为执行实际任务,为用户提供更丰富、更实用的服务。在实际应用中,开发者需要精心设计外部函数库、通信数据格式、参数定义以及错误处理机制,以确保Function calling的顺利进行。随着技术的不断发展,Function calling将在更多领域发挥重要作用,为人工智能的应用开辟新的可能性。


1-第二次请求参数
[
    {
        "role": "system",
        "content": "不要假设或猜测传入函数的参数值。如果用户的描述不明确,请要求用户提供必要信息"
    },
    {
        "role": "user",
        "content": "帮我查询1月23日,北京到广州的航班"
    },
    {
        "content": null,
        "role": "assistant",
        "tool_calls": [
            {
                "id": "call_-8929800266402085722",
                "function": {
                    "arguments": "{\"date\": \"2024-01-23\", \"departure\": \"北京\", \"destination\": \"广州\"}",
                    "name": "get_flight_number"
                },
                "type": "function",
                "index": 0
            }
        ]
    },
    {
        "role": "tool",
        "content": "{\"flight_number\": \"8321\"}",
        "tool_call_id": "call_-8929800266402085722"
    }
]

2-第二次请求响应
{
    "content": "1月23日从北京飞往广州的航班号为8321。如果需要查询该航班的票价,请告诉我。",
    "role": "assistant",
    "tool_calls": null
}

相关文章:

  • 利率债、信用债、可转债区别与优势
  • STM32L051系列单片机低功耗应用
  • AcWing 蓝桥杯集训·每日一题2025·5526. 平衡细菌
  • 以实例解析汇编语言和高级语言
  • RCE漏洞
  • OpenWrt如何配置WireGuard互联?
  • MyBatis @Param 注解详解:多参数传递与正确使用方式
  • Oracle19c进入EM Express(Oracle企业管理器)详细步骤
  • Map<String,Object>转换为XML报文的方法
  • 网络安全wireshark题目
  • Ubuntu20.04本地配置IsaacGym Preview 4的G1训练环境(一)
  • Linux - 进程通信
  • 11、vue3生命周期?
  • 湖仓一体化及冷、热、实时三级存储
  • Django 5实用指南(十二)异步处理与Celery集成
  • 【YOLOv12改进trick】多尺度大核注意力机制MLKA模块引入YOLOv12,实现多尺度目标检测涨点,含创新点Python代码,方便发论文
  • GCC RISCV 后端 -- GCC Passes 注释
  • 关于sqlalchemy的使用
  • 基于hive的电信离线用户的行为分析系统
  • 第9章:数据导入导出与设置
  • 组建网站/宁波seo网站服务
  • 建设门户网站/图片搜索识图入口
  • 为什么要建设政府网站/网址如何被快速收录
  • 科室建设网站/湖南网站推广优化
  • 怎么注册网络平台/成都seo网站qq
  • 网站建设南京/浙江网络科技有限公司