Fix/memory bug fix (#111)
* 图谱数据量限制数量去掉 * 图谱数据量限制数量去掉 * 图谱数据量限制数量去掉 * 用户详情优化 * 用户详情优化 * 用户详情优化 * 用户详情优化 * 用户详情优化
This commit is contained in:
@@ -1,9 +1,51 @@
|
|||||||
"""
|
"""
|
||||||
情景记忆的请求和响应模型
|
情景记忆的请求和响应模型
|
||||||
"""
|
"""
|
||||||
|
from abc import ABC
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
type_mapping = {
|
||||||
|
"Person": "人物实体节点",
|
||||||
|
"Organization": "组织实体节点",
|
||||||
|
"ORG": "组织实体节点",
|
||||||
|
"Location": "地点实体节点",
|
||||||
|
"LOC": "地点实体节点",
|
||||||
|
"Event": "事件实体节点",
|
||||||
|
"Concept": "概念实体节点",
|
||||||
|
"Time": "时间实体节点",
|
||||||
|
"Position": "职位实体节点",
|
||||||
|
"WorkRole": "职业实体节点",
|
||||||
|
"System": "系统实体节点",
|
||||||
|
"Policy": "政策实体节点",
|
||||||
|
"HistoricalPeriod": "历史时期实体节点",
|
||||||
|
"HistoricalState": "历史国家实体节点",
|
||||||
|
"HistoricalEvent": "历史事件实体节点",
|
||||||
|
"EconomicFactor": "经济因素实体节点",
|
||||||
|
"Condition": "条件实体节点",
|
||||||
|
"Numeric": "数值实体节点"
|
||||||
|
}
|
||||||
|
class EmotionType(ABC):
|
||||||
|
JOY_TYPE = "joy"
|
||||||
|
SURPRISE_TYPE = "surprise"
|
||||||
|
SANDROWNESS_TYPE = "sadness"
|
||||||
|
FEAR_TYPE = "fear"
|
||||||
|
ANGET_TYPE="anger"
|
||||||
|
NEUTRAL_TYPE="neutral"
|
||||||
|
EMOTION_MAPPING={
|
||||||
|
"joy":"愉快",
|
||||||
|
"surprise":"惊喜",
|
||||||
|
"sadness":"悲伤",
|
||||||
|
"fear":"恐惧",
|
||||||
|
"anger":"生气",
|
||||||
|
"neutral":"中性"
|
||||||
|
}
|
||||||
|
class EmotionSubject(ABC):
|
||||||
|
SUBJECT_MAPPING={
|
||||||
|
"self":"自己",
|
||||||
|
"other":"别人",
|
||||||
|
"object":"事物对象"
|
||||||
|
}
|
||||||
|
|
||||||
class EpisodicMemoryOverviewRequest(BaseModel):
|
class EpisodicMemoryOverviewRequest(BaseModel):
|
||||||
"""情景记忆总览查询请求"""
|
"""情景记忆总览查询请求"""
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ from neo4j.time import DateTime as Neo4jDateTime
|
|||||||
import json
|
import json
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
from app.schemas.memory_episodic_schema import EmotionType
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class MemoryEntityService:
|
class MemoryEntityService:
|
||||||
@@ -123,7 +125,7 @@ class MemoryEntityService:
|
|||||||
extracted_entity_list = self._deduplicate_dict_list(extracted_entity_list)
|
extracted_entity_list = self._deduplicate_dict_list(extracted_entity_list)
|
||||||
|
|
||||||
# 合并所有数据并处理相同text的合并
|
# 合并所有数据并处理相同text的合并
|
||||||
all_timeline_data = memory_summary_list + statement_list + extracted_entity_list
|
all_timeline_data = memory_summary_list + statement_list
|
||||||
all_timeline_data = self._merge_same_text_items(all_timeline_data)
|
all_timeline_data = self._merge_same_text_items(all_timeline_data)
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
@@ -496,11 +498,11 @@ class MemoryEmotion:
|
|||||||
length_data.append(emotion_intensity)
|
length_data.append(emotion_intensity)
|
||||||
if emotion_type is not None and emotion_intensity is not None and formatted_created_at is not None:
|
if emotion_type is not None and emotion_intensity is not None and formatted_created_at is not None:
|
||||||
# 使用(emotion_type, created_at)作为分组键
|
# 使用(emotion_type, created_at)作为分组键
|
||||||
if emotion_type in {"joy", "surprise"}:
|
if emotion_type in {EmotionType.JOY_TYPE, EmotionType.SURPRISE_TYPE}:
|
||||||
emotion_type='positive'
|
emotion_type='positive'
|
||||||
elif emotion_type in {"sadness", "fear", "anger"}:
|
elif emotion_type in {EmotionType.SANDROWNESS_TYPE, EmotionType.FEAR_TYPE, EmotionType.ANGET_TYPE}:
|
||||||
emotion_type='negative'
|
emotion_type='negative'
|
||||||
elif emotion_type=='neutral':
|
elif emotion_type==EmotionType.NEUTRAL_TYPE:
|
||||||
emotion_type='neutral'
|
emotion_type='neutral'
|
||||||
group_key = (emotion_type, formatted_created_at)
|
group_key = (emotion_type, formatted_created_at)
|
||||||
# 累加emotion_intensity
|
# 累加emotion_intensity
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ from app.core.memory.utils.llm.llm_utils import MemoryClientFactory
|
|||||||
from app.db import get_db_context
|
from app.db import get_db_context
|
||||||
from app.repositories.end_user_repository import EndUserRepository
|
from app.repositories.end_user_repository import EndUserRepository
|
||||||
from app.repositories.neo4j.neo4j_connector import Neo4jConnector
|
from app.repositories.neo4j.neo4j_connector import Neo4jConnector
|
||||||
|
from app.schemas.memory_episodic_schema import type_mapping, EmotionType, EmotionSubject
|
||||||
|
|
||||||
from app.services.memory_base_service import MemoryBaseService
|
from app.services.memory_base_service import MemoryBaseService
|
||||||
from app.services.memory_config_service import MemoryConfigService
|
from app.services.memory_config_service import MemoryConfigService
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
@@ -1332,7 +1334,7 @@ async def analytics_graph_data(
|
|||||||
db: Session,
|
db: Session,
|
||||||
end_user_id: str,
|
end_user_id: str,
|
||||||
node_types: Optional[List[str]] = None,
|
node_types: Optional[List[str]] = None,
|
||||||
limit: int = 100,
|
limit: int = 130,
|
||||||
depth: int = 1,
|
depth: int = 1,
|
||||||
center_node_id: Optional[str] = None
|
center_node_id: Optional[str] = None
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
@@ -1416,12 +1418,14 @@ async def analytics_graph_data(
|
|||||||
elementId(n) as id,
|
elementId(n) as id,
|
||||||
labels(n)[0] as label,
|
labels(n)[0] as label,
|
||||||
properties(n) as properties
|
properties(n) as properties
|
||||||
|
LIMIT $limit
|
||||||
"""
|
"""
|
||||||
node_params = {
|
node_params = {
|
||||||
"group_id": end_user_id,
|
"group_id": end_user_id,
|
||||||
# "limit": limit
|
"limit": limit
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# 执行节点查询
|
# 执行节点查询
|
||||||
node_results = await _neo4j_connector.execute_query(node_query, **node_params)
|
node_results = await _neo4j_connector.execute_query(node_query, **node_params)
|
||||||
|
|
||||||
@@ -1576,10 +1580,15 @@ async def _extract_node_properties(label: str, properties: Dict[str, Any],node_
|
|||||||
for field in allowed_fields:
|
for field in allowed_fields:
|
||||||
if field in properties:
|
if field in properties:
|
||||||
value = properties[field]
|
value = properties[field]
|
||||||
|
if str(field) == 'entity_type':
|
||||||
|
value=type_mapping.get(value,'')
|
||||||
|
if str(field)=="emotion_type":
|
||||||
|
value=EmotionType.EMOTION_MAPPING.get(value)
|
||||||
|
if str(field)=="emotion_subject":
|
||||||
|
value=EmotionSubject.SUBJECT_MAPPING.get(value)
|
||||||
# 清理 Neo4j 特殊类型
|
# 清理 Neo4j 特殊类型
|
||||||
filtered_props[field] = _clean_neo4j_value(value)
|
filtered_props[field] = _clean_neo4j_value(value)
|
||||||
filtered_props['associative_memory']=[i['rel_count'] for i in node_results][0]
|
filtered_props['associative_memory']=[i['rel_count'] for i in node_results][0]
|
||||||
print(filtered_props)
|
|
||||||
return filtered_props
|
return filtered_props
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user