分享一个在我开发 Amber 智能体平台的过程中遇到的问题的解决方案。
如何解决上下文过长的问题
面对这种方法,有两种常见的办法,以及一篇 LangChain 的文章链接。
https://www.cnblogs.com/mangod/p/18243321
- 裁剪上下文假设一个 AI 站点的上下文限制是 2 条,则他会保留最后两条消息,即 “谢谢啦”和下一条。这样会造成上下文的丢失,AI 不会记住以前的内容。
- 上下文总结将之前的上下文进行总结并附加到目前的上下文中。这样做的好处是可以保留原来的上下文中的部分内容。但是上下文是被“压缩”过的,无法还原上下文原本的内容,以及会丢失函数调用等信息。但是缺点是要额外调用一次 LLM,传入相同数量的上下文,也是一笔不小的开销。
什么是 Leaflow 智能上下文技术
Leaflow Amber (以下称为 Amber)智能上下文技术是一种将根据语境来自动附加上下文的技术,并在多轮对话的情况下节省 Token。
智能上下文技术会将所有的消息记录分块。比如,一条对话的消息记录是这样的。
- Human: 你好
- Assistant: 你好呀~ (๑•̀ㅂ•́)و✧ 今天过得怎么样呢?有没有什么想聊的呢?我在这里等着你哦~ (⁄ ⁄•⁄ω⁄•⁄ ⁄)
- Human: 晚上睡不着该怎么办?
- Assistant: 晚上睡不着的话,可以试试以下几种方法哦~ (。•̀ᴗ-)✧
- 放松心情:可以听一些轻音乐或者自然声音,帮助自己放松。比如海浪声、雨声之类的,感觉会很舒服呢~ (⁄ ⁄•⁄ω⁄•⁄ ⁄)
- 阅读:找一本轻松的书,或者看一些有趣的文章,转移注意力,可能会让你慢慢困起来哦~ (。•̀ᴗ-)✧
- 深呼吸:试着做几次深呼吸,吸气时数到四,呼气时也数到四,慢慢来,感觉会很放松~ (๑•́ ₃ •̀๑)
- 避免电子屏幕:睡前尽量少看手机或电脑,蓝光会影响睡眠质量哦~ (。•́︿•̀。)
- 喝点温牛奶:温牛奶有助于睡眠,可以试试哦~ (๑´•.̫ • `๑)
- Human: 谢谢啦
- Assistant: 有什么需要帮忙的,随时告诉我哦!希望你能早点入睡,做个美梦~ (。♥‿♥。) 你今天有什么特别的事情吗?或者想聊聊其他的?我都很乐意哦~ (⁄ ⁄•⁄ω⁄•⁄ ⁄)
随着对话的进行,上下文的数量增加,Prompt Token 会变得越来越多,Total Token 也会随之变多。这样每轮对话都会消耗大量的 Token,我们不得不对上下文进行裁剪。
Amber 提交了一份不一样的答卷
我们也对这个问题思考了很久,并提出了 Message Block 特性。
Amber 会将消息进行分组,将符合条件的消息变成一个消息块(Message Block)。每个消息块中包含了完整的上下文信息。
在分组前,Amber 依旧会裁剪上下文,比如保留 2 条(这里是个例子,不代表真实环境)等,然后并进行上下文完整性操作。随后,Amber 将会将其保存。
如果一个原始的上下文是这样,Amber 会通过上下文完整性分成以下两段消息块。
- 消息块 1
- Human: https://www.nodeseek.com/post-161969-1帮我看下这个网站
- Assistant: 哇,亲爱的!这个网站是关于一个叫“Amber琥珀”的自研AI平台哦!(๑•̀ㅂ•́)و✧
- Amber琥珀 是一个全新的智能体平台,正在公测期间完全免费使用呢!(≧▽≦)
- 它的对话优化引擎非常强大,可以支持多个助理并行工作,提供流畅的对话体验。
- 用户可以自定义助理的功能,甚至可以设置自动生成工作清单哦!(。♥‿♥。)
- 还有记忆功能,可以根据用户的对话内容生成记忆,帮助更好地理解用户的喜好。
- 提供强大的API,方便开发者接入。
- 工具集成和文档管理功能也很强大,可以帮助用户高效完成各类任务。
- 他们还在开发更多的功能,期待后续的更新呢!(⁄ ⁄•⁄ω⁄•⁄ ⁄)
- 消息块 2
- Human: 解读一下这篇文章 https://mp.weixin.qq.com/s/LOJ5Q2XJ0TDIfJLQ9Rt1Zw
- Assistant: 这篇文章主要讨论了中日双方关于福岛第一核电站核污染水排海问题的共识。以下是我对文章的解读:
- 背景介绍:2023年8月,日本政府开始单方面排放福岛核电站的核污染水,引起了包括中国在内的多个国家的强烈反对。
- 中方立场:中国政府对日本的行为表达了强烈的不满,要求日本认真对待国际社会的关切,并承担相应的责任。
- 共识达成:
- 日本承诺将遵循国际法,努力避免对人体和环境造成负面影响,并将进行海洋环境的影响评估。
- 在国际原子能机构的框架下,日方同意设立长期国际监测机制,确保中国等利益相关国的有效参与。
- 双方同意以科学为基础,持续进行建设性对话,妥善处理相关问题。
- 中方表示将根据科学证据逐步恢复对符合标准的日本水产品的进口。
- 后续措施:中方将参与国际监测活动,并在有效监测后调整对日本水产品的禁令。
首先,假设我们保留两条消息记录,随后,用户询问了 Amber 还有什么功能
- Human: Amber 免费吗?
此时,助理并不知道 Amber 的其他信息,因为上下文是被截断的。Amber 的智能上下文会根据你的输入和搜索技术,寻找到对应的消息块,然后将其放入原来的上下文中,上下文变成了这样,请注意:此时没有了消息块的概念。
上下文:
- Human: https://www.nodeseek.com/post-161969-1帮我看下这个网站
- Assistant: 哇,亲爱的!这个网站是关于一个叫“Amber琥珀”的自研AI平台哦!(๑•̀ㅂ•́)و✧[此处省略]
- Human: Amber 免费吗?
之后,助理会进行回复。
- Assistant: Amber 在公测期间完全免费
以上是简单的一个例子,实际场景中 Amber 的智能上下文比此文章发挥更加良好一点。
什么是上下文完整性?
- Human: 比较 9.11 和 9.8 哪个大
- Assistant: 我会调用 Compare 工具来比较两个数字的大小。
- Assistant Tool Call: [ID 22222, 调用工具]
- Tool:[ID 22222, 9.8 > 9.11]
- Assistant: 9.8 大于 9.11
这是一个完整的上下文,Amber 始终会保证上下文的完整性,如果缺失上方任意一个 Role,Amber 会尝试补全会拒绝对话。
实际应用
这是我们在经过允许的情况下拿到的一个数据。
Prompt Tokens 包含了历史上下文,不做智能上下文或者裁剪的情况下 Prompt Tokens 会越来越多。
Amber 智能上下文会在裁剪的情况下补全上下文,去除不重要的上下文来减少 Prompt Tokens 消耗。Prompt Tokens 消耗减少后,Total Tokens 也一并减少。
Amber 仍处于测试阶段,这只是 Amber 对话优化过程中的其中一环。我们仍在创新,并带给您更好的体验。
写的太好了