Spring AI 第二讲 之 Chat Model API 第七节Mistral AI Chat

Spring AI 支持来自 Mistral AI 的各种 AI 语言模型。您可以与 Mistral AI 语言模型互动,并基于 Mistral 模型创建多语言对话助手。

先决条件

要访问 Mistral AI 语言模型,您需要与 MistralAI 创建一个 API。在 MistralAI 注册页面创建账户,并在 API Keys 页面生成令牌。Spring AI 项目定义了一个名为 spring.ai.mistralai.api-key 的配置属性,您应将其设置为从 console.mistral.ai 获取的 API 密钥的值。导出环境变量是设置该配置属性的一种方法:

export SPRING_AI_MISTRALAI_API_KEY=<INSERT KEY HERE>

添加资源库和 BOM

Spring AI 工件发布在 Spring Milestone 和 Snapshot 资源库中。请参阅 "资源库 "部分,将这些资源库添加到您的构建系统中。
为了帮助进行依赖性管理,Spring AI 提供了一个 BOM(物料清单),以确保在整个项目中使用一致的 Spring AI 版本。请参阅 "依赖关系管理 "部分,将 Spring AI BOM 添加到构建系统中。

自动配置

Spring AI 为 MistralAI 聊天客户端提供 Spring Boot 自动配置功能。要启用它,请在项目的 Maven pom.xml 文件中添加以下依赖项:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mistral-ai-spring-boot-starter</artifactId>
</dependency>

或 Gradle build.gradle 构建文件。

dependencies {implementation 'org.springframework.ai:spring-ai-mistral-ai-spring-boot-starter'
}

请参阅 "依赖关系管理 "部分,将 Spring AI BOM 添加到构建文件中。

Chat 属性

重试属性

spring.ai.retry 作为属性前缀,可用于配置 Mistral AI 聊天模型的重试机制。

Property说明Default

spring.ai.retry.max-attempts

重试的最大次数。

10

spring.ai.retry.backoff.initial-interval

指数后退策略的初始睡眠时间。

2 sec.

spring.ai.retry.backoff.multiplier

回退间隔倍增。

5

spring.ai.retry.backoff.max-interval

最大回退持续时间。

3 min.

spring.ai.retry.on-client-errors

如果为false,则抛出 NonTransientAiException 异常,并且不尝试重试 4xx 客户端错误代码

false

spring.ai.retry.exclude-on-http-codes

不应触发重试(例如抛出 NonTransientAiException)的 HTTP 状态代码列表。

empty

spring.ai.retry.on-http-codes

应触发重试(例如抛出 TransientAiException)的 HTTP 状态代码列表。

empty

连接属性

spring.ai.mistralai前缀用作属性前缀,可让您连接到OpenAI。

PropertyDescriptionDefault

spring.ai.mistralai.base-url

要连接的 URL

api.mistral.ai

spring.ai.mistralai.api-key

应用程序接口密钥

-

配置属性

spring.ai.mistralai.chat 前缀是属性前缀,用于配置 MistralAI 的聊天模型实现。

PropertyDescriptionDefault

spring.ai.mistralai.chat.enabled

启用 MistralAI 聊天模型。

true

spring.ai.mistralai.chat.base-url

可选择覆盖 spring.ai.mistralai.base-url 以提供特定的聊天 URL

-

spring.ai.mistralai.chat.api-key

可选重载 spring.ai.mistralai.api-key,以提供特定于聊天的 api-key。

-

spring.ai.mistralai.chat.options.model

这就是要使用的 MistralAI 聊天模型

open-mistral-7bopen-mixtral-8x7bmistral-small-latestmistral-medium-latestmistral-large-latest

spring.ai.mistralai.chat.options.temperature

采样温度,用于控制生成的补间明显的创造性。取值越高,输出结果越随机,取值越低,结果越集中和确定。不建议针对同一个补全请求修改温度和 top_p,因为这两个设置之间的相互作用很难预测。

0.8

spring.ai.mistralai.chat.options.maxTokens

聊天完成时要生成的最大标记数。输入词组和生成词组的总长度受模型上下文长度的限制。

-

spring.ai.mistralai.chat.options.safePrompt

表示是否在所有对话之前注入安全提示。

false

spring.ai.mistralai.chat.options.randomSeed

该功能处于测试阶段。如果指定了该功能,我们的系统将尽最大努力进行确定性采样,这样,使用相同种子和参数的重复请求将返回相同的结果。

-

spring.ai.mistralai.chat.options.stop

最多 4 个序列,在这些序列中,API 将停止生成更多令牌。

-

spring.ai.mistralai.chat.options.topP

温度采样的另一种方法是核采样,即模型考虑概率质量为 top_p 的标记的结果。因此,0.1 意味着只考虑概率质量最高的 10%的标记。一般情况下,我们建议改变这一点或温度,但不能同时改变。

-

spring.ai.mistralai.chat.options.responseFormat

指定模型必须输出的格式的对象。设置为 { "type": "json_object" } 可启用 JSON 模式,该模式可确保模型生成的信息是有效的 JSON 格式。

-

spring.ai.mistralai.chat.options.tools

模型可调用的工具列表。目前只支持函数作为工具。用它来提供模型可生成 JSON 输入的函数列表。

-

spring.ai.mistralai.chat.options.toolChoice

控制模型调用哪个函数(如果有的话)。"无 "表示模型不会调用函数,而是生成一条消息。"自动 "表示模型可以选择生成消息或调用函数。通过 {"type: "function", "function": {"name": "my_function"}}强制模型调用该函数。none 是默认值,表示没有函数。

-

spring.ai.mistralai.chat.options.functions

由函数名称标识的函数列表,用于在单个提示请求中启用函数调用。具有这些名称的函数必须存在于 functionCallbacks 注册表中。

-

spring.ai.mistralai.chat.options.functionCallbacks

MistralAI 工具功能回调,用于注册 ChatModel。

-

您可以为 ChatModel 和 EmbeddingModel 实现覆盖常用的 spring.ai.mistralai.base-url 和 spring.ai.mistralai.api-key 属性。如果设置了 spring.ai.mistralai.chat.base-url 和 spring.ai.mistralai.chat.api-key 属性,它们将优先于通用属性。如果您想为不同的模型和不同的模型端点使用不同的 MistralAI 账户,这将非常有用。

所有以 spring.ai.mistralai.chat.options 为前缀的属性都可以通过在提示调用中添加特定于请求的运行时选项在运行时重写。

运行时选项

MistralAiChatOptions.java提供了模型配置,如要使用的模型、温度、频率惩罚等。
启动时,可使用 MistralAiChatModel(api, options) 构造函数或 spring.ai.mistralai.chat.options.* 属性配置默认选项。
在运行时,您可以通过在提示调用中添加新的、针对特定请求的选项来覆盖默认选项。例如,覆盖特定请求的默认模型和温度:

ChatResponse response = chatModel.call(new Prompt("Generate the names of 5 famous pirates.",MistralAiChatOptions.builder().withModel(MistralAiApi.ChatModel.LARGE.getValue()).withTemperature(0.5f).build()));

除了特定于模型的 MistralAiChatOptions外,您还可以使用通过 ChatOptionsBuilder#builder() 创建的便携式 ChatOptions 实例。

函数调用

您可以向 MistralAiChatModel 注册自定义 Java 函数,然后让 Mistral AI 模型智能地选择输出包含参数的 JSON 对象,以调用一个或多个已注册函数。这是一种将 LLM 功能与外部工具和 API 相连接的强大技术。了解更多有关Mistral AI 函数调用的信息。

示例控制器(自动配置)

创建一个新的 Spring Boot 项目,并将 spring-ai-mistral-ai-spring-boot-starter 添加到你的 pom(或 gradle)依赖项中。
在 src/main/resources 目录下添加 application.properties 文件,以启用和配置 OpenAi 聊天模型:

spring.ai.mistralai.api-key=YOUR_API_KEY
spring.ai.mistralai.chat.options.model=mistral-medium
spring.ai.mistralai.chat.options.temperature=0.7
将 api-key 替换为您的 OpenAI 凭据。

这将创建一个 MistralAiChatModel 实现,您可以将其注入到您的类中。下面是一个使用聊天模型生成文本的简单 @Controller 类的示例。

@RestController
public class ChatController {private final MistralAiChatModel chatModel;@Autowiredpublic ChatController(MistralAiChatModel chatModel) {this.chatModel = chatModel;}@GetMapping("/ai/generate")public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", chatModel.call(message));}@GetMapping("/ai/generateStream")public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {var prompt = new Prompt(new UserMessage(message));return chatModel.stream(prompt);}
}

手动配置

MistralAiChatModel实现了 ChatModel 和 StreamingChatModel,并使用Low-level MistralAiApi 客户端连接到 MistralAI 服务。

在项目的 Maven pom.xml 文件中添加 spring-ai-mistral-ai 依赖关系:

<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mistral-ai</artifactId>
</dependency>

或 Gradle build.gradle 构建文件。

dependencies {implementation 'org.springframework.ai:spring-ai-mistral-ai'
}

请参阅 "依赖关系管理 "部分,将 Spring AI BOM 添加到构建文件中。

接下来,创建一个 MistralAiChatModel 并将其用于文本生成:

var mistralAiApi = new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));var chatModel = new MistralAiChatModel(mistralAiApi, MistralAiChatOptions.builder().withModel(MistralAiApi.ChatModel.LARGE.getValue()).withTemperature(0.4f).withMaxToken(200).build());ChatResponse response = chatModel.call(new Prompt("Generate the names of 5 famous pirates."));// Or with streaming responses
Flux<ChatResponse> response = chatModel.stream(new Prompt("Generate the names of 5 famous pirates."));

MistralAiChatOptions 为聊天请求提供配置信息。MistralAiChatOptions.Builder 是一个流畅的选项生成器。

Low-level  MistralAiApi 客户端

下面是一个如何以编程方式使用 api 的简单片段:

MistralAiApi mistralAiApi =new MistralAiApi(System.getenv("MISTRAL_AI_API_KEY"));ChatCompletionMessage chatCompletionMessage =new ChatCompletionMessage("Hello world", Role.USER);// Sync request
ResponseEntity<ChatCompletion> response = mistralAiApi.chatCompletionEntity(new ChatCompletionRequest(List.of(chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8f, false));// Streaming request
Flux<ChatCompletionChunk> streamResponse = mistralAiApi.chatCompletionStream(new ChatCompletionRequest(List.of(chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8f, true));

更多信息请参阅 MistralAiApi.java的 JavaDoc。

MistralAiApi Samples
  • MistralAiApiIT.java测试提供了一些如何使用轻量级库的一般示例。

  • MistralAiApiIT.java 测试提供了一些如何使用轻量级库的一般示例。
    PaymentStatusFunctionCallingIT.java测试展示了如何使用底层 API 调用工具函数。基于 MistralAI 函数调用教程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/847845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html+CSS+js部分基础运用14

熟悉插值{{}}的用法&#xff0c;在页面中显示下列内容。图1 插值语法的效果图 在页面中统计鼠标单机按钮的次数。【提示&#xff1a;v-on指令】&#xff0c;页面效果如下图所示&#xff1a;图2 统计效果图 3、①单击按钮可以修改黑体字。②通过调试工具vue-devtools修改黑体字。…

uni-app:利用Vue的原型对象Vue.prototype设置全局方法及其引用

一、在main.js中设置方法checkPermission绑定到Vue.prototype 核心代码 Vue.prototype.$checkPermission function(username) {console.log(Checking permission for:, username); }; 完整代码 import App from ./App// 添加 checkPermission 方法到 Vue.prototype 上,检查…

服务器数据恢复—服务器raid5上层zfs文件系统数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台某品牌X3650M3服务器&#xff0c;服务器中有一组raid5磁盘阵列&#xff0c;上层采用zfs文件系统。 服务器未知原因崩溃&#xff0c;工作人员排查故障后发现服务器的raid5阵列中有两块硬盘离线导致该阵列不可用&#xff0c;服务器内…

Vue3-toRaw 与 markRaw

toRaw 作用&#xff1a;用于获取一个响应式对象的原始对象&#xff0c; toRaw 返回的对象不再是响应式的&#xff0c;不会触发视图更新。 官网描述&#xff1a;这是一个可以用于临时读取而不引起代理访问/跟踪开销&#xff0c;或是写入而不触发更改的特殊方法。不建议保存对原始…

Web3.0区块链技术开发方案丨ICO与IDO代币开发

在Web3.0时代的到来下&#xff0c;区块链技术不仅改变着金融领域的格局&#xff0c;也在资金筹集和代币发行方面掀起了一场变革。初始代币发行&#xff08;ICO&#xff09;和去中心化代币发行&#xff08;IDO&#xff09;成为了项目融资的主要方式&#xff0c;其基于区块链技术…

电脑开机之后要很久才能进入系统?进入WinPE也是卡顿半天?

前言 小白最近接到了一张很奇怪的电脑维修单&#xff0c;客户说他的工作室电脑开机特别慢&#xff0c;开机之后特别卡顿&#xff0c;在使用的时候也会一卡一卡的。 这事情开始看很简单&#xff1a;估计就是电脑还是机械硬盘&#xff0c;所以开机很慢又卡顿。所以应该是把机械…

reset database to incarnation rman 恢复最早的全备方法

核心 reset database to incarnation 7; restore database until time "to_date(2024-06-01 20:24:16, yyyy-mm-dd:hh24:mi:ss)" preview summary; restore database until time "to_date(2024-06-01 22:24:16, yyyy-mm-dd:hh24:mi:ss)" preview summary; …

微服务架构解密

目录 引言微服务架构简介 定义特点微服务架构的优势 灵活性与可扩展性独立部署与技术多样性故障隔离细粒度的扩展微服务架构的挑战 服务间通信数据一致性服务发现与负载均衡运维复杂性微服务与传统架构的对比 单体架构SOA架构实施微服务架构的最佳实践 持续集成与持续部署(CI/…

LSDFi协议赛道4大稳定币项目,以bitget钱包为例

纵览 LSDfi 生态繁荣的基石&#xff0c;LSD 稳定币赛道全解析 近期有许多建立在流动性质押通证的稳定币借贷协议开始出现在大众眼里&#xff0c;今天文章就要带大家来一一了解这些 LSDfi 协议究竟是如何争夺这块诱人的大饼。 LybraFinanceLSD 它透过抵押stETH/ETH 铸造&#…

MySQL经典练习50题(上)(解析版)

所有笔记、生活分享首发于个人博客 想要获得最佳的阅读体验&#xff08;无广告且清爽&#xff09;&#xff0c;请访问本篇笔记 MySQL经典练习50题&#xff08;上&#xff09; 创建数据库和表 -- 建 表 -- 学 生 表 CREATE TABLE Student( s_id VARCHAR(20), s_name VARCHAR(2…

信道固有带宽的理解(W=f2-f1)

本文我们探讨的信道带宽主要是有线信道带宽。&#xff08;如&#xff1a;同轴电缆、双绞线等等用于电信号传输的信道&#xff09;。 在讨论之前&#xff0c;需要明确几个概念。 1、电信号是什么&#xff1a; 电信号是指随着时间而变化的电压或者电流&#xff0c;因此在数学描…

Linux shell编程学习笔记57:lshw命令 获取cpu设备信息

0 前言 在Linux中&#xff0c;获取cpu信息的命令很多&#xff0c;除了我们已经研究的 cat /proc/cpuinfo、lscpu、nproc、hwinfo --cpu 命令&#xff0c;还有 lshw命令。 1 lshw命令的功能 lshw命令源自英文list hardware&#xff0c;即列出系统的硬件信息&#xff0c;这些硬…

js怎么加密密码进行发送?js使用RSA加密

前端接口安全方面&#xff0c;我们在注册登录时需要对密码等信息进行加密传输&#xff0c;下面是使用非对称加密算法RSA进行加密的方法使用。 一、引入加密库 jsencrypt 可以直接引用CDN中的 jsencrypt.min.js&#xff0c;也可以使用npm进行工程化引入。 // https://cdn.boot…

C++之noexcept

目录 1.概述 2.noexcept作为说明符 3.noexcept作为运算符 4.传统throw与noexcept比较 5.原理剖析 6.总结 1.概述 在C中&#xff0c;noexcept是一个关键字&#xff0c;用于指定函数不会抛出异常。如果函数保证不会抛出异常&#xff0c;编译器可以进行更多优化&#xff0c;…

SpringBoot拦截器和过滤器详解及使用

在现代Web应用程序开发中&#xff0c;尤其是在使用SpringBoot框架构建项目时&#xff0c;理解并有效利用拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;对于增强应用程序的功能性、安全性和可维护性至关重要。 拦截器和过滤器作为控制请求处…

【Spark】从DataFrame的schema创建表

// 基于DataFrame创建表 def createTable(dataFrame: DataFrame,partitionColumns: Array[String],databaseName: String,tableName: String): Unit = {

怎么在stm32上跑自己的神经网络

此教程为目前全网为数不多用于使用STM32实时跑神经网络结果输出的教程&#xff0c;不涉及原理讲解&#xff0c;只为帮助想在stm32上使用神经网络的朋友 基本步骤为先跑出神经网络得到xxx.h5文件&#xff0c;然后用cubemx把h5文件移植到stm32中&#xff0c;然后初始化设置输入输…

.NET 使用Automapper映射 Record类型

前言 当使用Automapper进行对象映射时,通常我们会使用POCO(Plain Old CLR Object)类作为源对象和目标对象。然而,自从C# 9引入了record类型,它们提供了更简洁、不可变的对象模型。 我已经将项目的所有Dto都是用record类型,但是record类型还是有些需要注意的点,本文将介…

C语言.数据结构.单链表经典算法

数据结构.单链表经典算法 1.经典算法OJ题1&#xff1a;移除链表元素1.1题目描述&#xff1a;1.2题解&#xff1a;1.3图文解释&#xff1a; 2.经典算法OJ题2&#xff1a;反转链表2.1题目描述&#xff1a;2.2题解&#xff1a;2.3图文解释 3.经典算法OJ题3&#xff1a;合并两个有序…

编译和运行qemu-uboot-arm64单板的Armbian系统

这篇文章ARM虚拟机安装OMV-CSDN博客遗留一个启动qemu-uboot-arm64单板Armbian镜像的问题&#xff0c;使用官方下载的镜像&#xff0c;会报错&#xff1a; fatal: no kernel available .... Failed to load /vmlinuz ...... qemu-system-aarch64 -smp 8 -m 8G -machine virt …