01. Spring AI 使用的AI相关概念(二)
Models 模型
AI models are algorithms designed to process and generate information, often mimicking human cognitive functions. By learning patterns and insights from large datasets, these models can make predictions, text, images, or other outputs, enhancing various applications across industries.
翻译:人工智能模型是旨在处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式和见解,这些模型可以做出预测,生成文本、图像或其他输出,增强各行各业的多种应用。
有许多不同类型的AI模型,每种模型适用于特定的用例,下表根据多个模型的输入和输出类型对多个模型进行分类:
比如OpenAI、Gemini多态大模型,Dall-E文本转图片的大模型,Midjourney、Stable Diffusion 文本到图像生成模型等。
虽然大模型目前看已经非常强大了,但是还是存在一定的问题的;
- 上下文窗口大小的限制,比如GPT3.5窗口大小限制4096,不过各大厂商也都在卷窗口大小。
- 新鲜知识,大模型都是预训练的。对于训练结束之后的知识,大模型是无法知道的
- 幻觉,不受控。大模型基于相似度进行推理的而生成答案的
- 复杂思考、逻辑计算、逻辑推理不足
面对这些问题,可以从应用层、模型底层进行增强模型性能,比如应用层使用提示词工程、函数调用、检索生成增强技术
几个方面进行增强大模型的性能。模型底层通过微调、continue pretrain(继续预训练)
方式提升模型能力。
Prompts 提示词
目前,提示工程已成为一个较新的学科,应用于开发和优化提示词(Prompt),帮助用户有效地将语言模型用于各种应用场景和研究领域。掌握了提示工程相关技能将有助于用户更好地了解大型语言模型的能力和局限性。
研究人员可利用提示工程来提高大语言模型处理复杂任务场景的能力,如问答和算术推理能力。开发人员可通过提示工程设计和研发出强大的技术,实现和大语言模型或其他生态工具的高效接轨。
在GitHub上,也有相关的仓库分享一些有趣的提示词来让我们使用ChatGPT时更加高效。
Prompt Templates 提示词模版
Creating effective prompts involves establishing the context of the request and substituting parts of the request with values specific to the user’s input.
翻译:创建有效的提示涉及建立请求的上下文,并将请求的某些部分替换为特定于用户输入的值。
Spring AI 为此使用了 OSS 库 StringTemplate
,提供模型对象(java.util.Map
)以填充模板中的占位符。使用PromptTemplate
根据提示词模板和上下文创建一个提示词。
Embeddings 嵌入
嵌入将文本转换为数字数组或向量,使 AI 模型能够处理和解释语言数据。这种从文本到数字的转换是人工智能与人类语言交互和理解人类语言的关键因素。
作为探索 AI 的 Java 开发人员没必要理解复杂的数学理论或这些向量表示背后的具体实现。对它在 AI 系统中的角色和功能有基本的了解,并能够将其集成到应用程序中就足够了。
对于嵌入模型在检索增强生成 (RAG) 模式
应用的实现中尤为重要。后续我们也会使用Spring AI 实现一个朴素的RAG应用。
Tokens 词元或标记
标记是 AI 模型工作方式的构建块。在输入时,模型将单词转换为标记。在输出时,它们将标记转换回单词。
在英语中,一个标记大致相当于一个单词的 75%。作为参考,莎士比亚的全集总计约 900,000 字,相当于大约 120 万个标记。
标记=金钱。在使用 AI 模型的上下文中,
您的费用由使用的标记数量决定
,这个数量包括输入和输出的标记总数量。
此外,模型还受标记限制的约束,这些限制限制了单个 API 调用中处理的文本量。此阈值通常称为“上下文窗口
”。该模型不处理任何超过此限制的文本。例如,ChatGPT3 有 4K 标记限制,而 GPT4 提供不同的选项,例如 8K、16K 和 32K。 Anthropic 的 Claude AI 模型具有 100K 标记限制,而 Meta 最近的研究产生了 1M 标记限制模型。
Structured Output 结构化输出
The output of AI models traditionally arrives as a
java.lang.String
, even if you ask for the reply to be in JSON. It may be the correct JSON, but it is not a JSON data structure. It is just a string. Also, asking “for JSON” as part of the prompt is not 100% accurate.
翻译:传统上,AI 模型的输出以 java.lang.String
,即使您要求回复是 JSON 格式也是如此。它可能是正确的 JSON,但它不是 JSON 数据结构。它只是一个字符串。此外,在提示中要求“for JSON”并不是 100% 准确的。
面对这种复杂性,Spring AI 框架提供将生成的简单字符串转换为可用于应用程序集成的数据结构。
Bringing Your Data & APIs to the AI Model 将数据和APIs引入AI模型
How can you equip the AI model with information on which it has not been trained?
如何为 AI 模型配备未经训练的信息?
Note that the GPT 3.5/4.0 dataset extends only until September 2021. Consequently, the model says that it does not know the answer to questions that require knowledge beyond that date. An interesting bit of trivia is that this dataset is around 650GB.
请注意,GPT 3.5/4.0 数据集仅延长至 2021 年 9 月。因此,该模型表示它不知道该日期之后需要知识的问题的答案。一个有趣的琐事是,这个数据集大约有 650GB。
有三种技术可用于自定义 AI 模型合并您的数据:
-
Fine Tuning 微调技术
-
Prompt Stuffing 提示词填充,即所谓的RAG技术
-
Function Calling 函数调用技术,允许用户自定义函数处理,这些函数将大型语言模型连接到外部系统的 API。
Retrieval Augmented Generation 检索生成增强
RAG架构
主要有两个步骤:
第一步:将非结构化数据/结构化数据通过ETL经过转换后将数据存储到向量数据库。
第二步:相似性搜索,然后将内容发给大模型进行处理
对于RAG框架的实现,还是会有一定的难度的,比如如何处理哪些非结构化的数据,如何从PDF、PPT等抽取内容,并能保证其语义性不被破坏等等,后续会专门详细介绍RAG技术落地方案
Function Calling 函数调用
大型语言模型 (LLMs) 在训练后被冻结,导致知识陈旧,无法访问或修改外部数据。那么我们可以通过自定义函数,让大模型连接到外部系统获取新的数据,弥补大模型知识陈旧的问题。
Spring AI 大大简化了支持函数调用所需的代码,调用流程如下;
有关详细的使用,后续专门出一篇讲解其实现原理、实践,请后续关注。
转载自:https://juejin.cn/post/7376860165322096692