ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

LangChain4j 集成 Mistral AI 完整指南:从 Chat Completion、Function Calling 到批量推理与推理模型

LangChain4j 集成 Mistral AI 完整指南:从 Chat Completion、Function Calling 到批量推理与推理模型 LangChain4j 集成 Mistral AI 完整指南从 Chat Completion、Function Calling 到批量推理与推理模型【免费下载链接】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 官方文档 MistralAI 集成指南 展开系统讲解如何在 JVM 应用中通过 LangChain4j 接入 Mistral AI 的对话、流式、函数调用、JSON 模式、结构化输出、安全护栏、推理模型、内容审核、代码补全FIM与批量推理等完整能力。读完本文你将掌握langchain4j-mistral-ai模块的工程接入方式、模型选型、全部核心 API 用法与底层实现要点可以直接照抄代码落地生产级 Mistral AI 应用。1. 项目集成添加依赖与配置 API Keylangchain4j-mistral-ai是 LangChain4j 官方维护的 Mistral AI 集成模块位于仓库 langchain4j-mistral-ai/。模块本身基于langchain4j-core的ChatModel、StreamingChatModel、ModerationModel等统一接口实现底层通过langchain4j-http-client与langchain4j-http-client-jdk发起 HTTP 调用见 pom.xml。1.1 Maven 配置在pom.xml中添加两个依赖核心库langchain4j与 Mistral AI 集成库langchain4j-mistral-ai文档示例版本为1.20.0建议按你所使用的版本号替换dependency groupIddev.langchain4j/groupId artifactIdlangchain4j/artifactId version1.20.0/version /dependency dependency groupIddev.langchain4j/groupId artifactIdlangchain4j-mistral-ai/artifactId version1.20.0/version /dependency1.2 Gradle 配置在build.gradle中对应添加implementation dev.langchain4j:langchain4j:1.20.0 implementation dev.langchain4j:langchain4j-mistral-ai:1.20.01.3 配置 API Key推荐通过环境变量管理密钥避免把密钥硬编码进代码。可以创建一个ApiKeys.java工具类统一读取public class ApiKeys { public static final String MISTRALAI_API_KEY System.getenv(MISTRAL_AI_API_KEY); }并在运行前设置环境变量export MISTRAL_AI_API_KEYyour-api-key # Unix 系操作系统 SET MISTRAL_AI_API_KEYyour-api-key # Windows 操作系统从源码实现看MistralAiChatModel.java 在构造时会通过MistralAiClient建立客户端apiKey用于鉴权baseUrl未指定时默认指向https://api.mistral.ai/v1请求超时默认 60 秒请求/响应日志默认关闭maxRetries默认 2 次。这些默认值都可以在 Builder 上显式覆盖。2. 模型选型从枚举到能力对照LangChain4j 为 Mistral AI 的模型名提供了类型安全的 Java 枚举避免手写字符串出错MistralAiChatModelName.java对话类模型枚举包含OPEN_MISTRAL_7B、OPEN_MIXTRAL_8x7B、OPEN_MIXTRAL_8X22B、MISTRAL_SMALL_LATEST、MISTRAL_MEDIUM_LATEST、MISTRAL_LARGE_LATEST、OPEN_MISTRAL_NEMO、MAGISTRAL_SMALL_LATEST、MAGISTRAL_MEDIUM_LATEST、CODESTRAL_LATEST、MISTRAL_MODERATION_LATEST、VOXTRAL_SMALL_LATEST等MistralAiFimModelName.java代码补全FIM模型枚举包含CODESTRAL_LATEST与OPEN_CODESTRAL_MAMBAMistralAiEmbeddingModelName.java向量化模型枚举MISTRAL_EMBED输出 1024 维向量。官方文档按「开源 / 商业」两个维度给出了模型选择对照表可按性能与成本权衡选取模型名称可用部署方式说明open-mistral-7bMistral AI La Plateforme云平台Azure、AWS、GCPHugging Face自托管本地、IaaS、Docker开源Mistral 发布的首个稠密模型适合实验、定制与快速迭代最大 32K tokens。枚举MistralAiChatModelName.OPEN_MISTRAL_7Bopen-mixtral-8x7b同上开源适合多语言处理、代码生成与微调性价比出色最大 32K tokens。枚举MistralAiChatModelName.OPEN_MIXTRAL_8x7Bopen-mixtral-8x22b同上开源具备 Mixtral-8x7B 全部能力且数学与代码能力更强原生支持函数调用最大 64K tokens。枚举MistralAiChatModelName.OPEN_MIXTRAL_8X22Bopen-mistral-nemo同上开源与 NVIDIA 合作的 12B 模型同尺寸下推理、世界知识与代码准确性领先最大 128K tokens。枚举MistralAiChatModelName.OPEN_MISTRAL_NEMOopen-codestral-mamba同上开源基于 Mamba2 架构、专精代码生成的模型最大 256K tokens。枚举MistralAiFimModelName.OPEN_CODESTRAL_MAMBAmistral-small-latestLa Plateforme云平台商业适合批量简单任务分类、客服、文本生成最大 32K tokens。枚举MistralAiChatModelName.MISTRAL_SMALL_LATESTmistral-medium-latestLa Plateforme云平台商业适合中等推理任务数据抽取、摘要、邮件与文案撰写最大 32K tokens。枚举MistralAiChatModelName.MISTRAL_MEDIUM_LATESTmistral-large-latestLa Plateforme云平台商业适合复杂推理或高度专业化任务文本生成、代码生成、RAG、Agent最大 128K tokens。枚举MistralAiChatModelName.MISTRAL_LARGE_LATESTmistral-embedLa Plateforme云平台商业将文本转为 1024 维数值向量支撑检索与 RAG 应用最大 8K tokens。枚举MistralAiEmbeddingModelName.MISTRAL_EMBEDcodestral-latestLa Plateforme云平台Hugging Face自托管开源非商用许可与商业双轨为代码生成含 FIM 与代码补全专门设计与优化的前沿生成模型最大 32K tokens。枚举MistralAiFimModelName.CODESTRAL_LATEST此外mistral-tiny、mistral-small、mistral-medium三个旧模型名已被标记为Deprecated新项目请使用上表中的-latest系列。3. Chat Completion同步与流式对话对话模型基于对话数据微调可生成类人回复。LangChain4j 为此提供ChatModel同步与StreamingChatModel流式两套统一接口Mistral 集成分别实现为MistralAiChatModel与MistralAiStreamingChatModel。3.1 同步调用import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.mistralai.MistralAiChatModel; public class HelloWorld { public static void main(String[] args) { ChatModel model MistralAiChatModel.builder() .apiKey(ApiKeys.MISTRALAI_API_KEY) .modelName(MistralAiChatModelName.MISTRAL_SMALL_LATEST) .build(); String response model.chat(Say Hello World); System.out.println(response); } }运行后输出类似Hello World! How can I assist you today?从 MistralAiChatModel.java 的实现可以看到doChat内部会通过createMistralAiRequest组装请求、调用client.chatCompletionWithRawResponse带重试与异常映射并把响应解析为AiMessage、TokenUsage、FinishReason等标准结构同时把原始 HTTP 响应保留在MistralAiChatResponseMetadata中。3.2 流式调用流式模式下LLM 每生成一个 token 就会回调一次onPartialResponse实现打字机式的实时输出import dev.langchain4j.data.message.AiMessage; import dev.langchain4j.model.chat.response.StreamingChatResponseHandler; import dev.langchain4j.model.mistralai.MistralAiStreamingChatModel; import dev.langchain4j.model.output.Response; import java.util.concurrent.CompletableFuture; public class HelloWorld { public static void main(String[] args) { MistralAiStreamingChatModel model MistralAiStreamingChatModel.builder() .apiKey(ApiKeys.MISTRALAI_API_KEY) .modelName(MistralAiChatModelName.MISTRAL_SMALL_LATEST) .build(); CompletableFutureChatResponse futureResponse new CompletableFuture(); model.chat(Tell me a joke about Java, new StreamingChatResponseHandler() { Override public void onPartialResponse(String partialResponse) { System.out.print(partialResponse); } Override public void onCompleteResponse(ChatResponse completeResponse) { futureResponse.complete(completeResponse); } Override public void onError(Throwable error) { futureResponse.completeExceptionally(error); } }); futureResponse.join(); } }每个文本块token在生成时都会实时到达onPartialResponse例如输出Why do Java developers wear glasses? Because they cant C#3.3 组合进阶能力对话补全可以与其他 LangChain4j 能力组合使用以获得更精准的回复结合 模型参数配置temperature、topP、maxTokens、stopSequences、frequencyPenalty、presencePenalty、timeout等大量参数默认在后台自动设置需要显式控制时可参考该教程结合 聊天记忆若不传递对话历史LLM 不知道之前说过什么也就无法正确回答「我刚才问了什么」这类问题引入MessageWindowChatMemory后历史消息会被自动携带到后续请求中。4. Function Calling让模型调用外部工具Function Calling 允许 Mistral 对话模型同步与流式均可连接外部工具例如调用一个Tool查询支付交易状态。目前支持函数调用的模型包括MistralAiChatModelName.MISTRAL_SMALL_LATEST、MistralAiChatModelName.MISTRAL_LARGE_LATEST、MistralAiChatModelName.OPEN_MIXTRAL_8X22B、MistralAiChatModelName.OPEN_MISTRAL_NEMO。4.1 第一步定义Tool类与数据查询方法假设你有这样一份支付交易数据集真实应用中应注入数据库或 REST API 客户端获取数据import java.util.*; public class PaymentTransactionTool { private final MapString, ListString paymentData Map.of( transaction_id, List.of(T1001, T1002, T1003, T1004, T1005), customer_id, List.of(C001, C002, C003, C002, C001), payment_amount, List.of(125.50, 89.99, 120.00, 54.30, 210.20), payment_date, List.of(2021.20.05, 2021.20.06, 2021.20.07, 2021.20.05, 2021.20.08), payment_status, List.of(Paid, Unpaid, Paid, Paid, Pending)); ... }接着定义两个方法分别查询支付状态与支付日期。这里用到dev.langchain4j.agent.tool.*包下的Tool定义函数描述与P定义参数描述注解属于 高层级 Tool API// Tool to be executed to get payment status Tool(Get payment status of a transaction) // function description String retrievePaymentStatus(P(Transaction id to search payment data) String transactionId) { return getPaymentData(transactionId, payment_status); } // Tool to be executed to get payment date Tool(Get payment date of a transaction) // function description String retrievePaymentDate(P(Transaction id to search payment data) String transactionId) { return getPaymentData(transactionId, payment_date); } private String getPaymentData(String transactionId, String data) { ListString transactionIds paymentData.get(transaction_id); ListString paymentData paymentData.get(data); int index transactionIds.indexOf(transactionId); if (index ! -1) { return paymentData.get(index); } else { return Transaction ID not found; } }4.2 第二步用AiServices定义 Agent 接口AiServices是 LangChain4j 声明式 AI 服务的关键入口。定义一个接口PaymentTransactionAgent通过SystemMessage注入系统提示词约束行为import dev.langchain4j.service.SystemMessage; interface PaymentTransactionAgent { SystemMessage({ You are a payment transaction support agent., You MUST use the payment transaction tool to search the payment transaction data., If there a date convert it in a human readable format. }) String chat(String userMessage); }4.3 第三步组装模型、工具与记忆并提问import dev.langchain4j.memory.chat.MessageWindowChatMemory; import dev.langchain4j.model.chat.ChatModel; import dev.langchain4j.model.mistralai.MistralAiChatModel; import dev.langchain4j.model.mistralai.MistralAiChatModelName; import dev.langchain4j.service.AiServices; public class PaymentDataAssistantApp { ChatModel mistralAiModel MistralAiChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) // Please use your own Mistral AI API key .modelName(MistralAiChatModelName.MISTRAL_LARGE_LATEST) // Also you can use MistralAiChatModelName.OPEN_MIXTRAL_8X22B as open source model .logRequests(true) .logResponses(true) .build(); public static void main(String[] args) { // STEP 1: User specify tools and query PaymentTransactionTool paymentTool new PaymentTransactionTool(); String userMessage What is the status and the payment date of transaction T1005?; // STEP 2: User asks the agent and AiServices call to the functions PaymentTransactionAgent agent AiServices.builder(PaymentTransactionAgent.class) .chatModel(mistralAiModel) .tools(paymentTool) .chatMemory(MessageWindowChatMemory.withMaxMessages(10)) .build(); // STEP 3: User gets the final response from the agent String answer agent.chat(userMessage); System.out.println(answer); } }预期输出The status of transaction T1005 is Pending. The payment date is October 8, 2021.仓库中 MistralAiAiServiceWithToolsIT.java 与 MistralAiChatModelToolCallsTest.java 提供了工具调用的端到端与解析层测试可作为进一步验证的参考。5. JSON 模式与结构化输出5.1 JSON 模式需要模型以合法 JSON 返回结果时可在 Builder 上设置responseFormat参数。同步示例使用ResponseFormat.JSONChatModel model MistralAiChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) // Please use your own Mistral AI API key .responseFormat(ResponseFormat.JSON) .build(); String userMessage Return JSON with two fields: transactionId and status with the values T123 and paid.; String json model.chat(userMessage); System.out.println(json); // {transactionId:T123,status:paid}流式示例使用 Mistral 专属的MistralAiResponseFormatType.JSON_OBJECTStreamingChatModel streamingModel MistralAiStreamingChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) // Please use your own Mistral AI API key .responseFormat(MistralAiResponseFormatType.JSON_OBJECT) .build(); String userMessage Return JSON with two fields: transactionId and status with the values T123 and paid.; CompletableFutureChatResponse futureResponse new CompletableFuture(); streamingModel.chat(userMessage, new StreamingChatResponseHandler() { Override public void onPartialResponse(String partialResponse) { System.out.print(partialResponse); } Override public void onCompleteResponse(ChatResponse completeResponse) { futureResponse.complete(completeResponse); } Override public void onError(Throwable error) { futureResponse.completeExceptionally(error); } }); String json futureResponse.get().content().text(); System.out.println(json); // {transactionId:T123,status:paid}5.2 Structured Outputs结构化输出结构化输出保证模型响应严格遵循某个 JSON Schema。LangChain4j 通用用法参见 结构化输出教程此处给出 Mistral 专属配置通过supportedCapabilities声明Capability.RESPONSE_FORMAT_JSON_SCHEMA能力并用responseFormat设置一个兜底 JSON Schema请求未显式提供 schema 时生效再配合strictJsonSchema(true)开启严格模式ChatModel model MistralAiChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) .modelName(MISTRAL_SMALL_LATEST) .supportedCapabilities(Set.of(Capability.RESPONSE_FORMAT_JSON_SCHEMA)) // Enable structured outputs .responseFormat(ResponseFormat.builder() // Set the fallback JSON Schema (optional) .type(ResponseFormatType.JSON) .jsonSchema(JsonSchema.builder().rootElement(JsonObjectSchema.builder() .addProperty(name, JsonStringSchema.builder().build()) .addProperty(capital, JsonStringSchema.builder().build()) .addProperty( languages, JsonArraySchema.builder() .items(JsonStringSchema.builder().build()) .build()) .required(name, capital, languages) .build()) .build()) .build()) .strictJsonSchema(true) .build();从源码看strictJsonSchema默认值为false见 MistralAiChatModel.java并在组装请求时作为参数传入。仓库中 MistralAiStreamingChatModelStrictJsonSchemaTest.java 与 MistralAiAiServiceWithJsonSchemaIT.java 覆盖了严格 JSON Schema 的验证路径。6. Guardrailing安全护栏护栏用于限制模型行为防止生成有害或不希望出现的内容。可以在MistralAiChatModel或MistralAiStreamingChatModel的 Builder 上通过safePrompt参数开启。同步示例ChatModel model MistralAiChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) .safePrompt(true) .build(); String userMessage What is the best French cheese?; String response model.chat(userMessage);流式示例StreamingChatModel streamingModel MistralAiStreamingChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) .safePrompt(true) .build(); String userMessage What is the best French cheese?; CompletableFutureChatResponse futureResponse new CompletableFuture(); streamingModel.chat(userMessage, new StreamingChatResponseHandler() { Override public void onPartialResponse(String partialResponse) { System.out.print(partialResponse); } Override public void onCompleteResponse(ChatResponse completeResponse) { futureResponse.complete(completeResponse); } Override public void onError(Throwable error) { futureResponse.completeExceptionally(error); } }); futureResponse.join();开启安全提示后LangChain4j 会在你的消息前拼接以下系统消息Always assist with care, respect, and truth. Respond with utmost utility yet securely. Avoid harmful, unethical, prejudiced, or negative content. Ensure replies promote fairness and positivity.7. 按请求覆盖参数MistralAiChatRequestParameterssafePrompt、randomSeed、sendThinking、returnThinking这四个 Mistral 专属选项除了在模型 Builder 上全局配置还可以通过MistralAiChatRequestParameters按单个请求覆盖从而让同一个共享模型实例在不同调用间动态切换这些选项例如只对某个请求开启safePrompt或为可复现的补全设置randomSeed无需重新构建模型ChatModel model MistralAiChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) .modelName(mistral-small-latest) .build(); MistralAiChatRequestParameters parameters MistralAiChatRequestParameters.builder() .safePrompt(true) .randomSeed(42) .build(); ChatRequest chatRequest ChatRequest.builder() .messages(UserMessage.from(What is the best French cheese?)) .parameters(parameters) .build(); ChatResponse chatResponse model.chat(chatRequest);这一机制的实现位于 MistralAiChatRequestParameters.java它继承DefaultChatRequestParameters额外暴露safePrompt对应 Mistralsafe_prompt、randomSeed对应 Mistralrandom_seed、sendThinking、returnThinking四个字段MistralAiChatModel.java 在initDefaultRequestParameters中把 Builder 级参数与默认请求参数合并doChat再从chatRequest.parameters()中取出按请求覆盖后的值使用。对应测试见 MistralAiChatRequestParametersTest.java。8. Thinking / Reasoning推理模型支持MistralAiChatModel与MistralAiStreamingChatModel都支持 Magistral 推理系列模型。相关参数returnThinking开启后模型产出的推理文本会从 API 响应中解析出来存入AiMessage.thinking()流式场景下StreamingChatResponseHandler.onPartialThinking()与TokenStream.onPartialThinking()回调也会被触发。默认关闭。sendThinking开启后前一轮响应中的推理文本存于AiMessage.thinking()会被附带在后续请求中发给 LLM。默认关闭。配置示例使用推理模型MAGISTRAL_MEDIUM_LATESTChatModel model MistralAiChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) .modelName(MistralAiChatModelName.MAGISTRAL_MEDIUM_LATEST) .returnThinking(true) .sendThinking(true) .build();需要说明的是见 MistralAiChatModel.java 的源码注释returnThinking并不会主动为 LLM 开启推理能力它只控制是否解析响应中的thinking内容推理行为本身取决于所选模型。仓库测试 MistralAiChatModelThinkingIT.java、MistralAiChatModelReturnThinkingTest.java 与流式对应版本覆盖了推理文本的解析与回调路径。9. Moderation有害内容审核Mistral 的审核模型是一个分类器用于检测文本中的有害内容。LangChain4j 通过ModerationModel统一接口封装实现类为MistralAiModerationModel模型名枚举MistralAiModerationModelName.MISTRAL_MODERATION_LATESTModerationModel model new MistralAiModerationModel.Builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) .modelName(MistralAiModerationModelName.MISTRAL_MODERATION_LATEST) .logRequests(true) .logResponses(false) .build(); // I want to check if the text contains harmful content Moderation moderation model.moderate(I want to kill them.).content();从 MistralAiModerationModel.java 的实现看doModerate会把ModerationRequest中的文本列表作为input提交然后遍历响应中的分类结果检查sexual性内容、hateAndDiscrimination仇恨与歧视、violenceAndThreats暴力与威胁、dangerousAndCriminalContent危险与犯罪内容、selfHarm自残、health健康、law法律、pii个人隐私信息等类别只要任一类别被标记即返回Moderation.flagged并附上首个被标记的文本否则返回Moderation.notFlagged()。审核相关测试见 MistralAiModerationModelIT.java。10. Code CompletionFIM 代码补全Fill-in-the-MiddleFIM模型用于生成代码补全用户用prompt定义代码起点用可选的suffix定义代码终点模型负责补全中间部分还支持可选的stop终止序列。10.1 FIM 同步调用import dev.langchain4j.model.mistralai.MistralAiFimModel; import dev.langchain4j.model.output.Response; public class HelloWorld { public static void main(String[] args) { MistralAiFimModel codestral MistralAiFimModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) .modelName(MistralAiFimModelName.CODESTRAL_LATEST) .stop(List.of(})) // must stop at the first occurrence of } .build(); // I want to generate a code completion for a simple hello world program using MistralAI of LangChain4j framework. String codePrompt public static void main(String[] args) { // Create a function to multiply two numbers ; String suffix System.out.println(result); } ; // Asking to Codestral model to complete the code with given prompt and suffix ResponseString response codestral.generate(prompt, suffix); System.out.println( String.format( %s%s%s, prompt, // print code prompt (prefix) response.content(), // print code filled-in-the-middle suffix)); // print code suffix } }运行后将打印补全后的完整代码public static void main(String[] args) { // Create a function to multiply two numbers int result multiply(5, 3); System.out.println(result); }10.2 FIM 流式调用import dev.langchain4j.model.StreamingResponseHandler; import dev.langchain4j.model.language.StreamingLanguageModel; import dev.langchain4j.model.mistralai.MistralAiStreamingFimModel; import dev.langchain4j.model.output.Response; import java.util.concurrent.CompletableFuture; public class HelloWorld { public static void main(String[] args) { StreamingLanguageModel codestralStream MistralAiStreamingFimModel.builder() .apiKey(ApiKeys.MISTRALAI_API_KEY) .modelName(MistralAiFimModelName.CODESTRAL_LATEST) .build(); // I want to generate a code completion for a simple hello world program. String prompt public static void main(String[] args) {; CompletableFutureResponseString futureResponse new CompletableFuture(); codestral.generate(prompt, new StreamingResponseHandler() { Override public void onNext(String token) { System.out.print(token); } Override public void onComplete(ResponseString response) { futureResponse.complete(response); } Override public void onError(Throwable error) { futureResponse.completeExceptionally(error); } }); futureResponse.join(); } }每个 token 在生成时都会实时到达onNext例如输出public static void main(String[] args) { int[] arr {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int sum 0; for (int i 0; i arr.length; i) { sum arr[i]; } System.out.println(Sum of all elements in the array: sum); } }11. 访问原始 HTTP 响应与 Server-Sent EventsSSE调试或需要与底层协议对齐时可以拿到原始传输数据。使用MistralAiChatModel时可从响应的 metadata 中读取原始 HTTP 响应响应体、请求头、状态码SuccessfulHttpResponse rawHttpResponse ((MistralAiChatResponseMetadata) chatResponse.metadata()).rawHttpResponse(); System.out.println(rawHttpResponse.body()); System.out.println(rawHttpResponse.headers()); System.out.println(rawHttpResponse.statusCode());使用MistralAiStreamingChatModel时除了原始 HTTP 响应还能读取原始 Server-Sent Events 列表ListServerSentEvent rawServerSentEvents ((MistralAiChatResponseMetadata) chatResponse.metadata()).rawServerSentEvents(); System.out.println(rawServerSentEvents.get(0).data()); System.out.println(rawServerSentEvents.get(0).event());这与 MistralAiChatModel.java 中把rawHttpResponse写入MistralAiChatResponseMetadata的实现相对应流式原始事件相关测试见 MistralAiStreamingChatModelRawEventTest.java。12. Batch Processing批量推理MistralAiBatchChatModel实现了核心BatchChatModel接口通过 Mistral Batch API 异步处理大量聊天请求价格约为标准按 token 计费的 50%。同一批次内的所有请求都使用批处理模型上配置的同一个模型。基本流程提交批次 → 轮询直至到达终态 → 按提交顺序读取每个请求的结果MistralAiBatchChatModel batchModel MistralAiBatchChatModel.builder() .apiKey(System.getenv(MISTRAL_AI_API_KEY)) .modelName(mistral-small-latest) .build(); BatchResponseChatResponse submitted batchModel.submit(new BatchRequest(List.of( ChatRequest.builder().messages(UserMessage.from(What is the capital of France?)).build(), ChatRequest.builder().messages(UserMessage.from(What is the capital of Germany?)).build()))); String batchId submitted.batchId(); // Poll until the batch reaches a terminal state (SUCCEEDED, FAILED, CANCELLED, EXPIRED). BatchResponseChatResponse batch batchModel.retrieve(batchId); while (!batch.state().isTerminal()) { Thread.sleep(Duration.ofSeconds(30).toMillis()); batch batchModel.retrieve(batchId); } for (BatchItemResultChatResponse result : batch.results()) { if (result.isSuccess()) { System.out.println(result.response().aiMessage().text()); } else { System.out.println(Failed: result.error().message()); } }运行中的批次可以取消已存在的批次可以分页列出batchModel.cancel(batchId); BatchPageChatResponse page batchModel.list(new BatchPagination(20, null));批量模型的实现与测试位于 MistralAiBatchChatModel.java、MistralAiBatchChatModelIT.java 与 MistralAiBatchChatModelTest.java底层对应的 API 数据结构批次任务、结果条目、分页响应见internal/api目录下的 MistralAiBatchJob.java、MistralAiBatchJobRequest.java 与 MistralAiBatchJobsResponse.java。13. 更多示例与延伸阅读完整的可运行示例位于仓库集成模块的测试目录包括 MistralAiChatModelIT.java、MistralAiStreamingChatModelIT.java、MistralAiFimModelIT.java、MistralAiEmbeddingModelIT.java 等覆盖了对话、流式、代码补全、向量化、审核与批量推理的端到端用法官方文档还配套了完整的示例工程langchain4j-examplesmistral-ai-examples目录包含上述各类场景的 main 方法可直接运行与本文相关的 LangChain4j 通用能力可继续阅读 模型参数、聊天记忆、工具调用 与 结构化输出 教程。【免费下载链接】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),仅供参考
返回列表