SpringAI使用OpenAI API格式调用DeepSeek服务
OpenAI API格式介绍
OpenAI API 的格式规范涵盖了请求结构、响应格式、认证方式及工具集成等核心维度,以下为结构化解析:
一、请求格式(Request Format)
1. 基础结构
- HTTP 方法:POST(主流接口如 /chat/completions、/completions)
- 端点 URL:https://api.openai.com/v1/ + 具体接口路径(如 chat/completions)
- 请求头(Headers):
http Authorization: Bearer $OPENAI_API_KEYContent-Type: application/json
2. 核心参数
- model(必需):指定模型,如 gpt-4o、gpt-3.5-turbo、text-davinci-003。
- messages(对话类接口必需):对话历史数组,包含以下角色:
- system:设定模型行为(如 "You are a helpful assistant.")。
- user:用户输入,支持文本或图像 URL(多模态模型需指定 type: "image_url")。
- assistant:模型历史回复(可选)。
- max_tokens:控制响应长度(如 2000)。
- temperature:调节生成随机性(0~2,默认 1)。
二、响应格式(Response Format)
1. 标准 JSON 结构
{"id": "chatcmpl-123","object": "chat.completion","created": 1677652288,"model": "gpt-4o","choices": [{"index": 0,"message": {"role": "assistant","content": "北京今日天气晴朗,气温14-20°C。"},"finish_reason": "stop"}],"usage": {"prompt_tokens": 9,"completion_tokens": 12,"total_tokens": 21}
}
2. 关键字段解析
- id:响应唯一标识符。
- choices:结果数组,每个元素含:
- index:结果序号(多结果时区分)。
- message:包含 role(如 assistant)和 content。
- finish_reason:结束原因(如 stop、length)。
- usage:Token 消耗统计。
三、认证与安全
1. API 密钥认证
- 方式:通过请求头或环境变量传递密钥。
- 环境变量配置:
bash export OPENAI_API_KEY="sk-..."
2. Azure Active Directory (AAD)
- 适用场景:企业级安全需求。
- 流程:
- 安装 azure-identity 库。
- 通过 Azure CLI 登录并分配角色。
- 代码中获取令牌:
from azure.identity import DefaultAzureCredential
credential = DefaultAzureCredential()
os.environ["OPENAI_API_KEY"] = credential.get_token("https://cognitiveservices.azure.com/.default").token
SpringAI使用OpenAI API格式调用DeepSeek
1 注册DeepSeek账号创建API key
2 创建SpringBoot项目
版本要求
- JDK 17
- SpringBoot 3.4.2
2.1 配置pom.xml文件
pom.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.2</version><relativePath/></parent><groupId></groupId><artifactId>platform-ai</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-ai.version>1.0.0-M6</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- ollama 依赖 --><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId><version>${spring-ai.version}</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-spring-boot-autoconfigure</artifactId><version>1.0.0-M6</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>
2.2 配置application.yml
server:port: 9021
spring:ai:openai:base-url: https://api.deepseek.comapi-key: sk-your-api-keyenable: truechat:options:model: deepseek-chat
参数说明如下:
2.3 创建请求接收Controller
@Slf4j
@RestController
@RequestMapping("/ai")
public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient.Builder chatClientBuilder) {this.chatClient = chatClientBuilder.build();}@GetMapping("/chat")public String chat(@RequestParam(value = "message") String message) {log.info("message: {}", message);return chatClient.prompt(message).call().content();}@GetMapping("/streamChat")public Flux<String> streamChat(@RequestParam(value = "message") String message) {log.info("stream-message: {}", message);return chatClient.prompt(message).stream().content();}
}