提示词
提示是引导 AI 模型生成特定输出的输入。 提示的设计和措辞会显著影响模型的响应。
在 Spring AI 中与 AI 模型交互的最低层级,处理提示有点类似于在 Spring MVC 中管理”视图”。 这涉及创建带有动态内容占位符的大段文本。 这些占位符随后会根据用户请求或应用程序中的其他代码进行替换。 另一个类比是包含某些表达式占位符的 SQL 语句。
随着 Spring AI 的发展,它将引入更高级别的与 AI 模型交互的抽象。
本节描述的基础类在其角色和功能上可以类比为 JDBC。
例如,ChatModel
类类似于 JDK 中的核心 JDBC 库。
ChatClient
类类似于 JdbcClient
,它构建在 ChatModel
之上,并通过 Advisor
提供更高级的构造,能够考虑与模型的历史交互、用额外的上下文文档增强提示,并引入代理行为。
提示的结构在 AI 领域内随着时间的推移而演变。 最初,提示只是简单的字符串。 随着时间的推移,它们发展为包含特定输入占位符,如”USER:“,AI 模型能够识别。 OpenAI 通过在处理前将多条消息字符串分类为不同角色,为提示引入了更多结构。
API 概述
Prompt
通常会使用 ChatModel
的 call()
方法,该方法接受一个 Prompt
实例并返回一个 ChatResponse
。
Prompt
类作为有序 Message
对象序列和请求 ChatOptions
的容器。
每个 Message
在提示中都具有独特的角色,内容和意图各不相同。
这些角色可以包含多种元素,从用户提问到 AI 生成的响应,再到相关的背景信息。
这种安排使与 AI 模型的交互变得复杂且详细,因为提示由多个消息构建,每个消息在对话中扮演特定角色。
下面是 Prompt 类的简化版本,省略了构造函数和工具方法:
Message
Message
接口封装了提示的文本内容、元数据属性集合和称为 MessageType
的分类。
接口定义如下:
多模态消息类型还实现了 MediaContent
接口,提供 Media
内容对象列表。
Message
接口有多种实现,对应于 AI 模型可以处理的不同类别的消息。
模型根据对话角色区分消息类别。
Spring AI 消息 API
这些角色由 MessageType
有效映射,如下所述。
角色
每条消息都被分配了一个特定角色。 这些角色对消息进行分类,为 AI 模型澄清每个提示片段的上下文和目的。 这种结构化方法增强了与 AI 的交流的细致性和有效性,因为提示的每一部分在交互中都扮演着独特且明确定义的角色。
系统角色
指导 AI 的行为和响应风格,设置参数或规则,规定 AI 如何解释和回复输入。类似于在开始对话前为 AI 提供指令。
用户角色
代表用户的输入——他们对 AI 的问题、命令或陈述。这个角色是基础,因为它构成了 AI 响应的依据。
助手角色
AI 对用户输入的响应。不仅仅是答案或反应,对于维持对话的流畅性至关重要。 通过跟踪 AI 先前的响应(其”助手角色”消息),系统确保交互的连贯性和上下文相关性。 助手消息还可能包含函数工具调用请求信息。 这就像 AI 的一个特殊功能,在需要时用于执行特定功能,如计算、获取数据或其他超出对话的任务。
工具/函数角色
工具/函数角色专注于响应工具调用助手消息时返回额外信息。
角色在 Spring AI 中以枚举方式表示,如下所示:
PromptTemplate
Spring AI 中提示模板的关键组件是 PromptTemplate
类,旨在便于创建结构化提示,然后将其发送给 AI 模型进行处理。
该类使用 TemplateRenderer
API 渲染模板。默认情况下,Spring AI 使用基于 Terence Parr 开发的开源 StringTemplate 引擎的 StTemplateRenderer
实现。模板变量由 {}
语法标识,但您也可以配置分隔符以使用其他语法。
Spring AI 使用 TemplateRenderer
接口处理变量到模板字符串的实际替换。
默认实现使用 StringTemplate。
如果需要自定义逻辑,您可以提供自己的 TemplateRenderer
实现。
对于不需要模板渲染的场景(例如模板字符串已完整),可以使用提供的 NoOpTemplateRenderer
。
该类实现的接口支持提示创建的不同方面:
PromptTemplateStringActions
专注于创建和渲染提示字符串,代表最基本的提示生成形式。PromptTemplateMessageActions
针对通过生成和操作Message
对象进行提示创建。PromptTemplateActions
旨在返回Prompt
对象,可传递给ChatModel
以生成响应。
虽然这些接口在许多项目中可能不会被广泛使用,但它们展示了提示创建的不同方法。
实现的接口如下:
示例用法
以下是 AI Workshop on PromptTemplates 中的一个简单示例。
另一个示例来自 AI Workshop on Roles:
提示工程
在生成 AI 中,提示的创建是开发人员的重要任务。 提示的质量和结构会显著影响 AI 的输出效果。 在设计提示上投入时间和精力可以大大提高 AI 的结果。
分享和讨论提示是 AI 社区中的常见做法。 这种协作方法不仅创造了共享学习环境,还导致了高度有效提示的识别和使用。
该领域的研究通常涉及分析和比较不同的提示,以评估它们在各种情况下的有效性。 例如,一项重大研究证明,从”Take a deep breath and work on this problem step by step”开始,问题解决效率显著提高。 这强调了语言选择对生成 AI 系统性能的影响。
掌握提示的最佳使用,特别是在 AI 技术快速发展的情况下,是一个持续的挑战。 你应该认识到提示工程的重要性,并考虑使用社区和研究中的见解来改进提示创建策略。
创建有效提示
在开发提示时,重要的是整合几个关键组件,以确保清晰和有效性:
提供 AI 预期的提问和答案格式示例可以极大地帮助在创建提示时。 这种做法帮助 AI “理解”查询的结构和意图,导致更精确和相关的响应。 虽然此文档不会深入探讨这些技术,但它们为 AI 提示工程提供了起点。
以下是进一步调查的资源列表。
Simple Techniques
Text Summarization
Reduces extensive text into concise summaries, capturing key points and main ideas while omitting less critical details.
Question Answering
Focuses on deriving specific answers from provided text, based on user-posed questions. It’s about pinpointing and extracting relevant information in response to queries.
Text Classification
Systematically categorizes text into predefined categories or groups, analyzing the text and assigning it to the most fitting category based on its content.
Conversation
Creates interactive dialogues where the AI can engage in back-and-forth communication with users, simulating a natural conversation flow.
Code Generation
Generates functional code snippets based on specific user requirements or descriptions, translating natural language instructions into executable code.
Advanced Techniques
Zero-shot, Few-shot Learning
Enables the model to make accurate predictions or responses with minimal to no prior examples of the specific problem type, understanding and acting on new tasks using learned generalizations.
Chain-of-Thought
Links multiple AI responses to create a coherent and contextually aware conversation. It helps the AI maintain the thread of the discussion, ensuring relevance and continuity.
ReAct (Reason + Act)
In this method, the AI first analyzes (reasons about) the input, then determines the most appropriate course of action or response. It combines understanding with decision-making.
Microsoft Guidance
Framework for Prompt Creation and Optimization
Microsoft offers a structured approach to developing and refining prompts. This framework guides users in creating effective prompts that elicit the desired responses from AI models, optimizing the interaction for clarity and efficiency.
Tokens
Tokens 在 AI 模型处理文本中起着关键作用,它们充当中介,将我们理解的单词转换为 AI 模型可以处理的格式。 这种转换发生在两个阶段:单词在输入时转换为 tokens,然后这些 tokens 再转换回单词输出。
Tokenization,将文本分解为 tokens 的过程,是 AI 模型理解和处理语言的基础。 AI 模型使用这种 tokenized 格式来理解和响应提示。
为了更好地理解 tokens,可以将其视为单词的一部分。通常,一个 token 代表大约三个四分之一单词。例如,莎士比亚的完整作品,总计约 900,000 个单词,将翻译为约 120 万个 tokens。
实验使用 OpenAI Tokenizer UI 查看单词如何转换为 tokens。
Tokens 在 AI 处理中的实际含义超出了它们的技术角色,特别是在与计费和模型能力相关:
文档有误?请协助编辑
发现文档问题?点击此处直接在 GitHub 上编辑并提交 PR,帮助我们改进文档!