做招商网站,七牛云app,个人微信公众号申请,科技小制作小发明Spring AI 支持来自 Mistral AI 的各种 AI 语言模型。您可以与 Mistral AI 语言模型互动#xff0c;并基于 Mistral 模型创建多语言对话助手。
先决条件
要访问 Mistral AI 语言模型#xff0c;您需要与 MistralAI 创建一个 API。在 MistralAI 注册页面创建账户#xff0c…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_KEYINSERT KEY HERE
添加资源库和 BOM
Spring AI 工件发布在 Spring Milestone 和 Snapshot 资源库中。请参阅 资源库 部分将这些资源库添加到您的构建系统中。 为了帮助进行依赖性管理Spring AI 提供了一个 BOM物料清单以确保在整个项目中使用一致的 Spring AI 版本。请参阅 依赖关系管理 部分将 Spring AI BOM 添加到构建系统中。
自动配置
Spring AI 为 MistralAI 聊天客户端提供 Spring Boot 自动配置功能。要启用它请在项目的 Maven pom.xml 文件中添加以下依赖项
dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-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-7b, open-mixtral-8x7b, mistral-small-latest, mistral-medium-latest, mistral-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-keyYOUR_API_KEY
spring.ai.mistralai.chat.options.modelmistral-medium
spring.ai.mistralai.chat.options.temperature0.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 FluxChatResponse 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 依赖关系
dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-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
FluxChatResponse 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
ResponseEntityChatCompletion response mistralAiApi.chatCompletionEntity(new ChatCompletionRequest(List.of(chatCompletionMessage), MistralAiApi.ChatModel.LARGE.getValue(), 0.8f, false));// Streaming request
FluxChatCompletionChunk 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 函数调用教程。