From 6bc63276471203e63a2e98d23f9396e9b6f98163 Mon Sep 17 00:00:00 2001 From: eason Date: Tue, 3 Mar 2026 13:41:29 +0800 Subject: [PATCH] Enhance Postgres connection string handling in ChatService to prioritize LANGGRAPH_PG_URL, derive from DATABASE_URL if available, and fallback to localhost configuration. --- th_agenter/services/chat.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/th_agenter/services/chat.py b/th_agenter/services/chat.py index 8d82d70..bf87d08 100644 --- a/th_agenter/services/chat.py +++ b/th_agenter/services/chat.py @@ -201,13 +201,22 @@ class ChatService: if not ChatService._checkpointer_initialized: from langgraph.checkpoint.postgres import PostgresSaver import psycopg2 - # LangGraph 使用的 Postgres 连接串,优先从环境变量读取,便于在 Docker / 本地区分配置 - # - Docker 内建议:LANGGRAPH_PG_URL=postgresql://drgraph:yingping@db:5432/th_agenter - # - 本地开发可用: LANGGRAPH_PG_URL=postgresql://drgraph:yingping@localhost:5433/th_agenter - conn_string = os.getenv( - "LANGGRAPH_PG_URL", - "postgresql://drgraph:yingping@localhost:5433/th_agenter", - ) + import re + # LangGraph 使用的 Postgres 连接串(psycopg 格式:postgresql://) + # 优先级:LANGGRAPH_PG_URL > 从 DATABASE_URL 派生 > 默认 localhost + conn_string = os.getenv("LANGGRAPH_PG_URL") + if not conn_string: + db_url = os.getenv("DATABASE_URL", "") + if db_url and "postgresql" in db_url.split("://")[0].lower(): + # 将 postgresql+asyncpg:// 转为 postgresql://,供 LangGraph/psycopg 使用 + conn_string = re.sub( + r"^postgresql\+[a-zA-Z0-9]+://", + "postgresql://", + db_url, + count=1, + ) + else: + conn_string = "postgresql://drgraph:yingping@localhost:5433/th_agenter" ChatService._conn_string = conn_string # 检查必要的表是否已存在