alibaba / spring-ai-alibaba

An Application Framework for Java Developers
https://sca.aliyun.com/ai
Apache License 2.0
376 stars 86 forks source link

[Chat Memory] Enhance chat memory support #51

Open chickenlj opened 2 weeks ago

chickenlj commented 2 weeks ago
chickenlj commented 1 day ago

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不同的记忆类型存储