ChatModel
类类似于 JDK 中的核心 JDBC 库。
ChatClient
类类似于 JdbcClient
,它构建在 ChatModel
之上,并通过 Advisor
提供更高级的构造,能够考虑与模型的历史交互、用额外的上下文文档增强提示,并引入代理行为。
提示的结构在 AI 领域内随着时间的推移而演变。
最初,提示只是简单的字符串。
随着时间的推移,它们发展为包含特定输入占位符,如”USER:“,AI 模型能够识别。
OpenAI 通过在处理前将多条消息字符串分类为不同角色,为提示引入了更多结构。
ChatModel
的 call()
方法,该方法接受一个 Prompt
实例并返回一个 ChatResponse
。
Prompt
类作为有序 Message
对象序列和请求 ChatOptions
的容器。
每个 Message
在提示中都具有独特的角色,内容和意图各不相同。
这些角色可以包含多种元素,从用户提问到 AI 生成的响应,再到相关的背景信息。
这种安排使与 AI 模型的交互变得复杂且详细,因为提示由多个消息构建,每个消息在对话中扮演特定角色。
下面是 Prompt 类的简化版本,省略了构造函数和工具方法:
Message
接口封装了提示的文本内容、元数据属性集合和称为 MessageType
的分类。
接口定义如下:
MediaContent
接口,提供 Media
内容对象列表。
Message
接口有多种实现,对应于 AI 模型可以处理的不同类别的消息。
模型根据对话角色区分消息类别。
Spring AI 消息 API
MessageType
有效映射,如下所述。
PromptTemplate
类,旨在便于创建结构化提示,然后将其发送给 AI 模型进行处理。
TemplateRenderer
API 渲染模板。默认情况下,Spring AI 使用基于 Terence Parr 开发的开源 StringTemplate 引擎的 StTemplateRenderer
实现。模板变量由 {}
语法标识,但您也可以配置分隔符以使用其他语法。
TemplateRenderer
接口处理变量到模板字符串的实际替换。
默认实现使用 StringTemplate。
如果需要自定义逻辑,您可以提供自己的 TemplateRenderer
实现。
对于不需要模板渲染的场景(例如模板字符串已完整),可以使用提供的 NoOpTemplateRenderer
。
PromptTemplateStringActions
专注于创建和渲染提示字符串,代表最基本的提示生成形式。PromptTemplateMessageActions
针对通过生成和操作 Message
对象进行提示创建。PromptTemplateActions
旨在返回 Prompt
对象,可传递给 ChatModel
以生成响应。PromptTemplateStringActions 方法
String render()
:将提示模板渲染为最终字符串格式,无需外部输入,适用于无占位符或动态内容的模板。String render(Map<String, Object> model)
:增强渲染功能以包含动态内容。它使用 Map<String, Object>
,其中 map 的键是提示模板中的占位符名称,值是要插入的动态内容。PromptTemplateMessageActions 方法
Message createMessage()
:创建不带附加数据的 Message
对象,用于静态或预定义的消息内容。Message createMessage(List<Media> mediaList)
:创建带有静态文本和媒体内容的 Message
对象。Message createMessage(Map<String, Object> model)
:扩展消息创建以集成动态内容,接受 Map<String, Object>
,每个条目代表消息模板中的占位符及其对应的动态值。PromptTemplateActions 方法
Prompt create()
:生成不带外部数据输入的 Prompt
对象,适用于静态或预定义的提示。Prompt create(ChatOptions modelOptions)
:生成不带外部数据输入且带有特定聊天请求选项的 Prompt
对象。Prompt create(Map<String, Object> model)
:扩展提示创建能力以包含动态内容,接受 Map<String, Object>
,每个 map 条目是提示模板中的占位符及其关联的动态值。Prompt create(Map<String, Object> model, ChatOptions modelOptions)
:扩展提示创建能力以包含动态内容,接受 Map<String, Object>
,每个 map 条目是提示模板中的占位符及其关联的动态值,并带有特定的聊天请求选项。Instructions
External Context
User Input
Output Indicator
Billing
Model Limits
Context Window
Response Metadata