目录

一、Spring AI Alibaba 的介绍

1.1 什么是 Spring AI Alibaba?

1.2 Spring AI 项目简介

二、核心概念

2.1 模型

2.2 提示(Prompt)

2.3 提示词模板(Prompt Template)

2.4 嵌入(Embedding)

2.5 Token

2.6 结构化输出(Structured Output)

2.7 检索增强生成(RAG)

2.8 函数调用(Function Calling)


一、Spring AI Alibaba 的介绍

1.1 什么是 Spring AI Alibaba?

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。

Spring AI Alibaba 作为开发 AI 应用程序的基础框架,定义了以下抽象概念与 API,并提供了 API 与通义系列模型的适配。

  • 开发复杂 AI 应用的高阶抽象 Fluent API — ChatClient
  • 提供多种大模型服务对接能力,包括主流开源与阿里云通义大模型服务(百炼)等
  • 支持的模型类型包括聊天、文生图、音频转录、文生语音等
  • 支持同步和流式 API,在保持应用层 API 不变的情况下支持灵活切换底层模型服务,支持特定模型的定制化能力(参数传递)
  • 支持 Structured Output,即将 AI 模型输出映射到 POJOs
  • 支持矢量数据库存储与检索
  • 支持函数调用 Function Calling
  • 支持构建 AI Agent 所需要的工具调用和对话内存记忆能力
  • 支持 RAG 开发模式,包括离线文档处理如 DocumentReader、Splitter、Embedding、VectorStore 等,支持 Retrieve 检索

以上框架功能可让您实现常见 AI 应用的快速开发,例如 “通过文档进行问答” 或 “通过文档进行聊天” 等。

1.2 Spring AI 项目简介

Spring AI 项目由 Spring 官方开源并维护的 AI 应用开发框架,该项目目标是简化包含人工智能(AI)功能的应用程序的开发,避免不必要的复杂性。该项目从著名的 Python 项目(例如 LangChain 和 LlamaIndex)中汲取灵感,但 Spring AI 并非这些项目的直接移植,该项目的成立基于这样的信念:下一波生成式 AI 应用将不仅面向 Python 开发人员,还将遍及多种编程语言。从本质上讲,Spring AI 解决了 AI 集成的基本挑战:Connecting your enterprise Data and APIs with the AI Models。

二、核心概念

2.1 模型

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

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

Spring AI 目前支持以语言、图像和音频形式处理输入和输出的模型。上表中的最后一行接受文本作为输入并输出数字,通常称为嵌入文本(Embedding Text),用来表示 AI 模型中使用的内部数据结构。Spring AI 提供了对 Embedding 的支持以支持开发更高级的应用场景。

GPT 等模型的独特之处在于其预训练特性,正如 GPT 中的“P”所示——Chat Generative Pre-trained Transformer。这种预训练功能将 AI 转变为通用的开发工具,开发者使用这种工具不再需要广泛的机器学习或模型训练背景。

2.2 提示(Prompt)

Prompt 作为语言基础输入的基础,指导 AI 模型生成特定的输出。对于熟悉 ChatGPT 的人来说,Prompt 似乎只是输入到对话框中的文本,然后发送到 API。然而,它的内涵远不止于此。在许多 AI 模型中,Prompt 的文本不仅仅是一个简单的字符串。

ChatGPT 的 API 包含多个文本输入,每个文本输入都有其角色。例如,系统角色用于告知模型如何行为并设定交互的背景。还有用户角色,通常是来自用户的输入。

分享 Prompt 已成为一种共同的实践,且正在进行积极的学术研究。例如,最近的一篇研究论文发现,最有效的 Prompt 之一可以以“深呼吸一下,分步进行此任务”开头。这表明语言的重要性之高。我们尚未完全了解如何充分利用这一技术的前几代版本,例如 ChatGPT 3.5,更不用说正在开发的新版本了。

2.3 提示词模板(Prompt Template)

创建有效的 Prompt 涉及建立请求的上下文,并用用户输入的特定值替换请求的部分内容。这个过程使用传统的基于文本的模板引擎来进行 Prompt 的创建和管理。Spring AI 采用开源库 StringTemplate 来实现这一目的。

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

在 Spring AI 中,Prompt 模板可以类比于 Spring MVC 架构中的“视图”。一个模型对象,通常是 java.util.Map,提供给 Template,以填充模板中的占位符。渲染后的字符串成为传递给 AI 模型的 Prompt 的内容。

传递给模型的 Prompt 在具体数据格式上有相当大的变化。从最初的简单字符串开始,Prompt 逐渐演变为包含多条消息的格式,其中每条消息中的每个字符串代表模型的不同角色。

2.4 嵌入(Embedding)

嵌入(Embedding)是文本、图像或视频的数值表示,能够捕捉输入之间的关系,Embedding 通过将文本、图像和视频转换为称为向量(Vector)的浮点数数组来工作。这些向量旨在捕捉文本、图像和视频的含义,Embedding 数组的长度称为向量的维度。

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

Embedding 在实际应用中,特别是在检索增强生成(RAG)模式中,具有重要意义。它们使数据能够在语义空间中表示为点,这类似于欧几里得几何的二维空间,但在更高的维度中。这意味着,就像欧几里得几何中平面上的点可以根据其坐标的远近关系而接近或远离一样,在语义空间中,点的接近程度反映了意义的相似性。关于相似主题的句子在这个多维空间中的位置较近,就像图表上彼此靠近的点。这种接近性有助于文本分类、语义搜索,甚至产品推荐等任务,因为它允许人工智能根据这些点在扩展的语义空间中的“位置”来辨别和分组相关概念。

2.5 Token

token 是 AI 模型工作原理的基石。输入时,模型将单词转换为 token。输出时,它们将 token 转换回单词。

在英语中,一个 token 大约对应一个单词的 75%。作为参考,莎士比亚的全集总共约 90 万个单词,翻译过来大约有 120 万个 token。

也许更重要的是 “token = 金钱”。在托管 AI 模型的背景下,您的费用由使用的 token 数量决定。输入和输出都会影响总 token 数量。

此外,模型还受到 token 限制,这会限制单个 API 调用中处理的文本量。此阈值通常称为“上下文窗口”。模型不会处理超出此限制的任何文本。

例如,ChatGPT3 的 token 限制为 4K,而 GPT4 则提供不同的选项,例如 8K、16K 和 32K。Anthropic 的 Claude AI 模型的 token 限制为 100K,而 Meta 的最新研究则产生了 1M token 限制模型。

2.6 结构化输出(Structured Output)

即使您要求回复为 JSON ,AI 模型的输出通常也会以 java.lang.String 的形式出现。它可能是正确的 JSON,但它可能并不是你想要的 JSON 数据结构,它只是一个字符串。此外,在提示词 Prompt 中要求 “返回 JSON” 并非 100% 准确

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

2.7 检索增强生成(RAG)

一种称为检索增强生成 (RAG) 的技术已经出现,旨在解决为 AI 模型提供额外的知识输入,以辅助模型更好的回答问题。

该方法涉及批处理式的编程模型,其中涉及到:从文档中读取非结构化数据、对其进行转换、然后将其写入矢量数据库。从高层次上讲,这是一个 ETL(提取、转换和加载)管道。矢量数据库则用于 RAG 技术的检索部分。

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

  1. 将文档拆分成几部分,同时保留内容的语义边界。例如,对于包含段落和表格的文档,应避免在段落或表格中间拆分文档;对于代码,应避免在方法实现的中间拆分代码。
  2. 将文档的各部分进一步拆分成大小仅为 AI 模型令牌 token 限制的一小部分的部分。

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

2.8 函数调用(Function Calling)

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

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

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

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

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

相关文章

从main()函数的执行发散开来

大多数程序员的第一行代码可能都是从输出“Hello&#xff0c;World!开始的吧。如果请你写一个c程序&#xff0c;在屏幕上打印“Hello&#xff0c;World!”&#xff0c;下面的代码对拥有扎实编程基本功的你而言肯定so easy&#xff1a; #include <stdio.h>int main() {pr…

(16)java+ selenium->自动化测试-元素定位之By xpath下篇

1.简介 老规矩,我们还是接着前面两篇的Xpath 5.自动测试实战 以百度首页为例,将xpath的各种定位方法一一讲解和分享一下。 5.1大致步骤 1.访问百度首页。 2.通过xpath定位到元素,点击一下。 5.2模糊定位starts-with关键字 有一种特殊的情况:页面元素的属性值会被动态…

45-Oracle 索引的新建与重建

小伙们日常里有没有被业务和BOSS要求新建索引或是重建索引&#xff1f;他们都想着既快又稳&#xff0c;那么索引在在Oracle上如何实现、新建、重建。原则是什么&#xff1a; 1、新建索引&#xff0c;查询是否高频且慢&#xff0c;索引列是否高选择性&#xff0c;新增索引对写负…

使用 Rust Clippy 的详细方案

使用 Rust Clippy 的详细方案 Rust Clippy 是一个强大的静态分析工具&#xff0c;帮助开发者识别代码中的潜在问题并改善代码质量。以下是如何充分利用 Clippy 的方法&#xff1a; 安装 Clippy 确保 Rust 工具链已安装。通过以下命令安装 Clippy&#xff1a; rustup compon…

21.什么是JSBridge(1)

1.Native与H5交互的常用交互机制&#xff0c;主流选择是jsbridge 2.jsbridge是什么&#xff1f; JSBridge 是 Android 官方 WebView 提供的 addJavascriptInterface() 能力 项目方&#xff08;或三方库&#xff09;封装的桥梁通信协议。 底层机制由 Android 官方 WebView 提…

什么是Flink

Apache Flink&#xff1a;流批一体的大数据处理引擎 什么是Apache Flink&#xff1f; Apache Flink是一个开源的分布式流处理框架&#xff0c;最初由柏林工业大学开发&#xff0c;后成为Apache软件基金会的顶级项目。它能够以高吞吐、低延迟的方式处理无界数据流(流处理)和有…

区块链+智能合约如何解决上门按摩行业的信任问题?——App开发案例

你是不是觉得上门按摩市场已经人满为患&#xff1f;担心自己入局太晚或者缺乏行业经验&#xff1f;一组真实数据可能会让你改变看法&#xff1a;全国按摩服务需求正以月均8%的速度迅猛增长&#xff0c;但专业技师的供给量仅能跟上5%的增幅&#xff01;这意味着每个月都有相当于…

修改windows hosts文件的软件

修改hosts文件的软件推荐及使用教程 这个软件我用了10多年 推荐工具&#xff1a;Hosts Host软件不用安装绿色 如何使用 注意事项 如何没有安装.net 3.5 请根据提示安装就可以了 内容绑定了软件下载资源&#xff0c;在顶部有需要的自己取

Java web非Maven项目中引入EasyExcel踩坑记录

最近在帮朋友在老项目上做二次开发&#xff0c;有读取Excel的需求&#xff0c;习惯性的引入了EasyExcel&#xff0c;但是出现了很多问题&#xff0c;最主要就是jar包的问题,需要依赖的jar包版本问题 项目技术栈&#xff1a; tomcat9 Amazon Corretto JDK 8 (亚马逊的openJDK…

Flutter——数据库Drift开发详细教程(七)

目录 入门设置 漂移文件入门变量数组定义表支持的列类型漂移特有的功能 导入嵌套结果LIST子查询Dart 互操作SQL 中的 Dart 组件类型转换器现有的行类Dart 文档注释 结果类名称支持的语句 入门 Drift 提供了一个dart_api来定义表和编写 SQL 查询。尤其当您已经熟悉 SQL 时&#…

【排坑指南】MySQL初始化后,Nacos与微服务无法连接??

Date&#xff1a;2025/06/18 你好&#xff01; 今天&#xff0c;分享一个工作中遇到的一个 MySQL 问题。在这之前都不知道是 MySQL 的问题&#xff0c;特离谱&#xff01; 昨天和今天大多数时间都用来处理了这一个问题&#xff1a;《MySQL进行了数据库初始化之后&#xff0c…

springboot获取工程目录

在springboot中使用ApplicationHome获取工程所在目录的时候&#xff0c;开发环境和生产运行环境输出的目录是不同的&#xff0c;开发环境到target/classes目录&#xff0c;而生产运行则是需要的wzkj-server.jar所在目录 ApplicationHome home new ApplicationHome(CollectTas…

深入ZGC并发处理的原理

大型Java应用的核心痛点之一&#xff1a;当JVM进行垃圾回收时强制程序暂停&#xff08;STW&#xff09;的代价。在要求低延迟的应用场景——高频交易系统、实时在线服务或全球性大型平台——中&#xff0c;这种"时空静止"的成本可能极高。但JDK从16版本&#xff08;生…

配置DHCP服务(小白的“升级打怪”成长之路)

目录 项目前准备 一、DHCP服务器配置&#xff08;Rocky8&#xff09; 1&#xff0c;关闭防火墙、安全上下文 2、配置网卡文件 3、安装hdcp-server 4、配置dhcp服务 5、重启dhcp服务 二、配置路由器 1、添加两块网卡并更改网卡配置文件 2、配置路由功能 3、挂载本地镜…

云原生安全

云原生 | T Wiki 以下大部分内容参考了这篇文章 什么是云原生 云原生&#xff08;Cloud Native&#xff09; “云原生”可以从字面上拆解为“云”和“原生”两个部分来理解&#xff1a; “云”&#xff0c;是相对于“本地”而言的。传统应用部署在本地数据中心或物理服务器…

rapidocr v3.2.0发布

粗略更新日志 rapidocr v3.2.0 发布了。令我感到很开心的是&#xff1a;有 3 个小伙伴提了 PR&#xff0c;他们积极参与了进来。 更新要点如下&#xff1a; 采纳了小伙伴qianliyx 的建议&#xff0c;按照行返回单字坐标&#xff1a;同一行的单字坐标是在同一个 tuple 中的。…

Java 操作数类型冲突: varbinary 与 real 不兼容, Java中BigDecimal与SQL Server real类型冲突解决方案

要解决Java中BigDecimal类型与SQL Server中real类型冲突导致的varbinary与real不兼容错误&#xff0c;请按以下步骤操作&#xff1a; 错误原因分析 类型映射错误&#xff1a;JDBC驱动尝试将BigDecimal转换为varbinary&#xff08;二进制类型&#xff09;&#xff0c;而非目标字…

25.多子句查询

MySQL 中包含 GROUP BY、HAVING、ORDER BY、LIMIT 时的查询语法规则及应用&#xff0c;核心知识总结如下&#xff1a; 1.语法顺序规则 当 SELECT 语句同时包含 GROUP BY、HAVING、ORDER BY、LIMIT 时&#xff0c;执行顺序为&#xff1a; GROUP BY → HAVING → ORDER BY → L…

Vue3 × DataV:三步上手炫酷数据可视化组件库

DataV&#xff08;kjgl77/datav-vue3&#xff09;是专为“大屏可视化”场景打造的 Vue3 组件库&#xff0c;提供边框、装饰、等数十个开箱即用的视觉组件。本文聚焦 “在 Vue3 项目中如何正确使用 DataV”&#xff0c;从安装、全局注册到常见坑点&#xff0c;带你迅速玩转这款酷…

本地KMS服务器激活常用命令

OpenWRT内置了KMS激活的相关服务&#xff0c;配置后需要电脑本地切换到该KMS服务。相关命令如下&#xff1a; 基本功能与定义‌ slmgr是Windows内置的软件授权管理工具&#xff0c;全称为Software License Manager。其核心功能包括产品密钥安装/卸载、许可证信息查询、KMS服务器…