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
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
logback-spring.xml 是 Spring Boot 应用中使用的日志框架 logback 的配置文件,可以用来配置日志输出的格式、级别等。以下是一个常用的输出格式配置示例: ``` <?xml version="1.0" encoding="UTF-8"?> <configuration> <springProfile name="dev"> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="com.example" level="DEBUG"/> <root level="INFO"> <appender-ref ref="consoleAppender"/> </root> </springProfile> <springProfile name="prod"> <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/var/log/myapp.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/myapp.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="com.example" level="INFO"/> <root level="INFO"> <appender-ref ref="fileAppender"/> </root> </springProfile> </configuration> ``` 上述配置文件中,`<encoder>` 标签中的 `pattern` 属性用来指定输出格式,其中包含以下占位符: - `%d`:日期时间; - `%thread`:线程名; - `%level`:日志级别; - `%logger{36}`:Logger 名称,最多显示 36 个字符; - `%msg`:日志消息; - `%n`:换行符。 其中,`%d` 后面的日期时间格式可以根据需求进行调整。`<springProfile>` 标签用来指定不同的环境下的日志输出方式,例如上述配置文件中的 `dev` 环境和 `prod` 环境。在 `dev` 环境下,日志输出到控制台,日志级别为 DEBUG;在 `prod` 环境下,日志输出到文件,日志级别为 INFO,并按日期进行滚动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值