当前位置: 首页 > news >正文

Neo4j实现向量检索

最近因为Dify、RagFlow这样的智能体的镜像拉取的速度实在太麻烦,一狠心想实现自己的最简单的RAG。
因为之前图数据库使用到了neo4j,查阅资料才发现​​Neo4j从5.11版本开始支持向量索引,提供一个真实可用的单元测试案例。

Neo4j建向量索引表

-- 创建索引语句
CREATE VECTOR INDEX doc_embedding_index
FOR (n:Doc) ON (n.embedding)
OPTIONS {indexConfig: {`vector.dimensions`: 1024,`vector.similarity_function`: 'cosine'
}}

这里是1024是根据不同的Embedding模型设置的,bge-large-zh-v1.5中使用1024

Java调用Embedding模型插入数据

// 连接 Neo4j
Driver driver = GraphDatabase.driver("bolt://127.0.0.1:7687", AuthTokens.basic("neo4j", "123456"));
Session session = driver.session()// 初始化 OpenAI 模型
// 这里使用bge-large-zh-v1.5
OpenAiEmbeddingModel embeddingModel = OpenAiEmbeddingModel.builder().baseUrl("base url").apiKey("api key").modelName("bge-large-zh-v1.5").build();
// 创建语料库
String[] contents = {"性别","年龄","男性","女性","高收入","低收入",
};
for (int i = 0; i < contents.length; i++) {String text = contents[i];Embedding embedding = embeddingModel.embed(text).content();List<Float> vector = embedding.vectorAsList();session.run("CREATE (d:Doc {id: $id, content: $content})", Values.parameters("id", "doc" + i, "content", text));session.run("""MATCH (d:Doc {id: $id})CALL db.create.setNodeVectorProperty(d, 'embedding', $vector)""", Values.parameters("id", "doc" + i, "vector", vector));
}String question = " 帮我圈个高价值年轻男性客群";// 向量化问题
Embedding questionEmbedding = embeddingModel.embed(question).content();
List<Float> queryVector = questionEmbedding.vectorAsList();// 检索数据
List<String> docs;
try (Session session = driver.session()) {Result result = session.run("""CALL db.index.vector.queryNodes('doc_embedding_index', 3, $vector)YIELD node, scoreRETURN node.content AS content""", Values.parameters("vector", queryVector));// 这里的3可以换成其他数字,指取多少个Stream<String> content = result.stream().map(record -> record.get("content").asString());docs = content.collect(Collectors.toList());System.out.println("docs: " + docs);
}
CALL db.index.vector.queryNodes('doc_embedding_index', 3, $vector)YIELD node, scoreRETURN node.content AS content

这里的3是检索的条数,可以换成自己需要检索的数量。

相关依赖

基于JDK17

<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-open-ai</artifactId><version>1.0.0-rc1</version>
</dependency>
<dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j</artifactId><version>1.0.0-rc1</version>
</dependency>
<dependency><groupId>org.neo4j.driver</groupId><artifactId>neo4j-java-driver</artifactId><version>5.28.5</version>
</dependency>

相关文章:

  • 【专题】机器学习期末复习资料
  • 【机器学习】支持向量机(SVM)
  • 华为鸿蒙电脑发布,折叠屏怎么选?
  • ToDesk云电脑、并行智算云与顺网云AI支持能力深度实测报告
  • 深度解析 Java 中介者模式:重构复杂交互场景的优雅方案
  • Linux上conda环境安装完全手札
  • JavaScript-DOM-02
  • 遨游科普:三防平板有哪些品牌?哪个品牌值得推荐?
  • 新浪、京东golang一面整理
  • 2025.05.21华为暑期实习机考真题解析第三题
  • ./build/mkfs.jffs2: Command not found
  • 34、React Server Actions深度解析
  • PDF处理控件Aspose.PDF教程:以编程方式将PDF转换为Word
  • Flask 路由装饰器:从 URL 到视图函数的优雅映射
  • 继DeepSeek之后,又一国产模型迎来突破,或将解答手机端AI的疑惑
  • Android Framework开发环境搭建
  • 游戏引擎学习第301天:使用精灵边界进行排序
  • 量子计算模拟:从理论到实践
  • virtualbox选项“启用套嵌vt-x/amd-v“不可用
  • .NET外挂系列:5. harmony 中补丁参数的有趣玩法(下)
  • 网站结构是什么 怎么做/360手机优化大师安卓版
  • 图书翻页的动画 做网站启动用/站长工具网站查询
  • wordpress slider 插件/家庭优化大师免费下载
  • 深圳做高端企业网站建设公司/市场运营和市场营销的区别
  • 自己做网站有名/我想自己建立一个网站
  • 西宁网站建设官网/seo百科