实战指南)
LangChain4j 集成阿里云 DashScope 文本向量化模型QwenEmbeddingModel实战指南【免费下载链接】langchain4jLangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector stores, and makes implementing tool calling (including MCP support), agents and RAG easy. It integrates seamlessly with enterprise Java frameworks like Quarkus and Spring Boot.项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j本指南以 LangChain4j 官方集成文档为核心系统讲解如何在 JVM 应用中通过 LangChain4j 接入阿里云 DashScope百炼平台的 Qwen 文本向量化模型从 Maven 依赖迁移、QwenEmbeddingModel的可配置参数到结合 LangChain4j 核心EmbeddingModel接口完成单文本、批量文本的向量化调用并串联 RAG 检索链路。读完本文你将掌握一套可直接落地、可复制的 DashScope 向量化集成方案。DashScope 与 Qwen 模型简介DashScope 是阿里云推出的模型服务平台为 AI/ML 模型在生产环境中的使用提供了模型可视化、监控与调试能力你可以查看性能指标、跟踪模型行为并在部署周期早期定位潜在问题。Qwen通义千问是阿里云开发的系列生成式 AI 模型覆盖文本生成、摘要、问答及各类 NLP 任务。LangChain4j 对 DashScope 的集成基于 DashScope Java SDK 接口。相关的完整平台接入说明可参考 DashScope 官方文档。说明LangChain4j 官方还维护了同一平台的对话/文生图集成文档 docs/docs/integrations/language-models/dashscope.md本文聚焦向量化Embedding场景两者可配合阅读。Maven 依赖从 langchain4j-dashscope 到 langchain4j-community-dashscope依赖迁移说明自1.0.0-alpha1起原langchain4j-dashscope模块已迁移至langchain4j-community社区仓库并更名为langchain4j-community-dashscope。因此依赖坐标需要根据你所使用的版本进行选择。1.0.0-alpha1之前dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-dashscope/artifactId version${previous version here}/version /dependency1.0.0-alpha1及之后dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-community-dashscope/artifactId version${latest version here}/version /dependency使用 BOM 统一管理版本为避免多模块工程中版本号不一致官方推荐通过 BOMBill of Materials统一管理dependencyManagement dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-community-bom/artifactId version${latest version here}/version typepom/type scopeimport/scope /dependency /dependencyManagement之后在dependencies中声明langchain4j-community-dashscope时即可省略version。当前仓库根目录同样提供了 langchain4j-bom/pom.xml 用于管理主仓库各模块版本社区版 BOM 的作用与之相同仅托管于langchain4j-community仓库。Spring Boot 场景如果使用 Spring Boot可在对话模型文档 docs/docs/integrations/language-models/dashscope.md 中看到对应的 Starter 迁移路径1.0.0-alpha1后应使用langchain4j-community-dashscope-spring-boot-starter。引入 Starter 后通过application.properties即可自动装配模型 Bean例如langchain4j.community.dashscope.chat-model.api-keyYour API Key here langchain4j.community.dashscope.chat-model.model-nameqwen-max # 其余属性与 QwenChatModel 一致例如 # langchain4j.community.dashscope.chat-model.temperature0.7 # langchain4j.community.dashscope.chat-model.max-tokens4096向量化模型对应的配置前缀与QwenEmbeddingModel的 Builder 属性一一对应具体属性名以实际发布的 Starter 配置类为准。QwenEmbeddingModel 可配置参数详解初始化QwenEmbeddingModel时可以配置以下参数PropertyDescriptionDefault ValuebaseUrl连接的服务地址支持 HTTP 或 WebSocket 两种方式连接 DashScopehttps://dashscope.aliyuncs.com/api/v1/services/embeddings/text-embedding/text-embeddingapiKeyDashScope API Key必填无默认值modelName使用的向量化模型名称text-embedding-v2参数要点baseUrl默认指向 DashScope 的文本向量化专用端点text-embedding/text-embedding。文档明确说明既可以使用 HTTP 也可以使用 WebSocket 连接 DashScope这为对延迟敏感或希望复用长连接的场景提供了选择空间。apiKey在阿里云百炼DashScope控制台创建应用后获取必须显式配置。modelName默认text-embedding-v2。DashScope 平台会持续迭代向量化模型例如 v3 系列选择更高版本模型时请留意其输出向量维度可能与旧版本不同详见下文「向量维度与向量库的匹配」。快速上手Java 代码示例以下示例展示了QwenEmbeddingModel的标准初始化与调用方式完整集成测试可参考社区仓库langchain4j-community中models/langchain4j-community-dashscope/src/test/java/dev/langchain4j/community/model/dashscope/QwenEmbeddingModelIT.java的QwenEmbeddingModelIT。1. 初始化模型EmbeddingModel embeddingModel QwenEmbeddingModel.builder() .apiKey(Your API Key here) .modelName(text-embedding-v3) .build();2. 嵌入单个文本ResponseEmbedding response embeddingModel.embed(你好LangChain4j); Embedding embedding response.content(); // 向量维度 int dimension embedding.dimension(); // 底层 float 数组可直接用于余弦相似度计算或入库 float[] vector embedding.vector();3. 批量嵌入文本片段在实际的 RAG 文档切分场景中通常一次处理多个TextSegmentListTextSegment segments List.of( TextSegment.from(LangChain4j 是面向 JVM 的 LLM 应用开发框架。), TextSegment.from(DashScope 是阿里云的大模型服务平台。) ); ResponseListEmbedding response embeddingModel.embedAll(segments); response.content().forEach(e - System.out.println(e.dimension()));4. 非阻塞异步调用从 LangChain4j 1.20.0 起EmbeddingModel接口新增了实验性的embedAsync(EmbeddingRequest)方法见 EmbeddingModel.java返回CompletableFutureEmbeddingResponse适合高并发场景使用CompletableFutureEmbeddingResponse future embeddingModel.embedAsync( EmbeddingRequest.builder() .textSegment(TextSegment.from(需要异步向量化的文本)) .build());理解底层EmbeddingModel 接口与 Embedding 数据结构QwenEmbeddingModel本质上是对 LangChain4j 核心抽象EmbeddingModel接口的一个 DashScope 实现。理解这个接口的语义有助于你写出与实现无关、可平滑替换模型的代码。EmbeddingModel 接口提供的统一 API在 langchain4j-core/src/main/java/dev/langchain4j/model/embedding/EmbeddingModel.java 中接口为上层提供了多种调用入口ResponseEmbedding embed(String text)嵌入单个字符串源码位置ResponseEmbedding embed(TextSegment textSegment)嵌入单个文本片段源码位置ResponseListEmbedding embedAll(ListTextSegment textSegments)批量嵌入是 RAG 文档入库的常用入口源码位置int dimension()返回模型输出向量的维度默认实现会以embed(test)的结果推断维度源码位置。从源码结构可以推断embedAll在输入为空时会直接返回空列表避免无意义的网络调用源码位置。Embedding 数据结构向量化结果由核心数据结构 Embedding 承载其内部封装了一个float[] vectorvector()返回底层向量数组源码位置语义相近的文本在向量空间中距离更近vectorAsList()/vectorAsDoubleArray()提供不同精度的只读副本便于序列化dimension()返回向量维度源码位置normalize()可对向量做 L2 归一化配合余弦相似度计算源码位置。响应中的 Token 用量Response对象不仅携带向量内容还携带tokenUsage()等元数据可用于用量统计与成本核算。在 RAG 检索链路中的应用向量化模型是 RAG检索增强生成的基石组件。一个典型的 LangChain4j RAG 流程是文档切分 → 向量化 → 写入向量库 → 查询时向量化召回 → 拼入提示词交给大模型。QwenEmbeddingModel在其中的职责是把文本变成向量向量存储与检索则交给EmbeddingStore完成// 1. 构建向量库以内存向量库为例生产可替换为 Milvus、PGVector 等 EmbeddingStoreTextSegment embeddingStore new InMemoryEmbeddingStore(); // 2. 文档向量化并入库 ListTextSegment segments splitDocument(document); // 文档切分 ListEmbedding embeddings embeddingModel.embedAll(segments).content(); embeddingStore.addAll(embeddings, segments); // 3. 查询时向量化召回 Embedding queryEmbedding embeddingModel.embed(userQuery).content(); ListEmbeddingMatchTextSegment matches embeddingStore.findRelevant(queryEmbedding, 5);LangChain4j 为多种向量数据库提供了官方集成完整清单见 docs/docs/integrations/embedding-stores/端到端的 RAG 教程见 docs/docs/tutorials/rag.md 与 docs/docs/tutorials/embedding-stores.md。向量维度与向量库的匹配使用QwenEmbeddingModel时有一个关键的工程约束向量库的索引维度必须与模型输出维度一致。切换模型版本如从text-embedding-v2换到 v3 系列可能导致维度变化进而引发向量库写入失败或检索失效。建议先在代码中通过embeddingModel.dimension()确认当前模型的输出维度创建向量库 Collection 时按该维度建索引变更模型前评估是否需要重建索引与重新入库。常见问题与注意事项API Key 无效或配额不足检查apiKey是否正确配置并确认账号在百炼控制台开通了对应的向量化模型服务。baseUrl 选 HTTP 还是 WebSocket默认 HTTP 端点开箱即用WebSocket 适合需要更低握手开销的长期运行服务具体接入方式以 DashScope 平台文档为准。依赖版本迁移若项目仍在使用1.0.0-alpha1之前的langchain4j-dashscope坐标升级时需同步替换为langchain4j-community-dashscope避免依赖解析失败。批量上限embedAll一次可传入多个TextSegment但建议关注 DashScope 平台对单次请求文本数量与总长度的限制超出限制时应自行分批提交。模型默认值不显式设置modelName时默认使用text-embedding-v2baseUrl默认为文本向量化专用端点通常无需修改。小结通过本文介绍的QwenEmbeddingModel你可以在 LangChain4j 的统一抽象下快速接入阿里云 DashScope 的 Qwen 向量化模型使用迁移后的langchain4j-community-dashscope依赖、按参数表配置baseUrl/apiKey/modelName再借助核心EmbeddingModel接口的embed/embedAll/embedAsync完成单条与批量向量化并顺利接入 RAG 检索链路。由于底层统一实现自 LangChain4j 核心接口未来切换到其他向量化服务商时业务代码几乎无需改动——这正是 LangChain4j统一 API设计的价值所在。【免费下载链接】langchain4jLangChain4j is an idiomatic, open-source Java library for building LLM-powered applications on the JVM. It offers a unified API over popular LLM providers and vector stores, and makes implementing tool calling (including MCP support), agents and RAG easy. It integrates seamlessly with enterprise Java frameworks like Quarkus and Spring Boot.项目地址: https://gitcode.com/GitHub_Trending/la/langchain4j创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考