通义千问 DashScope 接入
大约 2 分钟
第四章:接入千问(DashScope/Qwen)与生产建议
4.1 为什么很多企业更偏向 DashScope
从工程视角看,DashScope 常见优势是:
- 企业网络与合规更容易做统一管控
- 模型矩阵更贴近中文业务场景
- 在“检索增强、工具调用、多模态”等能力上更愿意提供工程化接口
本章我们用 LangChain4j 接入千问,并强调三件生产必需品:
- 超时与重试策略
- 错误分层(401/429/5xx/应用侧)
- 脱敏日志
4.2 Spring Boot starter(推荐)
4.2.1 依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope-spring-boot-starter</artifactId>
<version>1.3.0-beta9</version>
</dependency>4.2.2 application.yml
langchain4j:
community:
dashscope:
chat-model:
api-key: ${AI_DASHSCOPE_API_KEY:}
model-name: qwen-max
temperature: 0.2配置完成后,通常会自动提供 ChatLanguageModel 或对应的 Qwen ChatModel Bean(具体以 starter 的自动配置为准)。
4.3 纯 Java:显式创建 QwenChatModel
当你需要把“模型创建”放在更底层(例如多模型路由),纯 Java 写法更直接:
package com.example.langchain4j.qwen;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.dashscope.QwenChatModel;
import java.time.Duration;
public class QwenChatExample {
public static void main(String[] args) {
String apiKey = System.getenv("AI_DASHSCOPE_API_KEY");
if (apiKey == null || apiKey.isBlank()) {
throw new IllegalStateException("请先设置环境变量 AI_DASHSCOPE_API_KEY");
}
ChatLanguageModel model = QwenChatModel.builder()
.apiKey(apiKey)
.modelName("qwen-max")
.temperature(0.2)
.timeout(Duration.ofSeconds(60))
.build();
System.out.println(model.chat("用通俗语言解释:并发限制为什么比增加重试次数更重要?"));
}
}4.4 生产建议:把“治理能力”放到统一入口
你后面一定会写:
- RAG(检索上下文)
- Tools(函数调用)
- SSE(流式)
如果这些能力散落在 Controller 里,后面会非常难维护。建议从现在开始就养成习惯:
- 模型调用只在 Service/Facade 里发生
- Controller 只管参数校验与返回
- 统一入口集中做:超时、重试、脱敏、指标、requestId
4.5 本章小结
你已经把千问接进来,并且把工程化的关注点放对了位置。下一章我们用你刚学到的 baseUrl 能力接入 DeepSeek,并建立一个“多模型切换”的基础骨架。
