- 人工智能
- AI Agent
- Agent 框架
- 工具调用
- Agent 工作流
- RAG
- MCP Clients
- 强化学习
【免费下载链接】agent-core-java
openJiuwen agent core Java是 openJiuwen Core的 Java版本,提供AI Agent开发、运行、调优与演进相关的全套SDK能力。
导读
本文围绕 openJiuwen agent-core Java 中图存储(Graph Store)的总配置对象com.openjiuwen.core.foundation.store.graph.GraphConfig展开,完整讲解其全部配置字段、默认值与取值约束、Builder链式构建方式,并结合源码剖析构建期校验与 URI 有效性检查的底层实现。读完本文,你将能够独立配置内存图存储或 Milvus 等后端,理解dbStorageConfig、dbEmbedConfig等嵌套配置的作用,并掌握该配置对象与GraphStoreFactory、GraphStore之间的协作关系。
GraphConfig 在图存储体系中的定位
在 openJiuwen agent-core Java 中,图存储位于com.openjiuwen.core.foundation.store.graph包,是一套面向智能体知识图谱场景的统一存储抽象。该包的核心构件包括(见 graph.README.md):
GraphStore:图存储统一接口,定义实体/关系/事件的写入、查询、删除与图检索能力;GraphStoreFactory:后端注册与实例化工厂;GraphConfig:图存储总配置对象,是连接"配置"与"后端实例"的桥梁;GraphStoreStorageConfig、GraphStoreIndexConfig:嵌套的存储容量与索引配置。
GraphConfig在源码 GraphConfig.java 中实现,其 Javadoc 明确说明:该类镜像了 Python 侧openjiuwen/core/foundation/store/graph/config.py中的同名GraphConfig,从而保证 Java 与 Python 两套 SDK 的配置语义对齐。
字段全景:默认值、类型与约束
依据关联文档 GraphConfig.md 的字段表,并结合源码中Builder的实际默认值(GraphConfig.java),各字段归纳如下:
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
uri | String | 必填,无默认 | 图存储地址,不能为空白。既可以是文件路径(如本地 SQLite 风格库文件),也可以是网络地址(如http://host:port) |
name | String | "" | 配置名称 |
user | String | "" | 用户名(文档字段;当前 Java 源码未提供该字段,见下文差异说明) |
password | String | "" | 密码(文档字段;当前 Java 源码未提供该字段) |
token | String | "" | 令牌,用于后端鉴权 |
backend | String | "milvus" | 默认后端名称 |
timeout | double | 15.0 | 连接或校验超时时间,单位秒;必须大于 0 |
extras | Map<String, Object> | {}(空映射) | 附加配置,键必须为字符串 |
workerThreads | int | 30 | 工作者线程数(文档字段;Java 源码中以maxConcurrent承载,默认10) |
embedDim | int | 512 | 默认嵌入维度,要求至少为32 |
embedBatchSize | int | 10 | 默认嵌入批大小,要求至少为1 |
embeddingCls | Class<? extends Embedding> | null | 嵌入实现类型(文档字段;Java 源码中以embeddingModel直接注入Embedding实例) |
embeddingConfig | EmbeddingConfig | null | 嵌入配置(文档字段;同上,Java 侧通过embeddingModel承载) |
dbStorageConfig | GraphStoreStorageConfig | new GraphStoreStorageConfig() | 存储字段容量配置 |
dbEmbedConfig | GraphStoreIndexConfig | new GraphStoreIndexConfig() | 图索引配置 |
wipeAtStartup | boolean | false | 是否在启动时清空数据 |
requestMaxRetries | int | 5 | 请求最大重试次数 |
requestRetryWait | double | 0.1 | 请求重试等待时长,单位秒(文档字段;当前 Java 源码未提供) |
各字段的实际作用
uri:图存储的唯一地址。构建时必填,null或空白字符串会直接抛出IllegalArgumentException(源码 GraphConfig.java)。backend:指定使用哪个后端实现。工厂层默认注册了in_memory后端;当值为milvus时,GraphStoreFactory会尝试通过反射加载MilvusGraphSupport完成注册(见 GraphStoreFactory.java)。extras:透传的附加参数容器,要求键全部为String。值得关注的是,源码中的wipeAtStartup实际就存放在extras中:Builder.wipeAtStartup(...)会同时写入wipeAtStartup与wipe_at_startup两个键(GraphConfig.java),而isWipeAtStartup()从二者之一读取布尔值(GraphConfig.java),兼顾了 Python 风格下划线键与 Java 驼峰键两种写法。embedDim/embedBatchSize:控制嵌入向量的维度与批量写入规模,直接影响图检索(search)阶段的向量相似度计算与吞吐。dbStorageConfig/dbEmbedConfig:嵌套的容量与索引配置,默认为各自的无参构造实例,具体字段见下文。
用 Builder 链式构建 GraphConfig
GraphConfig对外不提供公开构造器,统一通过静态方法builder()获取Builder,再以链式调用配置字段,最后调用build()生成不可变实例。一个典型的构建示例:
import com.openjiuwen.core.foundation.store.graph.GraphConfig; GraphConfig config = GraphConfig.builder() .uri("/data/graph/graph.db") // 文件路径形式的图存储地址 .name("my-graph") .backend("in_memory") // 显式指定后端;不传时默认为 milvus .timeout(10.0) // 连接/校验超时,单位秒,必须 > 0 .embedDim(512) // 嵌入维度,必须 >= 32 .embedBatchSize(10) // 嵌入批大小,必须 >= 1 .maxConcurrent(10) // 最大并发数,必须 >= 0 .requestMaxRetries(5) // 请求最大重试次数 .wipeAtStartup(false) // 启动时是否清空数据 .build();build()返回后,配置对象内部字段均为final,extras会被复制为不可修改映射(GraphConfig.java),因此配置一经构建即不可变更,适合作为全局只读配置复用。
构建期校验与 URI 有效性检查的源码原理
GraphConfig的构造函数在组装字段前会依次执行参数校验(GraphConfig.java),失败即抛出IllegalArgumentException:
| 校验项 | 规则 | 源码位置 |
|---|---|---|
uri | 非null且非空白 | L45-L47 |
timeout | 必须> 0 | L48-L50 |
maxConcurrent | 必须>= 0 | L51-L53 |
embedDim | 必须>= 32 | L54-L56 |
embedBatchSize | 必须>= 1 | L57-L59 |
extras | 必须是键为String的映射 | L60 + L80-L86 |
上述边界均有对应测试覆盖,见 GraphConfigTest.java(numericValidatorsMatchPythonModel用例验证了timeout=0、maxConcurrent=-1、embedDim=31、embedBatchSize=0均被拒绝)。
校验通过后,checkValidity()(GraphConfig.java)执行 URI 有效性检查,其核心策略是按 URI 形态分流:
- 文件路径形态:当
uri不包含"://"时,视为本地文件路径。此时会尝试创建其父目录(Files.createDirectories);若父目录创建失败(例如父级已被普通文件占用),仅记录 warning 日志,不中断构建。对应测试见 GraphConfigTest.java。 - 网络地址形态:当
uri包含"://"时,解析出host:port后通过Socket建立连接,超时上限为timeout(换算为毫秒)。连接成功则校验通过;若目标不可达(如端口未监听)、或 URI 缺少端口导致解析异常,只记录 error 日志而不抛出异常,保证配置构建不被网络故障阻断。对应测试见 GraphConfigTest.java。
这一"失败仅记录日志"的设计非常实用:配置可以在后端服务尚未启动时安全构建,真正的连通性由后续创建后端实例时的重试机制兜底。
嵌套配置:存储容量与图索引
GraphStoreStorageConfig:字段容量上限
dbStorageConfig的类型是GraphStoreStorageConfig,用于约束图中各类字段的最大长度。默认值来自其内部Builder(GraphStoreStorageConfig.java):
| 字段 | 默认值 | 含义 |
|---|---|---|
uuid | 32 | UUID 字段长度 |
name | 500 | 名称字段长度 |
content | 65535 | 内容字段长度 |
language | 10 | 语言字段长度 |
userId | 32 | 用户 ID 字段长度 |
entities | 4096 | 实体字段长度 |
relations | 4096 | 关系字段长度 |
episodes | 4096 | 事件字段长度 |
objType | 20 | 对象类型字段长度 |
所有容量值均受 GraphStoreConstants.java 限制:VARCHAR 类字段必须落在(1, 65535]区间,数组类字段必须落在(1, 4096]区间,越界即抛异常。
GraphStoreIndexConfig:索引与 BM25
dbEmbedConfig的类型是GraphStoreIndexConfig,包含索引类型indexType(VectorField)、距离度量distanceMetric、附加索引参数extraConfigs、BM25 配置bm25Config与 BM25 分析器设置bm25AnalyzerSettings。
从源码 GraphStoreIndexConfig.java 可见其默认值:indexType = null、distanceMetric = "cosine"、extraConfigs为空LinkedHashMap、bm25Config = new BM25Config()。其中distanceMetric的合法取值仅有三个——cosine、euclidean、dot,传入其他值会抛出IllegalArgumentException(L64-L71)。测试defaultsMatchPythonModel也验证了默认距离度量为cosine(GraphConfigTest.java)。
嵌入模型:从类配置到实例注入
图存储依赖嵌入模型为实体/关系生成向量。关联文档中的embeddingCls与embeddingConfig两个字段,在当前 Java 源码中已演化为直接注入嵌入实例embeddingModel(类型为Embedding抽象类,默认为null),对应 Builder 方法为embeddingModel(Embedding)。若需要显式构建嵌入配置,可参考EmbeddingConfig(含modelName、baseUrl、apiKey三个字段)。
与 GraphStoreFactory 配合:从配置到后端实例
GraphConfig构建完成后,交由GraphStoreFactory创建真正的GraphStore:
import com.openjiuwen.core.foundation.store.graph.GraphStore; import com.openjiuwen.core.foundation.store.graph.GraphStoreFactory; GraphStore store = GraphStoreFactory.fromConfig(config); // 使用 config.getBackend() // 或显式指定后端: GraphStore store2 = GraphStoreFactory.fromConfig(config, "in_memory");源码 GraphStoreFactory.java 展示了fromConfig的解析顺序:
- 若显式传入
backendName则优先使用,否则回退到config.getBackend()(默认milvus); - 从注册表
CLASS_MAP查找后端类,命中则通过反射调用其静态fromConfig(GraphConfig, Map)或fromConfig(GraphConfig)创建实例; - 未命中时,
milvus会尝试动态加载MilvusGraphSupport完成注册,in_memory会直接装配InMemoryGraphStore; - 后端名称为空或未注册时抛出异常。
需要注意的是:GraphStoreFactory默认只注册了in_memory后端(源码 L32-L34),milvus需依赖 Milvus 支持包存在才会注册成功;开发者也可通过registerBackend(name, backendClass, force)自定义注册第三方后端,force = true可覆盖同名后端。
与 Python 实现的镜像关系与字段差异说明
从源码注释与测试注释可以确认,GraphConfig及其嵌套配置均刻意与 Python 侧保持对齐:
GraphConfig.java注释声明镜像 Python 的openjiuwen/core/foundation/store/graph/config.py;GraphStoreStorageConfig/GraphStoreIndexConfig声明镜像 Python 的database_config.py;GraphStoreFactory声明镜像 Python 的base.py;- GraphConfigTest.java 的测试名与断言目标即为"与 Python 模型保持一致"。
因此,从 Python 侧迁移配置时可以直接复用字段语义。但同时需要留意当前仓库 Java 实现与 API 文档字段表的两处演进差异:
- 文档中的
user、password、workerThreads、requestRetryWait字段在当前 Java 源码中尚未提供对应字段/方法;并发控制由maxConcurrent(默认10,且 GraphStoreConstants.java 中的DEFAULT_WORKER_NUM = 10与之呼应)承载。 - 文档中的
embeddingCls/embeddingConfig在 Java 侧以embeddingModel(Embedding实例)方式注入。
实践建议与注意事项
uri必须显式指定:没有任何默认值,缺失或空白会立刻抛异常;建议在启动早期构建配置,尽早暴露配置错误。- 本地开发优先用文件路径 uri +
in_memory后端:构建期会自动创建父目录,且不依赖外部服务;Milvus 后端则需保证服务可用,并依赖 Milvus 支持包完成注册。 - 善用
extras与wipeAtStartup:Builder.wipeAtStartup(true)会把清空开关写入extras的两个兼容键(驼峰与下划线),由后端在启动时决定是否清空存量数据;直接构造extras时务必保证键为String。 - 校验边界牢记三点:
timeout > 0、embedDim >= 32、embedBatchSize >= 1,否则构建即失败;GraphStoreIndexConfig的distanceMetric仅支持cosine/euclidean/dot。 - 配置一经构建不可变:
GraphConfig字段全部final,多线程共享同一配置实例是安全的;需要变更时请重新构建新实例。
通过合理组合GraphConfig、GraphStoreStorageConfig、GraphStoreIndexConfig与GraphStoreFactory,即可在 openJiuwen agent-core Java 中按需接入内存图存储或 Milvus 后端,为智能体的知识图谱、实体关系检索等能力提供统一、可校验的存储配置入口。
- 人工智能
- AI Agent
- Agent 框架
- 工具调用
- Agent 工作流
- RAG
- MCP Clients
- 强化学习
【免费下载链接】agent-core-java
openJiuwen agent core Java是 openJiuwen Core的 Java版本,提供AI Agent开发、运行、调优与演进相关的全套SDK能力。
相关推荐
openJiuwen agent-core-java 图存储 BM25 参数配置指南:BM25Config 详解
openJiuwen agent core java 图存储 BM25 参数配置指南:BM25Config 详解 导读 BM25Config 是 openJiu
人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习openJiuwen agent-core-java 图存储体系详解:GraphStore 接口、InMemoryGraphStore 与配置体系
openJiuwen agent core java 图存储体系详解:GraphStore 接口、InMemoryGraphStore 与配置体系 本文系统讲解
人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习openJiuwen agent-core 图存储配置全解析:GraphConfig、索引参数与混合检索排序实践指南
openJiuwen agent core 图存储配置全解析:GraphConfig、索引参数与混合检索排序实践指南 导读 本文深入解析 openJiuwen
人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考