深入解析:一起学Spring AI:核心概念

news/2025/10/5 9:44:57/文章来源:https://www.cnblogs.com/tlnshuju/p/19126284

深入解析:一起学Spring AI:核心概念

2025-10-05 09:42  tlnshuju  阅读(0)  评论(0)    收藏  举报

人工智能概念

本节描述了 Spring AI 使用的核心概念。我们建议您仔细阅读,以理解 Spring AI 构建背后的思想。

模型(Models)

设计用来处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式和洞察力,这些模型许可做出预测,生成文本、图像或其他输出,增强各行各业的各种应用。就是人工智能模型

有许多不同类型的人工智能模型,每种都适合特定的用例。就算 ChatGPT 及其生成性人工智能能力通过文本输入和输出吸引了用户,但许多模型和公司献出了多样化的输入和输出。在 ChatGPT 之前,许多人对文本到图像生成模型如 Midjourney 和 Stable Diffusion 感到着迷。

下表根据它们的输入和输出类型对几种模型进行分类:

模型类型

模型类型

Spring AI 目前支持处理语言、图像和音频输入和输出的模型。上表中最终一行,接受文本作为输入并输出数字,更常见的称为嵌入文本,代表了人工智能模型内部使用的数据结构。Spring AI 支持嵌入,以实现更高级的用例。

像 GPT 这样的模型之所以与众不同,是因为它们的预训练特性,如 GPT 中的 "P" 所示——聊天生成预训练变换器。这种预训练作用将人工智能转变为一个通用的开发工具,不需要广泛的机器学习或模型训练背景。

提示(Prompts)

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

ChatGPT 的 API 在提示中有多个文本输入,每个文本输入都被分配一个角色。例如,有系统角色,它告诉模型如何表现并为交互设置上下文。还有用户角色,通常是用户的输入。

制作有用的提示既是一门艺术,也是一门科学。ChatGPT 旨在用于人类对话。这与使用 SQL 来“提问”大相径庭。人们必须像与另一个人交谈一样与人工智能模型交流。

这种交互方式的重要性如此之大,以至于“提示工程”这个术语已经作为一个独立的学科出现。有一系列日益增长的科技可以提高提示的有效性。投入时间制作提示可以极大地改善结果输出。

分享提示已经成为一种共同的做法,并且正在进行积极的学术研究。作为一个有效创建提示的反直觉例子(例如,与 SQL 对比),最近的一篇研究论文通过发现,你能够使用最有用的提示之一以“深呼吸,一步一步解决该疑问”这句话开始。这应该让你明白为什么语言如此重要。我们还没有完全理解如何最有效地利用这项技术的先前迭代,如 ChatGPT 3.5,更不用说正在编写的新版本了。

提示模板(Prompt Templates)

创建有效的提示涉及建立请求的上下文,并用特定于用户输入的值替换请求的部分。

这个过程使用传统的基于文本的模板引擎来创建和管理提示。Spring AI 使用 OSS 库 StringTemplate 来搭建这一目的。

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

告诉我一个关于 {content} 的 {adjective} 笑话。

在 Spring AI 中,提示模板可以类比为 Spring MVC 架构中的“视图”。模型对象,通常是 java.util.Map,提供给模板以填充模板中的占位符。“渲染”后的字符串成为提供给人工智能模型的提示内容。

发送到模型的提示的具体数据格式有很大的变化。最初是简单的字符串,提示已经演变成包括多条消息,其中每条消息中的每个字符串代表模型的不同角色。

嵌入(Embeddings)

嵌入是文本、图像或视频的数值表示,捕捉输入之间的关系。

嵌入凭借将文本、图像和视频转换为浮点数数组,称为向量。这些向量旨在捕捉文本、图像和视频的含义。嵌入数组的长度称为向量的维度。

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

嵌入

嵌入

作为探索人工智能的 Java 开发者,不需要理解这些向量表示背后的麻烦数学理论或具体实现。对他们在人工智能系统中的作用和功能有一个基本的了解就足够了,特定是当你将人工智能功能集成到你的应用程序中时。

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

你能够将这个语义空间想象成一个向量。

标记(Tokens)

标记作为人工智能模型工作的基石。在输入时,模型将单词转换为标记。在输出时,它们将标记转换回单词。

在英语中,一个标记大致对应于一个单词的 75%。作为参考,莎士比亚的全部作品,总计约 900,000 个单词,翻译成大约 120 万个标记。

标记

标记

也许更关键的是,标记 = 金钱。在托管的人工智能模型的背景下,你的费用由使用的标记数量决定。输入和输出都有助于总体标记计数。

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

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

通过要使用 GPT4 总结莎士比亚的作品集,你需要制定软件工程策略,将数据分割并在模型的上下文窗口限制内呈现材料。Spring AI 项目能够帮忙你完成这项任务。

结构化输出(Structured Output)

人工智能模型的输出传统上以 java.lang.String 的形式到达,即使你要求以 JSON 格式回复。它可能是正确的 JSON,但它不是 JSON 数据结构。它只是一个字符串。此外,作为提示的一部分要求“JSON”并不完全准确。

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

结构化输出转换架构

结构化输出转换架构

结构化输出转换采用精心制作的提示,通常需要多次与模型交互以实现所需的格式。

将您的数据和 API 带给人工智能模型(Bringing Your Data & APIs to the AI Model)

你如何为人工智能模型提供它未经训练的信息?

请注意,GPT 3.5/4.0 的数据集仅扩展到 2021 年 9 月。因此,模型表示它不知道需要超出该日期的知识的问题的答案。一个有趣的小知识是,这个素材集大约是 650GB。

有三种技术行自定义人工智能模型以整合你的资料:

  • 微调一个具有挑战性的过程,对于像 GPT 这样的模型来说,由于其大小,资源密集型。此外,一些模型可能不给予此选项。就是:这种传统的机器学习技术涉及定制模型并改变其内部权重。然而,对于机器学习专家来说,这

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

提示填充

提示填充

检索增强生成(Retrieval Augmented Generation)

检索增强生成(RAG)科技出现,以克服将相关数据整合到提示中以获得准确的人工智能模型响应的挑战。

该方法涉及批量处理样式的编程模型,其中作业从你的文档中读取非结构化信息,转换它,然后将其写入向量数据库。在高层次上,这是一个 ETL(提取、转换和加载)管道。向量数据库用于 RAG 技术的检索部分。

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

  1. 在分割文档时,要保留内容的语义边界。例如,对于包括段落和表格的文档,应避免在段落或表格的中间进行分割。对于代码,应避免在方法实现的中间分割代码。

  2. 将文档的部分进一步分割成大小仅为人工智能模型标记限制的一小部分的片段。

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

Spring AI RAG

Spring AI RAG

函数调用(Function Calling)

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

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

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

函数调用

函数调用

  1. 执行一个聊天请求,同时发送函数定义信息。后者提供名称、描述(例如,解释模型何时应该调用该函数)和输入参数(例如,函数的输入参数模式)。

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

  3. Spring AI 为您处理这次对话。它将函数调用派发到适当的函数,并将结果返回给模型。

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

  5. 一旦获取了所有必要的信息,模型将生成一个响应。

遵循函数调用文档,以获取如何将此功能与不同人工智能模型一起使用的更多信息。

评估人工智能响应(Evaluating AI responses)

奏效地评估人工智能系统对用户请求的输出对于确保最终应用的准确性和实用性至关重要。一些新兴技能使得行使用预训练模型本身来实现这一目的。

否与用户的意图和查询的上下文一致。使用相关性、连贯性和事实正确性等指标来衡量人工智能生成的响应的质量。就是这个评估过程涉及分析生成的响应

一种方法是将用户的请求和人工智能模型的响应一起呈现给模型,查询响应是否与提供的数据一致。

通过此外,利用向量数据库中存储的信息作为补充材料能够增强评估过程,辅助确定响应的相关性。

Spring AI 项目提供了一个评估器 API,目前可以访问评估模型响应的基本策略。请参考评估测试文档以获取更多信息。

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

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

相关文章

顺德网站优化做网站挣钱吗现在

虚拟化与容器化对比 容器化和虚拟化都是用于优化资源利用率并实现高效应用程序部署的技术。然而,它们在方法和关键特征上存在差异: 虚拟化: 可以理解为创建虚拟机 (VM)。虚拟机模拟一台拥有自己硬件(CPU、内存、存储)和操作系统…

哈尔滨网站设计哪里有做网站维保方法

就好像我上面所说的,你要保证源代码转换后的中文是正确的编码。你估计是 msvc 编译的吧。那货默认 gbk 编码,但 tr 不知道,转换后到内存里面的文字可能就乱码了。办法好几个,不过不具可移植性。我现在的实践,不在字符串…

Go 即时通讯体系:日志模块重构,并从main函数开始

Go 即时通讯体系:日志模块重构,并从main函数开始pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

作为一个高中生开发者,我的所思所想

作为一个高中生开发者,我的所思所想各位若觉得我年幼无知、缺乏阅历、不知天高地厚,尽可直言 —— 这些评价,真没毛病。 要是觉得有些ai味,没错,写完用ai润色了一下 自我介绍 我是上海一所高中的高二学生,就读于…

[Godot] 如何导出安卓 APK 并在手机上调试 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

代码随想录算法训练营 Day61 图论ⅩⅠ Floyd A※ 最短路径算法 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

旅游网站系统设计wordpress图文标题一体布局

解析 倍增真香 关键性质:树上距离一个点最远的点必定是直径两端点其一。 本题限制好,要求少动态维护倍增数组暴力维护直径即可。 如果每次合并的是两棵树,而不是一棵树加一个点,可以先离线下来,照样能做。 如果每次强…

视频付费网站建设网站怎样做反向链接

目录 lua_shared_dict lua-resty-lrucache 新建 设置 获取 删除 综合使用案例 计数 全部刷新 lua_shared_dict 语法&#xff1a; lua_shared_dict <名称> <大小> 默认值&#xff1a; 否 上下文&#xff1a; http 阶段&#xff1a; 取决于使用情况 声明一…

Elastic Stack 9.1.4 发布:重要安全更新与功能优化

Elastic Stack 9.1.4 版本正式发布,建议用户升级至该最新版本。本文详细介绍了该版本的修复问题和各产品变更列表,包含重要的安全更新和功能改进。Elastic Stack 9.1.4 发布 作者:Stamatis Kourkoutas 发布日期:20…

2025钛白粉源头厂家最新推荐排行榜:覆盖广东珠三角东莞华南深圳长三角地区的优质供应商解析

当前钛白粉市场需求持续升级,下游涂料、塑料、造纸等行业对产品白度、遮盖力、相容性等指标要求愈发严苛,同时环保政策趋严倒逼行业技术革新。然而,市场上部分厂家存在技术储备不足、质量管理体系不完善等问题,导致…

详细介绍:Ubuntu开机自动运行Docker容器中的Qt UI程序

详细介绍:Ubuntu开机自动运行Docker容器中的Qt UI程序2025-10-05 09:26 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; d…

免费网站建设公司联系方式wordpress会员登陆

弗洛伊德算法大致有点像dp的推导 dp[i][j] min(dp[i][k] dp[k][j], dp[i][j]), 其中 i 是起始点&#xff0c;j 是终止点。k是它们经过的中途点。 通过这个公式不断地更新dp[i][j],得到最短路径长。 我们先定义两个矩阵&#xff0c;minpath[i][j],表示的是从 i 到 j 当前得到的…

完整教程:图论回溯

完整教程:图论&回溯pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

自已创建网站要怎么做网站策划就业前景

一个整数由个位、十位、百味...组成&#xff0c;我们知道整数可以用int型表示&#xff0c;那么一个整数到底是几位数呢&#xff1f;&#xff1f; 下面这个代码就是来计算位数的&#xff1a; #include<stdio.h>// 获得num的位数 int getbit(int num) {if(num 0)return 0…

用 Whisper 打破沉默:AI 语音技术如何重塑无障碍沟通方式? - 指南

用 Whisper 打破沉默:AI 语音技术如何重塑无障碍沟通方式? - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

什么事三合一网站百度免费推广

光电耦合器作为一种关键的电子连接器&#xff0c;在航天航空领域扮演着重要角色。本文将深入探讨光电耦合器在航天航空领域的应用及其技术特点。 光电耦合器在航天航空领域的应用 光电耦合器作为一种高可靠性、高速传输、抗干扰能力强的连接器&#xff0c;在航天航空领域有着广…

实用指南:【论文阅读 | PR 2024 |ICAFusion:迭代交叉注意力引导的多光谱目标检测特征融合】

实用指南:【论文阅读 | PR 2024 |ICAFusion:迭代交叉注意力引导的多光谱目标检测特征融合】pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

软件设计师难考吗网站seo规划

AutoUpdater.NET 是一款用于WPF、Winform软件版本更新的框架&#xff0c;类似框架还有Squirrel、WinSparkle、NetSparkle、Google Omaha。 一、安装AutoUpdater.NET 首先&#xff0c;您需要在项目中安装AutoUpdater.NET库。您可以通过NuGet包管理器来安装它。在Visual Studio中…

做网站一般要了解哪些重庆妇科医院排名最好的医院

android提高UI的流畅度Android中所有的界面绘制工作都是在UI线程中进行的&#xff0c;提高UI流畅度的最核心根本在于释放UI线程。即:不在主线程中做耗时的操作。很多人都知道&#xff0c;耗时的操作要放到子线程中去做&#xff0c;比如访问网络&#xff0c;比如读写sd卡。像这类…