开启 AI 开发新时代(二):AI 核心概念

前面我们一起对Spring AI的功能进行了一次初体验,今天我将对AI大模型的一些概念做一个扫盲,以便读者更加快速的了解之后的实战课程:

Models:模型

  • 简单来说,AI 模型是精心设计的算法,旨在模仿人类的认知功能来处理和生成信息。这些模型通过从海量数据集中学习模式和洞察,能够执行预测、生成文本、图像或其他类型的输出,从而在各个行业中增强应用的功能;

  • AI模型的种类繁多,每种模型都有其特定的应用场景。尽管像ChatGPT这样的生成式AI以其文本输入输出能力吸引了大量用户,但实际上存在许多模型和公司提供多样化的输入输出形式。例如,在ChatGPT普及之前,文本到图像的生成模型如Midjourney和Stable Diffusion就已经引起了广泛关注;

  • Spring AI目前支持处理语言、图像和音频作为输入和输出的模型。值得注意的是,一些模型接受文本输入并输出数字,这通常被称为嵌入文本(embedding text),代表了AI模型内部使用的数据结构,Spring AI也支持嵌入技术以实现更高级的用例;

  • 像GPT这样的模型的独特之处在于其“预训练”的特性(GPT中的“P”即代表Pre-trained),这一特性将AI转变为一种通用的开发者工具,不再需要开发者具备深厚的机器学习或模型训练背景。

开启 AI 开发新时代(二):AI 核心概念_第1张图片

Prompt:提示词

  • 在Spring AI以及更广泛的AI应用领域,提示(Prompts)构成了与AI模型交互的基础,它们是指导模型产生特定输出的语言输入。对于熟悉ChatGPT等工具的用户而言,提示可能仅仅被理解为在对话框中输入的文本,然后发送给API。然而,提示的内涵远不止于此;在许多AI模型中,提示的文本并非简单的字符串;

  • 以ChatGPT的API为例,一个提示中可以包含多个文本输入,并且每个文本输入都被赋予了一个特定的“角色”。例如,“系统角色”(system role)用于指示模型应如何行动并设定交互的上下文背景,而“用户角色”(user role)则通常代表来自用户的直接输入。创建有效的提示既是一门艺术,也是一门科学。ChatGPT的设计初衷是为了进行类似人类的对话,这与使用SQL等结构化查询语言“提问”的方式截然不同。开发者必须像与另一个人交谈一样与AI模型沟通。这种交互方式的重要性催生了“提示工程”(Prompt Engineering)这一独立学科;

  • 目前已经涌现出大量旨在提高提示有效性的技术和方法。投入时间精心设计提示,可以显著改善模型输出的质量。提示的共享已成为一种社群实践,并且学术界也对此进行了积极的研究。

Prompt Templates:提示模版

  • 实践中,创建高效的提示往往涉及到为请求建立明确的上下文,并将请求中的特定部分替换为用户输入的具体值。为了实现这一目标,Spring AI利用了传统的基于文本的模板引擎来进行提示的创建和管理,具体而言,它采用了开源库String Template。这种方法使得开发者可以更加灵活和系统地构建动态提示。举例来说,一个简单的提示模板可以是:“请给我讲一个关于{content}的{adjective}笑话”;

  • 提示模板可以类比于Spring MVC架构中的“视图(View)”。开发者会提供一个模型对象(通常是一个java.util.Map实例)来填充模板中的占位符。经过“渲染”处理后生成的字符串,便构成了最终提供给AI模型的提示内容。值得注意的是,发送给AI模型的提示的具体数据格式存在相当大的可变性。最初,提示可能只是简单的字符串,但随着技术的发展,提示已经演变为包含多个消息的复杂结构,其中每个消息中的每个字符串都代表了模型需要扮演的一个不同角色。这种模板化的方式不仅简化了复杂提示的构建过程,也提高了提示的可维护性和复用性,使得开发者能够更专注于业务逻辑的实现,而不是繁琐的字符串拼接。

Embeddings:嵌入

  • 在Spring AI以及现代AI技术中,嵌入(Embeddings)是指文本、图像或视频等输入内容的数值化表示,这些表示能够捕捉输入之间的复杂关系。其工作原理是将文本、图像和视频转换为浮点数数组,这些数组被称为向量。这些向量经过精心设计,旨在抓住原始文本、图像和视频的内在含义。

  • 嵌入数组的长度,即向量包含的浮点数数量,被称为向量的维度。通过计算两个文本片段对应的向量表示之间的数值距离,应用程序可以判断用于生成这些嵌入向量的原始对象之间的相似性。对于初涉AI领域的Java开发者而言,并不需要深入理解这些向量表示背后复杂的数学理论或具体的实现细节。对它们在AI系统中的作用和功能有一个基本的理解就足够了,尤其是在将AI功能集成到应用程序中时;

  • 嵌入在诸如检索增强生成(RAG)模式等实际应用中尤为重要。它们使得数据能够被表示为语义空间中的点。

Tokens:令牌

  • 在AI模型的工作机制中,令牌(Tokens)扮演着基础构建模块的角色。当AI模型接收输入时,它会将文本(例如单词)转换为令牌序列。相反,在生成输出时,模型会将内部处理的令牌序列转换回人类可读的文本;

  • 对于英文而言,一个令牌大致相当于一个单词的75%;

  • 更重要的是,令牌与成本直接相关。在使用托管的AI模型服务时,费用通常是根据所使用的令牌数量来计算的,这包括输入和输出两部分。

  • 此外,AI模型本身也存在令牌限制,这限制了单次API调用能够处理的文本总量。这个阈值通常被称为“上下文窗口”(context window)。模型不会处理超出此限制的文本。例如,ChatGPT-3的令牌限制是4K,而GPT-4则提供了不同的选项,如8K、16K和32K。

Structured Output:结构化输出

  • 在与AI模型交互时,开发者通常期望获得特定格式的输出,而不仅仅是纯文本字符串。传统上,即使明确要求AI模型以JSON等格式回复,其输出本质上仍然是一个java.lang.String。这个字符串可能在格式上是正确的JSON,但它并非一个可以直接在程序中使用的JSON数据结构;
  • 此外,仅仅在提示中加入“请以JSON格式回复”这样的指令,并不能保证100%的准确性和可靠性。模型可能会产生格式略有偏差或不完全符合预期的输出。Spring AI认识到了这一痛点,并提供了对结构化输出的支持。这意味着开发者可以更可靠地从AI模型获取特定格式的数据,例如直接将模型的回复映射到Java对象(POJO)或特定的数据结构;

  • 通过定义输出的模式或格式,Spring AI能够引导模型生成符合要求的数据,并自动进行转换和校验。这极大地简化了从AI模型响应中提取和使用数据的过程,使得开发者可以更专注于业务逻辑的实现,而不必花费大量精力在解析和验证非结构化或半结构化的文本输出上。结构化输出功能增强了AI应用的可预测性和鲁棒性,使得将AI能力集成到现有系统和服务中变得更加高效和便捷。

Bringing Your Data & APIs to the AI Model:数据引入模型

如何为AI模型配备未训练的数据?比如有些模型的数据集采集时间截止在2022年,我们询问它们2022年之后的数据,它们是不知道答案的,该怎么办呢?

  • 微调:这是一种传统的机器学习技术,涉及对模型进行定制并调整其内部权重。然而,对于像 GPT 这样体量庞大的模型来说,微调是一项对机器学习专家而言极具挑战性、同时也极度消耗资源的过程。此外,一些模型可能并不支持微调选项。

  • 填充提示:这是一种更实用的替代方法,通过将你的数据嵌入到提示(Prompt)中来实现。Spring AI 库可以帮助你基于这种 “提示填充” 技术(也称为检索增强生成,Retrieval Augmented Generation,简称 RAG)来实现相关方案。

  • 工具调用:该技术允许注册工具(即用户自定义的服务),将大语言模型与外部系统的 API 连接起来。Spring AI 大大简化了实现工具调用所需的编码工作。

RAG:检索增强

  • 解决如何将相关数据纳入提示中,以提高 AI 模型响应准确性的问题。

Tool Calling:工具调用

  • 大型语言模型(LLMs)在训练完成后即被冻结,导致其知识可能过时,并且无法访问或修改外部数据。工具调用机制(Tool Calling)解决了这些不足。它允许您将自定义服务注册为工具,以便将大型语言模型连接到外部系统的 API。这些系统可以为大型语言模型提供实时数据,并代表它们执行数据处理操作。

  • Spring AI 大大简化了您为支持工具调用所需编写的代码。它会为您处理工具调用的对话流程。您只需将工具定义为带有 @Tool 注解的方法,并在提示(prompt)选项中提供该工具,即可让模型调用。此外,您还可以在单个提示中定义并引用多个工具。

总结 & 展望:工具调用

  • Spring AI通过抽象和简化AI技术的复杂性,为Java开发者提供了一套强大而易用的工具,使他们能够在不深入了解AI底层实现的情况下,构建智能应用。通过理解模型、提示、提示模板、嵌入、令牌和结构化输出等核心概念,开发者可以更有效地利用Spring AI的能力,创造出更智能、更有价值的应用。

  • 随着AI技术的不断发展,Spring AI也将持续演进,为Java生态系统带来更多创新。无论您是刚接触AI的初学者,还是寻求提升应用智能化水平的资深开发者,Spring AI都能为您提供坚实的技术支持,帮助您在AI时代把握先机。

你可能感兴趣的:(人工智能,chatgpt,SpringAI)