人工智能概念

本节介绍 Spring AI 使用的核心概念。我们建议仔细阅读它,以了解 Spring AI 如何实现背后的想法。spring-doc.cadn.net.cn

模型

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

有许多不同类型的人工智能模型,每种模型都适合特定的用例。 虽然 ChatGPT 及其生成式人工智能功能通过文本输入和输出吸引了用户,但许多模型和公司提供多样化的输入和输出。 在 ChatGPT 之前,许多人对 Midjourney 和 Stable Diffusion 等文本到图像生成模型着迷。spring-doc.cadn.net.cn

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

模型类型

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

像 GPT 这样的模型的与众不同之处在于它们的预训练性质,如 GPT(Chat Generative Pre-trained Transformer)中的“P”所示。 这种预训练功能将人工智能转变为一种通用的开发人员工具,不需要广泛的机器学习或模型训练背景。spring-doc.cadn.net.cn

提示

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

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

制作有效的提示既是一门艺术,也是一门科学。 ChatGPT 专为人类对话而设计。 这与使用 SQL 之类的东西来“提问”有很大不同。 一个人必须与人工智能模型进行交流,类似于与另一个人交谈。spring-doc.cadn.net.cn

这种交互方式的重要性如此之大,以至于“提示工程”一词已成为自己的学科。 有一系列技术可以提高提示的有效性。 投入时间制作提示可以极大地提高最终的输出。spring-doc.cadn.net.cn

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

提示模板

创建有效的提示涉及建立请求的上下文,并将请求的某些部分替换为特定于用户输入的值。spring-doc.cadn.net.cn

此过程使用传统的基于文本的模板引擎进行提示创建和管理。 为此,Spring AI 采用 OSS 库 StringTemplatespring-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

嵌入

作为探索人工智能的 Java 开发人员,没有必要理解这些向量表示背后的复杂数学理论或具体实现。 对它们在人工智能系统中的作用和功能有基本的了解就足够了,特别是当您将人工智能功能集成到应用程序中时。spring-doc.cadn.net.cn

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

您可以将此语义空间视为向量。spring-doc.cadn.net.cn

Tokens

Tokens是人工智能模型工作原理的构建块。 输入时,模型将单词转换为标记。在输出时,他们将标记转换回单词。spring-doc.cadn.net.cn

在英语中,一个标记大约对应于一个单词的 75%。作为参考,莎士比亚的完整作品总计约 90 万字,相当于大约 120 万个Tokens。spring-doc.cadn.net.cn

Tokens

也许更重要的是Tokens = 货币。 在托管 AI 模型的上下文中,您的费用取决于使用的Tokens数量。输入和输出都会影响总体Tokens计数。spring-doc.cadn.net.cn

此外,模型还受到Tokens限制的约束,这限制了单个 API 调用中处理的文本量。 此阈值通常称为“上下文窗口”。模型不会处理任何超过此限制的文本。spring-doc.cadn.net.cn

例如,ChatGPT3 有 4K Tokens限制,而 GPT4 提供不同的选项,例如 8K、16K 和 32K。 Anthropic 的 Claude AI 模型具有 100K Tokens限制,Meta 最近的研究产生了 1M Tokens限制模型。spring-doc.cadn.net.cn

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

结构化输出

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

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

结构化输出转换器架构

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

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

如何为人工智能模型配备未经训练的信息?spring-doc.cadn.net.cn

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

有三种技术可用于自定义 AI 模型以合并您的数据:spring-doc.cadn.net.cn

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

  • 提示填充:更实用的替代方案是将数据嵌入提供给模型的提示中。鉴于模型的标记限制,需要技术在模型的上下文窗口中呈现相关数据。 这种方法通俗地称为“填充提示”。 Spring AI 库可帮助您实现基于“填充提示”技术(也称为检索增强生成 (RAG))的解决方案。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. 将文档拆分为多个部分,同时保留内容的语义边界。例如,对于包含段落和表格的文档,应避免在段落或表格的中间拆分文档。对于代码,请避免在方法实现的中间拆分代码。spring-doc.cadn.net.cn

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

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

Spring AI RAG

工具调用

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

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

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

工具调用的主要作顺序
  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 响应

根据用户请求有效评估人工智能系统的输出对于确保最终应用程序的准确性和实用性非常重要。 几种新兴技术允许将预训练模型本身用于此目的。spring-doc.cadn.net.cn

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

一种方法涉及呈现用户的请求和人工智能模型对模型的响应,查询响应是否与提供的数据一致。spring-doc.cadn.net.cn

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

Spring AI 项目提供了一个EvaluatorAPI,目前可以访问评估模型响应的基本策略。 有关详细信息,请遵循评估测试文档。spring-doc.cadn.net.cn