Spring AI (四) 指定输出格式OutputParser

4.指定输出格式OutputParser

4.1.OutputParser解析器

Spring AI 提供了OutputParser解析器,该解析器可以将AI生成的内容解析为Java Bean对象。该解析器类似于ORM框架中的Mapper,将AI的生成内容映射为Java对象。

OutputParser结合了Parser<T>FormatProvider

在这里插入图片描述

FormatProvider接口用于提供一些文本指令,来限制AI的输出格式,这里就用到了提示词,我们可以通过阅读源码来查看Spring AI内部设定的相关提示词:

Parser<T>接口用于解析AI生成的内容并将其转换为Java对象返回。
在Spring AI中,OutputParser接口有三个具体的实现类:

BeanOutputParser: 通过让AI生成JSON格式的文本,然后通过JSON反序列化为Java对象返回;
MapOutputParser: 与BeanOutputParser的功能类似,但会将JSON反序列化为Map对象;
ListOutputParser: 让AI生成以逗号分隔的列表;
一般的,我们会先使用FormatProvider获取输出限制的提示词对AI生成的文本格式进行限制,然后用Parser<T>来解析我们生成的内容作为一个Bean对象。

4.2.BeanOutputParser

响应模板

import java.util.List;


public class ActorsFilms {
	
    // 属性
	private String actor;

	private List<String> movies;
    
    
	// 构造方法
	public ActorsFilms() {
	}
    
    
	// Setter/ Getter
	public String getActor() {
		return actor;
	}

	public void setActor(String actor) {
		this.actor = actor;
	}

	public List<String> getMovies() {
		return movies;
	}

	public void setMovies(List<String> movies) {
		this.movies = movies;
	}

	@Override
	public String toString() {
		return "ActorsFilms{" + "actor='" + actor + '\'' + ", movies=" + movies + '}';
	}

}

代码实现

    @GetMapping("/chat/output")
    public ActorsFilms output(
            @RequestParam(value = "actor", defaultValue = "成龙") String actor
    ) {

        OutputParser<ActorsFilms> outputParser = new BeanOutputParser<>(ActorsFilms.class);
        String format = outputParser.getFormat(); // 分析结构  json

        String userMessage = """
				列出{actor}主演的电影.
				{format}
				""";
        PromptTemplate promptTemplate = new PromptTemplate(userMessage, Map.of("actor", actor, "format", format));

        Prompt prompt = promptTemplate.create();

        AssistantMessage output = chatClient.call(prompt).getResult().getOutput();
        String content = output.getContent();

        content = content
                .replace("```json", "")
                .replace("```", "");

        System.out.println("content = " + content);

        return outputParser.parse(content);
    }

测试

GET http://localhost:8080/chat/output

相关推荐

  1. 05|输出解析:用OutputParser生成鲜花推荐列表

    2024-07-23 08:56:04       32 阅读
  2. SpringBoot默认日志输出格式

    2024-07-23 08:56:04       50 阅读
  3. Python输出格式_Day4

    2024-07-23 08:56:04       19 阅读
  4. 【C语言】格式化输入/输出

    2024-07-23 08:56:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 08:56:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 08:56:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 08:56:04       45 阅读
  4. Python语言-面向对象

    2024-07-23 08:56:04       55 阅读

热门阅读

  1. Postman 接口测试工具详解

    2024-07-23 08:56:04       13 阅读
  2. Vue中 watch 与 watchEffect 的区别

    2024-07-23 08:56:04       17 阅读
  3. Python题解Leetcode Hot100之回溯

    2024-07-23 08:56:04       13 阅读
  4. 【MySQL进阶之路 | 高级篇】反范式化概述

    2024-07-23 08:56:04       12 阅读
  5. python—爬虫爬取图片网页实例

    2024-07-23 08:56:04       18 阅读
  6. stm32 io输入中断

    2024-07-23 08:56:04       19 阅读
  7. pytorch lightning报错all tensors to be on the same device

    2024-07-23 08:56:04       12 阅读
  8. 关于正运动学解机器人手臂算法

    2024-07-23 08:56:04       17 阅读