最新快照版本请使用Spring AI 1.1.0spring-doc.cadn.net.cn

人工智能概念

本节介绍了 Spring AI 所采用的核心概念。我们建议仔细阅读,以理解春季AI实现背后的理念。spring-doc.cadn.net.cn

模型

人工智能模型是设计用于处理和生成信息的算法,通常模仿人类的认知功能。 通过从大量数据集中学习模式和洞察,这些模型能够做出预测、文本、图像或其他输出,提升各行业的应用能力。spring-doc.cadn.net.cn

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

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

型号类型

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

GPT这类模型的独特之处在于其预训练特性,正如GPT—Chat Generative Pre-trained Transformer中的“P”所示。 这一预训练功能将 AI 转变为一个通用开发工具,无需复杂的机器学习或模型训练背景。spring-doc.cadn.net.cn

提示

提示词是引导AI模型产生特定输出的基于语言输入的基础。 对于熟悉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 架构中的“视图”。 模型对象,通常是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是AI模型工作原理的基石。 在输入时,模型将单词转换为词。输出时,他们会将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的Tokens上限为4K,而GPT4则提供8K、16K和32K等多种选项。 Anthropic的Claude AI模型设有10万Tokens上限,Meta最近的研究则得出了100万Tokens上限模型。spring-doc.cadn.net.cn

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

结构化输出

AI模型的输出传统上以java.lang.字符串即使你要求回复是 JSON。 它可能是正确的 JSON,但它不是 JSON 数据结构。它只是一根线。 另外,提示词中要求“for JSON”并不完全准确。spring-doc.cadn.net.cn

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

结构化输出转换器架构

结构化输出转换采用精心设计的提示词,通常需要多次与模型交互以实现所需的格式化。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模型以纳入您的数据:spring-doc.cadn.net.cn

  • 微调:这种传统机器学习技术涉及定制模型并改变其内部权重。 然而,这对机器学习专家来说是一个具有挑战性的过程,而对于像GPT这样的模型来说,由于体积庞大,资源极为消耗大量。此外,有些型号可能不提供此选项。spring-doc.cadn.net.cn

  • 提示填充:更实用的替代方案是将你的数据嵌入模型提示中。鉴于模型的Tokens限制,需要技术在模型的上下文窗口内呈现相关数据。 这种方法俗称为“塞满提示”。 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

春季AI RAG

工具调用

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

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

Spring AI 大大简化了你需要编写的代码以支持工具调用。 它会帮你处理工具调用的对话。 你可以把你的工具作为一个@Tool-注释方法,并在提示选项中提供,以便模型使用。 此外,你可以在一个提示中定义并引用多个工具。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

评估过程包括分析生成的回复是否符合用户的意图和查询的上下文。相关性、连贯性和事实正确性等指标用于评估AI生成回答的质量。spring-doc.cadn.net.cn

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

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

Spring AI 项目提供了计算器目前提供评估模型响应的基本策略。 请参考评估测试文档获取更多信息。spring-doc.cadn.net.cn