langchain_postgres.chat_message_histories
.PostgresChatMessageHistory¶
- class langchain_postgres.chat_message_histories.PostgresChatMessageHistory(table_name: str, session_id: str, , , sync_connection: Optional[Connection] = None, async_connection: Optional[AsyncConnection] = None)[source]¶
Postgres数据库中持久化聊天历史记录的客户端,
此客户端通过psycopg >=3支持同步和异步操作。
客户端可以创建数据库中的模式,并提供添加消息、获取消息和清除聊天历史记录的方法。
该模式具有以下列:
id: 一个序列主键。
session_id: 聊天历史记录的会话ID。
message: JSONB消息内容。
created_at: 消息创建的戳记。
根据给定的session_id检索消息,并按id排序(应单调递增),与消息添加到历史的顺序对应。
“created_at”列不通过接口返回,但已添加到模式中,以便信息在数据库中可用。
可以用session_id在不同的表中分隔同一表中的不同聊天历史,初始化客户端时应提供session_id。
此聊天历史客户端接受一个psycopg连接对象(可以是Connection或AsyncConnection),并使用它来与数据库交互。
这种设计允许在多个实例化此类时重用底层的连接对象,使得实例化快速。
此聊天历史客户端是为基于Postgres的涉及聊天的原型应用而设计的。
随着您的应用的成长,您可能需要扩展模式以处理更复杂的查询。例如,聊天应用可能涉及多个表,如用户表、存储聊天会话/对话的表以及存储给定会话聊天消息的表。该应用需要访问其他端点,如按用户ID删除消息、按用户ID列出对话或按最后一条消息时间进行排序等。
请随意根据您的应用需求修改此实现。
- 参数
session_id (str) – 用于聊天历史记录的会话ID
table_name (str) – 要使用的数据库表名称
sync_connection (Optional[psycopg.Connection]) – 现有的psycopg连接实例
async_connection (Optional[psycopg.AsyncConnection]) – 现有的psycopg异步连接实例
- 用法
使用create_tables或acreate_tables方法设置数据库中的表结构。
使用适当的session ID、表名和数据库连接初始化类。
使用add_messages或aadd_messages将消息添加到数据库。
使用get_messages或aget_messages检索消息。
在需要时使用clear或aclear清除会话历史。
注意
必须提供sync_connection或async_connection之一。
示例
import uuid from langchain_core.messages import SystemMessage, AIMessage, HumanMessage from langchain_postgres import PostgresChatMessageHistory import psycopg # Establish a synchronous connection to the database # (or use psycopg.AsyncConnection for async) sync_connection = psycopg2.connect(conn_info) # Create the table schema (only needs to be done once) table_name = "chat_history" PostgresChatMessageHistory.create_tables(sync_connection, table_name) session_id = str(uuid.uuid4()) # Initialize the chat history manager chat_history = PostgresChatMessageHistory( table_name, session_id, sync_connection=sync_connection ) # Add messages to the chat history chat_history.add_messages([ SystemMessage(content="Meow"), AIMessage(content="woof"), HumanMessage(content="bark"), ]) print(chat_history.messages)
属性
messages
抽象需要一个属性。
方法
__init__
(table_name, session_id, /, *[,...])Postgres数据库中持久化聊天历史记录的客户端,
aadd_messages
(messages)将消息添加到聊天消息历史记录。
aclear
()清除给定会话的聊天消息历史记录。
acreate_tables
(connection, table_name, /)在数据库中创建表结构并创建相关索引。
add_ai_message
(message)将AI消息字符串添加到存储中的便捷方法。
add_message
(message)将消息对象添加到存储中。
add_messages
(messages)将消息添加到聊天消息历史记录。
add_user_message
(message)将人类消息字符串添加到存储中的便捷方法。
adrop_table
(connection, table_name, /)从数据库中删除表结构。
从聊天消息历史记录中检索消息。
clear
()清除给定会话的聊天消息历史记录。
create_tables
(connection, table_name, /)在数据库中创建表结构并创建相关索引。
drop_table
(connection, table_name, /)从数据库中删除表结构。
从聊天消息历史记录中检索消息。
- __init__(table_name: str, session_id: str, /, *, sync_connection: Optional[Connection] = None, async_connection: Optional[AsyncConnection] = None) None [source]¶
Postgres数据库中持久化聊天历史记录的客户端,
此客户端通过psycopg >=3支持同步和异步操作。
客户端可以创建数据库中的模式,并提供添加消息、获取消息和清除聊天历史记录的方法。
该模式具有以下列:
id: 一个序列主键。
session_id: 聊天历史记录的会话ID。
message: JSONB消息内容。
created_at: 消息创建的戳记。
根据给定的session_id检索消息,并按id排序(应单调递增),与消息添加到历史的顺序对应。
“created_at”列不通过接口返回,但已添加到模式中,以便信息在数据库中可用。
可以用session_id在不同的表中分隔同一表中的不同聊天历史,初始化客户端时应提供session_id。
此聊天历史客户端接受一个psycopg连接对象(可以是Connection或AsyncConnection),并使用它来与数据库交互。
这种设计允许在多个实例化此类时重用底层的连接对象,使得实例化快速。
此聊天历史客户端是为基于Postgres的涉及聊天的原型应用而设计的。
随着您的应用的成长,您可能需要扩展模式以处理更复杂的查询。例如,聊天应用可能涉及多个表,如用户表、存储聊天会话/对话的表以及存储给定会话聊天消息的表。该应用需要访问其他端点,如按用户ID删除消息、按用户ID列出对话或按最后一条消息时间进行排序等。
请随意根据您的应用需求修改此实现。
- 参数
session_id (str) – 用于聊天历史记录的会话ID
table_name (str) – 要使用的数据库表名称
sync_connection (可选[Connection]) – 现有的 psycopg 连接实例
async_connection (可选[AsyncConnection]) – 现有的 psycopg 异步连接实例
- 返回类型
None
- 用法
使用create_tables或acreate_tables方法设置数据库中的表结构。
使用适当的session ID、表名和数据库连接初始化类。
使用add_messages或aadd_messages将消息添加到数据库。
使用get_messages或aget_messages检索消息。
在需要时使用clear或aclear清除会话历史。
注意
必须提供sync_connection或async_connection之一。
示例
import uuid from langchain_core.messages import SystemMessage, AIMessage, HumanMessage from langchain_postgres import PostgresChatMessageHistory import psycopg # Establish a synchronous connection to the database # (or use psycopg.AsyncConnection for async) sync_connection = psycopg2.connect(conn_info) # Create the table schema (only needs to be done once) table_name = "chat_history" PostgresChatMessageHistory.create_tables(sync_connection, table_name) session_id = str(uuid.uuid4()) # Initialize the chat history manager chat_history = PostgresChatMessageHistory( table_name, session_id, sync_connection=sync_connection ) # Add messages to the chat history chat_history.add_messages([ SystemMessage(content="Meow"), AIMessage(content="woof"), HumanMessage(content="bark"), ]) print(chat_history.messages)
- asyncaadd_messages(messages: Sequence[BaseMessage]) None [source]¶
将消息添加到聊天消息历史记录。
- 参数
messages (序列[BaseMessage]) –
- 返回类型
None
- async 静态acreate_tables(connection: AsyncConnection, table_name: str, /) None [source]¶
在数据库中创建表结构并创建相关索引。
- 参数
connection (AsyncConnection) –
table_name (str) –
- 返回类型
None
- add_ai_message(message: Union[AIMessage, str]) None ¶
将AI消息字符串添加到存储中的便捷方法。
请注意,这是一个便捷方法。代码应该优先选择批量添加消息接口,以减少对底层持久化层的往返次数。
此方法可能在未来的版本中弃用。
- 参数
message (Union[AIMessage, str]) – 要添加的AI消息。
- 返回类型
None
- add_message(message: BaseMessage) None ¶
将消息对象添加到存储中。
- 参数
message (BaseMessage) – 需要存储的BaseMessage对象。
- 引发错误
NotImplementedError – 如果子类没有实现高效的add_messages方法。
- 返回类型
None
- add_messages(messages: Sequence[BaseMessage]) None [source]¶
将消息添加到聊天消息历史记录。
- 参数
messages (序列[BaseMessage]) –
- 返回类型
None
- add_user_message(message: Union[HumanMessage, str]) None ¶
将人类消息字符串添加到存储中的便捷方法。
请注意,这是一个便捷方法。代码应该优先选择批量添加消息接口,以减少对底层持久化层的往返次数。
此方法可能在未来的版本中弃用。
- 参数
message (Union[HumanMessage, str]) – 添加到存储中的人类消息。
- 返回类型
None
- async static adrop_table(connection: AsyncConnection, table_name: str, /) None [source]¶
从数据库中删除表结构。
警告
此操作将删除指定数据库中的表,包括表中的所有数据和表模式。
- 参数
connection (AsyncConnection) – 异步数据库连接。
table_name (str) – 要创建的表名。
- 返回类型
None
- async aget_messages() List[BaseMessage] [source]¶
从聊天消息历史记录中检索消息。
- 返回类型
List[BaseMessage]
- static create_tables(connection: Connection, table_name: str, /) None [source]¶
在数据库中创建表结构并创建相关索引。
- 参数
connection (Connection) –
table_name (str) –
- 返回类型
None
- 静态 drop_table(connection: Connection, table_name: str, /) None [源代码]¶
从数据库中删除表结构。
警告
此操作将删除指定数据库中的表,包括表中的所有数据和表模式。
- 参数
connection (Connection) – 数据库连接。
table_name (str) – 要创建的表名。
- 返回类型
None
- get_messages() List[BaseMessage] [源代码]¶
从聊天消息历史记录中检索消息。
- 返回类型
List[BaseMessage]