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, /)

删除数据库中的表结构。

aget_messages()

从聊天消息历史中检索消息。

clear()

清除给定会话的聊天消息历史记录。

create_tables(connection, table_name, /)

在数据库中创建表结构并创建相关索引。

drop_table(connection, table_name, /)

删除数据库中的表结构。

get_messages()

从聊天消息历史记录中检索消息。

__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 aclear() None[source]#

清除给定会话的聊天消息历史记录。

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]

clear() None[source]#

清除给定会话的聊天消息历史记录。

Return type:

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 的示例