feat: 重构 agentscope 缓存架构,新增消息和附件缓存

This commit is contained in:
qzl
2026-03-25 17:41:55 +08:00
parent d22ded21f8
commit 599c597e69
25 changed files with 1509 additions and 78 deletions
+49 -1
View File
@@ -1,6 +1,6 @@
from __future__ import annotations
from datetime import date
from datetime import date, datetime, timezone
import hashlib
from urllib.parse import urlparse
@@ -10,6 +10,9 @@ from fastapi import HTTPException
from sqlalchemy.exc import IntegrityError
from core.auth.models import CurrentUser
from core.agentscope.caches.context_messages_cache import (
create_context_messages_cache,
)
from core.agentscope.schemas.agui_input import extract_latest_user_payload
from core.config.settings import config
from core.logging import get_logger
@@ -124,6 +127,13 @@ class AgentService:
visibility_mask=visibility_mask,
)
await self._repository.commit()
await self._append_context_cache_user_message(
thread_id=thread_id,
runtime_mode=runtime_mode,
visibility_mask=visibility_mask,
content=user_message_text,
metadata=user_message_metadata,
)
queue = "automation" if runtime_mode == RuntimeMode.AUTOMATION else "agent"
task_id = await self._queue.enqueue(
@@ -147,6 +157,44 @@ class AgentService:
created=created,
)
async def _append_context_cache_user_message(
self,
*,
thread_id: str,
runtime_mode: RuntimeMode,
visibility_mask: int,
content: str,
metadata: AgentChatMessageMetadata | None,
) -> None:
metadata_payload = (
metadata.model_dump(mode="json", exclude_none=True)
if isinstance(metadata, AgentChatMessageMetadata)
else None
)
message_payload: dict[str, object] = {
"role": "user",
"content": content,
"timestamp": datetime.now(timezone.utc).isoformat(timespec="seconds"),
}
if isinstance(metadata_payload, dict):
message_payload["metadata"] = metadata_payload
try:
context_cache = create_context_messages_cache()
await context_cache.append_message(
thread_id=thread_id,
runtime_mode=runtime_mode.value,
visibility_mask=visibility_mask,
message=message_payload,
)
except Exception as exc:
logger.warning(
"Failed to append user message to context cache",
thread_id=thread_id,
runtime_mode=runtime_mode.value,
error=str(exc),
)
async def _resolve_user_message_visibility_mask(
self, *, runtime_mode: RuntimeMode
) -> int:
+2 -2
View File
@@ -7,10 +7,10 @@ from uuid import UUID
from fastapi import HTTPException
from sqlalchemy.exc import SQLAlchemyError
from core.auth.models import CurrentUser
from core.agentscope.persistence.user_context_cache import (
from core.agentscope.caches.user_context_cache import (
create_user_context_cache,
)
from core.auth.models import CurrentUser
from core.db.base_service import BaseService
from core.logging import get_logger
from schemas.shared.user import UserContext, parse_profile_settings