1.1 AI 概念

22 阅读15分钟

AI 概念

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

模型 (Models)

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

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

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

Model Types

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

像 GPT 这样的模型的独特之处在于它们的预训练特性,正如 GPT 中的 "P" 所表示的——Chat Generative Pre-trained Transformer(聊天生成式预训练转换器)。 这种预训练特性将 AI 转变为一个通用的开发者工具,不需要广泛的机器学习或模型训练背景。

提示 (Prompts)

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

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

制作有效的提示既是一门艺术也是一门科学。 ChatGPT 是为人类对话而设计的。 这与使用 SQL 这样的东西来"提问"有很大的不同。 人们必须像与另一个人交谈一样与 AI 模型沟通。

这种交互风格的重要性如此之高,以至于"提示工程"这个术语已经发展成为一个独立的学科。 现在有大量改进提示有效性的技术。 投入时间制作提示可以极大地改善最终的输出。

分享提示已成为一种社区实践,并且在这个主题上有活跃的学术研究。 作为一个例子,说明创建有效提示是多么违反直觉(例如,与 SQL 对比),最近的一篇研究论文发现,最有效的提示之一是以短语"Take a deep breath and work on this step by step"(深呼吸并逐步处理这个问题)开头。 这应该让您明白为什么语言如此重要。我们还没有完全理解如何最有效地使用该技术的先前迭代,例如 ChatGPT 3.5,更不用说正在开发的新版本了。

提示模板 (Prompt Templates)

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

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

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

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

在 Spring AI 中,提示模板可以比作 Spring MVC 架构中的"View"。 模型对象(通常是 java.util.Map)被提供来填充模板中的占位符。 "渲染"的字符串成为提供给 AI 模型的提示内容。

发送给模型的提示的具体数据格式有相当大的可变性。 提示最初作为简单字符串开始,现在已经演变为包含多个消息,其中每条消息中的每个字符串代表模型的不同角色。

嵌入 (Embeddings)

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

嵌入的工作原理是将文本、图像和视频转换为浮点数数组,称为向量。 这些向量被设计用来捕捉文本、图像和视频的含义。 嵌入数组的长度称为向量的维度。

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

Embeddings

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

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

您可以将这个语义空间想象成一个向量。

令牌 (Tokens)

令牌是 AI 模型工作方式的基础构建块。 在输入时,模型将单词转换为令牌。在输出时,它们将令牌转换回单词。

在英语中,一个令牌大致对应一个单词的 75%。作为参考,莎士比亚的完整作品,总计约 900,000 个单词,转换为约 120 万个令牌。

Tokens

也许更重要的是,令牌 = 金钱。 在托管 AI 模型的背景下,您的费用由使用的令牌数量决定。输入和输出都贡献于总体令牌计数。

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

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

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

结构化输出 (Structured Output)

AI 模型的输出传统上以 java.lang.String 形式到达,即使您要求回复是 JSON 格式。 它可能是正确的 JSON,但它不是 JSON 数据结构。它只是一个字符串。 而且,在提示中要求"JSON 格式"并不是 100% 准确。

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

Structured Output Converter Architecture

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

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

您如何为 AI 模型提供其未经训练的信息?

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

存在三种技术来定制 AI 模型以包含您的数据:

微调 (Fine Tuning)

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

提示填充 (Prompt Stuffing)

一种更实用的替代方案涉及将您的数据嵌入到提供给模型的提示中。 考虑到模型的令牌限制,需要一些技术来在模型的上下文窗口中呈现相关数据。 这种方法通常被称为"填充提示"。 Spring AI 库帮助您实现基于"填充提示"技术的解决方案,也称为检索增强生成(RAG)

Prompt Stuffing

工具调用 (Tool Calling)

这种技术允许注册工具(用户定义的服务),将大型语言模型连接到外部系统的 API。 Spring AI 大大简化了您需要编写以支持工具调用的代码。

检索增强生成 (Retrieval Augmented Generation)

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

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

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

  1. 分割文档为部分,同时保持内容的语义边界。例如,对于包含段落和表格的文档,应该避免在段落或表格中间分割文档。对于代码,避免在方法实现的中间分割代码。
  2. 进一步将文档的部分分割为大小是 AI 模型令牌限制很小百分比的部分

RAG 的下一个阶段是处理用户输入。 当用户的问题要由 AI 模型回答时,问题和所有"相似"的文档片段被放置在发送到 AI 模型的提示中。 这就是使用向量数据库的原因。它在查找相似内容方面非常出色。

Spring AI RAG

  • ETL 管道 提供有关编排从数据源提取数据并将其存储在结构化向量存储中的流程的更多信息,确保数据在传递给 AI 模型时处于最佳检索格式。
  • ChatClient - RAG 解释了如何使用 QuestionAnswerAdvisor 在您的应用程序中启用 RAG 功能。

工具调用 (Tool Calling)

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

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

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

Tool Calling Sequence

  1. 当我们希望让模型可以使用工具时,我们在聊天请求中包含其定义。每个工具定义包括名称、描述和输入参数的模式。
  2. 当模型决定调用工具时,它发送一个包含工具名称和按照定义模式建模的输入参数的响应。
  3. 应用程序负责使用工具名称来识别并使用提供的输入参数执行工具。
  4. 工具调用的结果由应用程序处理。
  5. 应用程序将工具调用结果发送回模型。
  6. 模型使用工具调用结果作为额外上下文生成最终响应。

请遵循工具调用文档,了解如何在不同 AI 模型中使用此功能的更多信息。

评估 AI 响应

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

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

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

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

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


核心概念总结

1. 模型 (Models)

  • 基础构建块:AI 系统的核心组件
  • 多种类型:聊天、图像、音频、嵌入等
  • 预训练特性:GPT 的 "P" 代表预训练,使其成为通用工具

2. 提示 (Prompts)

  • 艺术与科学:有效的提示设计需要技巧
  • 多角色结构:系统角色、用户角色等
  • 提示工程:专门研究如何优化提示的学科
  • 模板化:使用 StringTemplate 进行动态生成

3. 嵌入 (Embeddings)

  • 数值表示:将文本转换为向量
  • 语义空间:在多维空间中表示含义相似性
  • 核心应用:RAG 模式的基础
  • Java 开发者友好:不需要深入理解数学理论

4. 令牌 (Tokens)

  • 基本单位:AI 模型的输入输出构建块
  • 成本因素:令牌 = 费用
  • 限制因素:上下文窗口限制
  • 语言差异:英语中 1 令牌 ≈ 0.75 个单词

5. 结构化输出 (Structured Output)

  • 转换挑战:将字符串转换为结构化数据
  • 提示工程:需要精心设计的提示
  • 多次交互:可能需要多次与模型交互

6. 数据集成技术

RAG (检索增强生成)
  • ETL 管道:提取、转换、加载非结构化数据
  • 向量数据库:存储和检索相似内容
  • 文档分割:保持语义边界,适配令牌限制
工具调用 (Tool Calling)
  • 实时数据访问:连接外部系统 API
  • 模型控制:模型决定何时调用工具
  • 简化实现:Spring AI 简化工具调用代码

7. 响应评估

  • 质量指标:相关性、连贯性、事实正确性
  • 自评估:使用模型评估自身响应
  • 向量增强:利用向量数据库信息

术语对照表

英文术语中文翻译说明
Model模型AI 系统的核心算法组件
Prompt提示指导 AI 模型产生特定输出的输入
Prompt Engineering提示工程优化提示效果的专业学科
Prompt Template提示模板动态生成提示的模板机制
Embedding嵌入文本、图像等的数值向量表示
Token令牌AI 模型的基本处理单位
Context Window上下文窗口模型一次能处理的令牌数量限制
Structured Output结构化输出将 AI 输出转换为结构化数据格式
Fine Tuning微调定制模型内部权重的技术
Prompt Stuffing提示填充将数据嵌入提示的技术
RAG检索增强生成结合信息检索和生成的技术
Tool Calling工具调用模型调用外部工具和函数的能力
ETL PipelineETL 管道提取、转换、加载的数据处理流程
Vector Database向量数据库专门存储和检索向量的数据库
Evaluator评估器用于评估 AI 响应质量的组件

核心要点总结

  1. 抽象层设计:Spring AI 通过抽象层简化了 AI 集成的复杂性
  2. 可移植性:支持多种 AI 提供商的统一 API
  3. 企业级功能:提供生产环境所需的高级功能
  4. 开发者友好:为 Java 开发者量身定制的 API 和工具
  5. 数据集成:通过 RAG 和工具调用解决数据孤岛问题
  6. 质量保证:内置评估和测试机制
  7. Spring 生态融合:与 Spring Boot 等框架无缝集成

通过理解这些核心概念,开发者可以更好地利用 Spring AI 构建功能强大、高质量的 AI 应用程序。