当前位置:   article > 正文

使用LangChain的Memory支持Kimi上下文聊天

langchain kimi

17bcc78f01685ce095a2965df668a549.png

使用LangChain创建简易聊天机器人 这篇文章中介绍了 LangChain 的简单使用,其中重点介绍了 LangChain 中 Models和Prompts 这 2 个模块的功能。

这篇文章来看下 LangChain 中的 Memory 模块的作用。

39973a4da522100311835a4d90024917.gif

没有 Memory 的日子

Kimi LLM 大模型

上篇文章使用的是本地的大模型 Mistral,这篇文章换一种收费的模型试一下。目前国内最火的大模型当属 Kimi了, 它使用的大模型是 Moonshot。直接去官网注册即送 15 元的免费额度。然后在 API Key 管理界面创建 API Key 即可,如下图:

143eb91ce2e15224057407e31e5935f3.png

LangChain 集成 Moonshot

LangChain 集成 Moonshot 很方便,直接使用 Moonshot() 方法就能创建模型实例。如下:

  1. # 创建 Moonshot 模型实例
  2. llm = Moonshot()

创建好模型实例之后,就可以直接调用 invoke 方法,并打印结果。如下:

  1. answer = llm.invoke("用户输入的问题")
  2. print(answer, '\n')

简单修改一下,持续接收用户输入,并打印结果。代码如下 :

  1. # langchain-memory.py
  2. from langchain_community.llms.moonshot import Moonshot
  3. # Generate your api key from: https://platform.moonshot.cn/console/api-keys
  4. os.environ["MOONSHOT_API_KEY"] = "这里输入你的Moonshot API Key"
  5. # 创建 Moonshot 模型实例
  6. llm = Moonshot()
  7. while True:
  8.     # 由用户输入 question
  9.     question = input("> ")
  10.     answer = llm.invoke(question)
  11.     print(answer, '\n')

执行上述代码,并询问 "介绍下NBA太阳队",结果如下:

a61701573069a48da85b6f7edf59cce7.png

接下来再继续提问 "它的头号球星是谁",结果如下:

052521fcf83a168eecb6bc8f75a48e03.png

正如红框中内容所示,此时 Moonshot 大模型是不知道 "它" 代表的是什么的,也就是说大模型默认是没有上下文功能的。而 LangChain 的 Memory 就可以帮助实现上下文记忆功能。

56d057a37a6d282342a9011726acc318.gif

Memory 实现上下文记忆

要在 LangChain 中实现 Memory 记忆功能,主要使用ConversationBufferMemory和ConversationChain。

ConversationBufferMemory

ConversationBufferMemory 用来保存连续对话中的上下文内容,具体使用如下:

  1. from langchain.chains import ConversationChain
  2. from langchain.memory import ConversationBufferMemory
  3. # 创建一个Memory对象
  4. memory = ConversationBufferMemory()
  5. memory.save_context({"input":"HI"}, {"output":"what's up"})
  6. memory.save_context({"input":"My name is Danny"}, {"output":"Nice to meet you Danny."})
  7. print(memory.buffer)

上述代码中,创建 ConversationBufferMemory 后,并通过 save_context 方法预先设置了上下文信息。可以通过 memory.buffer 将当前 ConversationBufferMemory 中的 buffer 打印出来。结果如下:

cf1e71242947e29ab648a86aad710156.png

可以看到,上下文内容都已经保存在 memory.buffer中。有了 memory 之后就可以创建 ConversationChain了。如下:

  1. from langchain.chains import ConversationChain
  2. # 创建 ConversationChain,并指定 memory
  3. conversation = ConversationChain(
  4.     llm=kimi_llm,
  5.     memory=memory,
  6.     verbose=False
  7. )

ConversationChain

创建好 ConversationChain 之后,可以调用 predict 方法查询当前对话结果。根据之前调用 save_context 的内容,我们可以尝试查询 "what is my name ?"  并打印结果:

  1. answer = conversation.predict(input="what is my name?")
  2. print(answer, '\n')

最终打印结果如下:

8ef49cb94157cb318955de59aa70e7e3.png

可以看到,根据我们之前预设到 memory 中的内容,大模型 kimi_llm 已经可以给出正确的答案。

Kimi 添加 Memory 记忆

最后完善上文Kimi大模型的连续对话功能,完整代码如下:

  1. # langchain-moonshot-chat.py
  2. from langchain_community.llms.moonshot import Moonshot
  3. from langchain.chains import ConversationChain
  4. from langchain.memory import ConversationBufferMemory
  5. import os
  6. # Generate your api key from: https://platform.moonshot.cn/console/api-keys
  7. os.environ["MOONSHOT_API_KEY"] = "这里输入你的Moonshot API Key"
  8. # 创建 Moonshot 模型实例
  9. kimi_llm = Moonshot()
  10. # 创建一个Memory对象
  11. memory = ConversationBufferMemory()
  12. memory.save_context({"input":"HI"}, {"output":"what's up"})
  13. memory.save_context({"input":"My name is Danny"}, {"output":"Nice to meet you Danny."})
  14. print(memory.buffer)
  15. conversation = ConversationChain(
  16.     llm=kimi_llm,
  17.     memory=memory,
  18.     verbose=False
  19. )
  20. answer = conversation.predict(input="what is my name?")
  21. print(answer, '\n')
  22. while True:
  23.     # 由用户输入 question
  24.     question = input("> ")
  25.     answer = conversation.invoke(question)
  26.     print(answer, '\n')
  27. 最终运行结果如下:可以看出,这时候 kimi 大模型已经能够理解此时的 "它" 代表的就是上次提问的 "太阳队"
  28. 如果你喜欢本文
  29. 长按二维码关注
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/688461
推荐阅读
相关标签
  

闽ICP备14008679号