自然语言订单管理系统

通过Spring AI和MCP协议实现自然语言交互的电商订单管理系统,简化API操作流程。

  • by atul-gupta47
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 atul-gupta47/spring-ai-mcp-server-demo

使用说明

Spring AI MCP 服务器演示 - 电子商务订单管理

概述

这个项目展示了如何将Spring AI与模型上下文协议(MCP)集成,以创建用于REST API操作的自然语言接口。该演示展示了一个电子商务订单管理系统,开发者可以使用自然语言提示来创建客户、产品和订单,而不是手动构建复杂的API请求。

问题陈述

在企业开发中,测试功能往往需要通过按特定顺序进行多次API调用来设置复杂数据。这个过程是:

  • 对开发者来说很耗时
  • 在处理复杂请求负载时容易出错
  • 需要深入理解API合约和业务逻辑
  • 难以维护和记录

解决方案:MCP服务器集成

MCP服务器允许开发者使用自然语言来:

  • 创建包含完整地址信息的客户
  • 添加产品,并填写价格和库存详情
  • 下单购买多种产品
  • 查询现有数据

建筑学

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   MCP Client    │    │   MCP Server    │    │  Spring Boot    │
│ (Claude/Other)  │◄──►│  (This Demo)    │◄──►│   REST APIs     │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                                │
                                ▼
                       ┌─────────────────┐
                       │   PostgreSQL    │
                       │    Database     │
                       └─────────────────┘

技术栈

  • Spring Boot 3.2.0 - 主应用程序框架
  • Spring AI 1.0.0-M4(可译为“Spring AI 1.0.0 版本M4”或根据上下文简化为“Spring AI M4版”) - 人工智能集成与MCP服务器
  • PostgreSQL 15 - 数据库
  • Gradle(注:这是一个专有名词,通常不翻译,直接保留原样,但在此处为符合中文表达习惯,可简单说明其为“一个构建工具/系统”的概念,不过实际翻译中仍常用“Gradle”本身) - 构建工具
  • Docker - 集装化
  • OpenAI GPT-3.5-turbo - 语言模型

API终端点

客户管理

  • POST /api/customers - 创建一个新客户
  • GET /api/customers/{id} - 通过ID获取客户
  • GET /api/customers/email/{email} - 通过电子邮件获取客户信息
  • GET /api/customers - 获取所有客户

产品管理

  • POST /api/products - 创建一个新产品
  • GET /api/products/{id} - 通过ID获取产品
  • GET /api/products/category/{category} - 按类别获取产品
  • GET /api/products/search?name={name} - 按名称搜索产品
  • GET /api/products/sku/{sku} - 通过SKU获取产品
  • GET /api/products - 获取所有产品

订单管理

  • POST /api/orders - 创建一个新订单
  • GET /api/orders/{id} - 按ID获取订单
  • GET /api/orders/customer/{customerId} - 按客户获取订单
  • PUT /api/orders/{id}/status?status={status} - 更新订单状态
  • GET /api/orders - 获取所有订单

可用的MCP工具

MCP服务器提供了以下用于自然语言交互的工具:

  1. 创建客户 - 创建包含地址信息的客户
  2. 创建产品 - 添加产品并设置价格和库存
  3. 创建订单 - 下单购买多种产品
  4. 获取客户 - 获取客户信息
  5. 获取产品 - 根据各种标准查找产品
  6. 获取订单 - 获取订单详情和历史记录

快速入门

先决条件

  • Java 17 或更高版本
  • Docker 和 Docker Compose
  • OpenAI API密钥(用于MCP客户端集成)

1. 克隆并设置

git clone <repository-url>
cd spring-ai-mcp-server-demo

2. 环境配置

创建一个 .env 项目根目录下的文件:

OPENAI_API_KEY=your-openai-api-key-here

3. 使用 Docker Compose 运行

# Start the application and database
docker-compose up --build

# The application will be available at http://localhost:8080
# PostgreSQL will be available at localhost:5432

4. 替代方案:本地开发

# Start PostgreSQL (if not using Docker)
docker run --name ecommerce-postgres -e POSTGRES_DB=ecommerce_demo -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres:15

# Run the application
./gradlew bootRun

使用示例

传统API方法

创建一个完整的订单场景需要多次API调用:

# 1. Create customer
curl -X POST http://localhost:8080/api/customers \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com",
    "phone": "+1-555-0123",
    "address": {
      "street": "123 Main St",
      "city": "New York",
      "state": "NY",
      "zipCode": "10001",
      "country": "USA"
    }
  }'

# 2. Create products
curl -X POST http://localhost:8080/api/products \
  -H "Content-Type: application/json" \
  -d '{
    "name": "MacBook Pro",
    "description": "Apple MacBook Pro 16-inch",
    "price": 2499.99,
    "category": "Electronics",
    "sku": "MBP-16-001",
    "stockQuantity": 10
  }'

# 3. Create order
curl -X POST http://localhost:8080/api/orders \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": 1,
    "orderItems": [
      {
        "productId": 1,
        "quantity": 1
      }
    ]
  }'

MCP自然语言处理方法

通过MCP集成,同样的场景变为:

"Create a customer named John Doe with email john.doe@example.com, phone +1-555-0123, and address at 123 Main St, New York, NY 10001, USA. Then add a MacBook Pro product priced at $2499.99 with SKU MBP-16-001 and 10 units in stock. Finally, create an order for John Doe with 1 MacBook Pro."

MCP 客户端设置

选项1:Claude桌面集成

  1. 安装Claude桌面应用程序
  2. 在您的Claude桌面配置中添加以下内容:
{
  "mcpServers": {
    "ecommerce-demo": {
      "command": "java",
      "args": ["-jar", "/path/to/ecommerce-mcp-demo.jar"],
      "env": {
        "OPENAI_API_KEY": "your-api-key"
      }
    }
  }
}

选项2:本地MCP客户端

  1. 安装MCP客户端工具:
npm install -g @modelcontextprotocol/cli
  1. 连接到MCP服务器:
mcp connect http://localhost:8080/mcp

测试MCP集成

示例自然语言指令

  1. 客户创造:

    • 创建一个名为爱丽丝·史密斯的客户,邮箱为alice@example.com,地址位于加利福尼亚州旧金山
  2. 产品管理:

    • “添加一款无线鼠标产品,售价29.99美元,库存50件”
    • “查找电子产品类别中的所有产品”
  3. 订单处理:

    • “为Alice Smith创建一个订单,包含2个无线鼠标”
    • “给我显示所有客户邮箱为alice@example.com的订单”
  4. 复杂场景:

    • “构建一个完整的电子商务场景:在西雅图创建一个名为Bob Johnson的客户,添加一台售价1999美元的游戏笔记本电脑,并下单购买1台”

发展

项目结构

src/
├── main/
│   ├── java/com/example/ecommerce/
│   │   ├── controller/          # REST controllers
│   │   ├── dto/                 # Data transfer objects
│   │   ├── entity/              # JPA entities
│   │   ├── mcp/                 # MCP server implementation
│   │   ├── repository/          # Data repositories
│   │   ├── service/             # Business logic
│   │   └── config/              # Configuration classes
│   └── resources/
│       └── application.yml      # Application configuration
├── test/                        # Test files
└── build.gradle                 # Build configuration

添加新的MCP工具

  1. 在(某处)创建一个新方法 EcommerceMcpServer.java
  2. 使用……进行注释 @McpTool
  3. 定义参数为 @McpTool.Parameter
  4. 实现业务逻辑
  5. 返回一个包含成功状态和数据的Map

示例:

@McpTool(
    name = "new_tool",
    description = "Description of what this tool does"
)
public Map<String, Object> newTool(
        @McpTool.Parameter(description = "Parameter description") String param) {
    // Implementation
    return Map.of("success", true, "data", result);
}

监控与日志记录

该应用程序包括以下方面的全面日志记录:

  • MCP工具调用
  • API请求/响应周期
  • 数据库操作
  • 错误处理

日志可在控制台输出中查看,并且可以进行配置 application.yml。

安全考虑事项

  • API密钥应安全存储(环境变量)
  • 对所有终端点实现了输入验证
  • 数据库连接使用连接池
  • 可以为Web客户端访问配置CORS(跨源资源共享)

演出

  • 数据库操作的连接池
  • 实体关系的懒加载
  • 使用JPA实现高效查询模式
  • 使用Docker容器化以确保一致性能

故障排除

常见问题

  1. 数据库连接失败:

    • 确保 PostgreSQL 正在运行
    • 检查连接参数 application.yml
    • 验证数据库是否存在
  2. MCP客户端连接问题:

    • 检查应用程序是否正在8080端口上运行
    • 验证MCP服务器配置
    • 检查OpenAI API密钥的有效性
  3. 构建失败:

    • 确保已安装 Java 17 或更高版本
    • 检查 Gradle 包装器的权限
    • 验证所有依赖项是否可用

日志和调试

通过添加(相应设置)来启用调试日志记录 application.yml:

logging:
  level:
    com.example.ecommerce: DEBUG
    org.springframework.ai: DEBUG

贡献;做出贡献

  1. 为仓库创建分支(或:克隆仓库)
  2. 创建一个特性分支
  3. 做出你的更改
  4. 为新功能添加测试
  5. 提交一个拉取请求

许可证

此项目采用MIT许可证授权——详见LICENSE文件。

支持

如需咨询或获取支持:

  • 在仓库中创建一个问题
  • 查看故障排除部分
  • 查阅Spring AI的文档

未来改进/增强

  • [ ] 添加更复杂的业务逻辑场景
  • [ ] 实施身份验证和授权
  • [ ] 添加全面的测试覆盖率
  • [ ] 创建基于Web的MCP客户端界面
  • [ ] 添加对批量操作的支持
  • [ ] 实现缓存以提高性能
  • [ ] 添加指标和监控
  • 使用Swagger/OpenAPI创建API文档