Spring-Ai

使用 Spring AI 实现 Text-to-SQL 聊天机器人

1、概览 现代应用日益采用自然语言界面简化系统交互,这对数据检索尤为实用 —— 非技术用户可直接用自然语言提问。 Text-to-SQL 聊天机器人便是典型实现,它充当人类语言与数据库间的桥梁。通常借助大语言模型(LLM)将自然语言问题转换为可执行 SQL 查询,随后在数据库中执行并返回结果。 本文将带你了解如何使用 Spring AI 构建 Text-to-SQL 聊天机器人。 2、项目设置 在实现聊天机器人前,需引入必要依赖并正确配置应用。 本文基于 Anthropic 的 Claude 模型构建 Text-To-Sql 聊天机器人。注意:本实现不限定特定 AI 模型,也可选用 Hugging Face 或 Ollama 的本地 LLM 作为替代方案。 2.1、依赖 首先在项目的 pom.xml 文件中添加必要依赖: <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-anthropic</artifactId> <version>1.0.0</version> </dependency> Anthropic starter 依赖 是对 Anthropic Message API 的封装,我们将通过它与 Claude 模型交互。 接下来在 application.yaml 文件中配置 Anthropic API Key 和聊天模型: spring: ai: anthropic: api-key: ${ANTHROPIC_API_KEY} chat: options: model: claude-opus-4-20250514 我们通过 ${} 属性占位符从环境变量加载 API Key。

使用 Spring AI 和 Redis 构建快速、可用于生产环境的 AI 应用

本文由 Broadcom 的 Spring 开发者倡导者 Josh Long 和 Redis 的应用 AI 工程师 Brian Sam-Bodden 共同撰写,旨在展示如何在 Spring AI 1.0 中使用 Redis。 Spring AI 1.0 是面向 Java 开发的综合性 AI 工程解决方案。受 AI 领域飞速发展的影响,该版本经过了一个重要的开发阶段,现已发布。该版本为 AI 工程师提供了多项核心新功能。Redis 作为 Spring AI 的原生向量数据库,可助力构建高性能 AI 应用。 当前 Java 和 Spring 正处于 AI 应用的黄金时期。大量企业应用基于 Spring Boot 运行,这使其能轻松将 AI 能力集成至现有系统。你可直接将业务逻辑和数据无缝对接 AI 模型,无需复杂改造。 Spring AI 支持多种 AI 模型与技术: Image model(图像模型):根据文本提示生成图像。 Transcription model(转录模型):将音频转换为文本。 Embedding model(嵌入模型):将任意数据转换为向量(专为语义相似性搜索优化的数据类型)。 Chat model(对话模型):用户最熟悉的类型,可辅助文档修正或诗歌创作(但暂不建议用于讲笑话),虽功能强大但仍存在局限。 在 Spring AI 中,需要解决一些问题:对话模型具有开放性思维,容易偏离主题,需要通过 system prompt(系统提示)来规范其响应结构和形式。

Spring AI 中的 OpenAI 文本转语音(TTS)指南

1、概览 如今,应用程序极大地受益于神经网络集成,例如知识库、助手或分析引擎。其中一个实际用例是将文本转换为语音。这一过程被称为 文本转语音(Text-to-Speech,TTS),能够以自然逼真、类人的声音自动生成音频内容。 现代 TTS 系统利用深度学习技术处理发音、节奏、语调甚至情感。与早期的基于规则的方法不同,这些模型通过海量数据集训练,可以生成富有表现力的多语言语音,非常适合虚拟助手或包容性教育平台等全球化应用场景。 本文将带你了解如何在 Spring AI 中使用 OpenAI 文本转语音(TTS)。 2、依赖配置 首先,需要添加 spring-ai-starter-model-openai 依赖: <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-openai</artifactId> <version>1.1.0</version> </dependency> 接下来,为 OpenAI 模型配置 Spring AI 属性: # Api Key spring.ai.openai.api-key=${OPENAI_API_KEY} # 模型 spring.ai.openai.audio.speech.options.model=tts-1 # 语音风格 spring.ai.openai.audio.speech.options.voice=alloy # 响应的数据格式 spring.ai.openai.audio.speech.options.response-format=mp3 # 语音速度 spring.ai.openai.audio.speech.options.speed=1.0 要使用 OpenAI API,必须设置 OpenAI API Key。同时还需要指定 文本转语音(TTS) 的模型 名称、语音风格、响应格式以及 音频 速度。 3、构建文本转语音应用 现在,构建文本转语音应用。 首先,创建 TextToSpeechService Service 类: @Service public class TextToSpeechService { private OpenAiAudioSpeechModel openAiAudioSpeechModel; // 构造函数注入 @Autowired public TextToSpeechService(OpenAiAudioSpeechModel openAiAudioSpeechModel) { this.

Spring AI 1.0 正式 GA

Spring AI 1.0 正式发布。 快速开始 构件已经发布到 maven central,可以通过提供的 bom 导入依赖项。 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.0.0</version>0 <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> 请查看 升级说明,了解最新的更改和升级方法。注意:你可以使用 OpenRewrite Recipe 自动升级到 1.0.0-GA。这可帮助应用此版本的许多必要代码更改。可在 Arconia Spring AI Migrations 查找使用说明。 你可以在 Intialzr 网站上开始创建 1.0 GA 应用,并阅读参考文档中的 “入门” 部分。 博客 这有一些博客精选,这些博客展示了如何以各种方式使用 Spring AI: 微软 Azure 博客 和 视频。特别感谢 Asir Selvasingh,他在 2023 年拉斯维加斯 Spring One 大会上帮助我们 发布了 Spring AI AWS - 博客 - Spring AI 1.0 为广大开发人员带来人工智能技术 Google - 博客 - Google Cloud 和 Spring AI 1.

使用 Spring AI 从图片中提取结构化数据

1、概览 本文将带你了解如何使用 Spring AI 通过 OpenAI 聊天模型从图像中提取结构化数据。 OpenAI 聊天模型可以分析上传的图像并返回相关信息。它还能返回结构化的输出结果,这些输出结果可以很容易地通过管道输送到其他应用程序,以进行进一步操作。 举例说明,我们要创建一个 Web 服务,接收客户端上传的图像并将其发送给 OpenAI,以计算图像中彩色汽车的数量。Web 服务会以 JSON 格式返回颜色数量。 2、Spring Boot 配置 在 Maven pom.xml 中添加以下 Spring Boot Start Web 和 Spring AI Model OpenAI 依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>1.0.0-M6</version> </dependency> 在 Spring Boot application.yml 文件中,必须要提供用于验证 OpenAI API 的 API 密钥(spring.ai.openai.api-key)和能够执行图像分析的聊天模型(spring.ai.openai.chat.options.model)的配置。 有多种支持图像分析的 模型,如 gpt-4o-mini、gpt-4o 和 gpt-4.5-preview。像 gpt-4o 这样的大模型知识面较广,但成本较高,而像 gpt-4o-mini 这样的小型模型成本较低,延迟也较小。我们可以根据自己的需求来选择型号。 本文选择使用 gpt-4o 模型: spring: ai: openai: api-key: "<YOUR-API-KEY>" chat: options: model: "gpt-4o" 配置完毕后,Spring Boot 就会自动加载 OpenAiAutoConfiguration 以注册 ChatClient 等 Bean。

Spring AI 1.0.0-SNAPSHOT:重要变更和更新说明

Spring AI 1.0.0-SNAPSHOT 在构件 ID、依赖管理和自动配置方面引入了几项重要变更。 本文将带你了解这些变更并提供项目更新指南。 最显著的变更是 Spring AI Starter 构件的命名模式: 模型 starter:spring-ai-{model}-spring-boot-starter → spring-ai-starter-model-{model} 向量存储 starter:spring-ai-{store}-store-spring-boot-starter → spring-ai-starter-vector-store-{store} MCP starter:spring-ai-mcp-{type}-spring-boot-starter → spring-ai-starter-mcp-{type} 此外,你需要添加快照仓库并更新 Dependency Management (依赖管理)配置。 有两种方式可以将项目更新到 Spring AI 1.0.0-SNAPSHOT:使用 AI 工具自动更新 或 手动更新。自动方式利用 Claude Code 快速转换你的项目,而手动方式为那些喜欢直接进行更改的人提供了逐步说明。 使用 Claude Code 自动更新 对于偏好自动化方式的用户,你可以使用 Claude Code CLI 工具,通过提供的提示自动将项目升级到 1.0.0-SNAPSHOT。这种方法可以在升级多个项目或复杂代码库时节省时间并减少错误。更多详情,请参阅升级说明中的 使用 AI 自动升级 部分。 这里仅以屏幕截图的形式展示 Claude Code CLI 工具将执行的步骤。 更新 BOM 版本。 添加仓库。 更新 starter。 全部完成! 手动更新 添加快照仓库 要使用 1.0.0-SNAPSHOT 版本,你需要在构建文件(pom.xml)中添加相应的快照仓库。其中,Central Sonatype Snapshots 仓库(https://central.

Spring Boot 无缝接入 DeepSeek 和通义千问

本文将带你了解如何在 Spring Boot 中使用 spring-ai 无缝接入 DeepSeek 和通义千问来构建自己的 AI 应用。 Spring & JDK 版本: springboot 3.4.3 jdk17 1、maven依赖 <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency> 2、application.yaml 配置 # DeepSeek 配置,完全兼容openai配置 # spring: # ai: # openai: # base-url: https://api.deepseek.com # DeepSeek的OpenAI式端点 # api-key: sk-xxxxxxxxx # chat.options: # model: deepseek-chat # 指定DeepSeek的模型名称 # 通义千问配置 spring: ai: openai: base-url: https://dashscope.aliyuncs.com/compatible-mode # 通义千问 api-key: sk-xxxxxxxxxxx chat.options: model: qwen-plus 3、Controller package org.example.springboot3ds.controller; import jakarta.annotation.PostConstruct; import jakarta.annotation.Resource; import org.

使用 DeepSeek 模型和 Spring AI 构建 AI 聊天机器人

1、概览 现代 Web 应用越来越多地与大型语言模型(LLM)集成,以构建解决方案。 DeepSeek 是一家中国的 AI 研究公司,致力于开发功能强大的 LLM,最近凭借其 DeepSeek-V3 和 DeepSeek-R1 模型颠覆了人工智能世界。DeepSeek-V3 和 DeepSeek-R1 模型揭示了它的思维链(CoT),让我们了解了 AI 模型是如何解释和处理给定提示的。 本文将带你了解如何将 DeepSeek 模型与 Spring AI 集成,以构建一个能够进行多轮文本对话的简单聊天机器人。 2、依赖和配置 有多种方法可以将 DeepSeek 模型集成到我们的应用中。 2.1、使用 OpenAI DeepSeek 模型与 OpenAI API 完全兼容,可以使用任何 OpenAI 客户端或库进行访问。 首先,在项目的 pom.xml 文件中添加 Spring AI 的 OpenAI Starter 依赖: <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> <version>1.0.0-M6</version> </dependency> 由于当前的 1.0.0-M6 版本是里程碑版本,因此还需要在 pom.xml 中添加 Spring Milestones Repository: <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> 该 Repository 是发布里程碑版本的地方,而不是标准的 Maven Central Repository。无论我们选择哪种配置选项,都需要添加这个里程碑 Repository。

使用 Spring AI 和 PGVector 实现语义搜索

1、概览 搜索 是软件中的一个基本概念,目的是在大数据集中查找相关信息。它涉及在一系列项目中查找特定项目。 本文将带你了解如何使用 Spring AI、PGVector 和 Ollama 实现语义搜索。 2、基础概念 语义搜索是一种先进的搜索技术,它利用词语的含义来查找最相关的结果。要构建语义搜索应用,需要了解一些关键概念: 词嵌入(Word Embedding):词嵌入是一种词表示类型,允许具有相似含义的单词具有类似的表示形式。词嵌入将单词转换为数值向量,可以在机器学习模型中使用。 语义相似性:语义相似性是衡量两段文本在意义上相似程度的一种方法。它用于比较单词、句子或文档的含义。 向量空间模型:向量空间模型是一种数学模型,用于将文本文档表示为高维空间中的向量。在该模型中,每个单词都表示为一个向量,两个单词之间的相似度根据它们向量之间的距离来计算。 余弦相似度:余弦相似度是内积空间中两个非零向量之间的相似度量,它测量的是两个向量之间角度的余弦值。它计算向量空间模型中两个向量之间的相似度。 3、先决条件 首先,我们需要在机器上安装 Docker,以便运行 PGVector 和 Ollama。 然后,在 Spring 应用中添加 Spring AI Ollama 和 PGVector 依赖: <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-ollama-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-pgvector-store-spring-boot-starter</artifactId> </dependency> 还要添加 Spring Boot 的 Docker Compose 支持,以管理 Ollama 和 PGVector Docker 容器: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-docker-compose</artifactId> <version>3.1.1</version> </dependency> 除了依赖外,还要在 docker-compose.yml 文件中描述这两个服务: services: postgres: image: pgvector/pgvector:pg17 environment: POSTGRES_DB: vectordb POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "5434:5432" healthcheck: test: [ "CMD-SHELL", "pg_isready -U postgres" ] interval: 10s timeout: 5s retries: 5 ollama: image: ollama/ollama:latest ports: - "11435:11434" volumes: - ollama_data:/root/.

Spring AI Advisor 指南

1、概览 AI 驱动的应用已成为我们的新现实。我们正在广泛实现各种 RAG 应用和提示 API,并使用 LLM 创建令人印象深刻的项目。借助 Spring AI,我们可以更快、更稳定地完成这些任务。 本文将带你了解 Spring AI Advisor 这一功能,它可以为我们处理各种常规任务。 2、Spring AI Advisor 是什么? Advisors 是在 AI 应用程序中处理请求和响应的拦截器。我们可以使用它们为提示流程设置额外的功能。例如,可以建立聊天历史、排除敏感词或为每个请求添加额外的上下文。 该功能的核心组件是 CallAroundAdvisor 接口。我们通过实现该接口来创建 Advisor 链,从而影响我们的请求或响应。Advisor 流程如下图所示: 我们会将提示(prompt)发送到一个聊天模型,该模型关联了一个 Advisor 链。在发送提示之前,链上的每个 Advisor 都会执行其 before 操作。同样,在收到聊天模型的回复之前,每个 Advisor 都会调用自己的 after 操作。 3、ChatMemoryAdvisor ChatMemoryAdvisor 是一组非常有用的 Advisor 实现。我们可以使用这些 Advisor 提供与聊天提示的交流历史,从而提高聊天回复的准确性。 3.1、MessageChatMemoryAdvisor 使用 MessageChatMemoryAdvisor,我们可以通过 messages 属性提供聊天客户端调用的聊天历史记录。我们可以将所有消息保存在 ChatMemory 实现中,并控制历史记录的大小。 示例如下: @SpringBootTest(classes = ChatModel.class) @EnableAutoConfiguration @ExtendWith(SpringExtension.class) public class SpringAILiveTest { @Autowired @Qualifier("openAiChatModel") ChatModel chatModel; ChatClient chatClient; @BeforeEach void setup() { chatClient = ChatClient.