Appearance
模型 Models
AI 模型是用于处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式和见解,这些模型可以做出预测、文本、图像或其他输出,从而增强各行各业的各种应用。
人工智能模型有很多种,每种模型都适用于特定的用例。虽然 ChatGPT 及其生成式人工智能功能通过文本输入和输出吸引了用户,但许多模型和公司都提供多样化的输入和输出。在 ChatGPT 之前,许多人都对文本到图像的生成模型着迷,例如 Midjourney 和 Stable Diffusion。
Spring AI 目前支持将输入和输出处理为语言、图像和音频的模型。
GPT 等模型的独特之处在于其预训练特性,正如 GPT 中的“P”所示——Chat Generative Pre-trained Transformer。这种预训练功能将 AI 转变为通用的开发工具,不需要广泛的机器学习或模型训练背景。
提示 Prompts
提示是基于语言的输入的基础,可指导 AI 模型产生特定输出。对于熟悉 ChatGPT 的人来说,提示可能看起来只是输入到对话框中并发送到 API 的文本。然而,它包含的内容远不止这些。在许多 AI 模型中,提示的文本不仅仅是一个简单的字符串。
ChatGPT 的 API 在一个提示中有多个文本输入,每个文本输入都被分配一个角色。例如,系统角色会告诉模型如何表现并设置交互的上下文。还有用户角色,通常是来自用户的输入。
制作有效的提示既是一门艺术,也是一门科学。ChatGPT 是为人类对话而设计的。这与使用 SQL 之类的东西“提问”有很大不同。人们必须与人工智能模型进行交流,就像与另一个人交谈一样。
这种互动方式如此重要,以至于“提示工程”一词已经发展成为一门学科。有越来越多的技术可以提高提示的有效性。花时间制作提示可以大大改善最终的输出。
分享提示已成为一种公共实践,学术界也正在积极研究这一主题。
提示模板 Prompt Templates
创建有效的提示包括建立请求的上下文并用特定于用户输入的值替换请求的各部分。
此过程使用传统的基于文本的模板引擎来快速创建和管理。Spring AI为此使用了 OSS 库StringTemplate
Tell me a {adjective} joke about {content}.在 Spring AI 中,提示模板可以比作 Spring MVC 架构中的“视图”。提供一个模型对象(通常是),java.util.Map用于填充模板中的占位符。“渲染”后的字符串将成为提供给 AI 模型的提示内容。
发送给模型的提示的具体数据格式存在相当大的差异。提示最初只是简单的字符串,后来演变为包含多条消息,其中每条消息中的每个字符串代表模型的不同角色。
嵌入 Embeddings
嵌入是文本、图像或视频的数字表示,用于捕捉输入之间的关系。
嵌入的工作原理是将文本、图像和视频转换为浮点数数组(称为向量)。这些向量旨在捕捉文本、图像和视频的含义。嵌入数组的长度称为向量的维数。
通过计算两段文本的向量表示之间的数值距离,应用程序可以确定用于生成嵌入向量的对象之间的相似性。
作为探索 AI 的 Java 开发人员,没有必要理解这些矢量表示背后的复杂数学理论或具体实现。对它们在 AI 系统中的作用和功能有基本的了解就足够了,特别是当您将 AI 功能集成到您的应用程序中时。
嵌入在实际应用中尤其重要,例如检索增强生成 (RAG) 模式。它们可以将数据表示为语义空间中的点,这类似于欧几里得几何的二维空间,但在更高的维度上。这意味着,就像欧几里得几何中平面上的点可以根据其坐标而接近或远离一样,在语义空间中,点的接近度反映了含义的相似性。关于相似主题的句子在这个多维空间中的位置更近,就像图上彼此靠近的点一样。这种接近度有助于文本分类、语义搜索甚至产品推荐等任务,因为它允许 AI 根据相关概念在这个扩展的语义景观中的“位置”来辨别和分组相关概念。
代币 Tokens
代币是 AI 模型工作原理的基石。输入时,模型将单词转换为代币。输出时,它们将代币转换回单词。
在英语中,一个代币大约对应一个单词的 75%。作为参考,莎士比亚的全集总共约 90 万个单词,翻译过来大约有 120 万个代币。
更重要的是代币 = 金钱。在托管 AI 模型的背景下,您的费用由使用的代币数量决定。输入和输出都会影响总代币数量。
此外,模型还受到 token 限制,这会限制单个 API 调用中处理的文本量。此阈值通常称为“上下文窗口”。模型不会处理超出此限制的任何文本。
例如,ChatGPT3 的代币限制为 4K,而 GPT4 则提供不同的选项,例如 8K、16K 和 32K。Anthropic 的 Claude AI 模型的代币限制为 100K,而 Meta 的最新研究则产生了 1M 代币限制模型。
要使用 GPT4 总结莎士比亚全集,需要制定软件工程策略来切分数据并在模型的上下文窗口限制内呈现数据。Spring AI 项目可以帮助您完成此任务。
结构化输出 Structured Output
即使您要求回复为 JSON, AI 模型的输出通常也会以 的形式出现java.lang.String。它可能是正确的 JSON,但它不是 JSON 数据结构。它只是一个字符串。此外,在提示中要求“输入 JSON”并非 100% 准确。
这种复杂性导致了一个专门领域的出现,涉及创建提示以产生预期的输出,然后将生成的简单字符串转换为可用于应用程序集成的数据结构。
结构化输出转换采用精心设计的提示,通常需要与模型进行多次交互才能实现所需的格式。
将您的数据和 API 引入 AI 模型 Bringing Your Data & APIs to the AI Model
如何为人工智能模型配备还未经过训练的信息?
请注意,GPT 3.5/4.0 数据集仅延续到 2021 年 9 月。因此,该模型表示它不知道需要该日期之后知识的问题的答案。一个有趣的小知识是,这个数据集大约有 650GB。
有三种技术可以定制 AI 模型以整合您的数据:
- 微调:这种传统的机器学习技术涉及定制模型并更改其内部权重。然而,对于机器学习专家来说,这是一个具有挑战性的过程,而且由于 GPT 等模型的大小,它极其耗费资源。此外,有些模型可能不提供此选项。
- 提示填充:一种更实用的替代方案是将您的数据嵌入提供给模型的提示中。考虑到模型的令牌限制,需要使用技术在模型的上下文窗口中呈现相关数据。这种方法俗称“填充提示”。Spring AI 库可帮助您基于“填充提示”技术(也称为检索增强生成 (RAG))实现解决方案。
- 工具调用:此技术允许注册将大型语言模型连接到外部系统 API 的工具(用户定义的服务)。Spring AI 大大简化了支持工具调用所需编写的代码。
检索增强生成
一种称为检索增强生成 (RAG) 的技术已经出现,旨在解决将相关数据纳入准确的 AI 模型响应提示的挑战。
该方法涉及批处理样式的编程模型,其中作业从文档中读取非结构化数据,对其进行转换,然后将其写入矢量数据库。从高层次上讲,这是一个 ETL(提取、转换和加载)管道。矢量数据库用于 RAG 技术的检索部分。
在将非结构化数据加载到矢量数据库的过程中,最重要的转换之一是将原始文档分割成较小的部分。将原始文档分割成较小部分的过程有两个重要步骤:
- 将文档拆分成几部分,同时保留内容的语义边界。例如,对于包含段落和表格的文档,应避免在段落或表格中间拆分文档。对于代码,应避免在方法实现的中间拆分代码。
- 将文档的各部分进一步拆分成大小仅为 AI 模型令牌限制的一小部分的部分。
RAG 的下一个阶段是处理用户输入。当用户的问题需要由 AI 模型回答时,问题和所有“类似”的文档片段都会被放入发送给 AI 模型的提示中。这就是使用矢量数据库的原因。它非常擅长查找类似内容。
- ETL 管道提供了有关协调从数据源提取数据并将其存储在结构化向量存储中的流程的更多信息,确保在将数据传递给 AI 模型时具有最佳检索格式。
- ChatClient - RAG解释了如何使用
QuestionAnswerAdvisor在您的应用程序中启用 RAG 功能。
工具调用
大型语言模型 (LLM) 在训练后被冻结,导致知识陈旧,并且无法访问或修改外部数据。
工具调用机制解决了这些缺点。它允许您将自己的服务注册为工具,以将大型语言模型连接到外部系统的 API。这些系统可以为 LLM 提供实时数据并代表它们执行数据处理操作。
Spring AI 大大简化了您需要编写的代码以支持工具调用。它为您处理工具调用对话。您可以将工具作为@Tool带注释的方法提供,并在提示选项中提供它以使其可用于模型。此外,您可以在单个提示中定义和引用多个工具。
- 当我们想让模型可以使用某个工具时,我们会将其定义包含在聊天请求中。每个工具定义都包含一个名称、一个描述以及输入参数的架构。
- 当模型决定调用某个工具时,它会发送一个响应,其中包含工具名称和根据定义的模式建模的输入参数。
- 应用程序负责使用工具名称来识别并使用提供的输入参数来执行该工具。
- 工具调用的结果由应用程序处理。
- 应用程序将工具调用结果发送回模型。
- 该模型使用工具调用结果作为附加上下文来生成最终响应。
请关注工具调用文档以获取有关如何在不同 AI 模型中使用此功能的更多信息。
评估人工智能的反应
有效评估人工智能系统响应用户请求的输出对于确保最终应用程序的准确性和实用性非常重要。一些新兴技术使得预训练模型本身能够用于此目的。
此评估过程涉及分析生成的响应是否符合用户的意图和查询的上下文。相关性、连贯性和事实正确性等指标用于衡量 AI 生成的响应的质量。
一种方法是向模型呈现用户的请求和人工智能模型的响应,查询响应是否与提供的数据一致。
此外,利用矢量数据库中存储的信息作为补充数据可以增强评估过程,有助于确定响应的相关性。
Spring AI 项目提供了一个EvaluatorAPI,目前允许访问评估模型响应的基本策略。有关更多信息,请参阅评估测试文档。
