Spring AI 介绍

文章来源:AI 概念 (AI Concepts) _ Spring AI1.0.0-SNAPSHOT中文文档(官方文档中文翻译)|Spring 教程 —— CADN开发者文档中心 

本节介绍 Spring AI 使用的核心概念。我们建议仔细阅读它,以了解 Spring AI 是如何实现的。

   模型

AI 模型是旨在处理和生成信息的算法,通常模仿人类的认知功能。 通过从大型数据集中学习模式和见解,这些模型可以进行预测、文本、图像或其他输出,从而增强跨行业的各种应用程序。

有许多不同类型的 AI 模型,每种模型都适用于特定的使用案例。 虽然 ChatGPT 及其生成式 AI 功能通过文本输入和输出吸引了用户,但许多模型和公司都提供了不同的输入和输出。 在 ChatGPT 之前,许多人对 Midjourney 和 Stable Diffusion 等文本到图像生成模型着迷。

下表根据模型的输入和输出类型对多个模型进行分类:

模型类型

Spring AI 目前支持将输入和输出处理为语言、图像和音频的模型。 上表中的最后一行接受文本作为输入并输出数字,通常称为嵌入文本,表示 AI 模型中使用的内部数据结构。 Spring AI 支持嵌入以支持更高级的用例。

像 GPT 这样的模型的不同之处在于它们的预训练性质,如 GPT 中的“P”所示——聊天生成预训练转换器。 此预训练功能将 AI 转换为通用的开发人员工具,不需要广泛的机器学习或模型训练背景。

   提示

提示是基于语言的输入的基础,这些输入可指导 AI 模型生成特定输出。 对于熟悉 ChatGPT 的人来说,提示可能看起来只是在发送到 API 的对话框中输入的文本。 然而,它包含的远不止于此。 在许多 AI 模型中,提示的文本不仅仅是一个简单的字符串。

ChatGPT 的 API 在一个提示中有多个文本输入,每个文本输入都分配了一个角色。 例如,有 system 角色,它告诉模型如何行为并设置交互的上下文。 还有 user role,通常是来自用户的 Importing。

制作有效的提示既是一门艺术,也是一门科学。 ChatGPT 专为人类对话而设计。 这与使用 SQL 之类的东西来 “ask a question” 完全不同。 一个人必须与 AI 模型进行交流,类似于与另一个人交谈。

正是这种交互方式的重要性,以至于“Prompt Engineering”一词已经成为一门独立的学科。 有一系列新兴的技术可以提高提示的有效性。 投入时间制作提示可以大大提高结果输出。

分享提示已成为一种公共实践,并且正在积极地进行关于这一主题的学术研究。 例如,创建有效的提示(例如,与 SQL 形成对比)是多么违反直觉,最近的一篇研究论文发现,您可以使用的最有效的提示之一以短语“深呼吸并逐步完成此工作”开头。 这应该可以告诉你为什么语言如此重要。 我们还不完全了解如何最有效地利用这项技术的先前迭代,例如 ChatGPT 3.5,更不用说正在开发的新版本了。

提示模板

创建有效的提示包括建立请求的上下文,并将请求的各个部分替换为特定于用户输入的值。

此过程使用传统的基于文本的模板引擎进行提示创建和管理。 Spring AI 为此使用了 OSS 库StringTemplate。

例如,考虑简单的提示模板:

Tell me a {adjective} joke about {content}.
Copied!

在 Spring AI 中,提示模板可以比作 Spring MVC 架构中的 “视图”。 模型对象(通常是java.util.Map,用于填充模板中的占位符。 “rendered” 字符串成为提供给 AI 模型的提示的内容。

发送到模型的提示的特定数据格式存在相当大的变化。 提示最初从简单字符串开始,现在已经发展到包含多条消息,其中每条消息中的每个字符串代表模型的不同角色。

   嵌入

嵌入是文本、图像或视频的数字表示形式,用于捕获输入之间的关系。

嵌入的工作原理是将文本、图像和视频转换为浮点数数组(称为向量)。 这些矢量旨在捕获文本、图像和视频的含义。 嵌入数组的长度称为向量的维数。

通过计算两段文本的向量表示之间的数值距离,应用程序可以确定用于生成嵌入向量的对象之间的相似性。

嵌入

作为探索 AI 的 Java 开发人员,没有必要理解复杂的数学理论或这些向量表示背后的具体实现。 对它们在 AI 系统中的角色和功能有基本的了解就足够了,尤其是在您将 AI 功能集成到应用程序中时。

嵌入在 Retrieval Augmented Generation (RAG) 模式等实际应用中尤其相关。 它们能够将数据表示为语义空间中的点,这类似于欧几里得几何的二维空间,但维度更高。 这意味着就像欧几里得几何中平面上的点可以根据其坐标来接近或远一样,在语义空间中,点的接近反映了含义的相似性。 在这个多维空间中,关于相似主题的句子被放置在更近的位置,就像图表上彼此靠近的点一样。 这种接近有助于文本分类、语义搜索甚至产品推荐等任务,因为它允许 AI 根据相关概念在这个扩展的语义环境中的 “位置” 来识别和分组。

您可以将此语义空间视为一个向量。

   令 牌

代币是 AI 模型工作原理的构建块。 在输入时,模型将单词转换为标记。在输出时,他们将标记转换回单词。

在英语中,一个标记大约相当于一个单词的 75%。作为参考,莎士比亚全集总计约 900,000 字,可翻译成大约 120 万个代币。

令 牌

也许更重要的是代币 = 货币。 在托管 AI 模型的上下文中,您的费用由使用的令牌数量决定。输入和输出都会影响总令牌计数。

此外,模型还受令牌限制的约束,这些限制限制了在单个 API 调用中处理的文本量。 此阈值通常称为 “上下文窗口”。模型不会处理任何超过此限制的文本。

例如,ChatGPT3 有 4K 令牌限制,而 GPT4 提供不同的选项,例如 8K、16K 和 32K。 Anthropic 的 Claude AI 模型具有 100K 代币限制,而 Meta 最近的研究产生了 1M 代币限制模型。

要使用 GPT4 总结莎士比亚的汇编作品,您需要设计软件工程策略来切碎数据并在模型的上下文窗口限制内呈现数据。 Spring AI 项目可帮助您完成此任务。

   结构化输出

AI 模型的输出传统上以java.lang.String,即使您要求回复为 JSON。 它可能是正确的 JSON,但不是 JSON 数据结构。它只是一个字符串。 此外,在提示中请求 “for JSON” 并不是 100% 准确的。

这种复杂性导致了一个专业领域的出现,该领域涉及创建提示以产生预期的输出,然后将生成的简单字符串转换为可用于应用程序集成的数据结构。

结构化输出转换器架构

结构化输出转换采用精心设计的提示,通常需要与模型进行多次交互才能获得所需的格式。

   将您的数据和 API 引入 AI 模型

如何为 AI 模型配备尚未训练的信息?

请注意,GPT 3.5/4.0 数据集仅延长至 2021 年 9 月。 因此,该模型表示它不知道需要该日期之后知识的问题的答案。 一个有趣的琐事是,这个数据集大约有 650GB。

有三种技术可用于自定义 AI 模型以合并您的数据:

  • 微调:这种传统的机器学习技术涉及定制模型和更改其内部权重。 然而,对于机器学习专家来说,这是一个具有挑战性的过程,并且由于 GPT 等模型的大小,它非常耗费资源。此外,某些型号可能不提供此选项。

  • Prompt Stuffing:一种更实用的替代方案涉及将数据嵌入到提供给模型的提示中。给定模型的 token 限制,需要技术在模型的上下文窗口中呈现相关数据。 这种方法俗称 “填充提示”。 Spring AI 库可帮助您实现基于“填充提示”技术(也称为检索增强生成 (RAG))的解决方案。

提示填充

  • 函数调用:此技术允许注册自定义的用户函数,这些函数将大型语言模型连接到外部系统的 API。 Spring AI 极大地简化了您需要编写以支持函数调用的代码。

检索增强一代

一种称为检索增强生成 (RAG) 的技术已经出现,用于解决将相关数据纳入提示以实现准确 AI 模型响应的挑战。

该方法涉及批处理风格的编程模型,其中作业从您的文档中读取非结构化数据,对其进行转换,然后将其写入矢量数据库。 概括地说,这是一个 ETL (提取、转换和加载) 管道。 向量数据库用于 RAG 技术的检索部分。

作为将非结构化数据加载到矢量数据库的一部分,最重要的转换之一是将原始文档拆分为更小的部分。 将原始文档拆分为较小部分的过程有两个重要步骤:

  1. 将文档拆分为多个部分,同时保留内容的语义边界。 例如,对于包含段落和表格的文档,应避免在段落或表格的中间拆分文档。 对于代码,请避免在方法实现的中间拆分代码。

  2. 将文档的各个部分进一步拆分为大小占 AI 模型令牌限制的一小部分。

RAG 的下一阶段是处理用户输入。 当 AI 模型要回答用户的问题时,该问题和所有“相似”文档片段都会被放入发送到 AI 模型的提示中。 这就是使用向量数据库的原因。它非常擅长寻找相似的内容。

Spring AI RAG

  • ETL 管道提供了有关编排从数据源提取数据并将其存储在结构化向量存储中的流程的更多信息,从而确保数据在传递给 AI 模型时处于最佳检索格式。

  • ChatClient - RAG 介绍了如何使用QuestionAnswerAdvisor以在您的应用程序中启用 RAG 功能。

函数调用

大型语言模型 (LLM) 在训练后被冻结,导致知识过时,并且无法访问或修改外部数据。

函数调用机制解决了这些缺点。 它允许您注册自己的函数,以将大型语言模型连接到外部系统的 API。 这些系统可以为 LLM 提供实时数据并代表他们执行数据处理作。

Spring AI 大大简化了您需要编写以支持函数调用的代码。 它为您处理函数调用对话。 您可以将函数作为@Bean,然后在提示选项中提供函数的 Bean 名称以激活该函数。 此外,您可以在单个提示中定义和引用多个函数。

函数调用

  1. 执行 chat 请求,发送函数定义信息。 后者提供name,description(例如,解释 Model 何时应该调用函数),以及input parameters(例如,函数的输入参数 schema)。

  2. 当 Model 决定调用该函数时,它将使用输入参数调用该函数,并将输出返回给 Model。

  3. Spring AI 为您处理此对话。 它将函数调用调度给相应的函数,并将结果返回给模型。

  4. Model 可以执行多个函数调用来检索它需要的所有信息。

  5. 获取到所需的所有信息后,模型将生成响应。

有关如何将此功能与不同 AI 模型一起使用的更多信息,请遵循函数调用文档。

   评估 AI 响应

根据用户请求有效评估 AI 系统的输出对于确保最终应用程序的准确性和有用性非常重要。 为此,几种新兴技术允许使用预训练模型本身。

此评估过程包括分析生成的响应是否与用户的意图和查询的上下文一致。相关性、连贯性和事实正确性等指标用于衡量 AI 生成的响应的质量。

一种方法涉及将用户的请求和 AI 模型的响应呈现给模型,查询响应是否与提供的数据一致。

此外,利用向量数据库中存储的信息作为补充数据可以增强评估过程,有助于确定响应相关性。

Spring AI 项目提供了一个EvaluatorAPI 目前提供对基本策略的访问来评估模型响应。 有关详细信息,请遵循评估测试文档。

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

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

相关文章

【Elasticsearch】监控与管理:集群监控指标

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

黑马Redis详细笔记(实战篇---短信登录)

目录 一.短信登录 1.1 导入项目 1.2 Session 实现短信登录 1.3 集群的 Session 共享问题 1.4 基于 Redis 实现共享 Session 登录 一.短信登录 1.1 导入项目 数据库准备 -- 创建用户表 CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,phone …

大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡

大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡 背景 前端开发接口请求,调试,联调,接入数据,前端必不可少工具,postman是一个非常好…

开源身份和访问管理方案之keycloak(一)快速入门

文章目录 什么是IAM什么是keycloakKeycloak 的功能 核心概念client管理 OpenID Connect 客户端 Client Scoperealm roleAssigning role mappings分配角色映射Using default roles使用默认角色Role scope mappings角色范围映射 UsersGroupssessionsEventsKeycloak Policy创建策略…

java项目之直销模式下家具工厂自建网站源码(ssm+mysql)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的直销模式下家具工厂自建网站源码。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 直销模式下家具…

C基础(十)动态内存分配和结构体

动态内存分配 堆区与栈区空间&#xff1a;申请堆区空间需手动操作&#xff0c;使用完要手动释放&#xff1b;栈区空间由系统自动分配和释放。相关函数与概念 malloc&#xff1a;从堆区申请指定字节数的空间&#xff0c;返回首地址&#xff0c;需搭配头文件#include <stdlib.…

图7.1-7.6《分析模式》第7章使用会计模型-原图和UML图对比

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 图7.1 TT示例的包。 账户包持有抽象的会计类型&#xff0c;电话服务包为这个特定领域扩展这些类型。 图7.2 TT的账户模型。 7.3 电话服务的结构模型。 图7.4 创建新电话服务的事件图。…

大模型基本原理(四)——如何武装ChatGPT

传统的LLM存在几个短板&#xff1a;编造事实、计算不准确、数据过时等&#xff0c;为了应对这几个问题&#xff0c;可以借助一些外部工具或数据把AI武装起来。 实现这一思路的框架包括RAG、PAL、ReAct。 1、RAG&#xff08;检索增强生成&#xff09; LLM生成的内容会受到训练…

Qt监控设备离线检测/实时监测设备上下线/显示不同的状态图标/海康大华宇视华为监控系统

一、前言说明 监控系统中一般有很多设备&#xff0c;有些用户希望知道每个设备是否已经上线&#xff0c;最好有不同的状态图标提示&#xff0c;海康的做法是对设备节点的图标和颜色变暗处理&#xff0c;离线的话就变暗&#xff0c;有可能是加了透明度&#xff0c;而大华的处理…

数据结构-栈和队列的应用

目录 前言一、栈的应用二、队列的应用&#xff08;农夫过河问题&#xff09;2.1 问题描述2.2 算法选择2.3 算法精化2.4 算法实现2.5 问题结果 总结 前言 本篇文章使用两个例子说明栈和队列的应用&#xff0c; 对于迷宫问题&#xff0c;使用栈实现深度优先策略解决迷宫问题&…

Acwing-基础算法课笔记之基础算法(差分)

Acwing-基础算法课笔记之基础算法&#xff08;差分&#xff09; 一、一维差分1、差分的概念2、差分思想 二、二维差分操作流程 一、一维差分 1、差分的概念 对于一个给定的序列a&#xff0c;它的差分序列b定义为&#xff1a; b [ 1 ] a [ 1 ] b[1]a[1] b[1]a[1]&#xff0c…

SkyWalking 10.1.0 实战:从零构建全链路监控,解锁微服务性能优化新境界

文章目录 前言一、集成SkyWalking二、SkyWalking使用三、SkyWalking性能剖析四、SkyWalking 告警推送4.1 配置告警规则4.2 配置告警通知地址4.3 下发告警信息4.4 测试告警4.5 慢SQL查询 总结 前言 在传统监控系统中&#xff0c;我们通过进程监控和日志分析来发现系统问题&…

【动态规划】风扫枯杨,满地堆黄叶 - 9. 完全背包问题

本篇博客给大家带来的是完全背包问题之动态规划解法技巧. &#x1f40e;文章专栏: 动态规划 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快乐顺…

MyBatis的工作流程是怎样的?

大家好&#xff0c;我是锋哥。今天分享关于【MyBatis的工作流程是怎样的&#xff1f;】面试题。希望对大家有帮助&#xff1b; MyBatis的工作流程是怎样的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 的工作流程可以分为几个主要的步骤&…

python-leetcode 25.环形链表

题目&#xff1a; 给定一个链表的头节点head,判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪next指针再次到达&#xff0c;则链表中存在环。为了表示给定链表中的环&#xff0c;评测系统内部使用整数pos来表示链表尾连接到链表中的位置&#xff08;…

瑞芯微开发板/主板Android调试串口配置为普通串口方法 深圳触觉智能科技分享

本文介绍瑞芯微开发板/主板Android调试串口配置为普通串口方法&#xff0c;不同板型找到对应文件修改&#xff0c;修改的方法相通。触觉智能RK3562开发板演示&#xff0c;搭载4核A53处理器&#xff0c;主频高达2.0GHz&#xff1b;内置独立1Tops算力NPU&#xff0c;可应用于物联…

Datawhale 组队学习 Ollama教程 task1

一、Ollama 简介 比喻&#xff1a;Ollama 就像是一个“魔法箱子”&#xff0c;里面装满了各种大型语言模型&#xff08;LLM&#xff09;。你不需要懂复杂的魔法咒语&#xff08;配置&#xff09;&#xff0c;只需要轻轻一按&#xff08;一条命令&#xff09;&#xff0c;就能让…

vulnhub 靶场 —— NullByte

免责声明 本博客文章仅供教育和研究目的使用。本文中提到的所有信息和技术均基于公开来源和合法获取的知识。本文不鼓励或支持任何非法活动&#xff0c;包括但不限于未经授权访问计算机系统、网络或数据。 作者对于读者使用本文中的信息所导致的任何直接或间接后果不承担任何…

使用 meshgrid函数绘制网格点坐标的原理与代码实现

使用 meshgrid 绘制网格点坐标的原理与代码实现 在 MATLAB 中&#xff0c;meshgrid 是一个常用函数&#xff0c;用于生成二维平面网格点的坐标矩阵。本文将详细介绍如何利用 meshgrid 函数生成的矩阵绘制网格点的坐标&#xff0c;并给出具体的代码实现和原理解析。 实现思路 …

【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计IIR数字滤波器可以看这里&#xff1a;利用MATLAB配合ARM-DSP库设计IIR数字滤波器&#xff08;保姆级教程&#xff09; 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合&#xff0c;简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…