Java 接入多家大模型 API 实战对比
适合人群需要接入大模型 API 的 Java 开发者或正在做模型选型的工程师支持模型Ollama本地、阿里云通义千问、OpenAI、豆包 Coze前置阅读文章15分钟构建第一个AI应用为什么需要接入多家模型成本不同任务用不同模型简单任务用便宜模型复杂任务用高能力模型可用性主模型故障时自动降级到备用模型效果中文场景用国内模型代码场景用专业代码模型合规部分企业数据不能出境需要本地部署模型支持的模型对比模型供应商特点适用场景qwen2.5:0.5bOllama本地免费、无网络依赖、0延迟开发测试、隐私数据qwen-plus阿里云中文效果好、稳定、价格低国内生产环境gpt-4OpenAI能力最强高质量任务Coze Bot字节跳动可自定义知识库和插件企业定制方式1本地 Ollama推荐开发阶段使用优点完全免费、数据不出本地、无网络依赖前提安装 Ollama 并拉取模型ollama pull qwen2.5:0.5b# 轻量版适合测试ollama pull llama3:8b# 8B 参数效果更好ChatOllamallmChatOllama.builder().model(qwen2.5:0.5b)// .baseUrl(http://localhost:11434) // 默认地址可改为远程 Ollama.build();// 流式调用AIMessageChunkchunkllm.stream(用一句话介绍 Java);while(chunk.getIterator().hasNext()){System.out.print(chunk.getIterator().next().getContent());}// 同步调用AIMessageresultllm.invoke(用一句话介绍 Java);System.out.println(result.getContent());方式2阿里云通义千问配置# application.ymlspring:ai:aliyun:api-key:${ALIYUN_KEY}exportALIYUN_KEYsk-xxx# 从阿里云控制台获取ChatAliyunllmChatAliyun.builder().model(qwen-plus)// 可选qwen-turbo最快最便宜/ qwen-plus / qwen-max最强.build();AIMessageresultllm.invoke(什么是 Spring Boot);System.out.println(result.getContent());模型选择建议模型速度能力价格qwen-turbo最快一般最便宜qwen-plus快强中等qwen-max慢最强最贵方式3模型动态切换用条件链在运行时选择模型适合多租户场景不同用户走不同模型TestpublicvoidmodelSwitcher(){ChatOllamafreeModelChatOllama.builder().model(qwen2.5:0.5b).build();ChatAliyunpaidModelChatAliyun.builder().model(qwen-plus).build();FlowInstancechainchainActor.builder().next(PromptTemplate.fromTemplate(${question})).next(Info.c(tier free,freeModel),// 免费用户Info.c(tier paid,paidModel),// 付费用户Info.c(freeModel)// 默认).next(newStrOutputParser()).build();// 免费用户chainActor.invoke(chain,Map.of(question,什么是泛型,tier,free));// 付费用户chainActor.invoke(chain,Map.of(question,什么是泛型,tier,paid));}方式4模型降级Fallback主模型故障时自动切换备用保障高可用TestpublicvoidmodelFallback(){ChatAliyunprimaryModelChatAliyun.builder().model(qwen-plus).build();ChatOllamafallbackModelChatOllama.builder().model(qwen2.5:0.5b).build();Stringanswer;try{AIMessageresultprimaryModel.invoke(question);answer[主模型] result.getContent();}catch(Exceptione){System.out.println(主模型失败切换备用e.getMessage());AIMessageresultfallbackModel.invoke(question);answer[备用模型] result.getContent();}}方式5同一套代码切换不同模型只需一行j-langchain 的核心价值所有模型实现同一套接口BaseLLM链的构建代码完全一样// 只需修改这一行即可切换模型ChatOllamallmChatOllama.builder().model(qwen2.5:0.5b).build();// ChatAliyun llm ChatAliyun.builder().model(qwen-plus).build();// ChatOpenAI llm ChatOpenAI.builder().model(gpt-4).build();// 以下代码完全不变FlowInstancechainchainActor.builder().next(PromptTemplate.fromTemplate(${question})).next(llm)// ← 换模型只改这里.next(newStrOutputParser()).build();chainActor.invoke(chain,Map.of(question,什么是 Java));各模型接入配置速查Ollama本地# 无需配置默认 http://localhost:11434阿里云通义千问aliyun:api-key:${ALIYUN_KEY}OpenAI / 兼容 OpenAI 的 APIopenai:api-key:${OPENAI_KEY}base-url:https://api.openai.com/v1# 或代理地址豆包 Cozecoze:client-id:${COZE_CLIENT_ID}private-key-path:${COZE_PRIVATE_KEY_PATH}public-key-id:${COZE_PUBLIC_KEY_ID}完整代码见src/test/java/org/salt/jlangchain/demo/article/Article07MultiModel.java