首页>智库>Prompt系统学习>Prompt高级应用

需要支持?

如果通过文档没办法解决您的问题,请提交工单获取我们的支持!

Prompt高级应用

1、概述

到目前为止,我们已经看到了许多提示/提示工程方法。现在,我们将讨论一些关于提示的高级应用程序,通过互联网或其他外部来源搜索信息来解决复杂的推理任务。

2、LLMs使用工具

MRKL系统(Modular Reasoning, Knowledge and Language, pronounced “miracle”) 是一种神经符号结构,结合了LLMs(神经计算)和像计算器(符号计算)这样的外部工具,用于解决复杂问题。

MRKL系统由一组模块(例如计算器、天气API、数据库等)和一个路由器组成,决定如何将自然语言查询“路由”到适当的模块。

一个简单的MRKL系统示例是一个可以使用计算器应用程序的LLM。这是一个单模块系统,其中LLM是路由器。当被问到100*100是多少?时,LLM可以选择从提示中提取数字,然后告诉MRKL系统使用计算器应用程序计算结果。这可能如下所示:

100*100是多少?

CALCULATOR [100*100]

MRKL系统将看到单词CALCULATOR,并将100*100插入计算器应用程序中。这个简单的想法可以很容易地扩展到各种符号计算工具。

考虑以下其他应用示例:

一个聊天机器人,能够从用户的文本中提取信息,形成SQL查询,回答有关金融数据库的问题。

苹果公司股票现在的价格是多少?

当前价格为DATABASE[SELECT price FROM stock WHERE company = “Apple” AND time = “now”]。

一个聊天机器人,能够从提示中提取信息,使用天气API检索信息回答有关天气的问题。

纽约的天气怎么样?

天气是WEATHER_API[New York]。

或者更复杂的依赖多个数据源的任务,例如下面这个例子:

Prompt高级应用

示例MRKL系统(AI21)

示例

我使用Dust.tt复现了原始论文中的一个示例MRKL系统,链接在这里。该系统可以读取数学问题(例如20乘以5^6等于多少?),提取数字和运算符号,并将其格式化为计算器应用(例如 20 * 5^6)。然后它将重新格式化的方程式发送给Google的计算器应用程序,并返回结果。请注意,原始论文对路由器(LLM)进行了提示调整,但是我在这个例子中没有进行提示调整。让我们来看看这是如何工作的:

首先,我在Dust的数据集选项卡中制作了一个简单的数据集。

Prompt高级应用

然后,我切换到Specification选项卡,并使用data块加载了数据集。

Prompt高级应用

接下来,我创建了一个llm块,用于提取数字和运算符号。请注意,在提示中,我告诉它我们将使用Google的计算器。我使用的模型(GPT-3)可能已经预先训练了一些关于Google计算器的知识。

Prompt高级应用

然后,我创建了一个code块,其中运行一些简单的JavaScript代码来删除补全结果(completion)中的空格。

Prompt高级应用

最后,我创建了一个search块,将重新格式化的方程式发送给Google的计算器。

Prompt高级应用

下面我们可以看到最终的结果,全部都是正确的!

Prompt高级应用

请随意尝试并进行实验,这是演练场(playground)的链接.

备注

MRKL由AI21开发,最初使用了他们的J-1 (Jurassic 1)LLM。

3、具有推理和行动能力的LLMs

ReAct(reason, act)是一种使用自然语言推理解决复杂任务的语言模型范例。ReAct旨在用于允许LLM执行某些操作的任务。例如,在MRKL系统中,LLM可以与外部API交互以检索信息。当提出问题时,LLM可以选择执行操作以检索信息,然后根据检索到的信息回答问题。

ReAct系统可以被视为具有推理和行动能力的MRKL系统,。

请查看以下图像。顶部框中的问题来自HotPotQA,这是一个需要复杂推理的问答数据集。 ReAct能够首先通过推理问题(Thought 1),然后执行一个动作(Act 1)来向Google发送查询来回答问题。然后它收到了一个观察(Obs 1),并继续进行这个思想,行动,观察循环,直到达到结论(Act 3)。

Prompt高级应用

ReAct System (Yao et al.)

具有强化学习知识的读者可能会认为,这个过程类似于经典的RL循环:状态,行动,奖励,状态,…。ReAct在其论文中对此进行了一些规范化。

结论

谷歌在ReAct的实验中使用了PaLM LLM。与标准提示(仅问题)、CoT和其他配置进行比较表明,ReAct在复杂推理任务方面的表现是有希望的。谷歌还对涵盖事实提取和验证的Fever数据集进行了研究。

Prompt高级应用

ReAct Results (Yao et al.)

4、代码推理

程序辅助语言模型(Program-aided Language Models, PAL)是另一个MRKL系统的例子。给定一个问题,PAL能够编写代码解决这个问题。它将代码发送到编程运行时以获得结果。PAL的中间推理是代码,而CoT的是自然语言。

Prompt高级应用

需要注意的是,PAL实际上交织了自然语言(NL)和代码。上面的图片中,蓝色的是PAL生成的自然语言推理。虽然图中没有显示,PAL实际上在每行自然语言推理前生成’#’,以便编程运行时将其解释为注释。

示例

让我们看一个PAL解决数学问题的例子。我使用了一个三样本的提示,这是这个提示的简化版本。

我将使用langchain,这是一个用于链接LLM功能的Python包。首先,需要安装一些程序:

!pip install langchain==0.0.26

!pip install openai

from langchain.llms import OpenAI

import os

os.environ[“OPENAI_API_KEY”] = “sk-YOUR_KEY_HERE”

然后,我们可以创建一个GPT-3 davinci-002实例(当使用此对象时会进行API调用):

llm = OpenAI(model_name=’text-davinci-002′, temperature=0)

这是提示

MATH_PROMPT = ”’

Q: There were nine computers in the server room. Five more computers were installed each day, from monday to thursday. How many computers are now in the server room?

# solution in Python:

“””There were nine computers in the server room. Five more computers were installed each day, from monday to thursday. How many computers are now in the server room?”””

computers_initial = 9

computers_per_day = 5

num_days = 4 # 4 days between monday and thursday

computers_added = computers_per_day * num_days

computers_total = computers_initial + computers_added

result = computers_total

return result

Q: Shawn has five toys. For Christmas, he got two toys each from his mom and dad. How many toys does he have now?

# solution in Python:

“””Shawn has five toys. For Christmas, he got two toys each from his mom and dad. How many toys does he have now?”””

toys_initial = 5

mom_toys = 2

dad_toys = 2

total_received = mom_toys + dad_toys

total_toys = toys_initial + total_received

result = total_toys

Q: Jason had 20 lollipops. He gave Denny some lollipops. Now Jason has 12 lollipops. How many lollipops did Jason give to Denny?

# solution in Python:

“””Jason had 20 lollipops. He gave Denny some lollipops. Now Jason has 12 lollipops. How many lollipops did Jason give to Denny?”””

jason_lollipops_initial = 20

jason_lollipops_after = 12

denny_lollipops = jason_lollipops_initial – jason_lollipops_after

result = denny_lollipops

Q: {question}

# solution in Python:

”’

现在我们可以将组合好的提示传递给GPT-3。

llm_out = llm(MATH_PROMPT.format(question=question))

print(llm_out)

输出是:

“””Emma took a 60 minute plane ride to seattle. She then took a 2 hour train ride to portland, and then a 30 minute bus ride to vancouver. How long did it take her to get to vancouver?”””

plane_ride = 60

train_ride = 2 * 60 # 2 hours in minutes

bus_ride = 30

total_time = plane_ride + train_ride + bus_ride

result = total_time

最后,我们可以将这段代码传递给 Python 运行时以获得答案:

exec(llm_out)

print(result)

输出是 210,这是正确的答案。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索