mirror of
https://gitcode.com/JianFeeeee/TrulyMEM-TrueHumanMEM.git
synced 2026-09-20 17:08:18 +00:00
- 显式配置 session cookie (HTTPOnly/SameSite/Secure/Name) - 前端 fetch 增加 credentials: same-origin - 登录成功后备 cookie 设置 - 服务端 api_login 增加调试日志 - 星图布局基于 mention_count 优化节点间距 - 保留旧数据库数据
9.0 KiB
9.0 KiB
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 映射executeToolswitch 包含 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_archivearchiveProps2(L491):{ days }— 用于memory_archive
命名容易混淆,建议重命名为 taskArchiveProps 和 memoryArchiveProps。
2. taskSetState 的 state 参数描述过于简短
L521: makeToolDef('task_set_state', '设置任务状态。', ...)
建议补充状态枚举值说明,帮助 AI 理解可用的状态选项。
3. persona_update 缺少 mode 参数
工具描述提到 mode="replace" 和 mode="merge",但 personaProps 和 PersonaUpdateParams 中都没有 mode 字段。
七、总结
✅ 完整实现: 14/17 (82%)
⚠️ 有缺陷: 3/17 (18%)
❌ 占位符: 0/17 (0%)
关键发现:
- 无占位符代码 — 所有工具都有实际实现,没有 TODO/FIXME/placeholder
- 映射完全覆盖 — TOOLS_DEFINITION ↔ TOOL_HANDLER_MAP ↔ executeTool case 100% 匹配
- 3个可疑项:
context_rewrite是纯本地验证,非真实服务实现(设计选择)task_archive内部使用'已暂停'替代'archived'状态(语义 bug)task_set_state类型定义不包含'archived'(与文档不一致)
建议优先级:
- 🔴 高: 修复
task_archive的语义不一致问题 - 🟡 中: 补充
persona_update的mode参数支持 - 🟢 低: 重命名
archiveProps/archiveProps2以提高可读性