深入探索 GPT-4 发问技巧系列的第五篇文章,介绍了怎么利用外部东西提升 GPT4 的才能, 包含代码履行器可以运转 GPT4 生成的代码; 函数调用可以直接调用言语描绘的函数; LangChain 供给了一系列东西和框架, 完成与外部国际的数据和服务的衔接。
本文是 GPT4 发问技巧系列的第五篇(严格来说,这一篇不算是 GPT-4 的发问题技巧了,不过为了连续这一个系列的姓名,这儿也就继续用这个标题了),悉数系列文章:
- GPT4 发问技巧一:写明晰的阐明;
- GPT4 发问技巧二:供给参阅文本;
- GPT4 发问技巧三:杂乱使命拆分;
- GPT4 发问技巧四:给模型思考时间;
- GPT4 发问技巧五:借助外部东西;
- GPT4 发问技巧六:体系基准评测;
GPT4 作为一个大言语生成模型,尽管很强壮,可是有一些局限性。比方信息缺乏时效性,无法拜访互联网或许外部数据库,缺乏深度专业知识特别是数学核算才能,处理杂乱数据的才能有限等。在上面这些范畴现在已经有专业软件东西,可以弥补 GPT4 才能上的缺乏。咱们可以将 GPT4 和外部东西结合起来,然后更大限度的发挥 GPT4 模型的才能。
下面是一些可以在 GPT4 中运用外部东西的场景:
- 获取实时信息:外部东西可以拜访实时数据和信息。例如,可以运用 Web 爬虫或 API 来检索最新的新闻和统计数据。
- 处理杂乱数据:外部东西可以协助咱们处理和剖析杂乱数据。例如,可以运用数据可视化东西来创建图表和图画,以更直观地展现信息。
- 进步准确性:外部东西可以验证 GPT 生成的信息的准确性,并在必要时进行更正。
代码履行:Code interpreter
作为一个大言语生成模型,GPT4 并不拿手各种数学核算。比方下面的问题 (来自官方 GPT 最佳指南中的示例问题):
查找以下多项式的一切实值根:3x^5 – 5x^4 – 3x^3 – 7x – 10
直接问 GPT4 的话,一般无法给出答案,如下图所示:
GPT4 局限:不能直接接数学问题
不过可以让 GPT4 生成具体的程序代码,然后履行代码来完成核算。这儿提示词可以稍微改下,加上下面内容即可:
对于提到的核算使命,你需求编写 Python 代码,并将其放到 “` 中。
把代码 copy 出来用 Python 履行的成果是 2.3697093205509585
,和在 wolframalpha 上核算的成果一致。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 的内容,或许回来的日期也不对,需求去处理这些反常情况。
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,存储向量数据,以及查询。如下图 (图片来自官方文档) 所示:
LangChain data connection
除了官方文档,还有不少视频来解说怎么运用 LangChain,比方吴恩达的免费课程 LangChain for LLM Application Development,里面讲的仍是挺不错的,可以用来快速了解 LangChain 的玩法。
咱们知道 LangChain 是一个编程库,现在支撑 Python 和 JavaScript,为了能进一步下降这儿的开发门槛,有人供给了一个 UI langflow,可以经过拖拽完成简略的使命,如下图示例:
LangChain langflow 示意图
在可预见的未来,咱们可以等待 GPT-4 等大型言语模型将与现有东西进行更深度的融合,以充沛开释其潜力并推动各类运用的创新与发展。