当前位置:首页 > AI > 正文内容

深入探讨Function Calling:完成外部函数调用的作业原理

邻居的猫1个月前 (12-09)AI551

导言

Function Calling 是一个答应大型言语模型(如 GPT)在生成文本的进程中调用外部函数或服务的功用。
Function Calling答应咱们以 JSON 格局向 LLM 模型描绘函数,并运用模型的固有推理才能来决议在生成呼应之前是否调用该函数。模型自身不履行函数,而是生成包括函数称号履行函数所需的参数JSON

function calling 履行原理

现在咱们界说提示词像大言语模型问一下当时北京的气候?

由于 LLM 大言语模型缺少实时数据,所以无法答复实时数据这种场景。

咱们用SK来测验一下

Console.WriteLine("===>没有设置function calling=<===");
{
    var kernel = Kernel.CreateBuilder().AddAzureOpenAIChatCompletion(config.ModelId,
            endpoint: config.Endpoint,
    apiKey: config.ApiKey).Build();
    var template = "当时北京的气候?";
    Console.WriteLine($"User: {template}");
    var function = kernel.CreateFunctionFromPrompt(template);
    var functionResult = await function.InvokeAsync(kernel);
    Console.WriteLine($"Assistant:{functionResult}");
}

输出:

User: 当时北京的气候?
Assistant:对不住,作为一个AI,我无法为你供给实时信息。你能够查看可信的气候运用或网站来获取当时北京的气候。

这时候就需求用到 LLMFunction Calling 功用来协助答复用户的问题

运用 OpenAI API function calling

OpenAIfunction calling的中心是咱们将Prompts 提示词和可用函数列表一同发送给LLM

OpenAI Chat Completions 接口

{
  "tool_choice": "auto",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant."
    },
    {
      "role": "user",
      "content": "我想知道现在北京的气候状况"
    }
  ],
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "Get_Weather_For_City",
        "description": "获取指定城市的气候",
        "parameters": {
          "type": "object",
          "properties": {
            "cityName": {
              "type": "string",
              "description": "城市名"
            }
          }
        }
      }
    }
  ]
}

中心参数解说

tool_choice:

这个参数决议了模型是否应该主动挑选是否调用函数。值为 "auto" 表明模型将依据状况主动决议是否调用函数。 默许状况下,假如恳求中不存在任何函数,则将其设置为“none”,则设置为“auto”

tools

tools 部分界说了一个函数,这个函数能够被 OpenAI 的模型调用。以下是 tools 部分参数的简略解说:

  • type: 指定了这个东西的类型,这里是 "function",表明这是一个函数调用。

  • function: 包括函数的详细信息,是一个目标。

    • name: 函数的称号,这里是 "Get_Weather_For_City",这是调用时运用的函数名。

    • description: 函数的描绘,这里是 "获取指定城市的气候",用于阐明这个函数的效果。

    • parameters: 界说了函数调用时需求的参数,是一个目标。

      • type: 参数目标的类型,这里是 "object",表明参数是一个目标类型。

      • properties: 包括详细的参数界说,是一个目标,每个特点对应一个参数。

        • cityName: 这是一个参数的称号,表明城市称号。
          • type: 此参数的类型,这里是 "string",表明参数应该是一个字符串。
          • description: 参数的描绘,这里是 "城市名",用于解说这个参数的含义。

这个 tools 部分界说了一个名为 Get_Weather_For_City 的函数,它需求一个名为 cityName 的字符串参数,用于指定想要查询气候的城市。当模型需求调用这个函数时,它将运用这个参数来获取相应的气候信息。

function calling 输出

{
  "id": "chatcmpl-9TOuIqnuMirU3BUDluCrHMTlsjz97",
  "object": "chat.completion",
  "created": 1716794282,
  "model": "gpt-4",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_DQU6OKHWyv3HVLyWVjSRqvwZ",
            "type": "function",
            "function": {
              "name": "Get_Weather_For_City",
              "arguments": "{\n  \"cityName\": \"北京\"\n}"
            }
          }
        ]
      },
      "logprobs": null,
      "finish_reason": "tool_calls"
    }
  ],
  "usage": {
    "prompt_tokens": 83,
    "completion_tokens": 20,
    "total_tokens": 103
  },
  "system_fingerprint": null
}

最中心的办法是tool_calls回参里边回来了咱们需求的办法名和一个 json 参数 比方"{\n \"cityName\": \"北京\"\n}"包括了咱们的参数和值。

回来函数成果上下文

{
    "max_tokens": 3000,
    "tool_choice": "auto",
    "messages": [
        {
            "role": "system",
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",
            "content": "我想知道北京的气候状况"
        },
        {
            "role": "assistant",
            "function_call": {
                "name": "Get_Weather_For_City",
                "arguments": "{\n  \"cityName\": \"北京\"\n}"
            }
        },
        {
            "role": "function",
            "name": "Get_Weather_For_City",
            "content": "27度,晴朗"
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "Get_Weather_For_City",
                "description": "获取指定城市的气候",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "cityName": {
                            "type": "string",
                            "description": "城市名"
                        }
                    }
                }
            }
        },
        {

需求把上下文信息和function callingresult答复的信息传给LLM

  • ToolCall上下文信息
{
  "role": "assistant",
  "function_call": {
    "name": "Get_Weather_For_City",
    "arguments": "{\n  \"cityName\": \"北京\"\n}"
  }
}
  • ToolCallResponse
{
  "role": "function",
  "name": "Get_Weather_For_City",
  "content": "27度,晴朗"
}

LLM 输出

{
  "id": "chatcmpl-9TRZBqCcRMBYIojuZimio6GOpsTi4",
  "object": "chat.completion",
  "created": 1716804505,
  "model": "gpt-4",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "北京的气候状况是27度,晴朗。"
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 133,
    "completion_tokens": 19,
    "total_tokens": 152
  },
  "system_fingerprint": null
}

到现在为止简略的function calling的简略调用现已完成了
详细的流程能够总结为

image

能够看到function calling跟大预言模型至少有两次交互的的进程

总结

依据文档中的描绘,OpenAI的函数调用(function calling)进程能够简化为以下几个进程,而且能够用一个流程图来表明:

image

  1. 用户提出问题。
  2. 体系接纳到问题,并查看是否有可用的函数能够调用。
  3. 假如有,体系会生成一个东西调用恳求(ToolCall),并发送给运用程序。
  4. 运用程序履行恳求的函数,并回来成果。
  5. 体系将函数的呼应(ToolCallResponse)发送回 LLM 模型。
  6. LLM 模型运用这个呼应来生成终究的用户呼应。

下面是一个简化的流程图,描绘了上述进程:

在这个流程图中:

  • A 代表用户。
  • B 是用户提出的问题。
  • C 是 LLM 模型,它查看是否有函数能够调用。
  • D 是生成东西调用(ToolCall)的进程。
  • E 是运用程序,它接纳 ToolCall 并履行相应的函数。
  • F 是运用程序回来的 ToolCallResponse,即函数履行的成果。
  • G 是 LLM 模型,它运用 ToolCallResponse 来生成用户呼应。
  • H 是终究接纳到用户呼应的用户。

这个流程图是根据文档内容的简化表明,实践的体系或许包括更多的细节和进程。

最终

本章的首要了解function calling及其作业原理的简略介绍。鄙人一篇博客中,咱们 x 学习在Semantic kernel下运用运用function calling

参考资料

openai-function-calling

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=393

标签: dotNetAI
分享给朋友:

“深入探讨Function Calling:完成外部函数调用的作业原理” 的相关文章

AI 编辑器引荐:Open-Idea 的功用全解析

AI 编辑器引荐:Open-Idea 的功用全解析

导言 在当今常识爆破的年代,怎么高效办理构思与协作成为了许多个人和团队的难题。Open-Idea 的诞生正是为了处理这些问题。作为一个集创造、办理与协作于一体的东西,它供给了强壮的文档处理、AI 增强、思想导图与白板功用,协助用户高效构建内容生态。 本文将深度解析 Open-Idea 的中心功用,并...

机器学习文本分类, 文本分类概述

1. 数据收集:收集需要分类的文本数据。2. 数据预处理:对文本数据进行清洗、分词、去除停用词、词干提取或词形还原等处理,以便于后续的分析。3. 特征提取:从预处理后的文本中提取有用的特征,如词频、TFIDF(词频逆文档频率)等。5. 模型评估:使用测试数据集来评估模型的性能,常用的指标包括准确率、...

聚类机器学习, 什么是聚类机器学习?

聚类机器学习, 什么是聚类机器学习?

聚类是一种无监督学习的方法,主要用于将数据集分为不同的组或“簇”,使得同一簇内的数据点彼此相似,而不同簇的数据点则彼此不相似。这种方法在很多领域都有应用,比如市场细分、客户关系管理、图像处理和社交网络分析等。在聚类算法中,常见的有K均值聚类、层次聚类、DBSCAN等。K均值聚类是一种基于距离的算法,...

ai换头,突破传统界限,引领视觉革命

ai换头,突破传统界限,引领视觉革命

AI换头技术,通常指的是利用人工智能技术,尤其是深度学习技术,将一个人的头部替换到另一张照片或视频中的人的头部上。这种技术通常涉及到图像识别、图像处理和生成模型等技术。AI换头技术的应用非常广泛,例如在娱乐、影视制作、游戏开发等领域,都可以看到它的身影。通过这种技术,可以创造出更加真实、生动的角色形...

博弈机器学习,探索对抗与协作的智能边界

博弈机器学习,探索对抗与协作的智能边界

博弈机器学习(Game Theory in Machine Learning)是机器学习领域的一个新兴分支,它将博弈论的理论和方法应用到机器学习算法的设计和分析中。博弈论是研究多个智能体在相互作用中如何做出决策以最大化自身利益的数学理论。在机器学习中,博弈论可以帮助我们理解不同智能体(如学习算法、决...

写作ai,文言一心官网入口

人工智能写作(AI写作)是指使用人工智能技术来辅助或自动化写作过程。AI写作系统通常利用自然语言处理(NLP)和机器学习(ML)算法来理解和生成文本。这些系统可以用于多种写作任务,如新闻撰写、报告生成、电子邮件撰写、诗歌创作等。AI写作的优势包括:1. 提高写作效率:AI可以快速生成大量文本,帮助作...