如何改写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
相关产品推荐
相关产品推荐

