You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改写get_history()函数以适配langchain_postgres.PostgresChatMessageHistory替代langchain_community版本?

如何改写get_history()函数以适配langchain_postgres.PostgresChatMessageHistory替代langchain_community版本?

嗨,我刚好研究过这个新包的改动,给你理清楚怎么解决这个问题!

首先得说清楚为什么会报参数缺失的错:旧的langchain_community版本的PostgresChatMessageHistory允许你直接传connection_string,但新的langchain_postgres版本的实现做了调整——它不再直接接受连接字符串,而是必须传入SQLAlchemy的Engine实例(或者同步/异步的会话对象)作为核心参数,这就是Pylance提示你缺参数的核心原因。

下面是改写后的完整get_history()函数,我给你加了注释方便理解:

from langchain_postgres import PostgresChatMessageHistory
from sqlalchemy import create_engine
import os

def get_history(session_id: str) -> PostgresChatMessageHistory:
    # 从环境变量获取连接字符串
    connection_string = os.getenv("POSTGRES_CONNECTION_STRING")
    if not connection_string:
        raise ValueError("POSTGRES_CONNECTION_STRING环境变量未设置")
    
    # 用SQLAlchemy创建数据库引擎实例
    engine = create_engine(connection_string)
    
    # 实例化新的PostgresChatMessageHistory
    return PostgresChatMessageHistory(
        session_id=session_id,
        engine=engine,  # 这是新的必填参数
        table_name="chat_message_history"  # 保留你原来的表名,也可以省略(默认就是这个值)
    )

我再补充几个关键点:

  • 你需要确保已经安装了sqlalchemy,因为langchain_postgres依赖它来处理数据库连接,如果没装的话,执行pip install sqlalchemy就行。
  • 如果你用的是异步场景,可以把engine换成async_engine(需要用sqlalchemy.ext.asyncio.create_async_engine创建异步引擎),但同步场景下用上面的engine就完全够用。
  • 关于table_name:如果你原来的表名就是默认的chat_message_history,这个参数可以直接省略,新包的默认值和旧版本一致。

这样改完之后,Pylance的警告就会消失,而且完全适配新的langchain_postgres包的要求啦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:40:29