langchain学习笔记(十一)

news2024/9/28 23:25:37

关于langchain中的memory,即对话历史(message history)

1、

Add message history (memory) | 🦜️🔗 Langchain

RunnableWithMessageHistory,可用于任何的chain中添加对话历史,将以下之一作为输入

(1)一个BaseMessage序列

(2)一个dict,其中一个键的值是一个BaseMessage序列

(3)一个dict,其中一个键的值存储最后一次对话信息,另外一个键的值存储之前的历史对话信息

输出以下之一

(1)一个可以作为AIMessage的content的字符串

(2)一个BaseMessage序列

(3)一个dict,其中一个键的值是一个BaseMessage序列

首先需要一个返回BaseChatMessageHistory实例的可调用函数,这里我们将历史对话存储在内存中,同时langchain也支持将历史对话存储在redis中(RedisChatMessageHistory)更持久的存储,

from langchain_community.chat_message_histories import ChatMessageHistory
def get_session_history(session_id):#一轮对话的内容只存储在一个key/session_id
    if session_id not in store:
        store[session_id] = ChatMessageHistory()
    return store[session_id]

(1)输入是一个BaseMessage序列的示例

from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_core.messages import HumanMessage
with_message_history=RunnableWithMessageHistory(
    ChatOpenAI(),
    get_session_history,
)
print(with_message_history.invoke(input=HumanMessage("介绍下王阳明")
                                  ,config={'configurable':{'session_id':'id123'}}))

(2)输入是一个dict,其中一个键的值是一个BaseMessage序列的示例

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_openai.chat_models import ChatOpenAI
from langchain_core.messages import HumanMessage
from langchain_core.runnables.history import RunnableWithMessageHistory
model = ChatOpenAI()
prompt = ChatPromptTemplate.from_messages(
    [
        (
            "system",
            "你是一个助手,擅长能力{ability}。用20个字以内回答",
        ),
        MessagesPlaceholder(variable_name="history"),
        ("human", "{input}"),
    ]
)
runnable = prompt | model
with_message_history = RunnableWithMessageHistory(
    runnable,
    get_session_history,
    input_messages_key="input",
    history_messages_key="history",
)
i1=with_message_history.invoke(
    {"ability": "数学", "input": HumanMessage("什么是余弦定理")},
    config={"configurable": {"session_id": "abc123"}},#历史信息存入session_id
)
print(i1)
i2=with_message_history.invoke(
    {"ability": "math", "input": HumanMessage("重新回答一次")},
    config={"configurable": {"session_id": "abc123"}},#历史信息存入session_id
)
print(i2)#记忆到了
print(store)

(3)前面的是dict输入message输出,下面是其他的方案

输入message,输出dict

from langchain_core.runnables import RunnableParallel
chain = RunnableParallel({"output_message": ChatOpenAI()})
with_message_history = RunnableWithMessageHistory(
    chain,
    get_session_history,
    output_messages_key="output_message",
)

i1=with_message_history.invoke(
    [HumanMessage(content="白雪公主是哪里的人物")],
    config={"configurable": {"session_id": "baz"}},
)
print(i1)

输入message,输出message:简易实现对话系统

from operator import itemgetter
with_message_history =RunnableWithMessageHistory(
    itemgetter("input_messages") | ChatOpenAI(),
    get_session_history,
    input_messages_key="input_messages",
)
while True:
    # print(store)
    query=input('user:')
    answer=with_message_history.invoke(
            input={'input_messages':query},
            config={'configurable':{'session_id':'id123'}})
    print(answer)

待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1491764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IntelliJ IDEA插件php golang python shell docker ignore UML plantuml等插件安装

IntelliJ IDEA插件php golang python shell docker ignore UML plantuml等插件安装 有的插件,需要代理才能搜索和下载 设置代理 不然插件搜索不到,也可能下载不了 Preferences -->Plugins --> Browse repositorise… --〉HTTP Proxy Settings… 选择 Manual…

FreeRTOS操作系统学习——内存管理

C库函数与FreeRTOS内存管理区别 在C语言的库函数中,有mallc、free等函数可以申请以及释放内存空间,那么这为什么不适用于FreeRTOS的内存管理呢? 不适合用在资源紧缺的嵌入式系统中这些函数的实现过于复杂、占据的代码空间太大并非线程安全的…

软考59-上午题-【数据库】-小结+杂题

一、杂题 真题1: 真题2: 真题3: 真题4: 真题5: 真题6: 真题7: 真题8: 二、数据库总结 考试题型: 1、选择题(6题,6分) 2、综合分析题…

LeetCode 热题 100 (尽量ACM模式刷) 持续更新!!!

LeetCode 热题 100 哈希hash 1 两数之和 /** 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。* 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案…

Claude3登顶榜首,上亚马逊云科技快人一步体验!

AI大模型春秋争霸已经进入了新的赛季,2024年3月4日,在一夜之间,Anthropic Claude 3提前"阻击"GPT-5 **Claude 3 在数学问题、编程练习和科学推理等标准化评估方面超越了现有模型。**客户可以使用人工智能驱动的响应,以自…

ZYNQ--关于一些SDK调试问题记录

Debug configuaration中没有debug applicaton 问题如下图: 解决方法: 在Target Setup中的Debug Type中选择如下即可 注意选完之后application中必须勾选运行内核,否则不运行main文件。

可以设置提醒的电脑桌面便签备忘录软件哪个好用?

对于我们职场人来说,每天的时间都很紧张且有价值,如何有效地利用它们,让时间不被浪费流逝掉,成为越来越多的人在思考的一个问题。为了有效管理时间以及各项待办事务,一些人会使用可以设置提醒的电脑桌面便签备忘录软件…

docker-compose一键离线部署系统流程

【金山文档】 未命名文件(34)https://kdocs.cn/l/cjmzJrQMhdCS

Ubuntu下安装Scala

前言 弄了一下终于成功装上了,这里对此进行一下总结 安装虚拟机 VMware虚拟机安装Ubuntu(超详细图文教程)_vmware安装ubuntu-CSDN博客https://blog.csdn.net/qq_43374681/article/details/129248167Download Ubuntu Desktop | Download | …

【Leetcode每日一题】 前缀和 - 寻找数组的中心下标(难度⭐)(28)

1. 题目解析 题目链接:724. 寻找数组的中心下标 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 核心在于计算题目所给数组是否存在某一个元素左边的和等于右边的和,存在返回那个元素下标即可,不…

springboot,druid动态数据源切换

关键字:springboot,druid数据库连接池,两个数据源(可以切换成多个),事务管理 关于druid简介传送门:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98 具体分为四…

Linux进程详细介绍

文章目录 Linux进程1、计算机体系结构和操作系统管理1.1、计算机体系结构 -- 硬件1.2、操作系统(Operator System) -- 软件 2、进程2.1、进程基本概念2.2、进程标识符2.2.1、获取当前进程标识符和当前进程的父进程标识符2.2.2、通过系统调用创建进程 -- …

FIFO漫谈

文章目录 目录 概要 整体架构流程 技术名词解释 技术细节 为什么需要FIFO? 小结 概要 FIFO,全称为First-In, First-Out,意为先进先出。它就像是一个排队买东西的队伍,第一个进入队伍的人会第一个离开队伍。在芯片中,F…

概要了解postman、jmeter 、loadRunner

postman还蛮好理解的,后续复习的话着重学习关联接口测试即可,感觉只要用几次就会记住: 1 从接口的响应结果当中提取需要的数据 2 设置成环境变量/全局变量(json value check 、set environment para 3写入到下一个接口的请求数据中…

GIS软件应用(一)

任务: 1.加载南京市边界数据、查看投影坐标系并完成投影转换 2.加载科教文卫POI数据、查看投影坐标系并完成投影转换 3.出图要求添加完整出图要素 步骤: 选中shp文件,加载南京市边界数据 在ArcToolbox工具箱中选中Projections and Transf…

idea内置的database和chat2DB如何?

捉妖啦 最近由于某些众所周知的因素,要求卸载navicat,所以寻找替代品是当下任务。如果知识MySQL数据库的话,那替代品可太多了,由于使用的是MongoDB,所以至今没有找到一个称手的工具。 需要一款像Navicat一样,可以直…

MySQL性能优化-范式设计和反范式设计

范式化设计 范式化设计背景 范式是数据表设计的基本原则,又很容易被忽略。很多时候,当数据库运行了一段时间之后,我们才发现数据表设计得有问题。重新调整数据表的结构,就需要做数据迁移,还有可能影响程序的业务逻辑…

【WPS】Excel查重数据对比

数据对比 数据对比标记重复数据查询过滤处理

C++基于多设计模式下的同步异步日志系统day1

C基于多设计模式下的同步&异步日志系统day1 📟作者主页:慢热的陕西人 🌴专栏链接:C基于多设计模式下的同步&异步日志系统 📣欢迎各位大佬👍点赞🔥关注🚓收藏,&am…

Windows安装tdm-gcc(详细图文)

目录 一、tdm-gcc的下载地址 二、安装tdm-gcc 1.双击下载的tdm-gcc 2.点击create 下载 3.下载完成之后,点击第二个,再点击next。 4.更换安装目录 5. 全部勾选,点击install 三、配置系统环境变量 四、验证TDM-GCC 一、tdm-gcc的下载地…