【Spring AI】08. 输出解析器

文章目录

Output Parsers

OutputParser接口允许您获取结构化输出,例如将输出映射到 Java 类或从 AI 模型的基于字符串的输出中获取值数组。

您可以将其类比为 Spring JDBC 概念中的RowMapper或ResultSetExtractor。开发人员希望快速将 AI 模型的结果转换为可以传递给应用程序中其他函数和方法的数据类型。OutputParser有助于实现这一目标。

API 概述


本节提供了OutputParser接口的指南。

OutputParser

这里是 OutputParser 接口定义

java 复制代码
public interface OutputParser<T> extends Parser<T>, FormatProvider {

}

它继承了 Parser 接口

java 复制代码
@FunctionalInterface
public interface Parser<T> {
    T parse(String text);
}

和 FormatProvider 接口

java 复制代码
public interface FormatProvider {

	String getFormat();

}

Parser接口解析文本字符串以生成类型 T 的实例。

FormatProvider为 AI 模型提供文本指令,以便格式化输出,以便可以通过Parser将其解析为类型 T。 这些文本指令通常附加在用户输入到 AI 模型的末尾。


可用实现


OutputParser接口具有以下可用的实现。

  • BeanOutputParser:指定 Java 类的 JSON 模式,并使用 JSON 模式规范的DRAFT_2020_12,因为 OpenAI 表示这将提供最佳结果。 AI 模型的 JSON 输出然后被反序列化为 Java 对象,也就是JavaBean。
  • MapOutputParser:类似于BeanOutputParser,但 JSON 负载被反序列化为java.util.Map<String, Object>实例。
  • ListOutputParser:指定输出为逗号分隔的列表。
    近期,OpenAI 模型已经付出了相当大的努力,以提高模型通过简单指定"以 JSON 返回"的能力,但并非所有模型都支持直接支持返回结构化数据。

示例用法


您可以运行一个完全可工作的示例 Spring AI Azure Workshop,其中的一部分演示了BeanOutputParser的使用。这个工程代码的一部分如下所示。

该示例的用例是使用 AI 模型为演员生成电影作品列表。

使用的用户提示词是

java 复制代码
String userMessage = """
        Generate the filmography for the actor {actor}.
        {format}
        """;

下面显示的类 ActorsFilms

java 复制代码
public class ActorsFilms {

	private String actor;

	private List<String> movies;

    // getters and toString omitted
}

这是一个控制器类,显示了这些类的使用

java 复制代码
    @GetMapping("/ai/output")
    public ActorsFilms generate(@RequestParam(value = "actor", defaultValue = "Jeff Bridges") String actor) {
        var outputParser = new BeanOutputParser<>(ActorsFilms.class);

        String userMessage =
                """
                Generate the filmography for the actor {actor}.
                {format}
                """;

        PromptTemplate promptTemplate = new PromptTemplate(userMessage, Map.of("actor", actor, "format", outputParser.getFormat() ));
        Prompt prompt = promptTemplate.create();
        Generation generation = chatClient.call(prompt).getResult();

        ActorsFilms actorsFilms = outputParser.parse(generation.getOutput().getContent());
        return actorsFilms;
    }

相关推荐
春末的南方城市25 分钟前
FLUX的ID保持项目也来了! 字节开源PuLID-FLUX-v0.9.0,开启一致性风格写真新纪元!
人工智能·计算机视觉·stable diffusion·aigc·图像生成
zmjia11127 分钟前
AI大语言模型进阶应用及模型优化、本地化部署、从0-1搭建、智能体构建技术
人工智能·语言模型·自然语言处理
jndingxin41 分钟前
OpenCV视频I/O(14)创建和写入视频文件的类:VideoWriter介绍
人工智能·opencv·音视频
_.Switch44 分钟前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
编程、小哥哥1 小时前
netty之Netty与SpringBoot整合
java·spring boot·spring
一个闪现必杀技1 小时前
Python入门--函数
开发语言·python·青少年编程·pycharm
AI完全体1 小时前
【AI知识点】偏差-方差权衡(Bias-Variance Tradeoff)
人工智能·深度学习·神经网络·机器学习·过拟合·模型复杂度·偏差-方差
GZ_TOGOGO1 小时前
【2024最新】华为HCIE认证考试流程
大数据·人工智能·网络协议·网络安全·华为
sp_fyf_20241 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘
新缸中之脑1 小时前
Ollama 运行视觉语言模型LLaVA
人工智能·语言模型·自然语言处理