SpringAI 学习笔记 一 (AI基本概念)
本文摘要: AI模型是模拟人类认知功能的算法,通过大数据学习进行预测和内容生成。核心概念包括:提示词(Prompts)是与AI交互的艺术,需要系统角色设置;提示模板可动态生成交互内容;嵌入(Embeddings)将内容向量化以计算相似度;Token是计费单位并限制处理文本量。关键技术涵盖:结构化输出处理、数据整合方法(微调/RAG/工具调用)、RAG技术通过向量数据库提升响应准确性,以及工具调用机
模型
概念:AI模型是设计用于处理和生成信息的算法,通常模仿人类的认知功能。通过从大数据集中学习模式和洞察力,这些模型能够进行预测、生成文本、图像或其他输出,从而增强跨行业的各种应用。
理解:模型,就是通过数据训练,模拟人类,可以输出信息。(文本、音频,图像等等)
缩写含义:
LLM:Large Language Model 大语言模型
IGM:Image Generation Model 图像生成模型
TVM/VTM:Text to Voice Model / Voice To Text Model 文转音/音转文
EM: Embedding Model 向量化模型
提示
概念:提示词(Prompts)是知道AI模型生成特定输出的基于语言的输入基础。不能简单理解为是输入到对话框中并发送到API的文本。
ChatGPT的API提示中有多个文本输入,每个文本输入都被分配了一个角色。例如:系统角色(system role),用来告诉模型如何表现并设置交互的上下文。用户角色(user role),通常是用户输入,即用户需要解决的问题文本。
理解:提示词,即与AI交互的文本。但是不是简单的问答文本,可以通过多个文本组合,得到更精准的答案。或者说,如何与AI交流,并得到想要的结果,这是一门艺术,一门学科,一个实用的技能。
例如,有论文提及,当你以“深呼吸,一步一步地解决这个问题”开头,通常能得到更好的回答。
提示词模板
概念:创建有效的提示词需要建立上下文,并用于用户输入相关的具体值替换请求的部分内容。
此过程使用传统的基于文本的模板引擎来创建和管理提示。Spring AI 为此采用了OSS库StringTemplate。
例如,简单的提示模板
| Tell me a {adjective} joke about {content}. | 
在 Spring AI 中,提示模板可以类比为 Spring MVC 架构中的 "View"。通常提供一个模型对象(通常是 java.util.Map)来填充模板中的占位符。经过 "渲染" 后的字符串将成为提供给 AI 模型的提示内容。
理解:使用提示词模板,可以制作动态提示词与模型进行交互,可以类比为短信模板发送短信。
嵌入Embeddings
概念:Embeddings是文本、图像或视频的数值表示,能够捕捉输入之间的关系。
嵌入(Embeddings)的工作原理是将文本、图像 和视频转换为浮点数组,称为向量。这些向量旨在捕捉文本、图像和视频的含义。嵌入数组的长度称为向量的维度。
通过计算两段文本的向量表示之间的数值距离,应用程序可以确定用于生成嵌入向量的对象之间的相似度。
理解:所谓向量化即将文本、图像、视频等知识,进行数值转换,然后可以通过数值比对,确定两者的相似度。无需深入理解这些向量表示背后的复杂数学理论或具体实现
向量化在RAG(检索增强生成)模式等实际应用中,非常重要。
代币(Token)
概念:Token 是 AI 模型运作的基本构建单元。在输入时,模型会将单词转换为 token。在输出时,模型会将 token 转换回单词。
在英语中,一个 token 大约对应一个单词的 75%。作为参考,莎士比亚的完整作品集大约有 90 万个单词,转换为大约 120 万个 token。
在托管AI模型的背景下,费用取决使用的Token数量。输入和输出都会计入总token数。
模型会受到Token限制约束,这个限制了单个API调用中处理的文本量,通常称为“上下文窗口”。模型不会处理任何超出此限制的文本。
理解:token = 钱 + 限制。单词的API调用,其文本量是有上限的,超过限制,就会直接截断,不处理超过的文本。
模型有不同的选项,例如16b,32b,4K,16K,这都说明了模型token的限制大小。
结构化输出
AI模型的传统输出是以字符串形式返回的,即使要求以json回复,也并不总是正确的json。
这种复杂性催生了专门的领域,即创建提示以生成预期输出,随后将生成的简单字符串转换为可用于应用程序集成的数据结构。

将数据和API引入模型
模型的数据集尤其限制或者不满足于某一特定领域的需求,因此有三种方式可用于自定义AI模型以整合我们特有的数据:
- 微调:这种传统的机器学习技术涉及调整模型并更改其内部权重。然而,对于机器学习专家来说,这是一个具有挑战性的过程,对于像GPT这样的大型模型来说,由于他们的规模,微调过程机器耗费资源。此外,某些模型可能不提供此选项。
 - 提示填充:一种更实用的替代方法是将您的数据嵌入到提供给模型的提示中。鉴于模型的令牌限制,需要一些技术来在模型的上下文窗口中呈现相关数据。这种方法在口语中被称为“提示填充”。SpringAI库帮助您实现基于“提示填充”技术的解决方案,也成为检索增强生成(RAG)
 

- 工具调用:该技术允许注册工具(用户定义的程序、接口等等),将大模型连接到外部系统的API。
 
检索增强生成
一种称为检索增强生成(Retrieval Augmented Generation, RAG)的技术应运而生,旨在解决将相关数据整合到提示中以获得准确 AI 模型响应的挑战。
该方法涉及一种批处理风格的编程模型,其中作业从文档中读取非结构化数据,对其进行转换,然后将其写入向量数据库。从高层次来看,这是一个 ETL(提取、转换和加载)管道。向量数据库用于 RAG 技术的检索部分。
在将非结构化数据加载到向量数据库的过程中,最重要的转换之一是将原始文档拆分为更小的片段。将原始文档拆分为更小片段的过程包含两个重要步骤:
- 
  
将文档分割成多个部分,同时保留内容的语义边界。例如,对于包含段落和表格的文档,应避免在段落或表格的中间分割文档。对于代码,避免在方法实现的中间分割代码。
 - 
  
将文档的各个部分进一步分割成多个小部分,每个部分的大小为 AI 模型 token 限制的一小部分。
 
RAG 的下一个阶段是处理用户输入。当 AI 模型需要回答用户的问题时,问题和所有“相似”的文档片段会被放入发送给 AI 模型的提示中。这就是使用向量数据库的原因。它在查找相似内容方面非常出色。
工具调用
大型语言模型(LLMs)在训练完成后会被冻结,这导致其知识变得陈旧,并且它们无法访问或修改外部数据。
工具调用 机制解决了这些不足。它允许你将你自己的服务注册为工具,将大语言模型连接到外部系统的 API。这些系统可以为 LLMs 提供实时数据,并代表它们执行数据处理操作。
Spring AI 极大地简化了支持工具调用所需的代码编写工作。它会为你处理工具调用的对话。你可以将你的工具作为一个带有 @Tool 注解的方法提供,并在你的提示选项中提供它,使其可供模型使用。此外,你还可以在单个提示中定义并引用多个工具。

- 
  
当我们希望让模型使用某个工具时,我们会在聊天请求中包含其定义。每个工具定义包括名称、描述以及输入参数的 schema。
 - 
  
当模型决定调用某个工具时,它会发送一个响应,其中包含工具名称和根据定义的 schema 建模的输入参数。
 - 
  
应用程序负责使用工具名称来识别并使用提供的输入参数执行该工具。
 - 
  
工具调用的结果由应用程序处理。
 - 
  
应用程序将工具调用结果发送回模型。
 - 
  
模型使用工具调用结果作为额外上下文生成最终响应
 
评估 AI 响应
有效评估 AI 系统响应用户请求的输出对于确保最终应用程序的准确性和实用性非常重要。一些新兴技术使得可以使用预训练模型本身来实现这一目的。
此评估过程涉及分析生成的响应是否与用户意图和查询上下文一致。使用相关性、连贯性和事实正确性等指标来衡量 AI 生成响应的质量。
一种方法是将用户的请求和 AI 模型的响应同时呈现给模型,询问其响应是否与提供的数据一致。
此外,利用存储在向量数据库中的信息作为补充数据可以增强评估过程,有助于确定响应的相关性。
Spring AI 项目提供了一个 Evaluator API,目前该 API 提供了评估模型响应的基本策略。
更多推荐
 

所有评论(0)