空间创建
创建工程文件夹(如 dev_langchain),并激活虚拟依赖
1 | # 创建工程文件夹 |
A thousand miles begins with a single step .
模型上下文协议(Model Context Protocol,MCP) 是一种标准化协议,使 AI 模型能够以结构化的方式与外部工具和资源进行交互。可以将其视为 AI 模型与现实世界之间的桥梁——允许模型通过一致的接口访问数据库、API、文件系统和其他外部服务。它支持多种传输机制,以适应不同环境下的灵活性需求。
MCP Java SDK 提供了模型上下文协议的 Java 实现,支持通过同步和异步通信模式与 AI 模型及工具进行标准化交互。
Spring AI 通过专用的 Boot Starters 和 MCP Java 注解,全面拥抱 MCP,使得构建能够无缝连接外部系统的复杂 AI 驱动应用程序变得前所未有的简单。这意味着 Spring 开发者可以参与 MCP 生态系统的两端——构建消费 MCP 服务器的 AI 应用程序,以及创建向更广泛的 AI 社区暴露基于 Spring 的服务的 MCP 服务器。使用 Spring Initializer 快速启动带有 MCP 支持的 AI 应用程序。
大型语言模型(LLM)是无状态的,这意味着它们不会保留之前交互的信息。当你希望在多次交互中保持上下文或状态时,这可能是一个限制。为了解决这个问题,Spring AI 提供了聊天记忆(Chat Memory)功能,允许你在与 LLM 的多次交互中存储和检索信息。
ChatMemory 抽象允许你实现各种类型的记忆,以支持不同的使用场景。消息的底层存储由 ChatMemoryRepository 处理,其唯一职责是存储和检索消息。ChatMemory 的实现负责决定保留哪些消息以及何时删除它们。策略示例包括:保留最近 N 条消息、保留一段时间内的消息,或将消息限制在一定的 token 数量以内。
提示词(Prompts)是引导 AI 模型生成特定输出的输入内容,这些提示词的设计和措辞会显著影响模型的响应。
在 Spring AI 中,与 AI 模型交互的最低层级上,处理提示词的方式有些类似于在 Spring MVC 中管理”视图(View)”。这涉及创建包含动态内容占位符的大量文本,然后根据用户请求或应用程序中的其他代码来替换这些占位符。另一个类比就是包含占位符的 SQL 语句。
随着 Spring AI 的发展,它将引入更高层次的抽象来简化与 AI 模型的交互。本节描述的基础类在角色和功能上可以类比为 JDBC:
提示词的结构在 AI 领域随着时间的推移不断演进。最初,提示词只是简单的字符串。后来,它们逐渐包含了特定输入的占位符,例如 AI 模型能识别的 “USER:”。OpenAI 通过将多个消息字符串在处理前按不同角色进行分类,为提示词引入了更结构化的形式。
大语言模型(LLM)生成结构化输出的能力,对于依赖可靠解析输出值的下游应用至关重要。开发者希望能够快速将 AI 模型的输出结果转换为 JSON、XML 或 Java 类等数据类型,以便传递给其他应用函数和方法使用。
Spring AI 的结构化输出转换器(Structured Output Converters) 帮助将 LLM 输出转换为结构化格式。如下图所示,这种方式围绕 LLM 文本补全端点(text completion endpoint)运作:

使用通用补全 API 从大语言模型(LLM)生成结构化输出,需要对输入和输出进行谨慎处理。结构化输出转换器在 LLM 调用前后都扮演着关键角色,确保最终获得期望的输出结构。
测试 AI 应用需要对生成的内容进行评估,以确保 AI 模型没有产生幻觉(hallucinated)响应。
一种评估响应的方法是使用 AI 模型本身进行评估,选择最适合评估的 AI 模型,它可能与用于生成响应的模型不同。
Spring AI 用于评估响应的接口是 Evaluator,定义如下:
1 | public interface Evaluator { |
ETL(提取、转换和加载) 管道为 Spring AI 中的 RAG 用例提供了完整的数据处理解决方案,其负责提取、转换和存储 Document 实例。
Document类包含文本、元数据以及可选的附加媒体类型,如图像、音频和视频等
1 | ┌─────────────────┐ ┌───────────────────┐ ┌─────────────────┐ |
DocumentReader 实现从 JSON、文本、HTML、Markdown、PDF 等多种格式读取数据。TokenTextSplitter 进行文本分块,或使用 KeywordMetadataEnricher 和 SummaryMetadataEnricher 等增强器丰富元数据。DocumentWriter 实现(如 VectorStore 或 FileDocumentWriter)将处理后的数据存储到目标位置。Spring AI 基于 Spring 生态系统的可观测性功能,提供对 AI 相关操作的深入洞察。它为以下核心组件提供指标(Metrics)和链路追踪(Tracing)能力:
请参考 Spring Boot Metrics 和 Spring Boot Tracing 文档,以在应用中启用指标和追踪支持。
翻译自官方文档:https://docs.spring.io/spring-ai/reference/concepts.html
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 转变为一种通用的开发者工具,无需深厚的机器学习或模型训练背景即可使用。