NVIDIA LLM API 是一个多模型托管推理服务**,聚合了来自不同厂商的主流大模型,并提供 OpenAI 兼容接口。 Spring AI 通过**复用 OpenAI 客户端**实现对 NVIDIA 服务的无缝集成。
⚠️ 重要提醒:NVIDIA API 必须显式设置 maxTokens,否则会直接抛出服务器错误。
前提条件
注册 NVIDIA 账号并获取额度
选择模型(如
meta/llama-3.1-70b-instruct)生成对应模型的 API Key
核心配置(必看)
spring.ai.openai.api-key=${NVIDIA_API_KEY}
spring.ai.openai.base-url=https://integrate.api.nvidia.com
spring.ai.openai.chat.options.model=meta/llama-3.1-70b-instruct
# ⚠️ 必填项,否则报错
spring.ai.openai.chat.options.max-tokens=2048
# 关闭不支持的嵌入功能
spring.ai.openai.embedding.enabled=false自动配置依赖
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-model-openai</artifactId> </dependency>
关键配置属性
| 配置项 | 说明 | 要求 |
|---|---|---|
| base-url | 服务地址 | 必须为 https://integrate.api.nvidia.com |
| api-key | NVIDIA 密钥 | 从模型页面获取 |
| model | 模型名称 | 如 meta/llama-3.1-70b-instruct |
| maxTokens | 最大生成长度 | 必填 |
函数调用(Tool Calling)
NVIDIA 支持函数调用,可让模型自动调用你注册的 Java 方法获取外部数据。
@Bean @Description("获取城市天气")
public Function<WeatherRequest, WeatherResponse> weatherFunction() {
return req -> new WeatherResponse(
req.location().contains("Amsterdam") ? 20 : 25, req.unit());
}示例控制器
@RestController
public class ChatController {
private final OpenAiChatModel chatModel;
@Autowired
public ChatController(OpenAiChatModel chatModel) {
this.chatModel = chatModel;
}
// 同步调用
@GetMapping("/ai/generate")
public Mapgenerate(@RequestParam(defaultValue = "讲个笑话") String message) {
return Map.of("generation", chatModel.call(message));
}
// 流式调用
@GetMapping("/ai/generateStream")
public FluxgenerateStream(@RequestParam(defaultValue = "讲个笑话") String message) {
return chatModel.stream(new Prompt(new UserMessage(message)));
}
}运行时动态参数
ChatResponse response = chatModel.call(
new Prompt("生成5个著名海盗名字",
OpenAiChatOptions.builder()
.model("meta/llama-3.1-70b-instruct")
.temperature(0.4)
.maxTokens(1024)
.build()
));