Files
TrulyMEM-TrueHumanMEM/tool_implementation_report.md
root 3839a60459 fix: 登录问题修复 - session cookie配置 + 前端调试日志 + 力导向图布局优化
- 显式配置 session cookie (HTTPOnly/SameSite/Secure/Name)
- 前端 fetch 增加 credentials: same-origin
- 登录成功后备 cookie 设置
- 服务端 api_login 增加调试日志
- 星图布局基于 mention_count 优化节点间距
- 保留旧数据库数据
2026-05-08 12:25:22 +08:00

9.0 KiB
Raw Permalink Blame History

AIAgentService.ets 工具实现完整性审查报告

审查文件: /home/program/TrulyMEM-TrueHumanMEM/common/src/main/ets/service/AIAgentService.ets 审查日期: 2026-05-02


一、工具实现状态总览

# 工具名 Handler 名 executeTool case GraphMemoryService 方法 状态
1 memory_recall memoryRecal (L794-808) memoryRecall() L316 完整
2 memory_commit memoryCommit (L811-825) memoryCommit() L353 完整
3 memory_purge memoryPurge (L827-840) memoryPurge() L382 完整
4 memory_introspect memoryIntrospect (L842-850) memoryIntrospect() L436 完整
5 memory_archive memoryArchive (L852-860) archive() L469 完整
6 memory_cleanup memoryCleanup (L862-870) cleanup() L604 完整
7 memory_query_archived memoryQueryArchived (L872-880) queryArchived() L626 完整
8 context_rewrite contextRewrite (L882-890) 无(本地验证) ⚠️ 可疑
9 persona_update personaUpdate (L892-907) personaUpdate() L643 完整
10 persona_remove personaRemove (L909-917) personaRemove() L732 完整
11 persona_clear personaClear (L919-927) personaClear() L714 完整
12 task_create taskCreate (L929-942) taskCreate() L774 完整
13 task_set_state taskSetState (L944-956) taskSetState() L812 ⚠️ 可疑
14 task_delete taskDelete (L958-970) taskDelete() L835 完整
15 task_link_info taskLinkInfo (L972-984) taskLinkInfo() L857 完整
16 task_archive taskArchive (L986-998) taskArchive() L881 ⚠️ 可疑
17 task_query taskQuery (L1000-1011) taskQuery() L904 完整

二、详细分析

完整实现的工具14/17

以下工具均有完整的 case 分支、参数映射、GraphMemoryService 方法调用和结果返回:

  • memory_recall - 完整,参数映射正确,调用 memoryRecall()
  • memory_commit - 完整,参数映射正确,调用 memoryCommit()
  • memory_purge - 完整,参数映射正确,调用 memoryPurge()
  • memory_introspect - 完整,参数映射正确,调用 memoryIntrospect()
  • memory_archive - 完整,参数映射正确,调用 archive()
  • memory_cleanup - 完整,参数映射正确,调用 cleanup()
  • memory_query_archived - 完整,参数映射正确,调用 queryArchived()
  • persona_update - 完整,参数映射正确,调用 personaUpdate()
  • persona_remove - 完整,参数映射正确,调用 personaRemove()
  • persona_clear - 完整,无参数,调用 personaClear()
  • task_create - 完整,参数映射正确,调用 taskCreate()
  • task_delete - 完整,参数映射正确,调用 taskDelete()
  • task_link_info - 完整,参数映射正确,调用 taskLinkInfo()
  • task_query - 完整,参数映射正确,调用 taskQuery()

⚠️ 可疑的工具3/17

1. context_rewrite (L882-890) — ⚠️ 非真实实现

case 'contextRewrite': {
    const summary = args.summary as string;
    const result: ToolCallResult = {
        name: 'context_rewrite',
        success: summary.includes('[工具调用总结'),
        message: summary.includes('[工具调用总结') ? '上下文已压缩' : '格式错误:必须包含[工具调用总结]标记'
    };
    return result;
}

问题:

  • 没有调用任何 GraphMemoryService 方法,仅做本地字符串验证
  • 只是检查 summary 参数是否包含 [工具调用总结 标记
  • 实际上下文压缩完全依赖 AI 端的 LLM 处理,服务端不做任何存储或处理
  • 这是一个设计选择而非 bug——上下文重写确实是 LLM 侧操作
  • 风险: 如果未来需要保存压缩结果或审计,这里需要补充实现

2. task_archive (L986-998) — ⚠️ 语义 bug

Handler 调用 this.memoryService.taskArchive() 在 GraphMemoryService:881:

async taskArchive(params: TaskArchiveParams): Promise<TaskActionResult> {
    await this.taskSetState({ taskId: params.taskId, state: '已暂停' });
    // ...
}

问题:

  • task_archive 的内部实现将任务状态设为 '已暂停' 而非 'archived'
  • 工具描述明确说"将任务状态设为 archived",但实际设为 已暂停
  • 与系统提示词中"步骤6归档规则"的语义不一致
  • 建议: 改为 state: '已暂停' 应改为 state: '已完成' 或直接支持 'archived' 状态

3. task_set_state (L944-956) — ⚠️ 类型定义不一致

// ToolStateArg 类型定义
type ToolStateArg = '进行中' | '已完成' | '已暂停' | '已取消';

// 工具描述中 stateFilter 允许的值
stateFilter: '进行中/已完成/已暂停/已取消/archived'

问题:

  • ToolStateArg 类型不包含 'archived'
  • 但工具描述和 query 的 stateFilter 都提到了 archived 状态
  • task_archive 内部使用 '已暂停' 来模拟归档,而非真正的 'archived' 状态
  • 这意味着 AI 无法通过 task_set_state 直接设置 archived 状态
  • 虽然底层只是写入 has_state 关系字符串,类型限制不会阻断运行时,但语义不一致

三、TODO/FIXME/占位符检查

检查项 结果
TODO 注释
FIXME 注释
placeholder
return { success: false } 占位
not implemented
未实现的工具 仅在 default case 中(预期行为)

结论: 文件中没有未完成的占位符代码。所有 case 分支都有实际实现。


四、TOOL_HANDLER_MAP 映射完整性

TOOLS_DEFINITION (17个) TOOL_HANDLER_MAP (17个) executeTool case (17个) 匹配状态
17 个工具定义 17 个映射条目 17 个 case 分支 完全匹配
  • TOOLS_DEFINITION 定义了 17 个工具
  • TOOL_HANDLER_MAP 包含 17 个 snake_case → camelCase 映射
  • executeTool switch 包含 17 个 case + 1 个 default
  • 每个工具都有对应的 handler 映射和 case 实现

五、工具描述完整性

工具 描述完整性 备注
memory_recall 包含强制执行顺序说明
memory_commit 包含写入原则说明
memory_purge 包含使用场景和模式说明
memory_introspect ⚠️ 描述较短,缺少参数说明
memory_archive ⚠️ 描述较短,缺少天数说明
memory_cleanup ⚠️ 描述较短,缺少 dryRun 说明
memory_query_archived 包含使用场景和注意事项
context_rewrite 包含强制要求说明
persona_update ⚠️ 描述非常简短
persona_remove ⚠️ 描述非常简短
persona_clear ⚠️ 描述非常简短
task_create 包含 info_nodes 限制说明
task_set_state ⚠️ 描述非常简短
task_delete ⚠️ 描述非常简短
task_link_info 包含全局实体限制说明
task_archive 包含使用场景和注意事项
task_query 包含使用说明

六、发现的其他问题

1. memoryArchive 工具属性定义混淆

存在两个 archiveProps 变量:

  • archiveProps (L480): { taskId, summary } — 用于 task_archive
  • archiveProps2 (L491): { days } — 用于 memory_archive

命名容易混淆,建议重命名为 taskArchivePropsmemoryArchiveProps

2. taskSetState 的 state 参数描述过于简短

L521: makeToolDef('task_set_state', '设置任务状态。', ...)

建议补充状态枚举值说明,帮助 AI 理解可用的状态选项。

3. persona_update 缺少 mode 参数

工具描述提到 mode="replace"mode="merge",但 personaPropsPersonaUpdateParams 中都没有 mode 字段。


七、总结

✅ 完整实现: 14/17 (82%)
⚠️ 有缺陷:  3/17 (18%)
❌ 占位符:   0/17 (0%)

关键发现:

  1. 无占位符代码 — 所有工具都有实际实现,没有 TODO/FIXME/placeholder
  2. 映射完全覆盖 — TOOLS_DEFINITION ↔ TOOL_HANDLER_MAP ↔ executeTool case 100% 匹配
  3. 3个可疑项:
    • context_rewrite 是纯本地验证,非真实服务实现(设计选择)
    • task_archive 内部使用 '已暂停' 替代 'archived' 状态(语义 bug
    • task_set_state 类型定义不包含 'archived'(与文档不一致)

建议优先级:

  • 🔴 高: 修复 task_archive 的语义不一致问题
  • 🟡 中: 补充 persona_updatemode 参数支持
  • 🟢 低: 重命名 archiveProps/archiveProps2 以提高可读性