Thread Reader
宝玉

宝玉
@dotey

Apr 8, 2023
13 tweets
Tweet

1/n 前些天我听Sarah & 王建硕的那期《大白话聊 ChatGPT》播客 xiaoyuzhoufm.com/episode/641183 的时候,里面王建硕老师神秘兮兮的说他们开发了一个机器人,这个机器人能补全一些ChatGPT缺失的能力,比如:报时、算复杂数学等任务。

2/n 你问机器人现在几点了,机器人可以告诉你现在是下午4:27;你问机器人“29的平方根是多少?”,机器人会告诉你“29 的平方根是 5.39” 他也揭秘了机器人是如何实现报时的,也就是当有人问时间时,把当前的时间作为Prompt一起发送给机器人。
3/n 用户:“现在几点了?” prompt:“请回答用户的问题:“现在几点了”,并且当前的时间是4:27。” 这个方案其实你一听你就明白怎么实现的了,但我更好奇的是另一件事:怎么知道现在用户问的是时间相关的问题?或者是数学相关的问题?
4/n 直到最近我学习了一下LanChain的Agent才明白是怎么做到的。 其实这些秘密都在prompt里面。 我们知道ChatGPT是有能力理解用户的问题,并且有一定的逻辑能力基于用户的输入做出一些判断和数据提取 所以要实现这样的机器人,首先你要定义好一些插件,比如我有两个插件,定义好名称、描述、执行程序
5/n name: 报时 description:当用户咨询当前时间使用这个工具 run: () => 现在下午4:27分 name: 计算器 description: 当用户询问数学计算时使用这个工具,并且把用户问题转换成可执行的python数学函数代码 run: (query) => eval(query)
6/n 当用户问“29开根号等于多少?”,第一次请求OpenAI的prompt会是这样: “ 你要帮助用户回答问题,这里有以下工具可供你选择: 报时:当用户咨询当前时间使用这个工具 计算器:当用户询问数学计算时使用这个工具,并且把用户问题转换成标准数学公式
7/n 你需要根据用户的问题输出: 工具名称:从上面的工具中选择一个 输入:要传入工具的值 用户的问题是:29开根号等于多少? 你的选择: ” ChatGPT会给出结果:“ 工具名称:计算器 输入:math.sqrt(29) ”
8/n 拿到OpenAI返回的结果后,调用计算器的run函数,计算出来math.sqrt(29)的结果5.385。 再次请求OpenAI的API,这次的prompt看起来像这样: “已知math.sqrt(29)是5.385,请回复用户的问题:“29开根号等于多少?”” ChatGPT会返回:“29开根号等于5.385”
9/n 这样基本上就实现了一个简单的可执行子任务的AI机器人。 简单总结一下:
10/n • 事先你需要定义一系列工具插件,每个工具包含明显的名称、描述和参数定义。 • 当用户问到一个复杂问题时,先让ChatGPT根据用户的问题,去选择你有的最合适的工具,并且从用户的输入中提取出你这个工具可以执行的参数。
11/n • 然后根据ChatGPT返回的工具名称和参数去调用工具的代码去执行,得到运算结果。 • 上面两个步骤会反复执行,直到用户的所有问题都解决了,因为用户的问题可能需要多个工具或多次执行才能得到所有结果,当然ChatGPT会帮助你做出判断。
12/n • 当拿到所有结果后,将结果和用户的问题再次给到ChatGPT,ChatGPT归纳整理后,将最终结果返回给用户。 当然实际情况要复杂很多。
n/n 参考文档: 《LangChain Agents》 t.cn/A6NLaQZw 《LangChain Agent 执行过程解析 OpenAI》 t.cn/A6NLaQZZ 《ChatGPT|LangChain Agent原理介绍》 t.cn/A6NLaQZA
Missing some tweets in this thread? Or failed to load images or videos? You can try to .