AI 模型是一类用于处理和生成信息的算法,通常能够模拟人类的认知能力。这类模型通过从海量数据集中学习规律与内在信息,可完成预测、生成文本、图像及其他形式输出,赋能各行各业的各类应用。AI 模型种类繁多,每种都适用于特定业务场景。ChatGPT 凭借生成式 AI 能力,以文本输入输出形式收获大量用户;除此之外,还有众多模型与厂商支持多样化的输入输出形式。在 ChatGPT 走红之前,文生图模型(如 Midjourney、Stable Diffusion)就已备受关注。
模型类型
Spring AI 目前支持文本、图像、音频作为输入和输出的各类模型。上表最后一类「文本输入、数字输出」的模型,即大家熟知的文本嵌入模型,其输出是 AI 模型内部使用的数据结构。Spring AI 原生支持嵌入能力,可实现更多高阶应用场景。GPT 这类模型的核心优势在于预训练特性,GPT(Chat Generative Pre-trained Transformer,对话生成式预训练变换器)中的字母 P 即代表预训练。预训练特性让 AI 成为普通开发者都能使用的通用工具,使用者无需深厚的机器学习或模型训练专业背景。
提示词
提示词是基于文本输入的基础,用于引导 AI 模型生成指定输出。熟悉 ChatGPT 的用户会认为,提示词只是对话框中输入并发送给接口的文本,但实际上其内涵远不止于此。在多数 AI 模型中,提示词并非简单的字符串。ChatGPT 接口的一条提示词可包含多段文本内容,且每段文本都会被分配角色。例如:系统角色,用于设定模型行为模式、定义对话上下文;用户角色,一般代表用户的输入内容。编写优质提示词既是一门艺术,也是一项技术。ChatGPT 专为日常对话设计,这和用 SQL「查询问题」的逻辑截然不同。与 AI 模型交互,需要像和真人聊天一样沟通。这种交互方式的重要性,催生了提示工程这一独立专业领域。目前已有大量优化提示词效果的方法论,投入精力精心设计提示词,能大幅提升 AI 输出质量。提示词共享已成为行业普遍行为,学术界也在持续开展相关研究。优质提示词的设计逻辑往往反直觉(和 SQL 查询逻辑完全不同),一项近期研究表明:以「深呼吸,一步步思考」开头的提示词,效果显著优于普通话术。这也足以体现语言表达在提示词中的关键作用。目前我们尚未完全吃透 ChatGPT 3.5 等现有模型的最优使用方式,更不用说仍在迭代开发的新版本模型。
提示词模板
编写有效提示词,需要先设定请求上下文,并将请求中的可变部分替换为用户自定义输入。该过程会借助传统文本模板引擎来创建和管理提示词。Spring AI 采用开源库 StringTemplate 实现这一能力。举一个简单的提示词模板示例:
给我讲一个 {形容词} 风格、关于 {内容} 的笑话。
在 Spring AI 中,提示词模板可类比 Spring MVC 架构中的视图(View)。开发者传入数据模型(通常为java.util.Map),填充模板中的占位符,渲染后的完整字符串即为传给 AI 模型的最终提示词。传给模型的提示词数据格式也在不断演进:从最初简单字符串,发展为多消息结构,每条消息文本都对应模型的专属角色。
嵌入向量
嵌入向量是文本、图像、视频的数值化表示,能够捕捉不同输入内容之间的关联关系。嵌入向量的原理:将文本、图像、视频转换为一组浮点数数组,称为向量。这些向量能够承载文本、图像、视频的语义信息。向量数组的长度,称为向量维度。通过计算两段文本对应向量之间的数值距离,应用程序即可判断文本内容的语义相似度。作为 Java 开发者入门 AI,无需深究向量背后复杂的数学原理与底层实现。只需理解它在 AI 系统中的作用与基础功能即可,尤其是在业务系统集成 AI 能力时。嵌入向量在检索增强生成(RAG) 等实际场景中应用极广。它能将数据映射到语义空间中的一个个点,类似欧式几何的二维平面,只是维度更高。 就像平面坐标点有远近之分,语义空间中向量点的距离,代表语义相似度:主题相近的句子,在高维语义空间中位置也更靠近。基于这一特性,可实现文本分类、语义检索、商品推荐等场景 ——AI 能根据语义空间中的「位置」,识别并归类关联概念。你可以把整个语义空间理解为一个向量空间。
词元(Token)
词元是 AI 模型运行的基础单元。输入时,模型会把词语拆解为词元;输出时,再将词元还原为自然语言。英文语境下,1 个词元约等于 0.75 个单词。参考数据:莎士比亚全集约 90 万个单词,折算后约 120 万个词元。词元还有一个关键属性:词元即成本。在云端托管 AI 模型的场景中,计费标准按词元消耗量计算,输入词元和输出词元都会计入总用量。同时,所有模型都有词元上限,限制单次接口调用可处理的文本长度,该上限也被称为上下文窗口。超出限制的文本,模型无法处理。示例:ChatGPT 3 上下文窗口为 4K 词元;GPT4 提供 8K、16K、32K 等多种规格;Anthropic 的 Claude 模型支持 100K 词元;Meta 最新研究已实现百万级词元上下文窗口模型。若要用 GPT4 总结莎士比亚全集,需要通过软件工程手段对文本进行拆分,确保内容适配模型上下文窗口限制。Spring AI 可帮你快速实现这类文本分片与处理逻辑。
结构化输出
传统 AI 模型的输出均为字符串(java.lang.String),即便你要求返回 JSON 格式,结果也只是一段 JSON 文本字符串,而非可直接解析的 JSON 数据结构。仅靠在提示词中要求「返回 JSON」,也无法保证格式百分百合规。这一痛点催生了专项开发方式:通过定制提示词约束输出格式,再将模型返回的原始字符串转为业务可用的数据结构,供系统集成使用。
结构化输出转换架构
结构化输出依赖精心设计的提示词,往往需要和模型多轮交互,才能得到符合指定格式的结果。
为 AI 模型注入私有数据与接口能力
如何让 AI 模型获取训练数据之外的最新信息?须知 GPT 3.5/4.0 的训练数据集仅截止到 2021 年 9 月。因此,涉及此后时间的知识类问题,模型无法作答。补充冷知识:该训练数据集大小约 650GB。目前有三种主流方式,可让 AI 模型接入自定义私有数据:微调(Fine Tuning)传统机器学习方案,通过调整模型内部权重实现定制化。但门槛极高,仅适合专业机器学习工程师;对于 GPT 这类超大规模模型,算力资源消耗极大,且部分模型并不开放微调权限。提示词填充(Prompt Stuffing)更实用的轻量化方案:将私有数据直接嵌入发给模型的提示词中。受模型词元上限限制,需通过技术手段筛选、精简相关数据,适配上下文窗口。该方式俗称「提示词填充」。Spring AI 提供开箱即用的能力,帮你基于该方案落地检索增强生成(RAG) 业务。工具调用(Tool Calling)支持注册自定义工具(业务服务),打通大语言模型与外部系统接口。Spring AI 大幅简化了工具调用的开发代码,降低接入成本。
检索增强生成(RAG)
检索增强生成(RAG)是为解决「向提示词注入私有数据、提升 AI 回答准确性」而诞生的技术方案。其核心是批处理编程模型:从各类文档读取非结构化数据、做内容转换处理,最终存入向量数据库。宏观来看,这是一套标准的ETL(抽取 – 转换 – 加载)流程,向量数据库是 RAG 检索环节的核心组件。将非结构化数据导入向量数据库时,最关键的处理步骤是文档分片,包含两大原则:分片时保留原文语义边界:例如文档段落、表格不能被从中截断;代码不能在方法实现中途拆分。将大文档进一步切分为小片段,片段大小控制在模型词元上限的极小比例内。RAG 的推理流程:用户提出问题后,系统会把用户问题和向量数据库中语义相似的文档片段一同放入提示词,发给 AI 模型。这也是引入向量数据库的核心原因 —— 擅长快速检索语义相似内容。
Spring AI 中的 RAG
ETL 流水线:讲解如何编排数据源抽取、结构化存入向量仓库的流程,保证数据格式适配后续检索与 AI 调用。 聊天客户端与 RAG:介绍如何通过QuestionAnswerAdvisor快速在应用中开启 RAG 能力。
工具调用
大语言模型(LLM)训练完成后参数即固定,存在知识滞后问题,且无法主动访问、修改外部数据。工具调用机制正是为解决这些短板设计:可将自研业务服务注册为工具,让大模型对接外部系统接口,从而获取实时数据、代为执行业务操作。Spring AI 极大简化了工具调用的开发工作量,自动处理多轮对话交互逻辑。只需将业务方法添加@Tool注解,配置到提示词参数中,即可供模型调用;同时支持在一条对话中定义并引用多个工具。
工具调用核心流程
将工具定义(名称、功能描述、入参结构)随对话请求发给模型;模型判断需要调用工具时,返回目标工具名及符合参数结构的入参数据;应用层根据工具名匹配并执行对应服务,传入参数;应用层接收工具执行结果;将工具调用结果回传给模型,作为额外上下文;模型结合返回结果,生成最终回答。可参考官方工具调用文档,了解不同 AI 模型的适配用法。
AI 回答评估
有效评估 AI 对用户请求的回复质量,是保障最终应用准确性与实用性的关键。目前业界已出现多种新方案,可利用预训练大模型自身完成效果评估。评估核心逻辑:分析 AI 回复是否匹配用户意图与提问上下文,从相关性、连贯性、事实准确性等维度打分评级。常用评估方式:将用户问题和 AI 回复一同输入模型,由模型自主判断回复是否贴合业务数据;同时可借助向量数据库中的存量数据作为参考,进一步提升评估精准度,判断回复语义相关性。Spring AI 提供 评估器(Evaluator) 接口,内置基础的模型回复评估策略。更多细节可参考官方评估测试文档。