侧边栏壁纸
博主头像
牧云

怀璧慎显,博识谨言。

  • 累计撰写 120 篇文章
  • 累计创建 13 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

概述

秋之牧云
2026-03-03 / 0 评论 / 0 点赞 / 5 阅读 / 0 字

1. AI 概念

1.1. 模型(Model)

AI 模型是旨在处理和生成信息的算法,通常模仿人类认知功能。通过从大型数据集中学习模式和见解,这些模型可以进行预测,生成文本、图像或其他输出,从而增强各行业的各种应用。

AI 模型有许多不同的类型,每种都适用于特定的用例。

根据模型的输入和输出类型进行分类。

Spring AI 目前支持处理语言、图像和音频作为输入和输出的模型。

上表中最后一行,接受文本作为输入并输出数字的,通常被称为嵌入文本,它代表了 AI 模型中使用的内部数据结构。Spring AI 支持嵌入以实现更高级的用例。Spring AI 支持嵌入以实现更高级的用例。

GPT 中的“P”所指——Chat Generative Pre-trained Transformer(聊天生成型预训练变换模型)。这种预训练特性将 AI 转化为一种通用的开发工具,无需广泛的机器学习或模型训练背景。

1.2. 提示(Prompt)

提示是基于语言的输入的基础,用于引导 AI 模型生成特定的输出。提示看起来只是输入到对话框中并发送到 API 的文本。然而,提示包含的远不止这些。在许多 AI 模型中,提示的文本不仅仅是一个简单的字符串。

ChatGPT 的 API 在一个提示中有多个文本输入,每个文本输入都被分配了一个角色。例如,有系统角色,它告诉模型如何行为并为交互设置上下文。还有用户角色,通常是来自用户的输入。

精心设计有效的提示既是一门艺术,也是一门科学。

与使用 SQL “提问”有很大的不同。必须像与另一个人交谈一样与 AI 模型进行交流。

这种交互风格使得“提示工程”成为一个独立的学科。目前有大量技术可以提高提示的有效性。投入时间制作提示可以大大改善最终输出。

1.2.1. 提示模版(Prompt Template)

创建有效提示涉及建立请求的上下文,并用用户输入特定的值替换请求的部分。例如

Tell me a {adjective} joke about {content}.

此过程使用传统的基于文本的模板引擎进行提示创建和管理。Spring AI 为此目的采用了 OSS 库 StringTemplate

在 Spring AI 中,提示模板可以比作 Spring MVC 架构中的“视图”。提供一个模型对象,通常是 java.util.Map,用于填充模板中的占位符。“渲染”的字符串成为提供给 AI 模型的提示内容。

提示已经发展到包含多条消息,其中每条消息中的每个字符串都代表模型的不同角色。

1.3. 嵌入(Embedding)

嵌入是文本、图像或视频的数值表示,用于捕获输入之间的关系。

嵌入通过将文本、图像和视频转换为浮点数数组(称为向量)来工作。这些向量旨在捕获文本、图像和视频的含义。嵌入数组的长度称为向量的维度。通过计算两个文本的向量表示之间的数值距离,应用程序可以确定用于生成嵌入向量的对象之间的相似性

作为一名探索 AI 的 Java 开发人员,不必理解这些向量表示背后的复杂数学理论或具体实现。对它们在 AI 系统中的作用和功能有一个基本了解就足够了,尤其是在将 AI 功能集成到应用程序中时。

嵌入在检索增强生成(RAG)模式等实际应用中特别重要。它们能够将数据表示为语义空间中的点,这类似于欧几里得几何的二维空间,但在更高的维度中。

这意味着,就像欧几里得几何中平面上的点可以根据它们的坐标接近或远离一样,在语义空间中,点的接近反映了意义上的相似性。关于相似主题的句子在这个多维空间中位置更接近,就像图表上相互靠近的点一样。这种接近性有助于文本分类语义搜索,甚至是产品推荐等任务,因为它允许 AI 根据这些扩展语义景观中的“位置”来识别和分组相关概念。

1.4. Token(令牌)

Token 是 AI 模型工作方式的基本组成部分。在输入时,模型将单词转换为 token。在输出时,它们将 token 转换回单词。

在英语中,一个 token 大致相当于一个单词的 75%。作为参考,莎士比亚的全部作品,总计约 90 万字,大约转换为 120 万个 token。

使用 AI 的费用取决于使用的 token 数量。输入和输出都计入总 token 数量。

此外,模型受 token 限制,这限制了单个 API 调用中处理的文本量。这个阈值通常被称为“上下文窗口”。模型不会处理任何超出此限制的文本。

例如,ChatGPT3 有 4K token 限制,而 GPT4 提供不同的选项,例如 8K、16K 和 32K。Anthropic 的 Claude AI 模型具有 100K token 限制,Meta 最近的研究产生了一个 1M token 限制的模型。

要用 GPT4 总结莎士比亚的全部作品,您需要设计软件工程策略来切分数据,并在模型的上下文窗口限制内呈现数据。Spring AI 项目可以帮助您完成这项任务。

1.5. 结构化输出

AI 模型的输出传统上以 java.lang.String 的形式出现,即使您要求回复是 JSON 格式。它可能是一个正确的 JSON,但它不是 JSON 数据结构。它只是一个字符串。此外,在提示中要求“JSON”并不是 100% 准确。

这种复杂性导致了一个专业领域的出现,涉及创建提示以产生预期的输出,然后将生成的简单字符串转换为可用于应用程序集成的可用数据结构。

结构化输出转换采用精心制作的提示,通常需要与模型进行多次交互才能实现所需的格式。

1.6. 将自有数据和 API 带入 AI 模型

GPT 3.5/4.0 数据集仅延伸到 2021 年 9 月。因此,模型表示它不知道需要此日期之后知识的问题的答案。

如何为 AI 模型提供它尚未训练过的信息?有三种技术可以自定义 AI 模型以纳入您的数据

微调:这种传统的机器学习技术涉及调整模型并更改其内部权重。然而,对于机器学习专家来说,这是一个具有挑战性的过程,对于像 GPT 这样规模的模型来说,计算资源消耗极大。此外,有些模型可能不提供此选项。

提示填充:一种更实用的替代方法是将您的数据嵌入到提供给模型的提示中。鉴于模型的 Token 限制,需要采用技术在模型的上下文窗口中呈现相关数据。这种方法通俗地称为“填充提示”。Spring AI 库可帮助您实现基于“填充提示”技术(又称检索增强生成(RAG))的解决方案。

工具调用:此技术允许注册工具(用户定义的 servicio),将大型语言模型连接到外部系统的 API。Spring AI 极大地简化了您为支持工具调用所需编写的代码。

1.6.1. RAG(检索增强生成)

用于解决将相关数据整合到提示中以实现准确 AI 模型响应。

该方法涉及批处理风格的编程模型,其中作业从文档中读取非结构化数据,对其进行转换,然后将其写入向量数据库。从高层次来看,这是一个 ETL(提取、转换和加载)管道。向量数据库用于 RAG 技术的检索部分

在将非结构化数据加载到向量数据库的过程中,最重要的转换之一是将原始文档分成更小的片段。将原始文档分成更小片段的过程包括两个重要步骤:

  1. 保持内容语义边界的同时将文档分成多个部分。例如,对于包含段落和表格的文档,应避免在段落或表格中间分割文档。对于代码,应避免在方法实现中间分割代码。

  2. 将文档的各个部分进一步分割成大小仅占 AI 模型 token 限制一小部分的部分。

RAG 的下一阶段是处理用户输入。当 AI 模型需要回答用户问题时,问题和所有“相似”的文档片段都会被放入发送给 AI 模型的提示中。这就是使用向量数据库的原因。它非常擅长查找相似内容

  • ETL 管道提供了更多关于协调从数据源提取数据并将其存储在结构化向量存储中的信息,确保数据以最佳格式进行检索,以便将其传递给 AI 模型。

  • ChatClient - RAG 解释了如何使用 QuestionAnswerAdvisor 在您的应用程序中启用 RAG 功能。

1.6.2. 工具调用(Tool Call)

大型语言模型(LLM)在训练后是固定的,导致知识陈旧,并且无法访问或修改外部数据。

工具调用机制解决了这些缺点。它允许您将自己的服务注册为工具,以将大型语言模型连接到外部系统的 API。这些系统可以为 LLM 提供实时数据,并代表它们执行数据处理操作。

在Spring AI 中可以将工具作为带 @Tool 注解的方法,并在提示选项中提供它,供模型使用,可以在单个提示中定义和引用多个工具。

  1. 当我们要使某个工具可供模型使用时,我们会将其定义包含在聊天请求中。每个工具定义都包含名称、描述和输入参数的模式。

  2. 当模型决定调用工具时,它会发送一个响应,其中包含工具名称和根据定义模式建模的输入参数。

  3. 应用程序负责使用工具名称识别并执行带有提供的输入参数的工具。

  4. 工具调用的结果由应用程序处理。

  5. 应用程序将工具调用结果发送回模型。

  6. 模型使用工具调用结果作为附加上下文生成最终响应。

1.7. 评估 AI 响应

有效评估 AI 系统的响应用户请求的输出对于确保最终应用程序的准确性和实用性至关重要。可以使用预训练模型本身来实现评估。

评估过程涉及分析生成的响应是否符合用户意图和查询上下文。相关性、连贯性和事实正确性等指标用于衡量 AI 生成响应的质量。

一种方法是将用户的请求和 AI 模型的响应都呈现给模型,查询响应是否与提供的数据一致。

此外,利用存储在向量数据库中的信息作为补充数据可以增强评估过程,有助于确定响应的相关性。

Spring AI 项目提供了 Evaluator API,目前可访问评估模型响应的基本策略。

2. 入门

Spring AI 支持 Spring Boot 3.4.x 和 3.5.x。

2.1. Artifact 仓库

2.1.1. 发布版 - 使用 Maven Central

Spring AI 1.0.0 及更高版本可在 Maven Central 中获取。无需额外的仓库配置。只需确保您的构建文件中已启用 Maven Central。

<!-- Maven Central is included by default in Maven builds.
You usually don’t need to configure it explicitly,
but it's shown here for clarity. -->
<repositories>
  <repository>
    <id>central</id>
    <url>https://repo.maven.apache.org/maven2</url>
  </repository>
</repositories>

2.1.2. 快照版 - 添加快照仓库

要使用最新的开发版本(例如 1.1.0-SNAPSHOT)或 1.0.0 之前的旧里程碑版本,您需要在构建文件中添加以下快照仓库。

将以下仓库定义添加到您的 Maven 或 Gradle 构建文件中

<repositories>
  <repository>
    <id>spring-snapshots</id>
    <name>Spring Snapshots</name>
    <url>https://repo.spring.io/snapshot</url>
    <releases>
      <enabled>false</enabled>
    </releases>
  </repository>
  <repository>
    <name>Central Portal Snapshots</name>
    <id>central-portal-snapshots</id>
    <url>https://central.sonatype.com/repository/maven-snapshots/</url>
    <releases>
      <enabled>false</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
</repositories>

注意:使用 Maven 和 Spring AI 快照时,请注意您的 Maven 镜像配置。如果您在 settings.xml 中配置了如下镜像

<mirror>
    <id>my-mirror</id>
    <mirrorOf>*</mirrorOf>
    <url>https://my-company-repository.com/maven</url>
</mirror>

通配符 * 会将所有仓库请求重定向到您的镜像,从而阻止访问 Spring 快照仓库。要解决此问题,请修改 mirrorOf 配置以排除 Spring 仓库

<mirror>
    <id>my-mirror</id>
    <mirrorOf>*,!spring-snapshots,!central-portal-snapshots</mirrorOf>
    <url>https://my-company-repository.com/maven</url>
</mirror>

此配置允许 Maven 直接访问 Spring 快照仓库,同时仍将您的镜像用于其他依赖项。

2.2. 依赖管理

Spring AI 物料清单 (BOM) 声明了 Spring AI 特定版本所使用的所有依赖项的推荐版本。这是一个仅限 BOM 的版本,它只包含依赖管理,不包含插件声明或对 Spring 或 Spring Boot 的直接引用。您可以使用 Spring Boot 父 POM,或使用 Spring Boot 的 BOM (spring-boot-dependencies) 来管理 Spring Boot 版本。

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>1.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

2.3. 添加特定组件的依赖项

文档中的以下每个部分都显示了您需要添加到项目构建系统中的依赖项。

0

评论区