打造中国最大的
AI交流社区平台

【ChatGPT教程全集】🚀 高级应用

【ChatGPT教程全集】🚀 高级应用插图
【ChatGPT教程全集】🚀 高级应用插图1

🚀 高级应用

概述

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

🟡 LLMs使用工具

MRKL系统1 (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]。
  • 或者更复杂的依赖多个数据源的任务,例如下面这个例子:
【ChatGPT教程全集】🚀 高级应用插图2

示例MRKL系统(AI21)

示例

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

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

【ChatGPT教程全集】🚀 高级应用插图3

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

【ChatGPT教程全集】🚀 高级应用插图4

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

【ChatGPT教程全集】🚀 高级应用插图5

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

【ChatGPT教程全集】🚀 高级应用插图6

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

【ChatGPT教程全集】🚀 高级应用插图7

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

【ChatGPT教程全集】🚀 高级应用插图8

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

备注

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

更多内容

请参见 此示例 MRKL系统,该系统是使用LangChain构建的。


  1. Karpas, E., Abend, O., Belinkov, Y., Lenz, B., Lieber, O., Ratner, N., Shoham, Y., Bata, H., Levine, Y., Leyton-Brown, K., Muhlgay, D., Rozen, N., Schwartz, E., Shachaf, G., Shalev-Shwartz, S., Shashua, A., & Tenenholtz, M. (2022). MRKL Systems: A modular, neuro-symbolic architecture that combines large language models, external knowledge sources and discrete reasoning. 
  2. Lieber, O., Sharir, O., Lentz, B., & Shoham, Y. (2021). Jurassic-1: Technical Details and Evaluation, White paper, AI21 Labs, 2021. URL: Https://Uploads-Ssl. Webflow. Com/60fd4503684b466578c0d307/61138924626a6981ee09caf6_jurassic_ Tech_paper. Pdf. 

🟡 具有推理和行动能力的LLMs

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

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

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

【ChatGPT教程全集】🚀 高级应用插图9

ReAct System (Yao et al.)

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

结论

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

【ChatGPT教程全集】🚀 高级应用插图10

ReAct Results (Yao et al.)


  1. Yao, S., Zhao, J., Yu, D., Du, N., Shafran, I., Narasimhan, K., & Cao, Y. (2022). ReAct: Synergizing Reasoning and Acting in Language Models. 
  2. Yang, Z., Qi, P., Zhang, S., Bengio, Y., Cohen, W. W., Salakhutdinov, R., & Manning, C. D. (2018). HotpotQA: A Dataset for Diverse, Explainable Multi-hop Question Answering. 
  3. Chowdhery, A., Narang, S., Devlin, J., Bosma, M., Mishra, G., Roberts, A., Barham, P., Chung, H. W., Sutton, C., Gehrmann, S., Schuh, P., Shi, K., Tsvyashchenko, S., Maynez, J., Rao, A., Barnes, P., Tay, Y., Shazeer, N., Prabhakaran, V., … Fiedel, N. (2022). PaLM: Scaling Language Modeling with Pathways. 
  4. Thorne, J., Vlachos, A., Christodoulopoulos, C., & Mittal, A. (2018). FEVER: a large-scale dataset for Fact Extraction and VERification. 

🟡 代码推理

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

【ChatGPT教程全集】🚀 高级应用插图11

PAL 示例 (Gao et al.)

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

示例

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

我将使用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,这是正确的答案。

可以在Jupyter 笔记本查看这个例子

更多

也可以看看 PAL’s colab example.


  1. Gao, L., Madaan, A., Zhou, S., Alon, U., Liu, P., Yang, Y., Callan, J., & Neubig, G. (2022). PAL: Program-aided Language Models. 

欢迎免费使用GPT对话,感受ChatGPT的魅力!AI爱好者 – 最具实力的中文AI交流社区平台 (aiahz.com)

长按扫描二维码进群领资源

【ChatGPT教程全集】🚀 高级应用插图12
赞(0) 打赏
未经允许不得转载:AI爱好者 » 【ChatGPT教程全集】🚀 高级应用

评论 抢沙发

欢迎来到AI爱好者

我们旨在打造一个最具实力的中文AI交流社区平台,致力于为所有AI爱好者,创业者和使用者提供优质服务. 我们的宗旨是为广大用户提供免费解决方案,您可以通过问答形式提出与AI相关的任何问题.

AI社区AI工具

安全服务战略合作伙伴:麒麟盾 SCDN

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

微信扫一扫打赏

登录

找回密码

注册