Bin-Huang / chatbox

User-friendly Desktop Client App for AI Models/LLMs (GPT, Claude, Gemini, Ollama...)
https://chatboxai.app
GNU General Public License v3.0
21.06k stars 2.13k forks source link

上下文策略的改进思路 #55

Closed KingJadeLight closed 1 year ago

KingJadeLight commented 1 year ago

比如我追问的时候,它就回答出不相关的问题。官网没有这个问题。

Bin-Huang commented 1 year ago

有没有更多的信息?比如追问的是几条之前的消息?消息的平均字数是?

对了,如果你可以试试消息的引用功能,很适合特别长的聊天会话。

asukaminato0721 commented 1 year ago

也遇到了,好像它不是很能联系上下文回答问题。 image ... 略

image

然后就乱回答了

image

Bin-Huang commented 1 year ago

现在上下文的算法是:会话第一条消息(用于AI设定) + 最新的 1500 个字。你看下是不是因为这个原因?

asukaminato0721 commented 1 year ago

现在上下文的算法是:会话第一条消息(用于AI设定) + 最新的 1500 个字。你看下是不是因为这个原因?

啊,这么解释就通了,记忆重置

asukaminato0721 commented 1 year ago

image

你现在是一个技术文档的翻译专家,我会把一份 yml 给你,你负责把 yml 的内容翻译成中文,不要更改里面的 link ,明白了吗。

image

似乎只会复读了。

KingJadeLight commented 1 year ago

现在上下文的算法是:会话第一条消息(用于AI设定) + 最新的 1500 个字。你看下是不是因为这个原因?

会话第一条有特殊地位吗?不同于其他对话?如果是的话,可以提供一个选项,使得新对话不用任何或默认设定吗?我觉得目前的这个会对很多新用户产生困扰,尤其是从官网过来的。

Bin-Huang commented 1 year ago

在 Chatbox 可以设置 system 角色的消息,可以强化 GPT3.5 的 prompting 效果。很多有经验的用户都会在新会话的第一条消息就设置成 system 角色消息,让 GPT 在当前会话更好地进入角色。用人话说,在第一句就给 AI 进行 “系统人设的设定”。

Bin-Huang commented 1 year ago

这也是为什么 Chatbox 比 ChatGPT 在 prompting 上更自由的原因,对于开发者很适合用来作为 prompting 的调试和开发,对于普通用户很适合用作“人设”系统设定的管理

Bin-Huang commented 1 year ago

关于上面讨论的问题,我认为最可能的原因是历史消息太多了、GPT 没办法回答太早的问题。在现在的设计中,GPT 只会根据“第一条消息 + 最近 1800 字的问答文本” 作为上下文进行回答。其中 1800 字是考虑到了 GPT3.5 当前的 tokens 数量限制,目前 GPT 3.5 没办法处理超过大约 4000 tokens 以上的内容。

如果你在和 AI 长谈,希望它讨论很长内容之前的话题,你可以用 Chatbox 的“引用”功能,就像微信的引用一样,按钮就在消息右边的展开菜单里,可以用来唤起 AI 的回忆。这也是 Chatbox 的独特设计之一。

KingJadeLight commented 1 year ago

我没描述清楚。现在不是不记得之前,而是只记得之前的。比如我第一句话是“润色以下文字”。之后我再让他润色另一段文字,然后回答的还是第一段文字的结果。所以我才问在这个app里,第一句话是不是不同于其他,只用于系统人设?我一会儿做一个例子

Bin-Huang commented 1 year ago

即是系统人设,也是普通消息

KingJadeLight commented 1 year ago

也就是说,是不是我写的“润色以下文字:吧啦吧啦吧啦” 整段都被当成了人设?所以我后面让他润色其他文字的时候,还以为要润色最早的那段?

Bin-Huang commented 1 year ago

也就是说,是不是我写的“润色以下文字:吧啦吧啦吧啦” 整段都被当成了人设?所以我后面让他润色其他文字的时候,还以为要润色最早的那段?

额……在你这种情况确实会这样。一般 prompting 的时候第一句都是 “请帮我润色文案。我说一段,你润色一段” 类似这种

devyujie commented 1 year ago

我看其他项目保留的是第1条系统消息和最近的10次对话(20条消息),可以加个按钮,由用户决定是否开启消息裁剪。

Bin-Huang commented 1 year ago

我看其他项目保留的是第1条系统消息和最近的10次对话(20条消息),可以加个按钮,由用户决定是否开启消息裁剪。

我计划中 Chatbox 可以看到一条消息所有参与上下文的内容、可以根据多种策略修改当前会话的 prompt 规则。因为 Chatbox 太早期了(才开发两周),所以我还没来得及开发,感兴趣可以一起搞搞

KingJadeLight commented 1 year ago

的确还是有问题。比如我一开始问的是一个问题,来回问答几次。然后有来回问答几次另一个问题,然后突然某次它回答的是上一条问题的答案。

bravekingzhang commented 1 year ago

@Bin-Huang 这个App很有意思,我想请假下,这样把会话的上下文带上去,会不会造成不必要的成本,因为输入token也是要收费的。

const messages: ChatCompletionRequestMessage[] = prompts.map(msg => ({ role: msg.role, content: msg.content }))
        const response = await fetch(`${host}/v1/chat/completions`, {
            method: 'POST',
            headers: {
                'Authorization': `Bearer ${apiKey}`,
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                messages,
                model: modelName,
                max_tokens: maxTokensNumber,
                stream: true
            })
        });
Bin-Huang commented 1 year ago

@bravekingzhang 最新版本可以设置最多 token 限制

Eversee22 commented 1 year ago

在 Chatbox 可以设置 system 角色的消息,可以强化 GPT3.5 的 prompting 效果。很多有经验的用户都会在新会话的第一条消息就设置成 system 角色消息,让 GPT 在当前会话更好地进入角色。用人话说,在第一句就给 AI 进行 “系统人设的设定”。

请问这个怎么设置

bravekingzhang commented 1 year ago

新版本可以设置最多 token 限制

@Bin-Huang 我们好像说的不是一个事,我的本意是指把这些历史的 QA,都带上去请求接口会消耗 输入token,整体而言还是消耗token数量,这里的限制token数量,确实可以避免越带越多,至少有一个上限,但是总归越到后面越会大的消耗

我一直不明白,OpenAI为什么不给予 contextId,或者 说 chatId的方式,避免请求时把一堆的历史包袱都给带上,而是server端从contextId中去取会话的历史消息。

Bin-Huang commented 1 year ago

比如我追问的时候,它就回答出不相关的问题。官网没有这个问题。

确实存在这个 Bug,我已经修复了。应该今晚会发布新的修复版本

Bin-Huang commented 1 year ago

存在一个bug可能会导致答非所问,现在已经修复了。

更新下载: https://github.com/Bin-Huang/chatbox/releases/tag/Chatbox-v0.2.1