190 lines
4.0 KiB
Markdown
190 lines
4.0 KiB
Markdown
|
# Spring AI 聊天演示项目
|
|||
|
|
|||
|
这是一个基于 Spring AI 的简单聊天应用演示项目,展示了如何与大语言模型进行对话。
|
|||
|
|
|||
|
## 功能特性
|
|||
|
|
|||
|
- 🤖 支持多种大语言模型(OpenAI、Ollama)
|
|||
|
- 💬 简洁美观的聊天界面
|
|||
|
- 🔧 简单的配置和部署
|
|||
|
- 📱 响应式设计,支持移动端
|
|||
|
|
|||
|
## 技术栈
|
|||
|
|
|||
|
- **Spring Boot 3.2.0** - 应用框架
|
|||
|
- **Spring AI 0.8.1** - AI 集成框架
|
|||
|
- **Thymeleaf** - 模板引擎
|
|||
|
- **HTML/CSS/JavaScript** - 前端界面
|
|||
|
|
|||
|
## 快速开始
|
|||
|
|
|||
|
### 1. 环境要求
|
|||
|
|
|||
|
- Java 17 或更高版本
|
|||
|
- Maven 3.6 或更高版本
|
|||
|
|
|||
|
### 2. 配置大语言模型
|
|||
|
|
|||
|
#### 使用 OpenAI(推荐)
|
|||
|
|
|||
|
在 `src/main/resources/application.yml` 中配置:
|
|||
|
|
|||
|
```yaml
|
|||
|
spring:
|
|||
|
ai:
|
|||
|
openai:
|
|||
|
api-key: your-openai-api-key-here
|
|||
|
base-url: https://api.openai.com # 可选,默认值
|
|||
|
```
|
|||
|
|
|||
|
或者通过环境变量设置:
|
|||
|
|
|||
|
```bash
|
|||
|
export OPENAI_API_KEY=your-openai-api-key-here
|
|||
|
```
|
|||
|
|
|||
|
#### 使用 Ollama(本地部署)
|
|||
|
|
|||
|
1. 首先安装并启动 Ollama:
|
|||
|
```bash
|
|||
|
# 安装 Ollama
|
|||
|
curl -fsSL https://ollama.ai/install.sh | sh
|
|||
|
|
|||
|
# 拉取模型(例如 llama2)
|
|||
|
ollama pull llama2
|
|||
|
|
|||
|
# 启动 Ollama 服务
|
|||
|
ollama serve
|
|||
|
```
|
|||
|
|
|||
|
2. 在配置文件中启用 Ollama:
|
|||
|
```yaml
|
|||
|
spring:
|
|||
|
ai:
|
|||
|
ollama:
|
|||
|
base-url: http://localhost:11434
|
|||
|
chat:
|
|||
|
options:
|
|||
|
model: llama2
|
|||
|
```
|
|||
|
|
|||
|
### 3. 运行应用
|
|||
|
|
|||
|
```bash
|
|||
|
# 编译项目
|
|||
|
mvn clean compile
|
|||
|
|
|||
|
# 运行应用
|
|||
|
mvn spring-boot:run
|
|||
|
```
|
|||
|
|
|||
|
应用启动后,访问 http://localhost:8080 即可使用聊天界面。
|
|||
|
|
|||
|
### 4. API 接口
|
|||
|
|
|||
|
除了网页界面,还提供了简单的 API 接口:
|
|||
|
|
|||
|
```bash
|
|||
|
# 简单对话接口
|
|||
|
curl "http://localhost:8080/simple?q=你好"
|
|||
|
|
|||
|
# POST 接口
|
|||
|
curl -X POST http://localhost:8080/chat \
|
|||
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|||
|
-d "message=介绍一下 Spring AI"
|
|||
|
```
|
|||
|
|
|||
|
## 项目结构
|
|||
|
|
|||
|
```
|
|||
|
src/
|
|||
|
├── main/
|
|||
|
│ ├── java/com/example/springaidemo/
|
|||
|
│ │ ├── SpringAiDemoApplication.java # 应用主类
|
|||
|
│ │ ├── config/
|
|||
|
│ │ │ └── AiConfig.java # AI 配置类
|
|||
|
│ │ └── controller/
|
|||
|
│ │ └── ChatController.java # 聊天控制器
|
|||
|
│ └── resources/
|
|||
|
│ ├── application.yml # 应用配置
|
|||
|
│ └── templates/
|
|||
|
│ └── chat.html # 聊天界面模板
|
|||
|
```
|
|||
|
|
|||
|
## 配置说明
|
|||
|
|
|||
|
### OpenAI 配置
|
|||
|
|
|||
|
```yaml
|
|||
|
spring:
|
|||
|
ai:
|
|||
|
openai:
|
|||
|
api-key: ${OPENAI_API_KEY:your-openai-api-key} # OpenAI API Key
|
|||
|
base-url: ${OPENAI_BASE_URL:https://api.openai.com} # API 基础 URL
|
|||
|
chat:
|
|||
|
options:
|
|||
|
model: gpt-3.5-turbo # 使用的模型
|
|||
|
temperature: 0.7 # 温度参数(0-1)
|
|||
|
```
|
|||
|
|
|||
|
### Ollama 配置
|
|||
|
|
|||
|
```yaml
|
|||
|
spring:
|
|||
|
ai:
|
|||
|
ollama:
|
|||
|
base-url: ${OLLAMA_BASE_URL:http://localhost:11434} # Ollama 服务地址
|
|||
|
chat:
|
|||
|
options:
|
|||
|
model: ${OLLAMA_MODEL:llama2} # 使用的模型
|
|||
|
```
|
|||
|
|
|||
|
## 自定义和扩展
|
|||
|
|
|||
|
### 添加新的对话端点
|
|||
|
|
|||
|
在 `ChatController` 中添加新的方法:
|
|||
|
|
|||
|
```java
|
|||
|
@GetMapping("/custom")
|
|||
|
@ResponseBody
|
|||
|
public String customChat(@RequestParam("message") String message) {
|
|||
|
// 自定义处理逻辑
|
|||
|
String prompt = "请用专业的语言回答:" + message;
|
|||
|
return chatClient.call(prompt);
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 修改聊天界面
|
|||
|
|
|||
|
编辑 `src/main/resources/templates/chat.html` 文件来自定义界面样式和功能。
|
|||
|
|
|||
|
### 添加更多 AI 提供商
|
|||
|
|
|||
|
Spring AI 支持多种 AI 提供商,包括:
|
|||
|
- OpenAI
|
|||
|
- Azure OpenAI
|
|||
|
- Hugging Face
|
|||
|
- Ollama
|
|||
|
- Anthropic Claude
|
|||
|
|
|||
|
## 常见问题
|
|||
|
|
|||
|
### 1. OpenAI API Key 错误
|
|||
|
- 确保 API Key 正确设置
|
|||
|
- 检查 API Key 是否有足够的配额
|
|||
|
- 验证网络连接是否正常
|
|||
|
|
|||
|
### 2. Ollama 连接失败
|
|||
|
- 确保 Ollama 服务正在运行
|
|||
|
- 检查端口 11434 是否可访问
|
|||
|
- 确认模型已正确下载
|
|||
|
|
|||
|
### 3. 应用启动失败
|
|||
|
- 检查 Java 版本是否为 17 或更高
|
|||
|
- 确保网络连接正常
|
|||
|
- 查看控制台错误日志
|
|||
|
|
|||
|
## 许可证
|
|||
|
|
|||
|
MIT License
|