提示
提示作为基于语言的输入的基础,引导AI模型产生特定的输出。虽然考虑到我们与ChatGPT的交互,这似乎很直观,但设计有效的提示既包含艺术性也包含科学性。使用语言的措词显著影响AI模型的回复,模型识别特定的模式和词汇来指导回应朝着预期的方向。
这项技能的重要性导致了“提示工程学”的出现。当为特定用例确定了有效的提示时,它通常会在社区内部分享。
提示模板
创建有效的提示涉及建立请求的上下文,并用特定于用户输入的值替换请求的部分内容。
这个过程采用传统的基于文本的模板引擎来创建和管理提示。Spring AI 使用开源软件库StringTemplate来达到这个目的。
例如,考虑这样一个简单的提示模板:告诉我一个关于{content}的{adjective}笑话。
在Spring AI中,Prompt Templates可以被比作Spring MVC架构中的’View'。通常提供一个模型对象,例如`java.util.Map`,来填充模板中的占位符。'渲染’后的字符串成为提供给AI模型的Prompt的内容。
模型接收的提示信息的具体数据格式存在相当大的变化性。最初以简单的字符串开始,提示已经发展成包括多条信息,其中每条信息中的每个字符串代表模型的一个独特角色。
代币
令牌充当了人工智能模型工作的构建块。在输入时,模型将单词转换为令牌,在输出时,它们将令牌转换回单词。
在英语中,一个标记大致对应于一个单词的75%。作为参考,莎士比亚的全部作品大约有90万单词,折合成大约120万个标记。
也许更重要的是令牌等于 $
。
在托管AI模型的环境中,您的费用是由所使用的令牌数量决定的。输入和输出都会对总令牌数产生贡献。
还有,模型受到令牌限制,这限制了在单个API调用中处理的文本量。这个阈值通常被称为“上下文窗口”。如果文本超过这个限制,模型将不会处理。
例如,ChatGPT3的令牌限制是4K,而GPT4提供了不同的选项,比如8K、16K和32K。Anthropic的Claude AI模型的令牌限制是100K,而Meta的最新研究产生了一个1M令牌限制的模型。
要使用GPT4总结莎士比亚收集的作品,你需要设计软件工程策略来切分数据,并在模型的上下文窗口限制内呈现数据。这是Spring AI项目可以帮助你的一个领域。
输出解析
AI模型的输出传统上作为`java.util.String`形式呈现,即使你要求回复是JSON格式的。这可能是正确的JSON,但它不是一个JSON数据结构。它只是一个字符串。同时,作为提示的一部分要求“for JSON”也不是100%精确的。
这种复杂性导致了一个专门领域的出现,该领域涉及创建提示以产生预期的输出,随后将得到的简单字符串解析成可用于应用集成的数据结构。
输出解析采用了精心设计的提示,通常需要与模型进行多次交互才能实现所需的格式。
这个挑战促使OpenAI引入了’OpenAI Functions’作为一种精确指定模型期望输出格式的手段。
定制模型:整合你的数据
你如何为AI模型装备它未经训练的信息?
需要注意的是,GPT 3.5/4.0的数据集仅延伸至2021年9月。因此,该模型将会说它不知道那些需要2021年9月之后知识的问题的答案。一个有趣的小知识是,这个数据集大约有650GB。
有两种技术可以用来定制AI模型,以便结合你的数据:
微调:这种传统的机器学习技术涉及调整模型和改变其内部加权。然而,对于机器学习专家而言,这是一个具有挑战性的过程,对于像GPT这样的大型模型来说,它特别占用资源。此外,一些模型可能不提供这种选项。
Prompt Stuffing: 一种更实用的替代方案涉及将你的数据嵌入到提供给模型的提示中。鉴于模型的令牌限制,需要技术来在模型的上下文窗口中展示相关数据。这种方法通常被称为“填充提示”。
Spring AI库帮助你实现基于“填充提示技术”的解决方案。
检索增强生成
一种称为检索增强生成(Retrieval Augmented Generation)的技术已经出现,用于解决将相关数据纳入提示中以获得准确的AI模型响应的挑战。
这种方法包括从您的数据源中提取数据,并将其分割成较小的单元,每个单元都在模型的令牌限制范围内。然后将这些片段存储在数据库中。当收到用户请求时,从数据库中检索最相关的文档片段以丰富提示,辅助提升AI模型的响应准确性。
数据加载器在这个过程中扮演着关键角色,它读取并格式化数据成为适合数据库存储的片段。为了优化相关文档的检索,矢量数据库是最适合这项任务的数据库类型。
数据加载器和向量数据库是解决“关于我的文档的问答”等用例的基础构建模块。
数据加载器
待定
向量数据库
评估AI回应
有效地评估AI系统对用户请求的输出对于确保最终应用的准确性和实用性至关重要。几种新兴的技术使得可以直接使用预训练模型来完成这一目的。
这个评估过程涉及分析生成的回应是否与用户的意图和查询的上下文相符。相关性、连贯性和事实正确性等指标用来衡量人工智能生成回应的质量。
一种方法涉及向模型展示用户的请求和AI模型的响应,查询响应是否与提供的数据一致。
此外,利用向量数据库中存储的信息作为补充数据可以增强评估过程,并辅助确定响应的相关性。
Spring AI 项目目前提供了一些非常基础的例子,说明了你可以如何评估响应,并以提示的形式包含在 JUnit 测试中。