Chat Model API

聊天模型API为开发人员提供了将人工智能聊天完成功能集成到应用程序中的能力。它利用预训练的语言模型,如GPT(生成预训练转换器),以自然语言对用户输入生成类似人类的响应。

API通常通过向人工智能模型发送提示或部分对话来工作,然后人工智能模型根据其训练数据和对自然语言模式的理解生成对话的完成或继续。然后将完成的响应返回给应用程序,应用程序可以将其呈现给用户或用于进一步处理。

Spring人工智能聊天模型API设计为一个简单便携的界面,用于与各种人工智能模型交互,使开发人员能够在不同的模型之间切换,只需最少的代码更改。这种设计符合Spring的模块化和互换性理念。

此外,在Prompt用于输入封装和ChatResponse用于输出处理等配套类的帮助下,Chat Model API将与AI Model的通信统一起来。它管理请求准备和响应解析的复杂性,提供了一个直接和简化的API交互。

您可以在“可用实现”部分找到有关可用实现的更多信息,也可以在“聊天模型比较”部分找到详细的比较。

API Overview

本节提供了Spring AI Chat Model API接口和相关类的指南。

ChatModel

以下是ChatModel接口定义:

public interface ChatModel extends Model<Prompt, ChatResponse> {default String call(String message) {...}@OverrideChatResponse call(Prompt prompt);
}

带有String参数的call()方法简化了初始使用,避免了更复杂的Prompt和ChatResponse类的复杂性。在实际应用中,更常见的是使用call()方法,该方法接受Prompt实例并返回ChatResponse。

StreamingChatModel

以下是StreamingChatModel接口定义:

public interface StreamingChatModel extends StreamingModel<Prompt, ChatResponse> {default Flux<String> stream(String message) {...}@OverrideFlux<ChatResponse> stream(Prompt prompt);
}

stream()方法采用类似于ChatModel的String或Prompt参数,但它使用reactive Flux API来流式传输响应。

Prompt

Prompt是一个ModelRequest,它封装了Message对象和可选模型请求选项的列表。以下列表显示了Prompt类的截断版本,不包括构造函数和其他实用方法:

public class Prompt implements ModelRequest<List<Message>> {private final List<Message> messages;private ChatOptions modelOptions;@Overridepublic ChatOptions getOptions() {...}@Overridepublic List<Message> getInstructions() {...}// constructors and utility methods omitted
}
Message

Message接口封装了Prompt文本内容、元数据属性集合和称为MessageType的分类。

接口定义如下:

public interface Content {String getText();Map<String, Object> getMetadata();
}public interface Message extends Content {MessageType getMessageType();
}

多模式消息类型还实现了提供媒体内容对象列表的MediaContent接口。

public interface MediaContent extends Content {Collection<Media> getMedia();}

Message接口有各种实现,对应于AI模型可以处理的消息类别:

聊天完成端点,根据会话角色区分消息类别,由MessageType有效映射。

例如,OpenAI识别不同会话角色的消息类别,如系统、用户、功能或助手。

虽然术语MessageType可能意味着特定的消息格式,但在这种情况下,它有效地指定了消息在对话中扮演的角色。

对于不使用特定角色的AI模型,UserMessage实现充当标准类别,通常表示用户生成的查询或指令。要了解Prompt和Message之间的实际应用和关系,特别是在这些角色或消息类别的背景下,请参阅Prompts部分中的详细说明。

Chat Options

表示可以传递给AI模型的选项。ChatOptions类是ModelOptions的一个子类,用于定义可以传递给AI模型的几个可移植选项。ChatOptions类定义如下:

public interface ChatOptions extends ModelOptions {String getModel();Float getFrequencyPenalty();Integer getMaxTokens();Float getPresencePenalty();List<String> getStopSequences();Float getTemperature();Integer getTopK();Float getTopP();ChatOptions copy();}

此外,每个特定于模型的ChatModel/StreamingChatModel实现都可以有自己的选项,可以传递给AI模型。例如,OpenAI聊天完成模型有自己的选项,如logitBias、seed和user。

这是一个强大的功能,允许开发人员在启动应用程序时使用特定于模型的选项,然后在运行时使用Prompt请求覆盖它们。

Spring AI提供了一个复杂的系统来配置和使用聊天模型。它允许在启动时设置默认配置,同时还提供了根据每个请求覆盖这些设置的灵活性。这种方法使开发人员能够轻松地使用不同的AI模型并根据需要调整参数,所有这些都在Spring AI框架提供的一致界面内完成。

以下流程图说明了Spring AI如何处理聊天模型的配置和执行,结合启动和运行时选项:

启动和运行时选项的分离允许进行全局配置和特定于请求的调整。

ChatResponse

ChatResponse类的结构如下:

public class ChatResponse implements ModelResponse<Generation> {private final ChatResponseMetadata chatResponseMetadata;private final List<Generation> generations;@Overridepublic ChatResponseMetadata getMetadata() {...}@Overridepublic List<Generation> getResults() {...}// other methods omitted
}

ChatResponse类保存AI模型的输出,每个Generation实例包含单个提示产生的潜在多个输出之一。

ChatResponse类还携带有关AI模型响应的ChatResponseMetadata元数据。

Generation

最后,Generation类从ModelResult扩展来表示模型输出(辅助消息)和相关元数据:

public class Generation implements ModelResult<AssistantMessage> {private final AssistantMessage assistantMessage;private ChatGenerationMetadata chatGenerationMetadata;@Overridepublic AssistantMessage getOutput() {...}@Overridepublic ChatGenerationMetadata getMetadata() {...}// other methods omitted
}

Available Implementations

该图显示了统一的界面ChatModel和StreamingChatModel,用于与来自不同提供商的各种人工智能聊天模型交互,允许在不同的人工智能服务之间轻松集成和切换,同时为客户端应用程序维护一致的API。

OpenAI聊天完成(流媒体、多模态和功能调用支持)

Microsoft Azure开放式AI聊天完成(流媒体和函数调用支持)

Ollama聊天完成(流媒体、多模式和功能调用支持)

拥抱面部聊天完成(不支持流媒体)

Google Vertex AI Gemini聊天完成(流媒体、多模态和功能调用支持)

亚马逊基岩

Mistral AI聊天完成(流媒体和功能调用支持)

人工聊天完成(流媒体和功能调用支持)

Find a detailed comparison of the available Chat Models in th

Chat Model API

Spring AI Chat Model API构建在Spring AI Generic Model API之上,提供特定于Chat的抽象和实现。这允许在不同的人工智能服务之间轻松集成和切换,同时为客户端应用程序维护一致的API。下面的类图说明了Spring AI聊天模型API的主要类和接口。

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

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

相关文章

【黑群晖】自组硬件/旧电脑nas改造(三)——使用Jellyfin创建家庭影音库

一、打开套件中心安装Jellyfin套件 如果找不到Jellyfin套件&#xff0c;需要手动添加三方套件源&#xff1a; 《群晖NAS必学技能&#xff1a;一键解锁三方套件源&#xff0c;PT下载影音播放全搞定&#xff01;》 二、配置Jellyfin 访问http://群晖IP:8096 进入Jellyfin初始化界…

泰山派编译debian报错 lb config: unrecognized option ‘--debootstrap-options‘

简介 最近在编译泰山派 编译buildroot系统正常&#xff0c;但是编译debian时总是报错说lb 找不到一些参数&#xff0c;如下图所示&#xff0c;应该当前的版本较低 不支持这些参数&#xff0c;我试了很多方法 升级次版本 但是提示的是最新的&#xff0c;最后经过一番搜索 在官方…

跨境证券交易系统合规升级白皮书:全链路微秒风控+开源替代,护航7月程序化交易新规落地

1 行业变革&#xff1a;四重驱动力重塑证券交易系统 当前全球证券行业正处于深刻变革期&#xff0c;跨境金融活动面临前所未有的机遇与挑战。今日央行开展的1310亿元7天期逆回购操作&#xff0c;以及国家外汇管理局向合格境内机构投资者(QDII)新增发放30.8亿美元投资额度等政策…

Node.js核心API(fs篇)

前言&#xff1a;在Node.js生态系统中&#xff0c;文件系统操作是后端开发不可或缺的一部分。fs模块作为Node.js核心API的重要组成部分&#xff0c;提供了与文件系统交互的能力&#xff0c;涵盖了从基础的文件读写到复杂的目录操作等功能。现代JavaScript开发中&#xff0c;处理…

HarmonyOS学习2---Stage模型

1、工程目录结构 1.1、入口 UIAbility 1.2、入口page 1.3、配置文件 1、配置文件 1&#xff09;应用级配置文件 --- app.json5 2&#xff09;模块级配置文件 --- module.json5 3、oh-package.json5 4、资源文件 1&#xff09;element目录 2&#xff09;media目录 3&#xff09…

【软件工程】软件复刻项目的完整流程指南

软件复刻项目的完整流程指南 第一章、概述 一、前期准备&#xff1a;明确目标与合规性 1. 法律风险评估 版权排查&#xff1a;确认目标软件的 UI 设计、代码、商标是否受保护&#xff08;如界面元素、核心算法是否申请专利&#xff09;。规避侵权&#xff1a;避免直接复制 …

浅谈Python 中的当前工作目录与脚本目录

Python 中的 os.path.exists() 和 __file__ 使用陷阱&#xff1a;工作目录 ≠ 脚本目录 在使用 os.path.exists() 或 open() 等函数操作文件路径时&#xff0c;笔者常常忽略一个关键概念&#xff1a;当前运行目录&#xff08;Current Working Directory, CWD&#xff09;并不等…

iOS检测并阻止骚扰电话的方法

检测并阻止骚扰电话 你可以在 iPhone 上使用“将未知来电者设置为静音”或第三方 App 来阻止骚扰电话。 打开“将未知来电者设置为静音” 在 iOS 13 及更高版本中&#xff0c;你可以打开“静音未知来电”&#xff0c;以免接到陌生人的来电。这一功能可以阻止那些你从未联系过…

TensorFlow源码深度阅读指南

TensorFlow源码深度阅读指南 本文基于《TensorFlow内核剖析》附录A的代码阅读方法论&#xff0c;结合实例解析核心源码阅读技巧&#xff08;含关键图示&#xff09;&#xff1a;一、源码阅读的四个维度 1. 分层切入策略&#xff08;图A-1&#xff09; #mermaid-svg-ooLMzaWU5ky…

设计模式-责任链模式、策略模式

责任链模式 Chain of Responsibility&#xff08;职责链&#xff09;—对象行为型模式定义&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有对象…

泛微e-cology remarkOperate远程命令执行漏洞

【高危】泛微e-cology remarkOperate远程命令执行漏洞 漏洞描述 泛微e-cology是泛微公司开发的协同管理应用平台。 受影响版本中&#xff0c;接口 /api/workflow/reqform/remarkOperate 存在 SQL 注入漏洞&#xff0c;multipart 类型参数 requestid 直接拼接进 SQL 语句&…

Redis常用操作

1&#xff1a;redis常用操作&#xff1a; package com.shunaier.hhhh.biz.utils;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.shunaier.hhhh.common.enums.SystemErrorEnum; import com.shunaier.hhhh.common.exception.SNEB…

mybatis-plus-01-环境初始化及简单应用

文章目录 【README】【1】springboot集成mybatis-plus配置【1.1】目录结构【相关说明】 【1.2】代码示例【pom.xml】【application.properties】【MybatisPlusNoteController】【UserAppService】【UserMapper】【UserPO】【建表语句】 【2】演示 【README】 本文代码参见&…

VR小鼠解剖虚拟仿真:开启生命科学教育新视野​

VR 小鼠解剖虚拟仿真&#xff0c;是一项将虚拟现实(VR)技术深度融入小鼠解剖学习与研究过程的创新应用&#xff0c;即 VR 小鼠解剖虚拟仿真。其核心原理在于&#xff0c;借助 VR 技术所构建的高度逼真的虚拟环境&#xff0c;突破了传统小鼠解剖在时间、空间以及实体操作上的诸多…

计算机网络(网页显示过程,TCP三次握手,HTTP1.0,1.1,2.0,3.0,JWT cookie)

前言 最近一直在后端开发的面经&#x1f64c;&#xff0c;里面涉及到了好多计算机网络的知识&#x1f601;&#xff0c;在这里以问题的形式写一个学习笔记&#xff08;其中参考了: JavaGuide 和 小林coding 这两个很好的学习网站&#x1f618;&#xff09; 1.当键入网址后&am…

Redis 消息的发布和订阅

Redis 消息的发布和订阅 1、什么是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 2、Redis的发布和订阅示意 1、客户端可以订阅频道如下图 2、当…

python优先队列使用

heapq 是 Python 的一个内置模块&#xff0c;提供了堆队列算法的实现&#xff0c;也称为优先队列算法。以下是关于 heapq 模块的详细使用说明。 基本概念 堆&#xff1a;一种特殊的二叉树结构&#xff0c;满足父节点总是小于或等于其子节点&#xff08;最小堆&#xff09;特性…

在 Windows 机器上安装和配置 RabbitMQ

RabbitMQ 它是一款基于 AMQP&#xff08;高级消息队列协议&#xff09;的流行消息代理。RabbitMQ 适用于 Windows、Linux 和 macOS&#xff0c;易于安装和使用&#xff0c;并提供一系列强大的消息队列和路由功能。要在 Windows 计算机上使用 RabbitMQ&#xff0c;您必须先安装 …

第十五节:第六部分:日志技术:logback的核心配置文件详解、日志级别

核心配置文件logback.xml 什么是日志级别&#xff0c;为什么要学日志级别

从入门到精通:数据库全攻略

目录一、数据库基础概念1.1 数据库定义1.2 数据库与文件系统的区别1.3 数据库系统组成部分1.4 关系型数据库与非关系型数据库二、数据库安装与配置2.1 下载 MySQL2.2 安装 MySQL2.3 初始化数据库服务器2.4 启动和停止 MySQL 服务2.5 登录 MySQL2.6 创建数据库2.7 创建数据表三、…