Files
TrulyMEM-TrueHumanMEM/docs/架构.md
root b4f509de50 Fix: F3 tool details toggle, sidebar width, and sync docs with code
- Fix F3 tool details: use display:none/block instead of re-compose
- Increase sidebar width from 40 to 70 for readability
- Sync 一键启动指南.md with actual entry points (trulymem_entry.py)
- Rewrite 工作记忆链机制说明.md with actual task_* tool APIs
- Rewrite 架构.md with actual file structure (38 Python files)
- Update docs/README.md with complete feature list
2026-04-12 16:01:21 +08:00

9.3 KiB
Raw Blame History

TrulyMEM 架构设计

核心原则

  • 键盘驱动,零鼠标依赖
  • 极简视觉,信息密度优先
  • 工具痕迹默认隐藏,需要时可展开

项目结构

TrulyMEM-TrueHumanMEM/
├── trulymem_entry.py          # 打包入口(独立可执行文件)
├── graph_memory_tui/          # 核心应用包
│   ├── app.py                 # TUI 主应用 (GraphMemoryApp)
│   ├── main.py                # 模块入口
│   ├── __init__.py
│   ├── core/                  # 核心逻辑
│   │   ├── __init__.py
│   │   ├── imports.py         # 动态导入内嵌DB vs Neo4j
│   │   ├── embedded_db.py     # SQLite 图数据库实现
│   │   ├── graph_client.py    # Neo4j 客户端(可选)
│   │   ├── optimized_operations.py
│   │   ├── prompts/          # 提示词管理
│   │   │   ├── __init__.py
│   │   │   ├── prompt_manager.py
│   │   │   └── templates/
│   │   │       └── system_prompt.md
│   │   └── tools/             # 工具定义与执行
│   │       ├── __init__.py
│   │       ├── memory_tools.py    # 6个记忆工具 + 人设/任务工具
│   │       ├── tool_executor.py   # 工具执行器
│   │       └── tool_limiter.py    # 调用限制器
│   ├── models/                # 数据模型
│   │   ├── __init__.py
│   │   ├── message.py         # Message, ToolCall, ToolResult
│   │   ├── config.py          # AppConfig
│   │   └── log_entry.py       # LogEntry
│   ├── services/              # 服务层
│   │   ├── __init__.py
│   │   ├── config_manager.py  # 配置持久化
│   │   ├── config_service.py
│   │   ├── chat_service.py
│   │   └── tool_service.py
│   ├── handlers/              # 事件处理
│   │   ├── __init__.py
│   │   ├── focus_handler.py
│   │   ├── key_handler.py
│   │   └── message_handler.py
│   ├── widgets/               # TUI 组件
│   │   ├── __init__.py
│   │   ├── left_panel.py      # 左侧主对话区
│   │   ├── right_panel.py     # 右侧边栏
│   │   ├── message_history.py # 消息历史列表
│   │   ├── message_widget.py  # 单条消息组件
│   │   ├── input_box.py       # 底部输入框
│   │   ├── config_section.py  # 配置区
│   │   ├── operation_log.py   # 图操作日志
│   │   ├── cypher_query_box.py # Cypher 查询
│   │   └── status_bar.py     # 状态栏
│   └── styles/               # 样式文件
│       ├── __init__.py
│       ├── app.css
│       ├── components.css
│       └── messages.css
├── tests/                     # 测试
├── docs/                      # 文档
├── requirements.txt           # 依赖
└── build_*.{bat,sh}          # 打包脚本

布局结构

默认视图(右侧展开)

┌─────────────────────────────────────┬─────────────────────┐
│                                     │ F2:隐藏侧边栏        │
│  ┌─────────────────────────────┐   │ ────────────────────│
│  │ 🟠 用户: 量子力学是什么?      │   │ API Key: ***       │
│  └─────────────────────────────┘   │ 模型: deepseek-chat ▼│
│                                     │ Base URL: ...       │
│  ┌─────────────────────────────┐   │ ────────────────────│
│  │ 🔵 模型: 根据记忆...          │   │ [图操作日志]         │
│  │                             │   │ ▼ 14:32:15 recall  │
│  │ 是的!根据记忆...              │   │   实体: 量子力学... │
│  │                             │   │   关系: 3条         │
│  │ [工具:2次] (F3展开)          │   │ ───────────────────│
│  └─────────────────────────────┘   │ >[查询图...]       │
│                                     │ F4:执行            │
│  ┌─────────────────────────────┐   └─────────────────────┘
│  │ 🟠 [输入框...]               │
│  └─────────────────────────────┘
│  F1:帮助 F2:隐藏侧边栏 F5:清屏 F6:退出│
└─────────────────────────────────────┴─────────────────────┘

F2后右侧折叠

┌─────────────────────────────────────┐
│                                     │
│  ┌─────────────────────────────┐   │
│  │ 🟠 用户: 量子力学是什么?      │   │
│  └─────────────────────────────┘   │
│                                     │
│  ┌─────────────────────────────┐   │
│  │ 🔵 模型: 根据记忆...          │   │
│  │                             │   │
│  │ 是的!根据记忆...              │   │
│  │                             │   │
│  │ [工具:2次] (F3展开)          │   │
│  └─────────────────────────────┘   │
│                                     │
│  ┌─────────────────────────────┐   │
│  │ 🟠 [输入框...]               │   │
│  └─────────────────────────────┘   │
│  F1:帮助 F2:展开侧边栏 F5:清屏 F6:退出│
│                                     │
└─────────────────────────────────────┘

快捷键映射

按键 功能
F1 显示帮助面板(快捷键列表)
F2 切换右侧边栏 展开/折叠
F3 展开/折叠当前模型回复的工具调用详情
F4 右侧 Cypher 查询框获得焦点(若侧边栏折叠则自动展开)
F5 清屏(保留记忆,清空显示)
F6 / Ctrl+C 退出程序

焦点管理

  • 默认焦点: 启动后焦点自动位于底部输入框
  • F4 特殊行为: 按下 F4 时,若侧边栏处于折叠状态,先自动展开侧边栏,再将焦点移至 Cypher 查询框

视觉样式

元素 样式
用户消息 🟠 橙色头部标识
模型消息 🔵 蓝色头部标识
底部输入框 橙色边框,聚焦时高亮
工具调用摘要 灰色括号 [工具:N次]
右侧边栏 深色背景,宽度 70 字符
右侧日志区 格式化文本,最新在上

组件职责

左侧区域(主对话区)

  • MessageHistory: 滚动容器,显示消息历史
  • InputBox: 固定底部,消息输入
  • LeftPanel: 左上面板容器

右侧区域(侧边栏)

  • RightPanel: 侧边栏容器,可折叠(宽度 70
  • ConfigSection: 配置区API Key、模型选择、Base URL
  • OperationLog: 图操作日志,只读
  • CypherQueryBox: 直接执行 Cypher 查询

数据流

用户输入 → InputBox.on_input_box_send_message
    ↓
GraphMemoryClient.send_message_with_history()
    ↓
OpenAI API / DeepSeek API
    ↓
检查 tool_calls → execute_tool() → EmbeddedGraphDB / Neo4jGraph
    ↓
循环调用 API 直到无 tool_calls
    ↓
最终回复 → MessageHistory (左侧)
    ↓
工具记录 → OperationLog (右侧)

技术实现

  • 框架: textualPython TUI 框架)
  • 布局: CSS-like 样式,右侧固定宽度 70 字符
  • 状态管理: App 实例持有配置、数据库连接、API 客户端
  • 数据库: SQLite默认内嵌或 Neo4j可选
  • LLM 接口: OpenAI SDK兼容 DeepSeek 等

数据库双模式

# core/imports.py
if USE_EMBEDDED_DB:
    from .embedded_db import EmbeddedGraphDB as Neo4jGraph  # SQLite
else:
    from .graph_client import Neo4jGraph  # Neo4j

工具系统

记忆工具 (6个)

  • memory_recall - 检索记忆
  • memory_commit - 写入记忆
  • memory_purge - 删除记忆
  • memory_introspect - 查看状态
  • memory_archive - 归档记忆
  • memory_cleanup - 清理数据

人设工具 (2个)

  • persona_update - 更新人设
  • persona_clear - 清除人设

任务工具 (4个)

  • task_create - 创建任务
  • task_set_state - 设置状态
  • task_delete - 删除任务
  • task_link_info - 关联信息