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

从数据库中删除表结构。

aget_messages()

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

clear()

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

create_tables(connection, table_name, /)

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

drop_table(connection, table_name, /)

从数据库中删除表结构。

get_messages()

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

__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

asyncaclear() None[source]

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

返回类型

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]

clear() None[source]

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

返回类型

None

static create_tables(connection: Connection, table_name: str, /) None[source]

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

参数
  • connection (Connection) –

  • table_name (str) –

返回类型

None

静态 drop_table(connection: Connection, table_name: str, /) None[源代码]

从数据库中删除表结构。

警告

此操作将删除指定数据库中的表,包括表中的所有数据和表模式。

参数
  • connectionConnection) – 数据库连接。

  • table_name (str) – 要创建的表名。

返回类型

None

get_messages() List[BaseMessage][源代码]

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

返回类型

List[BaseMessage]

使用 PostgresChatMessageHistory 的示例