feat:客户agent以及记忆模块功能开发

This commit is contained in:
2026-09-11 22:38:15 +08:00
parent 0197ac2ef2
commit 4da4775e8c
39 changed files with 2508 additions and 14 deletions
+56
View File
@@ -0,0 +1,56 @@
"""memory_unit 客户长期记忆主体表 ORM 模型。"""
from __future__ import annotations
from datetime import datetime
from decimal import Decimal
from typing import Any
from sqlalchemy import BigInteger, DateTime, Integer, JSON, Numeric, String, Text, func
from sqlalchemy.orm import Mapped, mapped_column
from model.base import Base
class MemoryUnit(Base):
"""客户长期记忆主体,向量和关系索引保存在外部库。"""
__tablename__ = "memory_unit"
__table_args__ = {"comment": "客户长期记忆主体表"}
id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True)
customer_id: Mapped[int] = mapped_column(BigInteger, nullable=False)
session_id: Mapped[str | None] = mapped_column(String(64))
agent_run_id: Mapped[str | None] = mapped_column(String(64))
memory_type: Mapped[str] = mapped_column(String(32), nullable=False)
tag: Mapped[str] = mapped_column(String(64), nullable=False)
content: Mapped[str] = mapped_column(String(512), nullable=False)
info_type: Mapped[str] = mapped_column(String(8), nullable=False)
source: Mapped[str] = mapped_column(String(32), nullable=False)
evidence_ref: Mapped[list[dict[str, Any]] | None] = mapped_column(JSON)
source_confidence: Mapped[Decimal] = mapped_column(Numeric(5, 2), server_default="0.20")
confidence: Mapped[Decimal] = mapped_column(Numeric(5, 2), server_default="0.20")
historical_accuracy: Mapped[Decimal] = mapped_column(Numeric(5, 2), server_default="0.50")
confidence_version: Mapped[str | None] = mapped_column(String(32))
confidence_reason: Mapped[str | None] = mapped_column(String(255))
confidence_update_time: Mapped[datetime | None] = mapped_column(DateTime)
evidence_count: Mapped[int] = mapped_column(Integer, server_default="0")
conflict_count: Mapped[int] = mapped_column(Integer, server_default="0")
recall_count: Mapped[int] = mapped_column(Integer, server_default="0")
memory_version: Mapped[int] = mapped_column(Integer, server_default="1")
update_time: Mapped[datetime | None] = mapped_column(DateTime)
last_recall_time: Mapped[datetime | None] = mapped_column(DateTime)
create_time: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
status: Mapped[str] = mapped_column(String(16), server_default="candidate")
valid_from: Mapped[datetime | None] = mapped_column(DateTime)
valid_until: Mapped[datetime | None] = mapped_column(DateTime)
last_verified_at: Mapped[datetime | None] = mapped_column(DateTime)
milvus_id: Mapped[str | None] = mapped_column(String(128))
graph_node_id: Mapped[str | None] = mapped_column(String(128))
milvus_sync_status: Mapped[str] = mapped_column(String(16), server_default="pending")
neo4j_sync_status: Mapped[str] = mapped_column(String(16), server_default="pending")
sync_retry_count: Mapped[int] = mapped_column(Integer, server_default="0")
last_sync_error: Mapped[str | None] = mapped_column(String(500))
next_retry_at: Mapped[datetime | None] = mapped_column(DateTime)
last_synced_at: Mapped[datetime | None] = mapped_column(DateTime)