| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- from __future__ import annotations
- from abc import ABC, abstractmethod
- from typing import Any
- from ..config import settings
- from ..db import repository, utcnow
- from ..llm import llm
- from ..schemas import AuditEvent, ChatResponse, MemoryItem, SystemDescriptor
- class AdapterUnavailable(RuntimeError):
- pass
- class MemoryAgent(ABC):
- """所有记忆系统必须遵守的统一接口。"""
- id: str
- descriptor: SystemDescriptor
- def __init__(self) -> None:
- self.repo = repository
- self.llm = llm
- @property
- def status(self) -> SystemDescriptor:
- return self.descriptor
- async def memories(self, query: str | None = None) -> list[MemoryItem]:
- return await self.repo.list_memories(self.id, query)
- async def audit(self) -> list[AuditEvent]:
- return await self.repo.list_audit(self.id)
- async def reset(self) -> None:
- await self.repo.reset(self.id)
- async def delete_memory(self, memory_id: str) -> bool:
- """删除记忆时同步清理向量和记录审计。"""
- deleted = await self.repo.delete_memory(self.id, memory_id)
- if deleted:
- await self.repo.delete_embedding(self.id, memory_id)
- await self._audit("DELETE/Memory", target=memory_id)
- return deleted
- async def _audit(
- self,
- operation: str,
- target: str | None = None,
- status: str = "ok",
- details: dict[str, Any] | None = None,
- ) -> AuditEvent:
- """写入一条适配器操作记录。"""
- event = AuditEvent(
- id=self.repo.memory_id("audit"),
- system=self.id,
- workspace_id=settings.workspace_id,
- operation=operation,
- target=target,
- status=status,
- details=details or {},
- created_at=utcnow(),
- )
- return await self.repo.add_audit(event)
- @abstractmethod
- async def chat(self, message: str) -> ChatResponse:
- raise NotImplementedError
|