一、_chatMessageHistory
1.什么是_chatMessageHistory
AI记下你说了什, 它说了什么的"聊天记录本"
每次你问问题,它就往本子上写一条
AI 回答后,它也写一条
下次你再问问题,AI 可以翻开这个本子,看之前说过什么,这样回答就连贯了
2.代码中怎么用_chatMessageHistory
把memory传给chain时,它会自动调用 __chatMessageHistory,将结果都保存到_chatMessageHistory
示例
python
from langchain.chat_models import ChatOpenAI
from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationChain
memory = ConversationBufferMemory()
llm = ChatOpenAI(temperature=0)
chain = ConversationChain(llm=llm, memory=memory)
# 自动保存
chain.run("你好")
可以获取到保存的消息
# 获取消息列表
messages = memory.chat_memory._chat_message_history.messages
# 打印每条消息
for msg in messages:
print(f"{msg.role}: {msg.content}")
二、conversationBufferMemory
1.conversationBufferMemory是什么
1.记录消息,_chatMessageHistory = 具体的消息记录本
2.ConversationBufferMemory = 管理这个记录本的 Memory,负责把新消息写进去、提供历史给 Chain/Agent 用
2.conversationBufferMemory怎么用
ini
#1.创建Memory
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
#2.让Chain/Agent使用它
llm = ChatOpenAI(temperature=0)
chain = ConversationChain(llm=llm, memory=memory)
#3.对话</br>
chain.run("你好")
chain.run("你还记得我刚才说的话吗?")
Memory 会自动把每轮消息记录到 _chatMessageHistory
下一轮对话 AI 会参考之前的消息
三、conversationChain
1.conversationChain是干啥的
Memory 记东西,Chain 用这些东西跟你聊天。
2.ConversationChain 怎么用
ini
# 创建 Memory(自动记住对话)
memory = ConversationBufferMemory()
# 创建 LLM
llm = ChatOpenAI(temperature=0)
# 创建 ConversationChain
conversation = ConversationChain(llm=llm, memory=memory)
conversation.run("你好") # 第一轮
conversation.run("你还记得我刚才说的话吗?") # 第二轮,会参考第一轮的对话
四、conversationBufferWindowMemory
1.conversationBufferWindowMemory是干啥的
只保留几条记录
window:滑动窗口
2.conversationBufferWindowMemory怎么用
ini
# 创建记忆对象 只记住最近三轮
memory = ConversionBufferWindowMemory(k=3)
# 创建模型
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 3. 创建对话链,挂上记忆
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
#聊天
conversation.predict(input="你好")
五、ConversationTokenBufferMemory
1.ConversationTokenBufferMemory是什么
按token数量决定保留多少记录
2.怎么看最近用了多少token
比如你这次给AI发消息,消耗了10个token,和之前加起来token的消耗总数已经超过1000了, 会把之前的对话删除掉,让消耗token数小于1000
1 token ≈ 0.75 个汉字 或 4 个英文字符。
六、ConversationSummaryMemory
1.ConversationSummaryMemory是什么
把旧的对话总结为一句话或几句话 节省token 同时保留核心信息
旧的对话,之前需要全部发送给模型,生成答案
用ConversationSummaryMemory后,不用全部发过去,发过去总结就行,可以节省token
2.ConversationSummaryMemory怎么用
ini
# 1. 创建模型
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 2. 创建 Summary Memory
memory = ConversationSummaryMemory(
llm=llm, # 用于生成 summary 的模型
max_token_limit=1000, # 可选,保留 summary 时总 token 上限
)
# 3. 创建对话链
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
# 4. 连续聊天
conversation.predict(input="你好")
七、ConversationEntityMemory
1.ConversationEntityMemory是什么
专门记住对话中的 人,事,物 和它们的属性
2.ConversationEntityMemory怎么用
ini
# 1. 创建模型
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 2. 创建实体记忆对象
memory = ConversationEntityMemory(llm=llm)
# 3. 创建对话链
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)
# 4. 对话示例
conversation.predict(input="我叫张三,今年22岁,喜欢篮球,住北京。")
会记住对话中的
姓名=张三
年龄=22
兴趣=篮球
居住地=北京
八、ConversationKGMemory
1.ConversationKGMemory是什么
它不仅记实体,还记实体之间的关系,用结构化方式帮助模型更智能回答问题
2.ConversationKGMemory怎么用
ini
# 1. 创建模型
llm = ChatOpenAI(model="gpt-3.5-turbo")
# 2. 创建知识图谱记忆对象
memory = ConversationKGMemory(
llm=llm
)
# 3. 创建对话链
conversation = ConversationChain(
llm=llm,
memory=memory,
verbose=True
)