feat(api+app): 对话阶段化、回忆录流水线与客户端会话体验

- DB: segments 用户输入文本(Alembic 0002)
- Chat: 阶段检测/阶段提示/回复限制,编排与访谈/画像 prompts 调整
- Memoir: 忠实度检查 agent,叙事与分类等链路更新
- Core: agent 日志、Alembic 启动、LangChain/日志/配置等
- Story: time_hints;Memory 检索与相关测试
- Expo: 助手头像、会话页与消息拆分、实时会话与文案/i18n
- Docs/scripts/tests: 迁移脚本、LLM JSON/记忆检索文档、新增单测
This commit is contained in:
Kevin
2026-03-26 12:13:36 +08:00
parent 49b089354c
commit a3f61fcc0f
94 changed files with 3332 additions and 672 deletions

View File

@@ -57,7 +57,7 @@ class AlipayClient:
notify_url=self._config.notify_url,
)
if order_string:
logger.info("支付宝订单创建成功: %s", out_trade_no)
logger.info("支付宝订单创建成功: {}", out_trade_no)
return PaymentResult(
success=True,
payment_method="alipay",
@@ -68,7 +68,7 @@ class AlipayClient:
except PaymentCreateError:
raise
except Exception as e:
logger.error("支付宝订单创建异常: %s", e)
logger.error("支付宝订单创建异常: {}", e)
raise PaymentCreateError(f"支付宝下单异常: {e}")
def verify_notify(self, params: Dict[str, str]) -> NotifyResult:
@@ -96,7 +96,7 @@ class AlipayClient:
except PaymentNotifyError:
raise
except Exception as e:
logger.error("支付宝回调处理异常: %s", e)
logger.error("支付宝回调处理异常: {}", e)
raise PaymentNotifyError(f"支付宝回调处理失败: {e}")
def query_order(self, out_trade_no: str) -> PaymentStatus:
@@ -125,7 +125,7 @@ class AlipayClient:
except PaymentQueryError:
raise
except Exception as e:
logger.error("查询支付宝订单异常: %s", e)
logger.error("查询支付宝订单异常: {}", e)
raise PaymentQueryError(f"查询支付宝订单异常: {e}")
def close_order(self, out_trade_no: str) -> bool:
@@ -133,11 +133,11 @@ class AlipayClient:
try:
result = self._client.api_alipay_trade_close(out_trade_no=out_trade_no)
if result and result.get("code") == "10000":
logger.info("支付宝订单已关闭: %s", out_trade_no)
logger.info("支付宝订单已关闭: {}", out_trade_no)
return True
return False
except Exception as e:
logger.error("关闭支付宝订单异常: %s", e)
logger.error("关闭支付宝订单异常: {}", e)
return False
@staticmethod

View File

@@ -115,7 +115,7 @@ class PaymentOrderService:
except Exception as e:
order.status = "failed"
await self._db.flush()
logger.exception("微信支付客户端初始化失败: %s", e)
logger.exception("微信支付客户端初始化失败: {}", e)
raise HTTPException(status_code=503, detail=f"微信支付暂不可用: {e!s}")
try:
@@ -145,14 +145,14 @@ class PaymentOrderService:
except Exception as e:
order.status = "failed"
await self._db.flush()
logger.exception("创建支付订单异常: %s", e)
logger.exception("创建支付订单异常: {}", e)
raise HTTPException(
status_code=500, detail=f"创建支付订单异常: {type(e).__name__}: {e!s}"
)
await self._db.commit()
logger.info(
"订单创建成功: order_no=%s, payment_method=%s, amount_fen=%s",
"订单创建成功: order_no={}, payment_method={}, amount_fen={}",
order_no,
payment_method,
amount_fen,
@@ -168,10 +168,10 @@ class PaymentOrderService:
result = await self._db.execute(select(Order).where(Order.id == out_trade_no))
order = result.scalar_one_or_none()
if order is None:
logger.warning("支付回调: 订单不存在 %s", out_trade_no)
logger.warning("支付回调: 订单不存在 {}", out_trade_no)
return
if order.status == "paid":
logger.info("支付回调: 订单已处理过 %s", out_trade_no)
logger.info("支付回调: 订单已处理过 {}", out_trade_no)
return
now = utc_now()
order.status = "paid"
@@ -191,14 +191,14 @@ class PaymentOrderService:
user.subscription_expires_at = now + timedelta(days=duration_days)
user.subscription_type = order.plan_id
logger.info(
"用户 %s 订阅已升级为 %s,到期: %s",
"用户 {} 订阅已升级为 {},到期: {}",
user.id,
order.plan_id,
user.subscription_expires_at,
)
await self._db.commit()
logger.info(
"支付成功处理完成: 订单 %s, 第三方交易号 %s", out_trade_no, trade_no
"支付成功处理完成: 订单 {}, 第三方交易号 {}", out_trade_no, trade_no
)
async def handle_wechat_notify(self, headers: dict, body: str) -> dict:

View File

@@ -133,7 +133,7 @@ class PaymentConfig:
)
key_src = "私钥内容" if config.wechat.private_key.strip() else "私钥路径"
logger.info(
"微信支付配置已加载: APP_ID=%s, MCH_ID=%s, 模式=%s, 商户私钥=%s",
"微信支付配置已加载: APP_ID={}, MCH_ID={}, 模式={}, 商户私钥={}",
config.wechat.app_id,
config.wechat.mch_id,
mode,
@@ -142,7 +142,7 @@ class PaymentConfig:
else:
logger.warning("微信支付配置不完整,微信支付将不可用")
if config.alipay.is_configured:
logger.info("支付宝配置已加载: APP_ID=%s", config.alipay.app_id)
logger.info("支付宝配置已加载: APP_ID={}", config.alipay.app_id)
else:
logger.warning("支付宝配置不完整,支付宝支付将不可用")
return config

View File

@@ -65,7 +65,7 @@ async def wechat_notify(
headers=headers, body=body.decode("utf-8")
)
except Exception as e:
logger.exception("微信支付回调处理失败: %s", e)
logger.exception("微信支付回调处理失败: {}", e)
return {"code": "FAIL", "message": str(e)}
@@ -80,7 +80,7 @@ async def alipay_notify(
result = await service.handle_alipay_notify(params=params)
return PlainTextResponse(result)
except Exception as e:
logger.exception("支付宝回调处理失败: %s", e)
logger.exception("支付宝回调处理失败: {}", e)
return PlainTextResponse("fail")

View File

@@ -175,7 +175,7 @@ class WeChatPayClient:
"sign": pay_params,
"packageValue": "Sign=WXPay",
}
logger.info("微信支付预订单创建成功: %s", out_trade_no)
logger.info("微信支付预订单创建成功: {}", out_trade_no)
return PaymentResult(
success=True,
payment_method="wechat",
@@ -188,7 +188,7 @@ class WeChatPayClient:
except PaymentCreateError:
raise
except Exception as e:
logger.error("微信支付预订单创建异常: %s", e)
logger.error("微信支付预订单创建异常: {}", e)
raise PaymentCreateError(f"微信支付下单异常: {e}")
def verify_notify(self, headers: Dict[str, str], body: str) -> NotifyResult:
@@ -213,7 +213,7 @@ class WeChatPayClient:
except PaymentNotifyError:
raise
except Exception as e:
logger.error("微信支付回调处理异常: %s", e)
logger.error("微信支付回调处理异常: {}", e)
raise PaymentNotifyError(f"微信支付回调处理失败: {e}")
def query_order(self, out_trade_no: str) -> PaymentStatus:
@@ -238,7 +238,7 @@ class WeChatPayClient:
except PaymentQueryError:
raise
except Exception as e:
logger.error("查询微信支付订单异常: %s", e)
logger.error("查询微信支付订单异常: {}", e)
raise PaymentQueryError(f"查询微信支付订单异常: {e}")
def close_order(self, out_trade_no: str) -> bool:
@@ -246,12 +246,12 @@ class WeChatPayClient:
try:
code, message = self._client.close(out_trade_no=out_trade_no)
if code in range(200, 300):
logger.info("微信支付订单已关闭: %s", out_trade_no)
logger.info("微信支付订单已关闭: {}", out_trade_no)
return True
logger.warning("关闭微信支付订单失败: %s - %s", code, message)
logger.warning("关闭微信支付订单失败: {} - {}", code, message)
return False
except Exception as e:
logger.error("关闭微信支付订单异常: %s", e)
logger.error("关闭微信支付订单异常: {}", e)
return False
def _get_pay_type(self):