Home
Connect Wallet
Wen
@40155817

Persona 更新了,更高更快更强,看来快快吧!

2023-03-04 11:29 Words count: 3684
在几周前,我们发布了 Persona 机器人(7000104969),这是一个使用 OpenAI 提供的 API 来进行对话的服务,可以通过 Mixin Messenger 很方便的使用。这一次我们对它做了一些大的更新,增加了新的功能,我们想通过这篇引导文章做一个详细的说明...

在几周前,我们发布了 Persona 机器人(7000104969),这是一个使用 OpenAI 提供的 API 来进行对话的服务,可以通过 Mixin Messenger 很方便的使用。这一次我们对它做了一些大的更新,增加了新的功能,我们想通过这篇文章做一个引导,使它更好的为用户服务。

本文中的一些内容也有从技术角度对 OpenAI API 做说明,即使你不是 Persona 的用户,可能也会对你有所启发。

升级了新的 GPT-3.5 模型

在之前的版本中我们使用的是 text-davinci-003 模型(也被称作 GPT-3),这是当时 OpenAI 提供的可以在 API 中使用的最好的模型,但在实际使用中它与 ChatGPT 的响应结果仍有差距,感觉上 GPT-3 会更加倾向于简短的表述, 尽管我们也尝试通过定义角色来改善它的响应,但由于它天然的不足,收效甚微。

不过好消息是,OpenAI 在前两天终于开放了 ChatGPT 的对话模型 gpt-3.5-turbo(也被称作 GPT-3.5),我们也立刻开始了模型切换的开发工作,在切换后响应内容得到了明显的改善,相比于 ChatGPT 的高负载,体感上它的响应也比较快,而且计费也为老的模型的 1/10,Persona 也同步了 Token 的基础计价。

Turbo is the same model family that powers ChatGPT.

The Turbo model family is also the first to receive regular model updates like ChatGPT.

根据 OpenAI 文档的介绍,gpt-3.5-turbo 模型和 ChatGPT 使用的模型相同,并且会定期更新。我个人认为 ChatGPT 仍然会比 gpt-3.5-turbo 有更多的优化,但在日常使用的场景下应该差异不大。

image.png

聚合网络搜索

OpenAI 的对话模型是离线的,根据其文档的说明,训练数据截止到 2021 年 9 月,如果你问它最近发生的事儿,它可能会没办法为你正确解答。

我们对这个问题做了一个简单的解决方案,如果你在消息前使用 ! 前缀(! 表示这是一个指令,它优化了 Token 的消耗,后文有详细说明),我们会先抓取网络搜索的结果, 再把网络结果作为上下文交给模型解析。不过由于额外的请求,它相对于正常的对话请求响应速度较慢,我们会在后续做一些改进。而且由于网络搜索结果的不确定性,我们也没办法保证你能获得需要的响应。

image.png

角色功能的重新设计

在更新前的版本中我们内置了很多角色,回复 / 可以看到,如下图,不过从我们的统计来看,这个功能被使用的频次很低,我觉得我们首先需要回答的是:角色是什么?这个功能有什么用?

image.png

什么是角色?

如果你经常使用 ChatGPT,你一定或多或少的听说过 Prompt 这个词,它通常指的是一个输入的文本段落或短语,作为生成模型输出的起点或引导。Prompt 可以是一个问题、一段文字描述、一段对话或任何形式的文本输入,模型会基于 Prompt 所提供的上下文和语义信息,生成相应的输出文本。

下面的这个例子是一个对比,加上 Prompt 后响应结果变得不同。Prompt 有非常多的用法,可以也简单,也可以很晦涩。这篇文章对基本用法有一个简要的说明。你也可以通过搜索 “ChatGPT Prompt” 了解到更多信息。

image.png
在 Persona 中,你可以理解一个角色的定义就等同于一个 Prompt 设定。

(在下文中,为了连贯,我会继续使用角色这个词而不是 Prompt)

怎么使用?

在我们这次更新后,向 Persona 发送 / 的输出发生了改变,如下图。

image.png
角色分为两部分,系统角色与自定义角色。系统角色是我们提供的一些常用设定,对所有用户可见,方便用户直接使用,我们会在之后添加更多并作持续的优化。

默认会使用 default 角色,它不带任何额外设定。当切换到角色时,你便使对话应用了相应的角色设定。在下图中我们使用了 default 和 english 做了两次请求,它的结果也发生了改变。

image.png

自定义角色

显然,我们不可能满足所有人的需求,因此开放自定义角色是有必要的。其流程是,

  1. 通过匿名角色调试你感兴趣的设定

    当你在网上看到感兴趣的 Prompt 或者自己编写时,你可以先使用匿名角色来对当前会话的设定做覆盖,它有更高的优先级,你可以对其做持续的改进来测试响应以满足你的预期。使用 /+ <自定义设定> 的命令。

    image.png
    (本文中均使用中文来演示角色的设定,但是 OpenAI 的模型使用的训练数据中英语的比例很高,使用英语会使内容更容易被理解,从而获得更好的输出,而且中文使用的 token 消耗也更大,你可以在这个网站查询文本内容耗费的 token)

  2. 将其保存为自定义角色

当你觉得它达到了你的预期后,你可以考虑将其保存为自定义角色,这样,当你下次还想使用它时,你可以很简单的切换到相应的设定,而不需要再去找一大长串的文本。如下图,添加成功后,可以在 / 的输出的自定义角色中看到记录,我便可以在任何时候通过 /-standup 来切换到相应的角色设定。

(发送 / 后会看到 创建角色 的按钮,点击后进入到下图对话)

image.png
其他对自定义角色的删改查可以通过 / 回复的按钮来进行,这里不再赘述。

如果你阅读到这儿,我不知道你会不会产生一个疑问,

为什么 ChatGPT 可以直接输入 Prompt 就开始对话,而 Persona 中非要搞成角色,不能让我像 ChatGPT 一样,直接在对话中输入吗?

要回答这个问题,需要理解 OpanAI API 的会话管理。

增加了对会话的自定义设置

OpenAI API 的请求限制

ChatGPT 和 OpenAI GPT-3.5 API(指 Persona 或者其他基于此构建的服务) 有一个明显的差异,通过 OpenAI API 进行请求有单次的文本最大限制,即 4096 token(约为 2048 个汉字),它包括了你的请求加上 OpenAI 的响应,所以请求内容的最大值会更少。

而且 OpenAI API 没有服务端的会话管理,请求的上下文需要由 API 调用者来管理。举一个例子。

image.png
在上图的对话中,从一个新的会话开始(切换角色会清空会话),从用户侧虽然都是只发了四个汉字,但是实际从 Persona 向 OpenAI 的请求分别是绿框,红框,蓝框的内容,包含了你之前发送的上下文,这样 OpenAI 收到请求时才能从上下文推导出是要 再讲一个(笑话)。

随着会话上下文的变多,单次请求的 token 消耗也在累积变大,如果我们不对其做限制,在十几次对话之后,便会达到单次最大 4096 token 的限制,从而请求失败。

一个符合直觉的做法是根据时间衰减,即上下文只保留最近的某些条消息,不持续累积。

这时就可以来解答上一节留下的问题,

为什么 ChatGPT 可以直接输入 Prompt 就开始对话,而 Persona 中非要搞成角色,不能让我像 ChatGPT 一样,直接在对话中输入吗?

如果你在 Persona 中也像在 ChatGPT 中一样,直接在会话中设置 Prompt,那么随着对话的增加,你设定的 Prompt 就会被丢弃不包含在请求的上下文中,这样获得的响应就不再是你需要的了。

所以,通过角色,我们会把角色的设定固定放置在请求的最开始,这样无论会话怎么累积,它都一直生效。

角色设定
(历史的会话上下文,仅保留最近的某些条)
用户最新的一条消息

通过会话设置限制 Token 的消耗

image.png
当你发送 ? 时,响应中增加了一些设置,会话超时和会话深度可以帮助你对会话做自定义的控制。

指令管理

指令介绍及使用

再之前我们已经介绍了可以通过 !<用户输入> 执行网络查询,! 前缀表示它是一个指令,指令是我们这一次新加的功能,它和角色的区别是指令操作不传递上下文,仅依赖用户的输入完成单次请求。它类似一个无状态的函数,提供输入,完成输出。因为在设计上指令不传递上下文,所以它也比较节省 token。

当你发送 ? 会看到指令管理的按钮,或者直接发送 !,你会看到关于它的介绍。我们内置了一些常用的指令方便用户直接使用,我们后续会添加更多,并对已有的做优化。

image.png
指令需要接受一个输入,直接在会话中使用,比如使用内置的指令完成翻译。

image.png

自定义指令

(发送 ! 然后点击 创建指令 进入到会话中)

image.png
上图是一个示例,创建了一个名为 -standup 的指令,然后直接在对话中提供输入使用,你可以将你需要的完成的单次任务构建为指令使用,这样除了节省 token,也能提高使用效率。

其他对自定义指令的删改查可以通过 ! 回复的按钮来进行,这里不再赘述。

在单聊中支持对消息回复

这里我们增强了在 Mixin Messenger 中的使用体验,你可以直接通过回复消息来完成操作。注意,只支持在单聊中使用,不支持对群聊消息的回复。

image.png
你可以直接回复或者使用指令。

image.png
同样的,也支持对多条消息的转发进行回复,你可以直接回复或者使用指令。

反馈

如果你在使用上碰到任何问题,可以加入到我们的反馈群,你可以这里联系到开发者获取帮助。

Reward
14 0
0 times bought
•
1 times reward
0.0
Price(BTC)
1
Paid Times
$0.45
Revenue
0.0%
My Share(%)
Comments 0
Subscribe
Wen
@40155817
1 Posts 11 Subscribers 3 Subscribing
Joined at March 17, 2022
Subscribe
© 2026 Quill
Rules Stats Help Github
Persona 更新了,更高更快更强,看来快快吧!
Reward