深入探索 GPT-4 发问技巧系列的第五篇文章,介绍了怎么利用外部东西提升 GPT4 的才能, 包含代码履行器可以运转 GPT4 生成的代码; 函数调用可以直接调用言语描绘的函数; LangChain 供给了一系列东西和框架, 完成与外部国际的数据和服务的衔接。

本文是 GPT4 发问技巧系列的第五篇(严格来说,这一篇不算是 GPT-4 的发问题技巧了,不过为了连续这一个系列的姓名,这儿也就继续用这个标题了),悉数系列文章:

  1. GPT4 发问技巧一:写明晰的阐明;
  2. GPT4 发问技巧二:供给参阅文本;
  3. GPT4 发问技巧三:杂乱使命拆分;
  4. GPT4 发问技巧四:给模型思考时间;
  5. GPT4 发问技巧五:借助外部东西;
  6. GPT4 发问技巧六:体系基准评测;

GPT4 作为一个大言语生成模型,尽管很强壮,可是有一些局限性。比方信息缺乏时效性,无法拜访互联网或许外部数据库,缺乏深度专业知识特别是数学核算才能,处理杂乱数据的才能有限等。在上面这些范畴现在已经有专业软件东西,可以弥补 GPT4 才能上的缺乏。咱们可以将 GPT4 和外部东西结合起来,然后更大限度的发挥 GPT4 模型的才能。

下面是一些可以在 GPT4 中运用外部东西的场景:

  • 获取实时信息:外部东西可以拜访实时数据和信息。例如,可以运用 Web 爬虫或 API 来检索最新的新闻和统计数据。
  • 处理杂乱数据:外部东西可以协助咱们处理和剖析杂乱数据。例如,可以运用数据可视化东西来创建图表和图画,以更直观地展现信息。
  • 进步准确性:外部东西可以验证 GPT 生成的信息的准确性,并在必要时进行更正。

代码履行:Code interpreter

作为一个大言语生成模型,GPT4 并不拿手各种数学核算。比方下面的问题 (来自官方 GPT 最佳指南中的示例问题):

查找以下多项式的一切实值根:3x^5 – 5x^4 – 3x^3 – 7x – 10

直接问 GPT4 的话,一般无法给出答案,如下图所示:

GPT4 提问技巧五:借助外部工具
GPT4 局限:不能直接接数学问题

不过可以让 GPT4 生成具体的程序代码,然后履行代码来完成核算。这儿提示词可以稍微改下,加上下面内容即可:

对于提到的核算使命,你需求编写 Python 代码,并将其放到 “` 中。

把代码 copy 出来用 Python 履行的成果是 2.3697093205509585,和在 wolframalpha 上核算的成果一致。GPT4 给的回复如下:

GPT4 提问技巧五:借助外部工具
GPT4 局限:不能直接接数学问题

有时候一些看起来很简略的核算使命,GPT4 相同搞不定。比方在之前的这篇文章 加班了多少天?GPT4 被绕晕了,GPT 并不能直接给出加班天数。可是可以编写一个正确的程序,来核算出总的加班天数。

正是因为 GPT4 配合代码履行,能大幅进步 GPT4 的才能。所以 OpenAI 自己也供给了 Code Interpreter(代码解析器),生成的代码可以直接在 ChatGPT 的沙箱解析器履行,我专门写过几篇文章来介绍代码解析器的用法。

  • GPT4 代码解释器:资源约束详解
  • 代码解释器:OpenAI 供给了多少 CPU
  • 代码解释器:自然言语处理图片
  • 代码解释器:数据剖析与可视化

函数支撑:function calling

除了供给了代码履行环境,OpenAI 在 2023.06.13 号的文章:Function calling and other API updates 中宣布支撑 Function calling。在 Function calling 面世曾经,假如想经过自然言语来调用函数,需求先用自然言语让模型解析出调用的函数以及参数,这个进程既杂乱又简略出错。

让咱们以一个气候查询的例子来阐明。假定咱们有一个函数 get_weather(location: string, date: string),它可以查询指定日期和地址的气候。在 Function calling 面世曾经,假如咱们想让 GPT 模型帮咱们调用这个函数,咱们可能会写下这样的 Prompt:

我有一个函数 get_weather(location: string, date: string) 来拿指定地址的气候信息,对于下面的发问,你要提取里面的要害信息 location 和 date,并以 json 输出。
发问内容是: 明日广州的气候怎么?

可能得到下面的成果,然后解析这儿的回来,再去调用咱们自己的函数拿到成果。这中心模型可能会回来非 json 的内容,或许回来的日期也不对,需求去处理这些反常情况。

GPT4 提问技巧五:借助外部工具
Function calling 之前的做法

有了 Function calling,咱们可以直接问 “明日广州的气候怎么?”,同时把函数传递给模型。然后 GPT-4 会智能地输出一个包含调用该函数所需参数的 JSON 目标,后面可以直接依据这个 JSON 目标来调用函数了。注意这儿的模型是 OpenAI 专门微调过的,输出会愈加安稳和准确。仍是以上面的恳求气候为例,可以直接像下面这样建议恳求。

$ curl https://api.openai.com/v1/chat/completions -u :$OPENAI_API_KEY -H 'Content-Type: application/json' -d '{
  "model": "gpt-3.5-turbo-0613",
  "messages": [
    {"role": "user", "content": "明日广州的气候怎么?"}
  ],
  "functions": [
    {
      "name": "get_weather",
      "description": "获取某个地方指定日期的气候情况",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {
            "type": "string",
            "description": "具体地址,比方广州"
          },
          "date": {
            "type": "string",
            "description": "具体的日期,比方 20230723"
          }
        },
        "required": ["location", "date"]
      }
    }
  ]
}'

拿到的成果如下:

{
  "id": "chatcmpl-7fgc0u3zVaGqiPSTDUChIjtzvSd1k",
  "object": "chat.completion",
  "created": 1690169604,
  "model": "gpt-3.5-turbo-0613",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "function_call": {
          "name": "get_weather",
          "arguments": "{\n\"location\": \"广州\",\n\"date\": \"20230721\"\n}"
        }
      },
      "finish_reason": "function_call"
    }
  ],
  "usage": {
    "prompt_tokens": 97,
    "completion_tokens": 23,
    "total_tokens": 120
  }
}

可以看到 GPT 成功的从自然言语中拿到了结构化的函数恳求参数。后续咱们可以解析这儿的参数,建议恳求,把函数回来的成果再回来给 GPT 进行下一步处理。这儿可以供给多个函数列表,模型会自动选择最适合的一个。假如函数调用中出现了错觉输出,一般可以经过体系音讯来缓解。比方发现模型正在运用未供给给它的函数生成函数调用,可以尝试运用体系音讯:“仅运用为您供给的函数。

外部集成:LangChain

有了 Code Interpreter,在 ChatGPT 官方运用里可以方便地履行代码,有了 function calling,开建议各种运用的时候也能方便的和现有体系中的各种 API 对接。可是,运用 OpenAI 的 API 来开发的时候,仍是要处理不少问题,这其中有很多是共性问题,比方各种结构化数据的解析,处理大模型的反常输出,串联模型的输入输出等。为了处理这些共性需求,LangChain 应运而生,LangChain 是一个开源项目,它供给了一系列东西和框架,协助开发者更好地运用和集成 OpenAI 的大型言语模型。

LangChain 供给了一系列标准且可扩展的接口和外部集成模块,这些模块依照杂乱程度从低到高列出如下:

  • Model I/O (模型 I/O):负责加载言语模型,并完成与言语模型的交互,包含发送发问和获取响应。
  • Data connection (数据衔接):用于衔接外部数据源,如数据库和 API,可以从中获取运用需求的结构化数据。
  • Chains (调用链):定义了构建言语模型链的组件和履行流程,可自定义链中的模块组合与次序,比方次序履行一系列操作。
  • Agents (代理):完成了智能代理的策略,依据当时状况动态选择和切换链中最适宜的模块东西。
  • Memory (内存管理):用于构建知识库,在链的运转进程中存储并检索要害信息,完成状况保护。
  • Callbacks (回调):可以注册回调函数,记录日志和处理链中的流式数据,完成履行进程的可观测性。
  • Evaluation (评价):供给了评价链功能的办法,可以剖析成果并根据测验集测验链的功能。

官方文档对每个模块都有具体的阐明,比方 Data connection 部分,笼统了 5 个步骤,包含加载不同来源的文档,进行切割以及删减,文档向量化 embeding,存储向量数据,以及查询。如下图 (图片来自官方文档) 所示:

GPT4 提问技巧五:借助外部工具
LangChain data connection

除了官方文档,还有不少视频来解说怎么运用 LangChain,比方吴恩达的免费课程 LangChain for LLM Application Development,里面讲的仍是挺不错的,可以用来快速了解 LangChain 的玩法。

咱们知道 LangChain 是一个编程库,现在支撑 Python 和 JavaScript,为了能进一步下降这儿的开发门槛,有人供给了一个 UI langflow,可以经过拖拽完成简略的使命,如下图示例:

GPT4 提问技巧五:借助外部工具
LangChain langflow 示意图

在可预见的未来,咱们可以等待 GPT-4 等大型言语模型将与现有东西进行更深度的融合,以充沛开释其潜力并推动各类运用的创新与发展。