feat:客户agent以及记忆模块优化
This commit is contained in:
@@ -39,11 +39,16 @@ class LongTermMemoryService:
|
||||
memory.customer_id,
|
||||
memory.memory_type.value,
|
||||
memory.tag,
|
||||
memory.content,
|
||||
)
|
||||
warnings: list[str] = []
|
||||
if existing is not None:
|
||||
existing = await repo.merge_evidence(existing)
|
||||
existing = await repo.merge_evidence(
|
||||
existing,
|
||||
content=memory.content,
|
||||
source=memory.source.value,
|
||||
evidence_count=max(memory.evidence_count or 1, 1),
|
||||
evidence_ref=memory.evidence_ref,
|
||||
)
|
||||
entity = existing
|
||||
else:
|
||||
# final_score 是召回重排阶段的临时分数,不属于 MySQL 主体字段。
|
||||
@@ -51,6 +56,9 @@ class LongTermMemoryService:
|
||||
mode="json",
|
||||
exclude={"id", "milvus_id", "graph_node_id", "final_score"},
|
||||
)
|
||||
now = datetime.now()
|
||||
values["last_verified_at"] = values.get("last_verified_at") or now
|
||||
values["update_time"] = values.get("update_time") or now
|
||||
values["memory_type"] = memory.memory_type.value
|
||||
values["source"] = memory.source.value
|
||||
confidence_result, confidence_warning = self._calculate_confidence(memory)
|
||||
@@ -116,7 +124,6 @@ class LongTermMemoryService:
|
||||
tag=memory.tag,
|
||||
source=source,
|
||||
evidence_count=memory.evidence_count or 0,
|
||||
conflict_count=memory.conflict_count or 0,
|
||||
age_days=age_days,
|
||||
memory_type=memory_type,
|
||||
)
|
||||
@@ -147,6 +154,19 @@ class LongTermMemoryService:
|
||||
)
|
||||
return [self._to_dto(entity) for entity in entities], []
|
||||
|
||||
async def refresh_confidence(
|
||||
self, db, customer_id: int, *, limit: int = 500
|
||||
) -> int:
|
||||
"""按当前时间刷新有效记忆的置信度并持久化结果。"""
|
||||
repo = self.repository_factory(db)
|
||||
entities = await repo.list_for_confidence_refresh(customer_id, limit=limit)
|
||||
refreshed = 0
|
||||
for entity in entities:
|
||||
confidence_result, _ = self._calculate_confidence(entity)
|
||||
await repo.update_confidence(entity.id, **confidence_result)
|
||||
refreshed += 1
|
||||
return refreshed
|
||||
|
||||
async def retry_pending(self, db, *, limit: int = 100) -> dict[str, int]:
|
||||
"""重试 MySQL 中缺少外部索引或同步失败的记忆。"""
|
||||
entities = await self.repository_factory(db).list_pending_sync(limit)
|
||||
@@ -182,7 +202,6 @@ class LongTermMemoryService:
|
||||
"confidence_reason": getattr(entity, "confidence_reason", None),
|
||||
"confidence_update_time": getattr(entity, "confidence_update_time", None),
|
||||
"evidence_count": entity.evidence_count or 0,
|
||||
"conflict_count": entity.conflict_count or 0,
|
||||
"recall_count": entity.recall_count or 0,
|
||||
"status": entity.status,
|
||||
"valid_from": entity.valid_from,
|
||||
|
||||
Reference in New Issue
Block a user