Postgres聊天消息历史#
- class langchain_postgres.chat_message_histories.PostgresChatMessageHistory(table_name: str, session_id: str, /, *, sync_connection: Connection | None = None, async_connection: AsyncConnection | None = None)[来源]#
用于在Postgres数据库中持久化聊天消息历史的客户端,
此客户端通过psycopg >=3提供同步和异步支持。
客户端可以在数据库中创建模式,并提供添加消息、获取消息和清除聊天消息历史记录的方法。
该模式包含以下列:
id: 一个序列主键。
session_id: 聊天消息历史的会话ID。
message: JSONB 消息内容。
created_at: 消息创建时的时间戳。
消息是根据给定的session_id检索的,并按id排序(id应该是单调递增的),并且对应于消息添加到历史记录的顺序。
接口未返回“created_at”列,但已为架构添加,因此信息在数据库中可用。
session_id 可用于在同一表中分隔不同的聊天历史记录,应在初始化客户端时提供 session_id。
此聊天历史客户端接收一个psycopg连接对象(无论是Connection还是AsyncConnection)并使用它与数据库进行交互。
这种设计允许在多个类实例化中重复使用底层连接对象,从而使实例化变得快速。
此聊天历史客户端专为涉及聊天并基于Postgres的原型应用程序设计。
随着应用程序的增长,您可能需要扩展模式以处理更复杂的查询。例如,一个聊天应用程序可能涉及多个表,如用户表、用于存储聊天会话/对话的表,以及用于存储给定会话的聊天消息的表。应用程序将需要访问额外的端点,如按用户ID删除消息、按用户ID列出对话或根据最后消息时间排序等。
请随意调整此实现以适应您的应用程序需求。
- Parameters:
session_id (str) – 用于聊天消息历史的会话ID
table_name (str) – 要使用的数据库表的名称
sync_connection (可选[psycopg.Connection]) – 一个现有的 psycopg 连接实例
async_connection (可选[psycopg.AsyncConnection]) – 一个现有的 psycopg 异步连接实例
- Usage:
使用 create_tables 或 acreate_tables 方法在数据库中设置表结构。
使用适当的会话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: Connection | None = None, async_connection: AsyncConnection | None = None) None [source]#
用于在Postgres数据库中持久化聊天消息历史的客户端,
此客户端通过psycopg >=3提供同步和异步支持。
客户端可以在数据库中创建模式,并提供添加消息、获取消息和清除聊天消息历史记录的方法。
该模式包含以下列:
id: 一个序列主键。
session_id: 聊天消息历史的会话ID。
message: JSONB 消息内容。
created_at: 消息创建时的时间戳。
消息是根据给定的session_id检索的,并按id排序(id应该是单调递增的),并且对应于消息添加到历史记录的顺序。
接口未返回“created_at”列,但已为架构添加,因此信息在数据库中可用。
session_id 可用于在同一表中分隔不同的聊天历史记录,应在初始化客户端时提供 session_id。
此聊天历史客户端接收一个psycopg连接对象(无论是Connection还是AsyncConnection)并使用它与数据库进行交互。
这种设计允许在多个类实例化中重复使用底层连接对象,从而使实例化变得快速。
此聊天历史客户端专为涉及聊天并基于Postgres的原型应用程序设计。
随着应用程序的增长,您可能需要扩展模式以处理更复杂的查询。例如,一个聊天应用程序可能涉及多个表,如用户表、用于存储聊天会话/对话的表,以及用于存储给定会话的聊天消息的表。应用程序将需要访问额外的端点,如按用户ID删除消息、按用户ID列出对话或根据最后消息时间排序等。
请随意调整此实现以适应您的应用程序需求。
- Parameters:
session_id (str) – 用于聊天消息历史的会话ID
table_name (str) – 要使用的数据库表的名称
sync_connection (Connection | None) – 一个现有的 psycopg 连接实例
async_connection (AsyncConnection | None) – 一个现有的 psycopg 异步连接实例
- Return type:
无
- Usage:
使用 create_tables 或 acreate_tables 方法在数据库中设置表结构。
使用适当的会话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)
- async aadd_messages(messages: Sequence[BaseMessage]) None [source]#
向聊天消息历史记录中添加消息。
- Parameters:
消息 (序列[BaseMessage])
- Return type:
无
- async static acreate_tables(connection: AsyncConnection, table_name: str, /) None [source]#
在数据库中创建表模式并创建相关索引。
- Parameters:
connection (AsyncConnection)
table_name (str)
- Return type:
无
- add_ai_message(message: AIMessage | str) None #
向存储中添加AI消息字符串的便捷方法。
请注意,这是一个便捷方法。代码应优先使用批量 add_messages 接口,以减少与底层持久层的往返次数。
此方法可能在未来的版本中被弃用。
- Parameters:
message (AIMessage | str) – 要添加的AI消息。
- Return type:
无
- add_message(message: BaseMessage) None #
向存储中添加一个消息对象。
- Parameters:
消息 (BaseMessage) – 一个用于存储的BaseMessage对象。
- Raises:
NotImplementedError – 如果子类没有实现一个有效的 add_messages 方法。
- Return type:
无
- add_messages(messages: Sequence[BaseMessage]) None [source]#
向聊天消息历史记录中添加消息。
- Parameters:
消息 (序列[BaseMessage])
- Return type:
无
- add_user_message(message: HumanMessage | str) None #
用于向存储中添加人类消息字符串的便捷方法。
请注意,这是一个便捷方法。代码应优先使用批量 add_messages 接口,以减少对底层持久层的往返次数。
此方法可能在未来的版本中被弃用。
- Parameters:
message (HumanMessage | str) – 要添加到存储中的人类消息。
- Return type:
无
- async static adrop_table(connection: AsyncConnection, table_name: str, /) None [source]#
删除数据库中的表结构。
警告
这将从数据库中删除给定的表,包括表中的所有数据和表的结构。
- Parameters:
connection (AsyncConnection) – 异步数据库连接。
table_name (str) – 要创建的表的名称。
- Return type:
无
- async aget_messages() List[BaseMessage] [source]#
从聊天消息历史记录中检索消息。
- Return type:
列表[BaseMessage]
- static create_tables(connection: Connection, table_name: str, /) None [source]#
在数据库中创建表模式并创建相关索引。
- Parameters:
connection (Connection)
table_name (str)
- Return type:
无
- static drop_table(connection: Connection, table_name: str, /) None [source]#
删除数据库中的表结构。
警告
这将从数据库中删除给定的表,包括表中的所有数据和表的结构。
- Parameters:
connection (Connection) – 数据库连接。
table_name (str) – 要创建的表的名称。
- Return type:
无
- get_messages() List[BaseMessage] [source]#
从聊天消息历史记录中检索消息。
- Return type:
列表[BaseMessage]
使用 PostgresChatMessageHistory 的示例