Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Chat Memory] Enhance chat memory support #51

Open
chickenlj opened this issue Oct 11, 2024 · 2 comments
Open

[Chat Memory] Enhance chat memory support #51

chickenlj opened this issue Oct 11, 2024 · 2 comments

Comments

@chickenlj
Copy link
Collaborator

chickenlj commented Oct 11, 2024

  • persistent memory storage
  • memory window control
  • summarized memory based on chat history
  • etc.

由于模型是无状态的,因此要实现聊天记忆效果,需要在与模型交互时要把整个对话上下文完整的发送给模型。

基本方案

image

实现方案上涉及以下几点:

  • 聊天历史的持久化与管理
  • 形成有效的聊天记忆上下文
    • 聊天历史大小,避免超过model context上下文大小限制。包括 MessageWindowChatMemory 等
    • Chat Summary,有效降低聊天历史成本的一种手段

Spring AI分析

Spring AI 中关于记忆部分的核心定义为 ChatMemory。

  • 需要增加一些常用持久化组件的适配;
  • ChatMemoryStore中包含一个size限制,但不够灵活,是否抽象独立的WindowSize实现?
  • 增加Summary,对话总结能力
@chickenlj chickenlj changed the title [Memory] Enhance chat memory support [Chat Memory] Enhance chat memory support Oct 11, 2024
@chickenlj
Copy link
Collaborator Author

Provided by 张亦驰

当前版本

一、记忆类型:ConversationBufferWindowMemory:基于一个固定长度的滑动窗口的“记忆”功能

二、记忆存储:
1. add(String conversationId, Message msg)
2. add(String conversationId, List msgList)
3. getMessage(String conversationId)
4. clear(String conversationId)

三、模型基础抽象(提取了常用的公共部分)

1.	apikay:秘钥
2.	windowSize:窗口大小
3.	temperature:温度
4.	modelEnum:模型枚举(名称、输入上下文窗口大小)
5.	prompt:提示词
6.	includeSystemPrompt:是否包含提示词(true,将提示词放到message[0]<千问>,根据api实现)

四、根据ModelConversationFactory创建适配模型的会话

1.	QwenClient
2.	OpenAIClient
…

五、会话实体属性:

1.	role: user(用户输入)、assistant: (ai回复)
2.	content:用户输入信息&AI回复信息

六、根据配置的持久化方式和记忆方式(滑动窗口、小结、、、)持久化会话,当前滑动(固定)窗口大小方式

七、持久化的存储类型:mysql、redis、ES

八、根据不同的持久化方式初始化存储结构、存储

后续版本规划

一、记忆类型增加:

1.	ConversationSummaryBufferMemory:在token限制之前以对话形式进行存储,超过之后进行小结存储
2.	ConversationSummaryMemory:将每次会话都进行以小结的形式存储

二、会话的message属性增加:

1.	inputCountTokens:用户输入的token数量
2.	outputCountTokens:AI回复的token数量

三、ModelConversationFactory增加:

其他模型client适配

四、优化token计算方式:
如:用户首次输入,请求api计算或使用依赖分词器计算

五、同一种model不同的记忆类型存储

@chickenlj chickenlj mentioned this issue Nov 1, 2024
@jc8futao
Copy link

太棒了~!~!稍后会合并到大版本中吗?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants