1. 概述
随着技术的发展,现代应用程序越来越多地采用自然语言界面来简化用户与系统的交互。这种方式在数据检索场景中尤其实用,让非技术用户也能通过简单的自然语言提问来获取所需信息。
文本转 SQL 聊天机器人就是这样一个典型应用。它就像是人类语言和数据库之间的翻译官,通过大型语言模型(LLM)将用户的自然语言问题转换为可执行的 SQL 查询,然后在数据库中执行查询并返回结果。
本文将带你使用 Spring AI 构建一个文本转 SQL 聊天机器人。我们会从零开始配置数据库模式和初始数据,然后实现一个能够理解自然语言并生成 SQL 查询的智能聊天机器人。
2. 项目搭建
在开始实现聊天机器人之前,我们需要先添加必要的依赖项并完成应用程序的基础配置。
本文将使用 Anthropic 的 Claude 模型来构建文本转 SQL 聊天机器人。当然,你也可以选择其他 AI 模型,比如通过 Hugging Face 或 Ollama 使用本地 LLM,因为具体的 AI 模型选择并不影响整体实现方案。
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 密钥和聊天模型:
spring:
ai:
anthropic:
api-key: ${
ANTHROPIC_API_KEY}
chat:
options:
model: claude-opus-4-20250514
这里使用 ${}
属性占位符从环境变量中加载 API 密钥,这是一种安全的配置方式。
我们选择了 Claude 4 Opus 模型,这是 Anthropic 目前最智能的模型,对应的模型 ID 是 claude-opus-4-20250514
。你也可以根据实际需求选择其他模型。
完成上述配置后,Spring AI 会自动创建 ChatModel
类型的 Bean,这样我们就可以直接与指定的模型进行交互了。
2.2. 使用 Flyway 设计数据库表
接下来,我们需要设计数据库模式。这里使用 Flyway 来管理数据库迁移脚本,确保数据库结构的版本控制。
我们将在 MySQL 数据库中创建一个简单的巫师管理系统数据库。和 AI 模型选择一样,具体的数据库类型并不影响我们的实现方案。
首先,在 src/main/resources/db/migration
目录下创建名为 V01__creating_database_tables.sql
的迁移脚本,用于创建核心数据表:
CREATE TABLE hogwarts_houses (
id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
name VARCHAR(50) NOT NULL UNIQUE,
founder VARCHAR(50) NOT NULL UNIQUE,
house_colors VARCHAR(50) NOT NULL UNIQUE,
animal_symbol VARCHAR(50) NOT NULL UNIQUE
);
CREATE TABLE wizards (
id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
name VARCHAR(50) NOT NULL,
gender EN