AI 大模型之美
徐文浩
bothub 创始人
32335 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 33 讲
AI 大模型之美
15
15
1.0x
00:00/00:00
登录|注册

16|Langchain里的“记忆力”,让AI只记住有用的事儿

保留最后几轮对话
Token数量统计
上下文保持能力测试
探索不同场景下的应用
商品导购
查询订单物流信息
记住订单号和用户信息
结合滑动窗口和小结记忆
对话内容的中文小结
对话内容的英文小结
对话过程中的滑动窗口记忆
定义输入指示
封装好的链式对话
适用于电商客服等场景
保留核心信息
提取命名实体
记住精确内容和长对话小结
结合BufferMemory和SummaryMemory
总结对话内容
小结历史记忆
保留最近几轮对话
滑动窗口记忆
Conversation类
记住聊天上下文
实现Python代码
调用外部接口
调用OpenAI API
链式调用命令
Langchain AI Handbook
尝试使用EntityMemory
电商客服
ConversationSummaryBufferMemory
ConversationSummaryMemory
ConversationBufferWindowMemory
PromptTemplate
ConversationChain
EntityMemory
ConversationSummaryBufferMemory
SummaryMemory
BufferWindowMemory
Memory
LLMChain
推荐阅读
思考题
应用场景
实现细节
实用记忆
记忆类型
核心功能
Langchain中的“记忆力”

该思维导图由 AI 生成,仅供参考

你好,我是徐文浩。
在过去的两讲里,我们深入了解了 Langchain 的第一个核心功能,也就是 LLMChain。 LLMChain 能够帮助我们链式地调用一系列命令,这里面既包含直接调用 OpenAI 的 API,也包括调用其他外部接口,或者自己实现的 Python 代码。但是这一连串的调用,还只是完成一个小任务。我们很多时候还是希望用一个互动聊天的过程,来完成整个任务。
所以 LangChain 并不是只有链式调用这样一个核心功能,它还封装了很多其他能力,来方便我们开发 AI 应用。比如,让 AI 能够拥有“记忆力”,也就是记住我们聊天上下文的能力。不知道你还记不记得,我们在第 6 讲里做的聊天机器人。在那个里面,为了能够让 ChatGPT 知道整个聊天的上下文,我们需要把历史的对话记录都传给它。但是,因为能够接收的 Token 数量有上限,所以我们只能设定一个参数,只保留最后几轮对话。我们最后把这个功能,抽象成了一个 Conversation 类。
import openai
import os
openai.api_key = os.environ.get("OPENAI_API_KEY")
class Conversation:
def __init__(self, prompt, num_of_round):
self.prompt = prompt
self.num_of_round = num_of_round
self.messages = []
self.messages.append({"role": "system", "content": self.prompt})
def ask(self, question):
try:
self.messages.append({"role": "user", "content": question})
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=self.messages,
temperature=0.5,
max_tokens=2048,
top_p=1,
)
except Exception as e:
print(e)
return e
message = response["choices"][0]["message"]["content"]
self.messages.append({"role": "assistant", "content": message})
if len(self.messages) > self.num_of_round*2 + 1:
del self.messages[1:3] //Remove the first round conversation left.
return message
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Langchain的“记忆力”功能为AI带来了新的对话处理方法,通过内置的BufferWindow记忆功能,AI能够记住最近的对话上下文,保持对话的连贯性。Langchain还提供了ConversationSummaryMemory和ConversationSummaryBufferMemory,使得AI能够在多轮对话中保持上下文的连贯性,并且结合了BufferMemory和SummaryMemory的优点,能够更精确地记录最近几轮对话的内容。此外,Langchain还提供了ConversationEntityMemory,能够自动帮助提取关键信息,如订单号、邮箱地址等,为开发者提供了更多的灵活性和便利。这些功能使得AI在处理对话时更加智能和贴近真实对话的连贯性,为开发者提供了更多的灵活性和便利。Langchain的技术特点在于提供了多种记忆功能,使得AI在处理对话时能够更加智能和贴近真实对话的连贯性,为开发者提供了更多的灵活性和便利。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《AI 大模型之美》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • 张弛
    老师讲的太好了,通过对AI的能力探索,感觉有了跟自己业务结合的空间,但是如果需要身边的朋友使用的话,还是需要封装成网页或者app,而之前例子里面的HuggingFace国内访问还是挺慢的,能否介绍一下如果就是想把实战提高篇里的chatbot做一些定制化,封装为网页给别人在国内使用,推荐使用什么方式部署(例如腾讯云硅谷?),谢谢。

    作者回复: 目前大家综合考虑延时,基本上都是 Azure 或者 腾讯云北美节点

    2023-04-15归属地:中国台湾
    2
  • Geek_429477
    每天第一个追更. 请问一下大佬: 比如一个客服机器人,卖很多种类的商品,按照大佬之前的文章思路,QA问题集如下 Q:你们卖哪些产品 A:图书,玩具,衣服.......(很多字) 一个用户问,你们卖电子产品吗? 如果先搜索再提示,answer的字数太多,造成token不够,该怎么解决

    作者回复: 不是左右问题都应该灌到FAQ里呀 看一下17讲里,通过拿到Action Input是“电子产品”,问题是“询问商品类别”,通过一个Tools来解决这种,输入可能性很多的情况可能更合适。

    2023-04-13归属地:北京
    2
    2
  • Oli张帆
    Langchain确实是非常有用的利器,虽然我目前的项目使用NodeJS,但是里面的很多思路非常值得借鉴。

    作者回复: Langchain现在也有JS版本啦,可以去看一下

    2023-04-13归属地:北京
    2
  • Jelly
    请问老师,每个用户单独的内存会话怎么做?需要用其他数据库存储起来?

    作者回复: 通过用户id或者session id维护一个map类型的数据结构好了。也可以用 https://python.langchain.com/en/latest/modules/memory/examples/redis_chat_message_history.html 通过redis存储起来

    2023-04-23归属地:广东
    2
  • Geek_053159
    老师 在chatgpt 界面使用它时 是不是也用到了memory呢 每次我们的问话都会全部发送给它 当超过token数量时 chatGPT会自动总结之前的会话内容吗 还是需要我们提示它来总结 然后再把总结和新的问话结合起来发给它

    作者回复: 本质上也是memory,就是把历史对话记录也用上了。 具体OpenAI是怎么做的我们不知道,因为这个状态它是在服务端维护的。

    2023-04-21归属地:四川
  • Toni
    使用 LangChain 中的 KnowledgeGraphMemory,检测其处理对话信息的能力。 from langchain.memory import ConversationKGMemory # 知识图谱记忆 llm = OpenAI(temperature=0) memory=ConversationKGMemory(llm=llm) template = """The following is a conversation between a human and an AI. The AI provides lots of specific details from its context. AI uses all the information contained in "Related Information", "Current Conversation" and "Context" If the AI does not know the answer to a question, it truthfully says it does not know,and does not hallucinate. answer in 20 word. 对话如下 第一轮 Q1 (喂给了AI 这些信息,牵扯到几个方向,试AI 如何提取并处理这些信息) input="I am James and I'm helping Will. He's an engineer working in IBM's electronics department. He encountered a problem in the 'Knowledge Graph Memory' project" A1 > Finished chain. " Hi James, I understand that Will is having difficulty with the 'Knowledge Graph Memory' project. I'm not familiar with this project, but I can help you find the resources you need to solve the problem." (回答中AI 分出了James 和 Will,其它的大差不差。) 第二轮对话 Q2 input="What do you know about Will?" A2 > Finished chain. " Will is an engineer working in IBM's electronics department. He is currently working on a Knowledge Graph Memory project and has encountered a problem." (AI 充分利用了在第一轮对话中得到的有关Will 的信息。) 第三轮对话 A3 input="What do you know about me?" Q3 > Finished chain. " I know that you are talking to me right now and that you asked me a question about Will. I also know that Will is an engineer working in IBM's electronics department and is working on the Knowledge Graph Memory project." (AI 没有捕捉到 me, I, James 之间的关系,尽管它用了Hi James, ) 第四轮对话 A4 (继续追问上轮中出现的漏洞) input="What is my name?" Q4 > Finished chain. "Your name is John Smith." (AI 彻底错了) 结果有点意外,是算法有错还是参数设置有待改进? 共指消解(coreference/entity resolution)在知识图谱记忆中是最基本的方法,整合同一实体的不同称谓。

    作者回复: 因为用了KG Memory之后,历史对话的信息没有作为Prompt的一部分给到ChatGPT 这个时候,你需要一个既组合了history消息,又有KGMemory的组合Memory

    2023-04-13归属地:瑞士
  • Evan
    from langchain.memory import ConversationSummaryMemory. 引入这个的时候报错

    作者回复: 具体报什么错呀?

    2023-04-13归属地:上海
    2
  • hyetry
    老师,有文本摘要对应的替换推荐模型吗?

    作者回复: 去Huggingface上找 https://huggingface.co/models?pipeline_tag=summarization&sort=downloads 按照需求筛选标签

    2023-04-13归属地:广东
  • 君为
    老师你好,客服处理用户的问题很多都是一系列任务,有时还需要客服主动给用户发消息。比如用户要退货,需要提供手机号,订单号等信息,用户找不到订单号在哪需要一步步指导用户然后再做一些列操作。 请问老师识别用户意图,提取关键信息后,如何让ChatGPT进入设定的工作流,最终处理好用户的问题?

    作者回复: 可以看看下一讲,里面就有了一个简单的你需要的这些需求的示例了。

    2023-04-13归属地:北京
  • Penguin Shi
    原文:Langchain 里面还提供了一个 KnowledgeGraphMemory,你能不能去试着用一下,看看它能在什么样的场景下帮你解决问题? 更新:Conversation Knowledge Graph Memory,https://python.langchain.com/docs/modules/memory/types/kg
    2023-08-12归属地:广东
    1
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部