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

