Java接入常用大模型API的實戰(zhàn)對比
適合人群:需要接入大模型 API 的 Java 開發(fā)者,或正在做模型選型的工程師
支持模型:Ollama(本地)、阿里云通義千問、OpenAI、豆包 Coze
為什么需要接入多家模型?
- 成本:不同任務用不同模型,簡單任務用便宜模型,復雜任務用高能力模型
- 可用性:主模型故障時自動降級到備用模型
- 效果:中文場景用國內模型,代碼場景用專業(yè)代碼模型
- 合規(guī):部分企業(yè)數(shù)據(jù)不能出境,需要本地部署模型
支持的模型對比
| 模型 | 供應商 | 特點 | 適用場景 |
|---|---|---|---|
| qwen2.5:0.5b | Ollama(本地) | 免費、無網(wǎng)絡依賴、0延遲 | 開發(fā)測試、隱私數(shù)據(jù) |
| qwen-plus | 阿里云 | 中文效果好、穩(wěn)定、價格低 | 國內生產(chǎn)環(huán)境 |
| gpt-4 | OpenAI | 能力最強 | 高質量任務 |
| Coze Bot | 字節(jié)跳動 | 可自定義知識庫和插件 | 企業(yè)定制 |
方式1:本地 Ollama(推薦開發(fā)階段使用)
優(yōu)點:完全免費、數(shù)據(jù)不出本地、無網(wǎng)絡依賴
前提:安裝 Ollama 并拉取模型
ollama pull qwen2.5:0.5b # 輕量版,適合測試 ollama pull llama3:8b # 8B 參數(shù),效果更好
ChatOllama llm = ChatOllama.builder()
.model("qwen2.5:0.5b")
// .baseUrl("http://localhost:11434") // 默認地址,可改為遠程 Ollama
.build();
// 流式調用
AIMessageChunk chunk = llm.stream("用一句話介紹 Java");
while (chunk.getIterator().hasNext()) {
System.out.print(chunk.getIterator().next().getContent());
}
// 同步調用
AIMessage result = llm.invoke("用一句話介紹 Java");
System.out.println(result.getContent());方式2:阿里云通義千問
配置:
# application.yml
spring:
ai:
aliyun:
api-key: ${ALIYUN_KEY}export ALIYUN_KEY=sk-xxx # 從阿里云控制臺獲取
ChatAliyun llm = ChatAliyun.builder()
.model("qwen-plus") // 可選:qwen-turbo(最快最便宜)/ qwen-plus / qwen-max(最強)
.build();
AIMessage result = llm.invoke("什么是 Spring Boot?");
System.out.println(result.getContent());
模型選擇建議:
| 模型 | 速度 | 能力 | 價格 |
|---|---|---|---|
qwen-turbo | 最快 | 一般 | 最便宜 |
qwen-plus | 快 | 強 | 中等 |
qwen-max | 慢 | 最強 | 最貴 |
方式3:模型動態(tài)切換
用條件鏈在運行時選擇模型,適合多租戶場景(不同用戶走不同模型):
@Test
public void modelSwitcher() {
ChatOllama freeModel = ChatOllama.builder().model("qwen2.5:0.5b").build();
ChatAliyun paidModel = ChatAliyun.builder().model("qwen-plus").build();
FlowInstance chain = chainActor.builder()
.next(PromptTemplate.fromTemplate("${question}"))
.next(
Info.c("tier == 'free'", freeModel), // 免費用戶
Info.c("tier == 'paid'", paidModel), // 付費用戶
Info.c(freeModel) // 默認
)
.next(new StrOutputParser())
.build();
// 免費用戶
chainActor.invoke(chain, Map.of("question", "什么是泛型?", "tier", "free"));
// 付費用戶
chainActor.invoke(chain, Map.of("question", "什么是泛型?", "tier", "paid"));
}
方式4:模型降級(Fallback)
主模型故障時自動切換備用,保障高可用:
@Test
public void modelFallback() {
ChatAliyun primaryModel = ChatAliyun.builder().model("qwen-plus").build();
ChatOllama fallbackModel = ChatOllama.builder().model("qwen2.5:0.5b").build();
String answer;
try {
AIMessage result = primaryModel.invoke(question);
answer = "[主模型] " + result.getContent();
} catch (Exception e) {
System.out.println("主模型失敗,切換備用:" + e.getMessage());
AIMessage result = fallbackModel.invoke(question);
answer = "[備用模型] " + result.getContent();
}
}
方式5:同一套代碼,切換不同模型只需一行
j-langchain 的核心價值:所有模型實現(xiàn)同一套接口(BaseLLM),鏈的構建代碼完全一樣:
// 只需修改這一行即可切換模型:
ChatOllama llm = ChatOllama.builder().model("qwen2.5:0.5b").build();
// ChatAliyun llm = ChatAliyun.builder().model("qwen-plus").build();
// ChatOpenAI llm = ChatOpenAI.builder().model("gpt-4").build();
// 以下代碼完全不變:
FlowInstance chain = chainActor.builder()
.next(PromptTemplate.fromTemplate("${question}"))
.next(llm) // ← 換模型只改這里
.next(new StrOutputParser())
.build();
chainActor.invoke(chain, Map.of("question", "什么是 Java?"));
各模型接入配置速查
Ollama(本地)
# 無需配置,默認 http://localhost:11434
阿里云通義千問
aliyun:
api-key: ${ALIYUN_KEY}OpenAI / 兼容 OpenAI 的 API
openai:
api-key: ${OPENAI_KEY}
base-url: https://api.openai.com/v1 # 或代理地址豆包 Coze
coze:
client-id: ${COZE_CLIENT_ID}
private-key-path: ${COZE_PRIVATE_KEY_PATH}
public-key-id: ${COZE_PUBLIC_KEY_ID}到此這篇關于Java接入常用大模型API的實戰(zhàn)對比的文章就介紹到這了,更多相關Java接入大模型API內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot中實現(xiàn)JWT登錄授權+無感刷新全流程
在當今的分布式系統(tǒng)和前后端分離架構盛行的時代,傳統(tǒng)的基于?Session?的認證方式逐漸暴露出諸多弊端,而?JWT的出現(xiàn),猶如一道曙光,為這些問題提供了完美的解決方案,本文將詳細地為大家講解?Spring?Boot?整合?JWT?實現(xiàn)登錄認證與接口授權的全流程2026-04-04
SpringBoot實現(xiàn)防止XSS攻擊的示例詳解
這篇文章主要為大家詳細介紹了SpringBoot如何實現(xiàn)防止XSS攻擊,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-03-03
Java郵件發(fā)送超時時間過長問題的優(yōu)化方案
郵件發(fā)送是許多Java應用中常見的功能,尤其在用戶注冊、密碼重置和系統(tǒng)通知中,對于一個高并發(fā)的系統(tǒng)來說,郵件發(fā)送的超時問題可能導致應用性能的下降,甚至影響用戶體驗,因此,本期我們將討論Java郵件發(fā)送超時時間過長 的問題,并深入探討其成因和優(yōu)化策略2025-06-06

