SpaceX AI-Spring Boot REST服务
Spring Boot 3.4 REST服务,使用Spring AI和OpenAI查询公共SpaceX API(https://docs.spacexdata.com/)通过自然语言提示。该服务公开了REST端点,并包括一个用于AI代理的MCP(模型上下文协议)工具服务器。
特性
- 🚀 使用Java 17的Spring Boot 3.4
- 🤖 Spring AI与OpenAI集成(默认模型:gpt-4o-mini)
- 📡 SpaceX API发射台、火箭、飞船和发射台客户
- 💬 通过自然语言界面
/ask端点 - 🔌 用于AI代理集成的MCP工具服务器
- 🐳 Docker和Docker Compose支持
- ✅ 单元测试
建筑
┌─────────────────┐
│ User/Agent │
└────────┬────────┘
│
▼
┌─────────────────────────────────────────┐
│ Spring Boot Application │
│ │
│ ┌─────────────┐ ┌──────────────┐ │
│ │ /ask │───▶│ OpenAI via │ │
│ │ endpoint │ │ Spring AI │ │
│ └─────────────┘ └──────┬───────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ Tools/Services │ │
│ │ (Functions) │ │
│ └────────┬───────┘ │
│ │ │
│ ▼ │
│ ┌────────────────┐ │
│ │ SpaceX Client │ │
│ └────────┬───────┘ │
└──────────────────────────────┼─────────┘
│
▼
┌─────────────────┐
│ SpaceX API │
│ (public) │
└─────────────────┘先决条件
- Java 17或更高版本
- Maven 3.8+
- Docker和Docker Compose(可选,用于容器化部署)
- OpenAI API密钥(从https://platform.openai.com/)
快速开始
1.克隆存储库
git clone https://github.com/davittatenkohayrapetyan/spring-ai-poc.git
cd spring-ai-poc2.设置环境变量
创建一个 .env 模板中的文件:
cp .env.example .env编辑 .env 并添加您的OpenAI API密钥:
OPENAI_API_KEY=your-actual-api-key-here3.使用Maven运行
# Build the project
mvn clean package
# Run the application
export OPENAI_API_KEY=your-api-key
mvn spring-boot:run
# OR use the convenience script
export OPENAI_API_KEY=your-api-key
./run.sh4.使用Docker Compose运行
# Build and run
docker-compose up --build
# Run in detached mode
docker-compose up -d
# Stop the services
docker-compose downAPI终点
快速测试
您可以运行包含的测试脚本来试用API:
# Make sure the application is running first
./test-api.sh健康检查
curl http://localhost:8080/api/health答复:
{ "status": "UP" }询问端点(自然语言查询)
发送关于SpaceX的自然语言问题,以获得人工智能的回应:
curl -X POST http://localhost:8080/api/ask \
-H "Content-Type: application/json" \
-d '{
"question": "What is the latest SpaceX launch?"
}'示例响应:
{
"question": "What is the latest SpaceX launch?",
"answer": "The latest SpaceX launch was..."
}配置
应用程序属性(src/main/resources/application.yml):
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o-mini
temperature: 0.7
max-tokens: 4096
spacex:
api:
base-url: https://api.spacexdata.com/v4SpaceX API集成
该应用程序提供了一个从公共SpaceX API获取数据的REST客户端(https://api.spacexdata.com/v4).
- 发布:所有、即将发布、过去、最新、下一个,按ID
- 火箭:全部或按ID
- 船舶:全部或按ID
- 发射台:全部或按ID
MCP工具服务器
如果需要,请单独运行MCP服务器:
java -jar target/spacex-ai-1.0.0-SNAPSHOT.jar \
--spring.main.web-application-type=none服务器通过JSON-RPC在stdin/stdout上进行通信。
项目结构
spring-ai-poc/
├── src/
│ ├── main/
│ │ ├── java/com/spacex/ai/
│ │ │ ├── SpacexAiApplication.java
│ │ │ ├── client/
│ │ │ │ └── SpaceXClient.java
│ │ │ ├── config/
│ │ │ │ └── SpaceXFunctionConfiguration.java
│ │ │ ├── controller/
│ │ │ │ └── SpaceXAiController.java
│ │ │ ├── mcp/
│ │ │ │ ├── McpServerApplication.java
│ │ │ │ └── McpToolServer.java
│ │ │ ├── model/
│ │ │ └── service/
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/com/spacex/ai/
│ ├── client/
│ │ └── SpaceXClientTest.java
│ └── controller/
│ └── SpaceXAiControllerTest.java
├── Dockerfile
├── docker-compose.yml
├── pom.xml
├── .env.example
├── .gitignore
└── README.md使用的技术
- 弹簧靴3.4
- 春季AI 1.0.3
- OpenAI(gpt-4o-mini)
- 春季WebFlux
- 杰克逊
- JUnit5,模拟Web服务器
- Maven、Docker
故障排除
- 验证OPENAI_API_KEY已导出且有效
- 检查与SpaceX API的连接:
curl https://api.spacexdata.com/v4/launches/latest - 使用
docker-compose logs用于容器日志 - Apple Silicon(M1/M2/M3):如果在构建镜像时看到“清单中的平台不匹配”错误,请更新到最新的Docker Desktop。此项目现在使用多拱形基础图像。作为解决方法,您还可以强制平台:
# Build locally forcing linux/arm64
DOCKER_DEFAULT_PLATFORM=linux/arm64 docker-compose build --no-cache
# Or for x86 emulation (slower):
DOCKER_DEFAULT_PLATFORM=linux/amd64 docker-compose build --no-cache资源
- Spring AI文档:https://docs.spring.io/spring-ai/reference/
- OpenAI API:https://platform.openai.com/docs
- SpaceX API:https://github.com/r-spacex/SpaceX-API
- 模型上下文协议:https://modelcontextprotocol.io/
许可证
这个项目是开源的,可以在MIT许可证下使用。
