feat(memory-api): implement memory read/write API service endpoints

- Add MemoryAPIService with read_memory and write_memory methods for managing user memories
- Create memory_api_schema.py with request/response schemas for read and write operations
- Implement write_memory_api_service endpoint for storing memory content with configurable storage backends
- Implement read_memory_api_service endpoint for querying memories with context-aware responses
- Add memory-specific error codes (MEMORY_WRITE_FAILED, MEMORY_READ_FAILED, MEMORY_CONFIG_NOT_FOUND) to error_codes.py
This commit is contained in:
Ke Sun
2025-12-26 11:43:51 +08:00
parent 2fa3bebe8f
commit bf1dfd97f0
4 changed files with 455 additions and 24 deletions

View File

@@ -1,14 +1,19 @@
"""Memory 服务接口 - 基于 API Key 认证"""
import uuid
from fastapi import APIRouter, Depends, Request, Body
from sqlalchemy.orm import Session
from app.db import get_db
from app.core.response_utils import success
from app.core.logging_config import get_business_logger
from app.core.api_key_auth import require_api_key
from app.core.logging_config import get_business_logger
from app.core.response_utils import success
from app.db import get_db
from app.schemas.api_key_schema import ApiKeyAuth
from app.schemas.memory_api_schema import (
MemoryReadRequest,
MemoryReadResponse,
MemoryWriteRequest,
MemoryWriteResponse,
)
from app.services.memory_api_service import MemoryAPIService
from fastapi import APIRouter, Body, Depends, Request
from sqlalchemy.orm import Session
router = APIRouter(prefix="/memory", tags=["V1 - Memory API"])
logger = get_business_logger()
@@ -20,27 +25,63 @@ async def get_memory_info():
return success(data={}, msg="Memory API - Coming Soon")
# /v1/memory/chat
@router.post("/chat")
@router.post("/write_api_service")
@require_api_key(scopes=["memory"])
async def chat_with_agent_demo(
async def write_memory_api_service(
request: Request,
api_key_auth: ApiKeyAuth = None,
db: Session = Depends(get_db),
message: str = Body(..., description="聊天消息内容"),
payload: MemoryWriteRequest = Body(..., embed=False),
):
"""
Agent 聊天接口demo
scopes: 所需的权限范围列表["app", "rag", "memory"]
Args:
message: 请求参数
request: 声明请求
api_key_auth: 包含验证后的API Key 信息
db: db_session
Write memory to storage.
Stores memory content for the specified end user using the Memory API Service.
"""
logger.info(f"API Key Auth: {api_key_auth}")
logger.info(f"Resource ID: {api_key_auth.resource_id}")
logger.info(f"Message: {message}")
return success(data={"received": True}, msg="消息已接收")
logger.info(f"Memory write request - end_user_id: {payload.end_user_id}")
memory_api_service = MemoryAPIService(db)
result = await memory_api_service.write_memory(
workspace_id=api_key_auth.workspace_id,
end_user_id=payload.end_user_id,
message=payload.message,
config_id=payload.config_id,
storage_type=payload.storage_type,
user_rag_memory_id=payload.user_rag_memory_id,
)
logger.info(f"Memory write successful for end_user: {payload.end_user_id}")
return success(data=MemoryWriteResponse(**result).model_dump(), msg="Memory written successfully")
@router.post("/read_api_service")
@require_api_key(scopes=["memory"])
async def read_memory_api_service(
request: Request,
api_key_auth: ApiKeyAuth = None,
db: Session = Depends(get_db),
payload: MemoryReadRequest = Body(..., embed=False),
):
"""
Read memory from storage.
Queries and retrieves memories for the specified end user with context-aware responses.
"""
logger.info(f"Memory read request - end_user_id: {payload.end_user_id}")
memory_api_service = MemoryAPIService(db)
result = await memory_api_service.read_memory(
workspace_id=api_key_auth.workspace_id,
end_user_id=payload.end_user_id,
message=payload.message,
search_switch=payload.search_switch,
config_id=payload.config_id,
storage_type=payload.storage_type,
user_rag_memory_id=payload.user_rag_memory_id,
)
logger.info(f"Memory read successful for end_user: {payload.end_user_id}")
return success(data=MemoryReadResponse(**result).model_dump(), msg="Memory read successfully")