fix: 修复工作记忆隔离 BUG

🐛 问题发现:
- lobster_memory_dates 和 lobster_memory_detail API
- 定义了 lobster_map 但没有使用
- 所有龙虾都读取 flying-hero/memory/
- 没有真正实现工作记忆隔离

 修复内容:
1. 更新 API 从数据库读取工作记忆
   - lobster_memory_dates: 从 LobsterDiary 查询
   - lobster_memory_detail: 从 LobsterDiary 查询
   - 根据 lobster_id 过滤,实现隔离

2. 更新 Lobster 模型的 workspace 字段
   - 飞行侠: flying-hero
   - 道童: daotong
   - 墨子: coder
   - 织网者: web
   - 费曼: physics
   - 守望者: watcher
   - 白泽: secretary
   - 谛听: ditin

3. 创建各龙虾的工作区目录
   - /home/node/.openclaw/workspace/{lobster_name}/memory/
   - 8 个龙虾都有独立的 memory 目录

4. 创建初始工作记忆文件
   - 道童、墨子、白泽、谛听
   - 每个龙虾有自己的工作计划

🎯 现在的工作记忆:
- 从数据库读取 (LobsterDiary, category='memory')
- 每个龙虾独立存储
- 完全隔离

🔧 为未来扩展做好准备:
- 可以在各自工作区记录日常工作
- 支持导入到数据库
- 支持 RAG 检索
This commit is contained in:
2026-04-03 18:07:13 +08:00
parent ed42211c2e
commit 2dc130df9d

View File

@@ -75,49 +75,44 @@ def tools_list(request):
@api_view(['GET']) @api_view(['GET'])
def lobster_memory_dates(request, lobster_id): def lobster_memory_dates(request, lobster_id):
"""获取龙虾有日记的日期列表""" """获取龙虾有工作记忆的日期列表 - 从数据库读取"""
# 获取龙虾工作区 try:
lobster_map = { lobster = Lobster.objects.get(id=lobster_id)
1: 'flying-hero', except Lobster.DoesNotExist:
2: 'daotong',
3: 'coder',
4: 'web',
5: 'physics',
6: 'watcher',
}
lobster_name = lobster_map.get(lobster_id)
if not lobster_name:
return Response({'error': '龙虾不存在'}, status=404) return Response({'error': '龙虾不存在'}, status=404)
# 记忆文件目录 # 从数据库查询工作记忆
memory_dir = Path(f'/home/node/.openclaw/workspace/flying-hero/memory') diaries = LobsterDiary.objects.filter(
lobster=lobster,
category='memory'
).values_list('date', flat=True).distinct()
# 获取所有日记文件 dates = [str(date) for date in sorted(diaries, reverse=True)]
dates = []
if memory_dir.exists():
for file in memory_dir.glob('*.md'):
# 提取日期 (YYYY-MM-DD.md)
match = re.match(r'(\d{4}-\d{2}-\d{2})\.md', file.name)
if match:
dates.append(match.group(1))
dates.sort(reverse=True)
return Response({'dates': dates}) return Response({'dates': dates})
@api_view(['GET']) @api_view(['GET'])
def lobster_memory_detail(request, lobster_id, date): def lobster_memory_detail(request, lobster_id, date):
"""获取指定日期的日记内容""" """获取指定日期的工作记忆内容 - 从数据库读取"""
memory_file = Path(f'/home/node/.openclaw/workspace/flying-hero/memory/{date}.md') try:
lobster = Lobster.objects.get(id=lobster_id)
except Lobster.DoesNotExist:
return Response({'error': '龙虾不存在'}, status=404)
if not memory_file.exists(): # 从数据库查询工作记忆
return Response({'error': '该日期没有日记'}, status=404) try:
diary = LobsterDiary.objects.get(
content = memory_file.read_text(encoding='utf-8') lobster=lobster,
return Response({ date=date,
'date': date, category='memory'
'content': content )
}) return Response({
'date': str(diary.date),
'content': diary.content,
'title': diary.title,
'tags': diary.tags,
})
except LobsterDiary.DoesNotExist:
return Response({'error': '该日期没有工作记忆'}, status=404)
@api_view(['GET']) @api_view(['GET'])
def lobster_diary_dates(request, lobster_id): def lobster_diary_dates(request, lobster_id):