0%

概述

向量数据库是一种特殊类型的数据库,在 AI 应用中扮演着至关重要的角色。在向量数据库中,查询方式与传统关系型数据库不同,向量数据库执行的是相似度搜索,而非精确匹配。当给定一个向量作为查询时,向量数据库会返回与查询向量”相似”的向量。

向量数据库用于将您的数据与 AI 模型集成,其使用步骤如下:

  1. 首先将您的数据加载到向量数据库中。
  2. 当用户查询需要发送给 AI 模型时,先检索一组相似的文档。
  3. 这些文档随后作为用户问题的上下文,与用户查询一起发送给 AI 模型。

这种技术被称为检索增强生成(Retrieval Augmented Generation,RAG)

本文将介绍 Spring AI 中使用多种向量数据库实现的接口,以及一些高层级的使用示例。最后一节旨在揭开向量数据库中相似度搜索底层方法的神秘面纱。

Read more »

简介

LangGraph4j 是一个用于在 Java 中构建有状态的、多智能体(Multi-Agent)应用程序的库,与大型语言模型(LLM)深度集成。它灵感来源于 Python 的 LangGraph 库,旨在与 LangChain4j 和 Spring AI 等主流 Java LLM 框架无缝协作。

从本质上讲,LangGraph4j 允许你定义循环图(Cyclical Graphs),让不同的组件(智能体、工具或自定义逻辑)以有状态的方式进行交互。这对于构建需要记忆、上下文以及不同”智能体”之间协作或任务交接的复杂应用程序至关重要。

Read more »

Skills(技能)是一种为 LLM 配备可复用的、自包含的行为指令的机制。一个技能(Skill)捆绑了名称、简短描述、一组指令正文(即其 content),以及可选的资源(例如参考资料、素材、模板等)。LLM 按需加载技能,保持初始上下文较小,仅在真正需要时才拉取详细指令。

注意: langchain4j Skills API 目前处于实验阶段。API 和行为在未来的版本中仍可能发生变化。

Read more »

LangChain4j 提供了对 Spring Boot 的一流集成支持,让你能够以声明式的方式在 Spring Boot 应用中快速使用 AI 服务。只需添加对应的 starter 依赖,即可自动配置 ChatModelStreamingChatModel 等核心组件,并通过 @AiService 注解轻松定义具备 AI 能力的服务接口。

要求:LangChain4j Spring Boot 集成需要 Java 17 及以上版本,同时支持 Spring Boot 3Spring Boot 4 两大系列。两个系列同步发布,共享相同的版本号。请根据你项目中使用的 Spring Boot 版本选择对应的 starter 组合。

添加 Starter 依赖

Spring Boot starter 依赖的命名规范为:

1
2
langchain4j-{集成名称}-spring-boot-starter   (Spring Boot 3)
langchain4j-{集成名称}-spring-boot4-starter (Spring Boot 4)
Read more »

分类(Classification)对于将文本归类到预定义标签中至关重要,例如情感分析意图检测实体识别,这里演示了使用 LangChain4j 的 AI 驱动服务进行情感分类

LangChain4j 支持两种常见的文本分类方法:

  1. 通过 AI Services 使用 LLM:当标签依赖于细微的自然语言推理时使用。
  2. 通过 TextClassifier 和 EmbeddingModelTextClassifier 使用嵌入:当你为每个类别提供了带标签的示例,并希望通过语义相似度进行分类时使用。

情感分类服务可用于多种应用场景,包括:

  • 客户反馈分析:将客户评论分类为积极、中性或消极。
  • 社交媒体监控:分析社交媒体评论中的情感趋势。
  • 聊天机器人响应:理解用户情感以提供更好的回复。
Read more »

Guardrails(护栏)是一种机制,用于验证 LLM 的输入和输出,确保其符合您的预期。可以使用护栏来实现以下目的(或其他功能):

  • 过滤不当内容
  • 验证输出格式
  • 限制敏感信息泄露
  • 确保回答符合业务规则

实验性功能:Guardrails 是一项实验性功能。其 API 和行为可能在未来版本中发生变化。
护栏仅在使用 AI Services 时可用。 它们是高层抽象,不能直接应用于 ChatModelStreamingChatModel

Read more »

本页介绍如何使用底层 LLM API 进行响应流式传输。如需高层级 LLM API,请参阅 AI Services

为什么需要流式传输?

LLM 逐 token 生成文本,因此许多 LLM 提供商提供了按 token 流式传输响应的方式,而无需等待整个文本生成完毕。这显著改善了用户体验,因为用户无需等待未知时长的处理时间,几乎可以立即开始阅读响应内容。

核心接口

ChatModelLanguageModel 接口分别对应 StreamingChatModelStreamingLanguageModel 接口。它们具有相似的 API支持流式传输响应。这些接口接受一个 StreamingChatResponseHandler 接口的实现作为参数。

Read more »

RAG 流程

RAG 流程分为两个截然不同的阶段:索引阶段检索阶段,LangChain4j 为两个阶段都提供了工具支持。

索引阶段

在索引阶段,文档会被预处理,以便在检索阶段实现高效搜索。这个过程会根据所使用的信息检索方法而有所不同。对于向量搜索,通常包括:清洗文档、用额外数据和元数据丰富文档、将文档分割成更小的片段(即分块)、对这些片段进行嵌入编码,最后将它们存储到嵌入存储(即向量数据库)中。

索引阶段通常发生在离线状态下,这意味着不需要终端用户等待其完成。例如,可以通过 cron 定时任务在周末每周一次重新索引公司内部文档。负责索引的代码也可以是一个单独的应用程序,仅处理索引任务。然而,在某些场景下,终端用户可能希望上传自定义文档以使其可被 LLM 访问。在这种情况下,索引应在在线状态下执行,并作为主应用程序的一部分。

以下是索引阶段的简化示意图:

1
文档 → 清洗/丰富 → 分块 → 嵌入 → 嵌入存储(向量数据库)
Read more »

一些大语言模型(LLM)除了生成文本之外,还可以触发动作。这个被称为”工具”或”函数调用”的概念,它允许 LLM 在必要时调用一个或多个通常由开发者定义的可用工具。工具可以是任何东西:网络搜索、调用外部 API,或执行特定的代码片段等。LLM 实际上不能自己调用工具,相反,它们在响应中表达调用特定工具的意图(而不是以纯文本形式响应)。

所有支持工具的 LLM 可以在此处找到(参见”Tools”列)。
并非所有 LLM 对工具的支持程度都一样,理解、选择并正确使用工具的能力在很大程度上取决于具体的模型和它的能力。有些模型可能完全不支持工具,而另一些则可能需要精心设计的提示词或额外的系统指令。


LangChain4j 工具抽象层级

LangChain4j 为使用工具提供了两个抽象层级:ChatModel级别和AI—Services级别。

Read more »