Skip to content

fix:修复graph-memory部分全量用例 - #98

Open
openjiuwen-sync-bot[bot] wants to merge 2 commits into
openJiuwen-ai:730from
openjiuwenai:sync/pr-228
Open

fix:修复graph-memory部分全量用例#98
openjiuwen-sync-bot[bot] wants to merge 2 commits into
openJiuwen-ai:730from
openjiuwenai:sync/pr-228

Conversation

@openjiuwen-sync-bot

@openjiuwen-sync-bot openjiuwen-sync-bot Bot commented Aug 6, 2026

Copy link
Copy Markdown

Paired: GitHub #98GitCode !228

冒烟测试:
image.png

问题背景

此前多个 Java 测试仅保留了 Python 用例数据,但以 SDKGap 为由跳过。逐项对照 Python 实现和测试后发现,问题分为两类:

  1. Java 测试缺少可执行的本地 GraphMemory 测试夹具,但 Java SDK 本身已经具备对应能力。
  2. Java core 存在实际的 Python 运行时契约差异。

具体差异包括:

  • 重复注册搜索策略时,Java 抛出普通 IllegalArgumentException,Python 抛出带标准错误码的 BaseError
  • debug=true 时,Java 没有记录 GraphMemory LLM 调用的模板、prompt 和响应。
  • Python 会将 Human 实体的 summary_target 翻倍,Java 未实现该行为。
  • 014 的 Java 测试错误地期望返回全部四条 Episode,而 Python 只要求包含语义相关的两条。

解决方案

1. 补齐本地确定性测试夹具

GraphMemoryCaseSupport 中加入本地可执行的:

  • 确定性 LLM 响应队列
  • 确定性 Embedding
  • 本地 Reranker
  • In-memory GraphStore
  • 多批次、多用户 addMemory + search 执行链路
  • LLM prompt 记录及日志捕获能力

测试不依赖真实 LLM、Embedding、Milvus 或阿里云 Reranker,不产生外部网络请求,但仍通过公开 API 执行真实 GraphMemory 主流程。

2. 修复 core 运行时契约

  • 重复注册同名策略且 force=false 时,改为抛出:

    BaseError(StatusCode.MEMORY_STORE_VALIDATION_INVALID)

  • debug=true 时,按 Python 行为记录:

    • 模板名称
    • 最终组装的 prompt
    • LLM 响应
  • 日志在释放 LLM semaphore 后输出,避免延长并发许可占用时间。

  • 构造实体摘要 prompt 时:

    • 普通实体保持配置的 summary_target
    • Human 实体使用 summary_target * 2
    • 同时支持数字和数字字符串输入

3. 恢复 Python 测试意图

解除以下用例的 @Disabled

  • TestGraphMemory002
  • TestGraphMemory003
  • TestGraphMemory004
  • TestGraphMemory005
  • TestGraphMemory008
  • TestGraphMemory010
  • TestGraphMemory012
  • TestGraphMemory014
  • TestGraphMemory015

覆盖的 Python 契约包括:

  • DOCUMENT、JSON、字典消息等不同输入形式
  • content_fmt_kwargs 角色格式化
  • 多用户数据隔离
  • 多用户联合搜索
  • attachEmbedder
  • 动态 reference_time
  • debug LLM 日志
  • AddMemStrategy 的 recall、summary 和 merge 配置
  • force=true 覆盖同名策略
  • force=false 重复策略错误
  • 异常后继续使用原默认策略搜索

014 的 Episode 预期同步为 Python 原用例中的两条包含断言。

015 对 Python 测试进行了等价加强:明确要求重复注册必须抛出异常,避免“没有抛异常也能继续通过”的测试漏洞。

变更范围

agent-core-java

  • GraphMemory.java
    • 重复策略结构化异常
    • debug LLM 调用日志
  • ExtractionPrompts.java
    • Human 实体 summary_target 翻倍
  • GraphMemoryBaseTest.java
    • 重复策略异常测试
    • debug 日志测试
  • GraphExtractionTest.java
    • 普通实体与 Human 摘要限制测试

jiuwen-test

  • GraphMemoryCaseSupport.java
    • 增加本地确定性 GraphMemory 测试夹具
    • 实现上述九个 Python 契约用例
  • 对应测试类
    • 移除 @Disabled

验证结果

agent-core-java

mvn -q -Dtest=GraphMemoryBaseTest,GraphExtractionTest test

结果:11 个测试通过,0 失败,0 跳过。

jiuwen-test

mvn -q '-Dtest=TestGraphMemory*' test

结果:

  • 13 个测试通过
  • 0 个失败
  • 2 个跳过

当前仅保留以下未修复用例的跳过状态:

  • TestGraphMemory011:真实 rerank 搜索契约
  • TestGraphMemory013query_embedding + reference_time 搜索契约

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: b5146ccdc796ca437f91b19fbffa124e9a95057a

TASK STATUS DETAILS
CodeCheck ❌FAILED Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ✅SUCCESS Click here
Maven Build ✅SUCCESS See CHECK tab

@openjiuwen-collaboration-bot

Copy link
Copy Markdown

head_sha: 4389be0d1118299c898b4e0e9dbd934be14d2e76

TASK STATUS DETAILS
CodeCheck ✅SUCCESS Click here
AntiPoison ✅SUCCESS Click here
Software Composition Analysis ✅SUCCESS Click here
Maven Build ✅SUCCESS See CHECK tab

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants