0%

概述

提示词(Prompts)是引导 AI 模型生成特定输出的输入内容,这些提示词的设计和措辞会显著影响模型的响应。

在 Spring AI 中,与 AI 模型交互的最低层级上,处理提示词的方式有些类似于在 Spring MVC 中管理”视图(View)”。这涉及创建包含动态内容占位符的大量文本,然后根据用户请求或应用程序中的其他代码来替换这些占位符。另一个类比就是包含占位符的 SQL 语句。

随着 Spring AI 的发展,它将引入更高层次的抽象来简化与 AI 模型的交互。本节描述的基础类在角色和功能上可以类比为 JDBC:

  • ChatModel 类类似于 JDK 中的核心 JDBC 库。
  • ChatClient 类可以类比为 JdbcClient,构建在 ChatModel 之上,通过 Advisor 提供更多高级构造,用于考虑与模型的过去交互、用额外的上下文文档增强提示词,以及引入代理行为。

提示词的结构在 AI 领域随着时间的推移不断演进。最初,提示词只是简单的字符串。后来,它们逐渐包含了特定输入的占位符,例如 AI 模型能识别的 “USER:”。OpenAI 通过将多个消息字符串在处理前按不同角色进行分类,为提示词引入了更结构化的形式。

Read more »

概述

大语言模型(LLM)生成结构化输出的能力,对于依赖可靠解析输出值的下游应用至关重要。开发者希望能够快速将 AI 模型的输出结果转换为 JSON、XML 或 Java 类等数据类型,以便传递给其他应用函数和方法使用。

Spring AI 的结构化输出转换器(Structured Output Converters) 帮助将 LLM 输出转换为结构化格式。如下图所示,这种方式围绕 LLM 文本补全端点(text completion endpoint)运作:

springai-structured-output

使用通用补全 API 从大语言模型(LLM)生成结构化输出,需要对输入和输出进行谨慎处理。结构化输出转换器在 LLM 调用前后都扮演着关键角色,确保最终获得期望的输出结构。

Read more »

概述

测试 AI 应用需要对生成的内容进行评估,以确保 AI 模型没有产生幻觉(hallucinated)响应。
一种评估响应的方法是使用 AI 模型本身进行评估,选择最适合评估的 AI 模型,它可能与用于生成响应的模型不同。

Evaluator 接口

Spring AI 用于评估响应的接口是 Evaluator,定义如下:

1
2
3
4
5
6
public interface Evaluator {

EvaluationRequest createEvaluationRequest(String userText, List<String> dataList, String responseContent);

EvaluationResponse evaluate(EvaluationRequest evaluationRequest);
}
Read more »

概述

ETL(提取、转换和加载) 管道为 Spring AI 中的 RAG 用例提供了完整的数据处理解决方案,其负责提取、转换和存储 Document 实例。

Document 类包含文本、元数据以及可选的附加媒体类型,如图像、音频和视频等

1
2
3
4
┌─────────────────┐    ┌───────────────────┐    ┌─────────────────┐
│ DocumentReader │ -> │ DocumentTransformer │ -> │ DocumentWriter │
│ (数据提取) │ │ (数据转换) │ │ (数据存储) │
└─────────────────┘ └───────────────────┘ └─────────────────┘
  • 提取阶段:使用各种 DocumentReader 实现从 JSON、文本、HTML、Markdown、PDF 等多种格式读取数据。
  • 转换阶段:使用 TokenTextSplitter 进行文本分块,或使用 KeywordMetadataEnricherSummaryMetadataEnricher 等增强器丰富元数据。
  • 加载阶段:使用 DocumentWriter 实现(如 VectorStoreFileDocumentWriter)将处理后的数据存储到目标位置。
Read more »

概述

检索增强生成(RAG: Retrieval Augmented Generation)是一种用于克服大型语言模型在长文本内容、事实准确性和上下文感知方面局限性的技术。

Spring AI 通过提供模块化架构来支持 RAG,允许你自行构建自定义 RAG 流程,或使用 Advisor API 提供的开箱即用 RAG 流程。

Read more »

翻译自官方文档:https://docs.spring.io/spring-ai/reference/concepts.html

AI 模型(AI Models)

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

AI 模型有许多不同的类型,每种都适用于特定的用例。虽然 ChatGPT 及其生成式 AI 能力通过文本输入和输出吸引了大量用户,但许多模型和公司提供了多样化的输入和输出形式。在 ChatGPT 之前,许多人就对 Midjourney 和 Stable Diffusion 等文本生成图像模型着迷。

下表根据输入和输出类型对几种模型进行了分类:

输入 输出 示例
文本 文本 ChatGPT
文本 图像 Midjourney、Stable Diffusion
文本 音频 ElevenLabs
图像 文本 OCR、图像描述
文本 嵌入(数字) Embedding 模型

Spring AI 目前支持处理语言、图像和音频作为输入和输出的模型。上表中最后一行(接受文本作为输入并输出数字)通常被称为文本嵌入(Embedding),代表了 AI 模型内部使用的数据结构。Spring AI 支持嵌入功能,以实现更高级的用例。

GPT 等模型的独特之处在于其预训练特性——正如 GPT 中的 “P” 所表示的那样:Chat Generative Pre-trained Transformer(对话生成式预训练 Transformer)。这种预训练特性使 AI 转变为一种通用的开发者工具,无需深厚的机器学习或模型训练背景即可使用。

Read more »

概述

递归 Advisor(Recursive Advisors) 是一种特殊类型的 Advisor,可以多次循环遍历下游 Advisor 链。这种模式在需要重复调用大语言模型(LLM)直到满足特定条件时非常有用,例如:

  • 循环执行工具调用,直到无需再调用任何工具
  • 验证结构化输出,并在验证失败时重试
  • 通过修改请求来实现评估(Evaluation)逻辑
  • 通过修改请求来实现重试逻辑
Read more »

概述

Spring AI 的 Advisors API 提供了一种灵活而强大的方式,用于在 Spring 应用中拦截、修改和增强 AI 驱动的交互。通过 Advisors API,开发者可以构建更复杂、可复用且易维护的 AI 组件。

主要优势:

  • 封装常见的生成式 AI 模式(如 RAG、对话记忆、内容审查等)
  • 转换发送给和接收自大语言模型(LLM)的数据
  • 在不同模型和用例之间实现可移植性

推荐注册方式:官方建议在构建时使用 ChatClientdefaultAdvisors() 方法注册 Advisor:

1
2
3
ChatClient.builder(chatModel)
.defaultAdvisors(new MyAdvisor())
.build();

同时Advisor 也会加入 Observability(可观测性)栈,你可以查看其执行的指标(Metrics)和链路追踪(Traces)。

Read more »

随着 AI Agent 连接的服务增多(Slack、GitHub、Jira、MCP 服务器等),工具库迅速膨胀。一个典型的多服务器设置很容易拥有 50+ 工具,在对话开始之前就消耗 55,000+ Token。当模型面对 30+ 名称相似的工具时,工具选择准确性也会下降。

工具搜索工具模式通过按需工具发现解决这个问题:

Spring AI 在2.0版本提供了该机制,可用于实现Tool的渐进加载,更好的为agent服务

  1. 模型初始只收到一个搜索工具 — 最小化 Token 使用
  2. 当需要某种能力时,模型用自然语言查询调用搜索工具
  3. 匹配的工具定义被动态展开到上下文中
  4. 模型随后可以正常调用被发现的工具

这实现了显著的 Token 节省,同时保持对大型工具目录的访问。

Read more »