自然語言處理從入門到應用——LangChain:記憶(Memory)-[聊天消息記錄]

分類目錄:《自然語言處理從入門到應用》總目錄


Cassandra聊天消息記錄

Cassandra是一種分布式數據庫,非常適合存儲大量數據,是存儲聊天消息歷史的良好選擇,因為它易于擴展,能夠處理大量寫入操作。

# List of contact points to try connecting to Cassandra cluster.
contact_points = ["cassandra"]from langchain.memory import CassandraChatMessageHistorymessage_history = CassandraChatMessageHistory(contact_points=contact_points, session_id="test-session"
)message_history.add_user_message("hi!")message_history.add_ai_message("whats up?")
message_history.messages
[HumanMessage(content='hi!', additional_kwargs={}, example=False),
AIMessage(content='whats up?', additional_kwargs={}, example=False)]

DynamoDB聊天消息記錄

首先確保我們已經正確配置了AWS CLI,并再確保我們已經安裝了boto3。接下來,創建我們將存儲消息 DynamoDB表:

import boto3# Get the service resource.
dynamodb = boto3.resource('dynamodb')# Create the DynamoDB table.
table = dynamodb.create_table(TableName='SessionTable',KeySchema=[{'AttributeName': 'SessionId','KeyType': 'HASH'}],AttributeDefinitions=[{'AttributeName': 'SessionId','AttributeType': 'S'}],BillingMode='PAY_PER_REQUEST',
)# Wait until the table exists.
table.meta.client.get_waiter('table_exists').wait(TableName='SessionTable')# Print out some data about the table.
print(table.item_count)

輸出:

0
DynamoDBChatMessageHistory
from langchain.memory.chat_message_histories import DynamoDBChatMessageHistoryhistory = DynamoDBChatMessageHistory(table_name="SessionTable", session_id="0")
history.add_user_message("hi!")
history.add_ai_message("whats up?")
history.messages

輸出:

[HumanMessage(content='hi!', additional_kwargs={}, example=False),
AIMessage(content='whats up?', additional_kwargs={}, example=False)]
使用自定義端點URL的DynamoDBChatMessageHistory

有時候在連接到AWS端點時指定URL非常有用,比如在本地使用Localstack進行開發。對于這種情況,我們可以通過構造函數中的endpoint_url參數來指定URL。

from langchain.memory.chat_message_histories import DynamoDBChatMessageHistoryhistory = DynamoDBChatMessageHistory(table_name="SessionTable", session_id="0", endpoint_url="http://localhost.localstack.cloud:4566")
Agent with DynamoDB Memory
from langchain.agents import Tool
from langchain.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.utilities import PythonREPL
from getpass import getpassmessage_history = DynamoDBChatMessageHistory(table_name="SessionTable", session_id="1")
memory = ConversationBufferMemory(memory_key="chat_history", chat_memory=message_history, return_messages=True)
python_repl = PythonREPL()# You can create the tool to pass to an agent
tools = [Tool(name="python_repl",description="A Python shell. Use this to execute python commands. Input should be a valid python command. If you want to see the output of a value, you should print it out with `print(...)`.",func=python_repl.run
)]
llm=ChatOpenAI(temperature=0)
agent_chain = initialize_agent(tools, llm, agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, verbose=True, memory=memory)
agent_chain.run(input="Hello!")

日志輸出:

> Entering new AgentExecutor chain...
{"action": "Final Answer","action_input": "Hello! How can I assist you today?"
}> Finished chain.

輸出:

'Hello! How can I assist you today?'

輸入:

agent_chain.run(input="Who owns Twitter?")

日志輸出:

> Entering new AgentExecutor chain...
{"action": "python_repl","action_input": "import requests\nfrom bs4 import BeautifulSoup\n\nurl = 'https://en.wikipedia.org/wiki/Twitter'\nresponse = requests.get(url)\nsoup = BeautifulSoup(response.content, 'html.parser')\nowner = soup.find('th', text='Owner').find_next_sibling('td').text.strip()\nprint(owner)"
}
Observation: X Corp. (2023–present)Twitter, Inc. (2006–2023)Thought:{"action": "Final Answer","action_input": "X Corp. (2023–present)Twitter, Inc. (2006–2023)"
}> Finished chain.

輸出:

'X Corp. (2023–present)Twitter, Inc. (2006–2023)'

輸入:

agent_chain.run(input="My name is Bob.")

日志輸出:

> Entering new AgentExecutor chain...
{"action": "Final Answer","action_input": "Hello Bob! How can I assist you today?"
}> Finished chain.

輸出:

  'Hello Bob! How can I assist you today?'

輸入:

agent_chain.run(input="Who am I?")

日志輸出:

> Entering new AgentExecutor chain...
{"action": "Final Answer","action_input": "Your name is Bob."
}> Finished chain.

輸出:

'Your name is Bob.'

Momento聊天消息記錄

本節介紹如何使用Momento Cache來存儲聊天消息記錄,我們會使用MomentoChatMessageHistory類。需要注意的是,默認情況下,如果不存在具有給定名稱的緩存,我們將創建一個新的緩存。我們需要獲得一個Momento授權令牌才能使用這個類。這可以直接通過將其傳遞給momento.CacheClient實例化,作為MomentoChatMessageHistory.from_client_params的命名參數auth_token,或者可以將其設置為環境變量MOMENTO_AUTH_TOKEN

from datetime import timedelta
from langchain.memory import MomentoChatMessageHistorysession_id = "foo"
cache_name = "langchain"
ttl = timedelta(days=1)
history = MomentoChatMessageHistory.from_client_params(session_id, cache_name,ttl,
)history.add_user_message("hi!")history.add_ai_message("whats up?")
history.messages

輸出:

[HumanMessage(content='hi!', additional_kwargs={}, example=False),
AIMessage(content='whats up?', additional_kwargs={}, example=False)]

MongoDB聊天消息記錄

本節介紹如何使用MongoDB存儲聊天消息記錄。MongoDB是一個開放源代碼的跨平臺文檔導向數據庫程序。它被歸類為NoSQL數據庫程序,使用類似JSON的文檔,并且支持可選的模式。MongoDB由MongoDB Inc.開發,并在服務器端公共許可證(SSPL)下許可。

# Provide the connection string to connect to the MongoDB database
connection_string = "mongodb://mongo_user:password123@mongo:27017"
from langchain.memory import MongoDBChatMessageHistorymessage_history = MongoDBChatMessageHistory(connection_string=connection_string, session_id="test-session")message_history.add_user_message("hi!")message_history.add_ai_message("whats up?")
message_history.messages

輸出:

[HumanMessage(content='hi!', additional_kwargs={}, example=False),
AIMessage(content='whats up?', additional_kwargs={}, example=False)]

Postgres聊天消息歷史記錄

本節介紹了如何使用 Postgres 來存儲聊天消息歷史記錄。

from langchain.memory import PostgresChatMessageHistoryhistory = PostgresChatMessageHistory(connection_string="postgresql://postgres:mypassword@localhost/chat_history", session_id="foo")history.add_user_message("hi!")history.add_ai_message("whats up?")
history.messages

Redis聊天消息歷史記錄

本節介紹了如何使用Redis來存儲聊天消息歷史記錄。

from langchain.memory import RedisChatMessageHistoryhistory = RedisChatMessageHistory("foo")history.add_user_message("hi!")
history.add_ai_message("whats up?")
history.messages

輸出:

[AIMessage(content='whats up?', additional_kwargs={}),
HumanMessage(content='hi!', additional_kwargs={})]

參考文獻:
[1] LangChain官方網站:https://www.langchain.com/
[2] LangChain 🦜?🔗 中文網,跟著LangChain一起學LLM/GPT開發:https://www.langchain.com.cn/
[3] LangChain中文網 - LangChain 是一個用于開發由語言模型驅動的應用程序的框架:http://www.cnlangchain.com/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39078.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39078.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39078.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android 學習筆記:SharedPreferences實現數據的保存和讀取

一、概述 1.鍵值對方式存儲 SharedPreferences 是使用鍵值對的方式來存儲數據的。也就是說,當保存一條數據的時候,需要給這條數據提供一個對應的鍵,這樣在讀取數據的時候就可以通過這個鍵把相應的值取出來。 2.支持多種不同的數據類型存儲…

使用Vue和jsmind如何實現思維導圖的歷史版本控制和撤銷/重做功能?

思維導圖是一種流行的知識圖譜工具,可以幫助我們更好地組織和理解復雜的思維關系。在開發基于Vue的思維導圖應用時,實現歷史版本控制和撤銷/重做功能是非常有用的。以下為您介紹如何使用Vue和jsmind插件來實現這些功能。 安裝依賴 首先,我們…

day-17 代碼隨想錄算法訓練營(19)二叉樹 part04

110.平衡二叉樹 分析:判斷每個節點的左右子樹的高度差小于等于1;所以首先需要求左右子樹高度,再在父節點進行判斷,故此采用后序遍歷。 思路:后序遍歷二叉樹,從底部遞歸回來時加上高度 class Solution { …

【管理運籌學】第 5 章 | 整數規劃 (1,問題提出與分支定界法)

文章目錄 引言一、整數規劃問題的提出1.1 整數規劃的數學模型1.2 整數規劃問題的求解 二、分支定界法2.1 分支與定界2.2 基本求解步驟(一)初始化(二)分支與分支樹(三)定界與剪枝(四)…

SpringBoot之HandlerInterceptor攔截器的使用

😀前言 本篇博文是關于攔截器-HandlerInterceptor的使用,希望你能夠喜歡 🏠個人主頁:晨犀主頁 🧑個人簡介:大家好,我是晨犀,希望我的文章可以幫助到大家,您的滿意是我的動…

SQL 復習 03

函數與關鍵字 用法說明round(x, n)四舍五入,x為浮點數,n為保留的位數ceil(x)向上取整floor(x)向下取整truncate(x, n)截斷x,n為保留的位,該位之后的數值置零,位數表示示例:321.123,其中小數點前…

Linux 多進程

目錄 0x01 linux中特殊的進程 0x02 進程的標識 0x03 創建子進程 0x01 linux中特殊的進程 0號進程:idle進程,系統啟動加載的進程1號進程:systemd進程,系統初始化,是所有進程的祖先進程 init2號進程:kthre…

YOLOv5白皮書-第Y6周:模型改進

📌本周任務:模型改進📌 注:對yolov5l.yaml文件中的backbone模塊和head模塊進行改進。 任務結構圖: YOLOv5s網絡結構圖: 原始模型代碼: # YOLOv5 v6.0 backbone backbone:# [from, number, module, args]…

每日匯評:黃金在 200 日移動平均線附近似乎很脆弱,關注美國零售銷售

1、金價預計將鞏固其近期跌勢,至 6 月初以來的最低水平; 2、對美聯儲再次加息的押注繼續限制了貴金屬的上漲; 3、金融市場現在期待美國零售銷售報告帶來一些有意義的推動; 周二金價難以獲得任何有意義的牽引力,并在…

Mac RN環境搭建

IOS RN ios android原生環境搭建有時候是真惡心,電腦環境不一樣配置也有差異。 我已經安裝官網的文檔配置了ios環境 執行 npx react-nativelatest init AwesomeProject 報錯 然后自己百度查呀執行 gem update --system 說是沒有權限,執行失敗。因…

POSTGRESQL 關于安裝中自動啟動的問題 詳解

開頭還是介紹一下群,如果感興趣Polardb ,mongodb ,MySQL ,Postgresql ,redis ,SQL SERVER ,ORACLE,Oceanbase 等有問題,有需求都可以加群群內有各大數據庫行業大咖,CTO,可以解決你的問題。加群請加 liuaustin3微信號 &…

OpenSSH 遠程升級到 9.4p1

OpenSSH 遠程升級到 9.4p1 文章目錄 OpenSSH 遠程升級到 9.4p1背景升級前提1. 升級 OpenSSL2. 安裝并啟用Telnet 升級OpenSSH 背景 最近的護網行動,被查出來了好幾個關于OpenSSH 的漏洞。這是因為服務器系統安裝后,直接使用了系統自帶版本的OpenSSH &am…

2023-08-15 linux mipi 屏幕調試:有一個屏幕開機時候不顯示,開機后按power 按鍵休眠喚醒就可以顯示。原因是reset gpio 被復用

一、現象:今天更新了一個新版本的buildroot linux sdk ,調試兩個mipi 屏幕,這兩個屏幕之前在其他的sdk都調好了的,所有直接把配置搬過來。但是有一個屏幕可以正常顯示,有一個屏幕開機時候不顯示,開機后按po…

CentOS防火墻操作:開啟端口、開啟、關閉、配置

一、基本使用 啟動: systemctl start firewalld 關閉: systemctl stop firewalld 查看狀態: systemctl status firewalld 開機禁用 : systemctl disable firewalld 開機啟用 : systemctl enable firewalld systemctl是…

angular注入方法providers

在Angular中有很多方式可以將服務類注冊到注入器中: Injectable 元數據中的providedIn屬性 NgModule 元數據中的 providers屬性 Component 元數據中的 providers屬性 創建一個文件名叫名 hero.service.ts叫 hero 的服務 hero.service.ts import { Injectable } from angular…

C語言,結構體,結構體大小,

1、結構體: 用于存儲不同數據類型的多個相關變量,從而形成一個具有獨立性的組合數據類型。 結構體的聲明: struct 結構體類型名{ 數據類型 成員1; 數據類型 成員2; 數據類型 成員3; ……… }&#xff1…

轉行軟件測試四個月學習,第一次面試經過分享

我是去年上半年從銷售行業轉行到測試的,從銷售公司辭職之后選擇去培訓班培訓軟件測試,經歷了四個月左右的培訓,在培訓班結課前兩周就開始投簡歷了,在結課的時候順利拿到了offer。在新的公司從事軟件測試工作已經將近半年有余&…

深信服數據中心管理系統 XXE漏洞復現

0x01 產品簡介 深信服數據中心管理系統DC為AC的外置數據中心,主要用于海量日志數據的異地擴展備份管理,多條件組合的高效查詢,統計和趨勢報表生成,設備運行狀態監控等功能。 0x02 漏洞概述 深信服數據中心管理系統DC存在XML外部實…

WPS-0DAY-20230809的分析和利用復現

WPS-0DAY-20230809的分析和初步復現 一、漏洞學習1、本地復現環境過程 2、代碼解析1.htmlexp.py 3、通過修改shellcode拿shell曲折的學習msf生成sc 二、疑點1、問題2、我的測試測試方法測試結果 一、漏洞學習 強調:以下內容僅供學習和測試,一切行為均在…

Keil開發STM32單片機項目的三種方式

STM32單片機相比51單片機,內部結構復雜很多,因此直接對底層寄存器編碼,相對復雜,這個需要我們了解芯片手冊,對于復雜項目,這些操作可能需要反復編寫,因此出現了標準庫的方式,對寄存器…