自动配置
Spring AI 为 Elasticsearch Vector Store 提供了 Spring Boot 自动配置。要启用它,请在项目的 Maven pom.xml 或 Gradle build.gradle 文件中添加以下依赖:
Maven
1 | <dependency> |
Gradle
1 | dependencies { |
A thousand miles begins with a single step .
Spring AI 为 Elasticsearch Vector Store 提供了 Spring Boot 自动配置。要启用它,请在项目的 Maven pom.xml 或 Gradle build.gradle 文件中添加以下依赖:
1 | <dependency> |
1 | dependencies { |
向量数据库是一种特殊类型的数据库,在 AI 应用中扮演着至关重要的角色。在向量数据库中,查询方式与传统关系型数据库不同,向量数据库执行的是相似度搜索,而非精确匹配。当给定一个向量作为查询时,向量数据库会返回与查询向量”相似”的向量。
向量数据库用于将您的数据与 AI 模型集成,其使用步骤如下:
这种技术被称为检索增强生成(Retrieval Augmented Generation,RAG)。
本文将介绍 Spring AI 中使用多种向量数据库实现的接口,以及一些高层级的使用示例。最后一节旨在揭开向量数据库中相似度搜索底层方法的神秘面纱。
Skills(技能)是一种为 LLM 配备可复用的、自包含的行为指令的机制。一个技能(Skill)捆绑了名称、简短描述、一组指令正文(即其 content),以及可选的资源(例如参考资料、素材、模板等)。LLM 按需加载技能,保持初始上下文较小,仅在真正需要时才拉取详细指令。
注意: langchain4j Skills API 目前处于实验阶段。API 和行为在未来的版本中仍可能发生变化。
LangChain4j 提供了对 Spring Boot 的一流集成支持,让你能够以声明式的方式在 Spring Boot 应用中快速使用 AI 服务。只需添加对应的 starter 依赖,即可自动配置 ChatModel、StreamingChatModel 等核心组件,并通过 @AiService 注解轻松定义具备 AI 能力的服务接口。
要求:LangChain4j Spring Boot 集成需要 Java 17 及以上版本,同时支持 Spring Boot 3 和 Spring Boot 4 两大系列。两个系列同步发布,共享相同的版本号。请根据你项目中使用的 Spring Boot 版本选择对应的 starter 组合。
Spring Boot starter 依赖的命名规范为:
1 | langchain4j-{集成名称}-spring-boot-starter (Spring Boot 3) |
分类(Classification)对于将文本归类到预定义标签中至关重要,例如情感分析、意图检测和实体识别,这里演示了使用 LangChain4j 的 AI 驱动服务进行情感分类。
LangChain4j 支持两种常见的文本分类方法:
情感分类服务可用于多种应用场景,包括:
Guardrails(护栏)是一种机制,用于验证 LLM 的输入和输出,确保其符合您的预期。可以使用护栏来实现以下目的(或其他功能):
实验性功能:Guardrails 是一项实验性功能。其 API 和行为可能在未来版本中发生变化。
护栏仅在使用 AI Services 时可用。 它们是高层抽象,不能直接应用于ChatModel或StreamingChatModel。
本页介绍如何使用底层 LLM API 进行响应流式传输。如需高层级 LLM API,请参阅 AI Services。
LLM 逐 token 生成文本,因此许多 LLM 提供商提供了按 token 流式传输响应的方式,而无需等待整个文本生成完毕。这显著改善了用户体验,因为用户无需等待未知时长的处理时间,几乎可以立即开始阅读响应内容。
ChatModel 和 LanguageModel 接口分别对应 StreamingChatModel 和 StreamingLanguageModel 接口。它们具有相似的 API支持流式传输响应。这些接口接受一个 StreamingChatResponseHandler 接口的实现作为参数。
RAG 流程分为两个截然不同的阶段:索引阶段和检索阶段,LangChain4j 为两个阶段都提供了工具支持。
在索引阶段,文档会被预处理,以便在检索阶段实现高效搜索。这个过程会根据所使用的信息检索方法而有所不同。对于向量搜索,通常包括:清洗文档、用额外数据和元数据丰富文档、将文档分割成更小的片段(即分块)、对这些片段进行嵌入编码,最后将它们存储到嵌入存储(即向量数据库)中。
索引阶段通常发生在离线状态下,这意味着不需要终端用户等待其完成。例如,可以通过 cron 定时任务在周末每周一次重新索引公司内部文档。负责索引的代码也可以是一个单独的应用程序,仅处理索引任务。然而,在某些场景下,终端用户可能希望上传自定义文档以使其可被 LLM 访问。在这种情况下,索引应在在线状态下执行,并作为主应用程序的一部分。
以下是索引阶段的简化示意图:
1 | 文档 → 清洗/丰富 → 分块 → 嵌入 → 嵌入存储(向量数据库) |