From 4619b40d031c97308148419b55d2abcb43d84a70 Mon Sep 17 00:00:00 2001 From: miao <1468212639@qq.com> Date: Thu, 23 Apr 2026 19:32:13 +0800 Subject: [PATCH] =?UTF-8?q?fix(memory):=20fix=20timezone=20and=20add=20gen?= =?UTF-8?q?erate=5Fcache=20API=20endpoint=20=EF=BB=BF=20-=20Fix=20episodic?= =?UTF-8?q?=20memory=20time=20filter=20to=20use=20UTC=20(datetime.fromtime?= =?UTF-8?q?stamp=20with=20tz=3Dtimezone.utc)=20=20=20to=20match=20Neo4j=20?= =?UTF-8?q?stored=20UTC=20timestamps=20-=20Add=20POST=20/v1/memory/analyti?= =?UTF-8?q?cs/generate=5Fcache=20endpoint=20for=20cache=20generation=20via?= =?UTF-8?q?=20API=20Key=20=EF=BB=BF=20Modified=20files:=20-=20api/app/serv?= =?UTF-8?q?ices/memory=5Fexplicit=5Fservice.py=20-=20api/app/controllers/s?= =?UTF-8?q?ervice/user=5Fmemory=5Fapi=5Fcontroller.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/user_memory_api_controller.py | 37 ++++++++++++++++++- api/app/services/memory_explicit_service.py | 10 ++--- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/api/app/controllers/service/user_memory_api_controller.py b/api/app/controllers/service/user_memory_api_controller.py index ecbdec50..19a3a92f 100644 --- a/api/app/controllers/service/user_memory_api_controller.py +++ b/api/app/controllers/service/user_memory_api_controller.py @@ -9,6 +9,7 @@ 5./analytics/memory_insight - 记忆洞察接口 6./analytics/interest_distribution - 兴趣分布接口 7./analytics/end_user_info - 终端用户信息接口 +8./analytics/generate_cache - 缓存生成接口 路由前缀: /memory @@ -19,7 +20,7 @@ from typing import Optional -from fastapi import APIRouter, Depends, Header, Query, Request +from fastapi import APIRouter, Depends, Header, Query, Request, Body from sqlalchemy.orm import Session from app.core.api_key_auth import require_api_key @@ -27,6 +28,7 @@ from app.core.api_key_utils import get_current_user_from_api_key, validate_end_u from app.core.logging_config import get_business_logger from app.db import get_db from app.schemas.api_key_schema import ApiKeyAuth +from app.schemas.memory_storage_schema import GenerateCacheRequest # 包装内部服务 controller from app.controllers import user_memory_controllers, memory_agent_controller @@ -194,4 +196,35 @@ async def get_end_user_info( end_user_id=end_user_id, current_user=current_user, db=db, - ) \ No newline at end of file + ) + + +# ==================== 缓存生成 ==================== + + +@router.post("/analytics/generate_cache") +@require_api_key(scopes=["memory"]) +async def generate_cache( + request: Request, + api_key_auth: ApiKeyAuth = None, + db: Session = Depends(get_db), + message: str = Body(None, description="Request body"), + language_type: str = Header(default=None, alias="X-Language-Type"), +): + """Trigger cache generation (user summary + memory insight) for an end user or all workspace users.""" + body = await request.json() + cache_request = GenerateCacheRequest(**body) + + current_user = get_current_user_from_api_key(db, api_key_auth) + + if cache_request.end_user_id: + validate_end_user_in_workspace(db, cache_request.end_user_id, api_key_auth.workspace_id) + + return await user_memory_controllers.generate_cache_api( + request=cache_request, + language_type=language_type, + current_user=current_user, + db=db, + ) + + diff --git a/api/app/services/memory_explicit_service.py b/api/app/services/memory_explicit_service.py index e640124e..4d9a5c2b 100644 --- a/api/app/services/memory_explicit_service.py +++ b/api/app/services/memory_explicit_service.py @@ -201,12 +201,12 @@ class MemoryExplicitService(MemoryBaseService): where_clauses = ["s.end_user_id = $end_user_id"] params = {"end_user_id": end_user_id} - # 时间戳筛选(毫秒时间戳转为 ISO 字符串,使用 Neo4j datetime() 精确比较) + # 时间戳筛选(毫秒时间戳转为 UTC ISO 字符串,使用 Neo4j datetime() 精确比较) if start_date is not None and end_date is not None: - from datetime import datetime - start_dt = datetime.fromtimestamp(start_date / 1000) - end_dt = datetime.fromtimestamp(end_date / 1000) - # 开始时间取当天 00:00:00,结束时间取当天 23:59:59.999999 + from datetime import datetime, timezone + start_dt = datetime.fromtimestamp(start_date / 1000, tz=timezone.utc) + end_dt = datetime.fromtimestamp(end_date / 1000, tz=timezone.utc) + # 开始时间取当天 UTC 00:00:00,结束时间取当天 UTC 23:59:59.999999 start_iso = start_dt.strftime("%Y-%m-%dT") + "00:00:00.000000" end_iso = end_dt.strftime("%Y-%m-%dT") + "23:59:59.999999"