此版本仍在开发中,尚未被视为稳定版。如需最新的快照版本,请使用 Spring AI 1.1.3spring-doc.cadn.net.cn

AI概念

此部分描述了Spring AI使用的核心概念。我们建议仔细阅读以了解Spring AI实现背后的思路。spring-doc.cadn.net.cn

模型

AI模型是用于处理和生成信息的算法,通常模仿人类的认知功能。 通过从大量数据集中学习模式和洞察力,这些模型可以进行预测、文本、图像或其他输出,从而增强各个行业的各种应用。spring-doc.cadn.net.cn

存在许多不同类型的AI模型,每种都适用于特定的用例。 在ChatGPT及其生成式AI能力通过文本输入和输出吸引用户之前,许多模型和公司提供了多样化的输入和输出方式。 在ChatGPT出现之前,许多人对Midjourney和Stable Diffusion这类文本转图片生成模型感到着迷。spring-doc.cadn.net.cn

以下表格根据输入和输出类型对几种模型进行了分类:spring-doc.cadn.net.cn

Model types

Spring AI 目前支持处理语言、图像和音频输入和输出的模型。 上一张表的最后一行,接受文本作为输入并输出数字的内容,更常被称为嵌入文本,并代表了在 AI 模型中使用的内部数据结构。 Spring AI 提供对嵌入的支持,以启用更多高级用例。spring-doc.cadn.net.cn

像GPT这样的模型之所以与众不同,是因为它们具有预训练特性,正如GPT中的“P”所指示的——Chat Generative Pre-trained Transformer。 这种预训练功能将AI转变为一种通用开发工具,不需要深厚的机器学习或模型训练背景。spring-doc.cadn.net.cn

提示

提示作为基于语言的输入的基础,指导AI模型产生特定输出。 对于熟悉ChatGPT的人来说,提示可能只是发送到API的那个对话框中的文本。 然而,它远不止于此。 在许多AI模型中,提示中的文本不仅仅是简单的字符串。spring-doc.cadn.net.cn

ChatGPT 的 API 在提示中包含多个文本输入,每个文本输入都被赋予了一个角色。 例如,有系统角色,它告诉模型应该如何行为,并为交互设置上下文。 还有用户角色,通常是用户输入的内容。spring-doc.cadn.net.cn

编写有效的提示既是艺术也是科学。 ChatGPT 是为人类对话设计的。 这与使用 SQL 来“提问”完全不同。 必须像与另一个人交谈一样与 AI 模型进行沟通。spring-doc.cadn.net.cn

这种交互风格的重要性已经到了一个地步,以至于出现了专门的术语“提示工程”(Prompt Engineering)。 在提升提示有效性的技术方面正在形成一股蓬勃发展的趋势。投资时间精心设计一个提示可以极大地改善最终输出。spring-doc.cadn.net.cn

共享提示已成为一种共同的做法,并且在这个主题上正在进行积极的学术研究。 作为创建有效提示(例如,与SQL对比)的一种反直觉的方式的一个例子,一篇最近的研究论文发现,最有效的提示之一是以“深呼吸,一步一步来”这个短语开始的。 这应该能让你意识到语言的重要性。 我们尚未完全理解如何充分利用这种技术(例如ChatGPT 3.5)的先前版本,更不用说正在开发的新版本了。spring-doc.cadn.net.cn

提示模板

创建有效的提示涉及建立请求的上下文,并用用户输入的具体值替换请求中的部分。spring-doc.cadn.net.cn

此过程使用传统的基于文本的模板引擎来进行提示创建和管理。 Spring AI 使用 OSS 库 StringTemplate 用于此目的。spring-doc.cadn.net.cn

例如,考虑简单的提示模板:spring-doc.cadn.net.cn

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

在Spring AI中,提示模板可以类比为Spring MVC架构中的"View"。 通常会提供一个java.util.Map模型对象来填充模板内的占位符。 经过'渲染'后的字符串将成为传递给AI模型的提示内容。spring-doc.cadn.net.cn

模型接收到的提示的具体数据格式存在较大差异。 最初,提示仅由简单的字符串组成,但现在已演变为包含多个消息的形式,在每个消息中的每个字符串代表模型的一种不同的角色。spring-doc.cadn.net.cn

嵌入

嵌入表示是文本、图像或视频的数值表示,能够捕捉输入之间的关系。spring-doc.cadn.net.cn

嵌入表示通过将文本、图像和视频转换为浮点数组成的向量来工作。 这些向量旨在捕捉文本、图像和视频的意义。 嵌入向量数组的长度称为该向量的维度。spring-doc.cadn.net.cn

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

Embeddings

作为Java开发人员探索AI,不必理解这些向量表示背后的复杂数学理论或具体实现。 在将AI功能集成到你的应用中时,只需了解它们在AI系统中的角色和功能即可。spring-doc.cadn.net.cn

嵌入表示在如检索增强生成(RAG)模式这样的实际应用中尤为重要。 它们使数据能够以高维空间中的点的形式进行表示,这类似于欧几里得几何中的二维空间。 这意味着,就像欧几里得几何平面上的点可以根据其坐标接近或远离一样,在语义空间中,点之间的距离反映了意义上的相似度。 关于类似主题的句子在多维空间中会更靠近,就如同图上相邻的点一样。 这种接近性有助于文本分类、语义搜索和产品推荐等任务,因为它允许AI根据这些概念在其扩展语义景观中的“位置”来识别和分组相关概念。spring-doc.cadn.net.cn

可以将其语义空间视为一个向量。spring-doc.cadn.net.cn

标记

Tokens是AI模型工作的构建块。 在输入时,模型将单词转换为Tokens。在输出时,它们再将Tokens转换回单词。spring-doc.cadn.net.cn

在英语中,一个标记(token)大致相当于75%的单词。作为参考,莎士比亚的全部作品共计约90万单词,转换为标记大约有120万个。spring-doc.cadn.net.cn

Tokens

或许更为重要的是,Tokens 等于金钱。 在托管 AI 模型的上下文中,您的费用由使用的 Tokens 数量决定。输入和输出都会计入总 Token 数。spring-doc.cadn.net.cn

也请注意,模型受到标记限制的约束,这限制了单次API调用中处理的文本量。 这个阈值通常被称为“上下文窗口”。模型不会处理超出此限制的任何文本。spring-doc.cadn.net.cn

例如,ChatGPT3的Tokens限制为4K,而GPT4提供了8K、16K和32K等多种选项。 Anthropic的Claude AI模型具有100K的Tokens限制,Meta最近的研究则推出了1MTokens限制的模型。spring-doc.cadn.net.cn

要使用GPT4对莎士比亚的著作进行总结,你需要设计软件工程策略来分割数据,并在模型的上下文窗口限制内呈现数据。 Spring AI项目可以帮助你完成这项任务。spring-doc.cadn.net.cn

结构化输出

AI模型的传统输出为java.lang.String,即使你要求返回JSON格式的回复。 这可能是正确的JSON字符串,但并不是一个JSON数据结构。它只是一个字符串。 另外,作为提示的一部分请求“JSON”也不完全准确。spring-doc.cadn.net.cn

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

Structured Output Converter Architecture

The 结构化输出转换采用精心设计的提示,通常需要与模型进行多次交互以达到所需的格式。spring-doc.cadn.net.cn

将您的数据与API带入AI模型

如何让AI模型具备其未训练过的信息?spring-doc.cadn.net.cn

注意,GPT 3.5/4.0 数据集只扩展到2021年9月。 因此,模型说它不知道需要超出该日期的知识的问题的答案。 一个有趣的趣闻是,这个数据集大约有650GB。spring-doc.cadn.net.cn

三个技术可用于自定义AI模型以包含您的数据:<br>spring-doc.cadn.net.cn

  • 微调: 这是一种传统的机器学习技术,涉及调整模型并改变其内部权重。 然而,对于机器学习专家来说,这是一个具有挑战性的过程,并且由于GPT等大型模型的规模原因,对于资源的需求极其高。另外,一些模型可能并不提供此选项。spring-doc.cadn.net.cn

  • Prompt Stuffing: 一种更实用的替代方案是将您的数据嵌入到提供给模型的提示中。考虑到模型的标记限制,需要采用技术在模型的上下文窗口内呈现相关数据。 这种方法通常被称为“填充提示”(stuffing the prompt)。 Spring AI库帮助您实现基于“填充提示”技术的解决方案,也称为检索增强生成(RAG)spring-doc.cadn.net.cn

Prompt stuffing
  • 工具调用: 这种技术允许注册工具(用户定义的服务),将大型语言模型与外部系统的API连接起来。 Spring AI极大地简化了您需要编写的代码以支持工具调用spring-doc.cadn.net.cn

检索增强生成

一种称为检索增强生成(RAG)的技术已经出现,以解决将相关数据融入提示以获得准确的AI模型响应的挑战。spring-doc.cadn.net.cn

该方法涉及批处理风格的编程模型,其中作业从您的文档中读取非结构化数据,对其进行转换,然后将其写入向量数据库。 从高层次来看,这相当于一个ETL(提取、转换和加载)管道。 向量数据库用于RAG技术中的检索部分。spring-doc.cadn.net.cn

在将未结构化的数据加载到向量数据库的过程中,最重要的转换之一是将原始文档分割成更小的片段。 将原始文档分割成较小的部分有两个重要的步骤:spring-doc.cadn.net.cn

  1. <p>将文档分成部分时,请保留内容的语义边界。</p> <p>例如,对于带有段落和表格的文档,不应在段落或表格中间分割文档。</p> <p>对于代码,请勿在方法实现中间分割代码。</p>spring-doc.cadn.net.cn

  2. 将文档的部分进一步拆分成大小仅为AI模型的标记限制的小百分比的部分。spring-doc.cadn.net.cn

在RAG的下一个阶段是处理用户输入。 当一个问题需要由AI模型来回答时,问题及其所有“相似”的文档片段会被放入发送给AI模型的提示中。 这就是使用向量数据库的原因。它非常擅长找到相似的内容。spring-doc.cadn.net.cn

Spring AI RAG
  • The ETL Pipeline 提供了有关 orchestrating 数据从数据源抽取并存储到结构化向量存储中的流程的更多信息,确保当将数据传递给 AI 模型时,数据处于最佳检索格式。spring-doc.cadn.net.cn

  • The ChatClient - RAG 解释了如何使用 QuestionAnswerAdvisor 在您的应用程序中启用 RAG 能力。spring-doc.cadn.net.cn

工具调用

大规模语言模型(LLMs)在训练后会被冻结,导致知识过时,并且无法访问或修改外部数据。spring-doc.cadn.net.cn

The 工具调用机制解决了这些问题。 它允许您将自己的服务注册为工具,以将大型语言模型连接到外部系统的API。 这些系统可以为LLMs提供实时数据,并代表它们执行数据处理操作。spring-doc.cadn.net.cn

Spring AI极大地简化了您需要编写的工具调用代码。 它为您处理工具调用对话。 您可以提供一个带有@Tool注解的方法,并将其包含在提示选项中以使其对模型可用。 此外,您还可以在一个提示中定义并引用多个工具。spring-doc.cadn.net.cn

The main sequence of actions for tool calling
  1. 当我们要将一个工具提供给模型使用时,我们需要在聊天请求中包含该工具的定义。每个工具定义包括名称、描述以及输入参数的模式。spring-doc.cadn.net.cn

  2. 当模型决定调用一个工具时,它会发送一个响应,包含工具名称和依据定义的模式建模的输入参数。spring-doc.cadn.net.cn

  3. 该应用负责使用工具名称来识别并执行带有提供的输入参数的工具。spring-doc.cadn.net.cn

  4. 工具调用的结果由应用程序处理。spring-doc.cadn.net.cn

  5. 该应用将工具调用结果发送回模型。spring-doc.cadn.net.cn

  6. 该模型使用工具调用结果作为额外背景生成最终响应。spring-doc.cadn.net.cn

请参阅工具调用文档,了解如何使用此功能与不同的AI模型配合。spring-doc.cadn.net.cn

评估AI响应

有效地评估AI系统对用户请求的输出对于确保最终应用程序的准确性和实用性非常重要。 几种新兴技术使得能够使用预训练模型本身来进行这种评估。spring-doc.cadn.net.cn

此评估过程涉及分析生成的响应是否与用户的意图以及查询的上下文相符。通过相关性、连贯性和事实正确性等指标来衡量AI生成响应的质量。spring-doc.cadn.net.cn

一种方法是同时向模型呈现用户的请求和AI模型的响应,查询响应是否与提供的数据相符。spring-doc.cadn.net.cn

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

The Spring AI项目提供了Evaluator API,当前可以访问基本的模型响应评估策略。 请参阅评价测试文档以获取更多信息。spring-doc.cadn.net.cn