AI超级智能体教程(五)---自定义advisor扩展+结构化json输出

文章目录

  • 1.自定义拦截器
    • 1.2自定义Advisor
    • 1.2打断点调试过程
    • 1.3Re-reading Advisor自定义实现
  • 2.恋爱报告开发--json结构化输出
    • 2.1原理介绍
    • 2.1代码实现
    • 2.3编写测试用例
    • 2.4结构化输出效果

1.自定义拦截器

1.2自定义Advisor

spring里面的这个默认的是SimpleloggerAdvisor,但是这个默认的但因的日志级别是debug级别的,正常情况下,我们是看不到的,我们可以在源码里面去看一下:

为了方便我们快速地定位这个源码里面去:我们可以使用这个new的方法,然后右键选择goto这样的方法进行跳转

image-20250502142854478

可以看到这个拦截器默认的日志级别就是debug级别的,也就是我们默认情况下是无法输出的:

image-20250502143245056

如果你想要改变这个默认输出级别,这个也是有方法的,在这个配置文件里面进行指定就可以了:

image-20250502143330867

如果你想要看到这个.java文件,因为我们自己去实现的时候需要在这个原来的官方实现的基础上面去进行修改,因此这个时候我们需要找到原来的这个java文件,我自己点击去之后发现是class文件,显然不是我们想要的:

image-20250502144812618

这个时候的做法就是选择上面的蓝色框里面的download resource这个选项,就可以把这个对应的java文件进行下载了;

下载之后的这个文件就是我们的官方是如何实现这个simpleadvisor的相关的方法的,这个时候我们直接把这个里面的所有的代码复制到我们的包包下面,然后再官方的基础上面进行整合和修改即可:

首先我们需要不同的方法之间的调用关系,before就是我们上面说的这个拦截器,对于这个用户的输入进行处理after就是对于响应的处理,因此这个方法需要保留,原来的这个log事debug模式的,现在我们自定义他成为info格式的,方便我们的后续的输出查看效果;

image-20250502150409421

其次就是这个里面的两个方法了:流式调用和非流式调用的两个方法:非流式调用就是下面的这个aroundcall这个方法,流式调用就是下面的这个stream方法,stream在英文里面的解释就是小溪,小河的意思,这个也是很容易理解的;

每一个方法里面的都有这个next方法,也就是继续往这个下面去走,flux就是对于相应进行聚合处理,方便我们对于整个响应进行观察和处理;

image-20250502150617022

这个时候,大家就可以看到这个打印的日志和我们自定义的advisor输出的这个内容了,都是使用的这个requst和response这个样子的格式书写的;

image-20250502145952295

1.2打断点调试过程

为什么要额外的去做一下这个部分,因为对于初学者而言,通过调试能够让我们更好的理解这个调用的过程,以及我们的输入是如何被大模型进行处理的,以及这个输出是如何被得到的;

这个时候我们可以发现:系统得到了我们的用户输入的内容usertext,而这个systemytext就是我们的系统默认的预设,这个也是我们的代码里面就有设计的;

image-20250502151345845

在这个调试的信息里面,我们可以看到我们的个人的调用大模型的设置:

image-20250502151547190

以及我们可以看到这个messageChatMemory对应的这个优先级的信息,这个order是一个负数,这个数字越小,证明这个对应的优先级就是越高的;

image-20250502151720844

在接下来继续执行的过程中:我们也是可以看到这个输出的内容的,也就是我们的response相关的内容,在这个调试的过程里面我们也是可以看到的;

image-20250502152059201

1.3Re-reading Advisor自定义实现

英语学的不错的小伙伴这个时候大概也是可以猜到的,就是这个re-reading表示的就是重读,也就是把我们给的这个提示词重新复述一下,这个时候AI的回答就有可能产生不一样的这个效果;

下面的这个使用的其实是模版字符串,也就是下面的这个re2_input_query实际上是把我们的用户的输入整成一个模版,放到我们的文本信息里面去;

下面的这个代码来自于官方文档,主要是了解这个特性,实际上我们不会经常使用,因为这个重述的操作是消耗了2倍的这个token的,因此我们只会在特定的场景下面进行使用;

image-20250503174731704

这个是重读,所以这个代码里面的aroundcall和aroundstream没有进行其他的处理,直接返回即可;

2.恋爱报告开发–json结构化输出

2.1原理介绍

这个事我们的恋爱报告开发里面的很重要的一个步骤,就是理解什么是结构化输出??

通过下面的这个图片,希望可以帮助大家去更好的理解什么是结构化输出:实际上就是交给大模型处理之前进行相关的设置,例如,告诉这个大模型我们需要以json格式进行格式化输出,输出的结果啥的最后经过机构化转换器的处理,把原始的文本处理成为结构化的输出内容,这个过程里面结构化转换器发挥了一个非常重要的作用;

image-20250503185443384

2.1代码实现

接下来,我们需要去实现一下这个结构化输出的特性:

首先,我们在原来的这个基础上面去cv代码,大部分框架都是不变的,我们把这个名字修改一下,可以看到这个prompy每次用户的输入之后都会加上图示里面的“内容建议为列表”,这个实际上就是结构化输出的prompt,相当于针对用户输入,进行额外的处理,然后在发送到这个大模型那边去;

其中这个结构化输出的方法里面添加了这个entity,里面的参数是我们的record,实际上这个就是我们的title和suggestions,这个实际上是我们的结构化输出里面的标题和json内容,在下面的调试过程里面你就会看到;

image-20250503190023415

2.3编写测试用例

测试里面就是调用上面写的这个方法,看看这个结构化输出的结果,其他的都是保持不变的,我们的这个message直接使用上面的提示词也是没有问题的;

image-20250503190351478

2.4结构化输出效果

如何看到这个结构化输出的结果,我们可以使用断点调试的方式对于这个过程进行监控和处理:然后就可以在断点里面看到这个过程里面的非常详细的这个数据了;可以看到这个就是使用json的格式进行输出的;

为什么要达到这个结构化输出的目的,这个实际上是为了下面的持久化保存进行铺垫的,因为结构化输出的这个数据方便我们进行这个保存之类的,诸如放到这个数据库里面,非常的方便,普通的原始文本不具备这样的特性,当然,这都是后话了;

image-20250503185650060
数据方便我们进行这个保存之类的,诸如放到这个数据库里面,非常的方便,普通的原始文本不具备这样的特性,当然,这都是后话了;

[外链图片转存中…(img-cqkgzaVB-1746270376115)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

02_使用 AES 算法实现文件加密上传至阿里云、解密下载

02_使用 AES 算法实现文件加密上传至阿里云、解密下载 一、文件上传下载接口 controller 层 RestController RequestMapping("/api/common/file") Api(tags "公共文件上传") AllArgsConstructor Slf4j public class FileV2Controller {private final Os…

力扣:24两两交换链表的节点

目录 1.题目描述: 2.算法思路: 3.代码展示: 1.题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能…

smss源代码分析之smss!SmpLoadSubSystemsForMuSession函数分析加载csrss.exe

第一部分: Next SmpSubSystemsToLoad.Flink; while ( Next ! &SmpSubSystemsToLoad ) { p CONTAINING_RECORD( Next, SMP_REGISTRY_VALUE, Entry )…

MIT6.S081-lab8前置

MIT6.S081-lab8前置 注:本部分除了文件系统还包含了调度的内容。 调度 调度涉及到保存寄存器,恢复寄存器,就这一点而言,和我们的 trap 很像,但是实际上,我们实现并不是复用了 trap 的逻辑,我…

哈希函数详解(SHA-2系列、SHA-3系列、SM3国密)案例:构建简单的区块链——密码学基础

文章目录 一、密码哈希函数概述1.1 哈希函数的基本概念1.2 哈希函数在数据安全中的应用 二、SHA-2系列算法详解2.1 SHA-2的起源与发展2.2 SHA-256技术细节与实现2.3 SHA-384和SHA-512的特点2.4 SHA-2系列算法的安全性评估 三、SHA-3系列算法详解3.1 SHA-3的起源与设计理念3.2 K…

待验证---Oracle 19c 在 CentOS 7 上的快速安装部署指南

Oracle 19c 在 CentOS 7 上的快速安装部署指南 Oracle Database 19c 是一个功能强大的企业级数据库系统,下面我将为您提供在 CentOS 7 上快速安装部署 Oracle 19c 的详细步骤。 一、准备工作 1. 系统要求 CentOS 7 (64位)最小内存: 2GB (推荐 8GB 以上)最小磁盘…

stm32 HAI库 SPI(一)原理

基本特点 通信方式:同步、串行(串行、并行、并发,别再傻傻分不清了!_串行和并行的区别-CSDN博客)、全双工 (也可以选择半双工)速率:50MHZ以下数据格式:8位/16位传输顺序…

OpenResty技术深度解析:原理、应用与生态对比-优雅草卓伊凡

OpenResty技术深度解析:原理、应用与生态对比-优雅草卓伊凡 一、OpenResty技术概述 1.1 OpenResty是什么? OpenResty是一个基于Nginx的高性能Web平台,它将标准的Nginx核心与一系列强大的第三方模块(主要是LuaJIT)捆绑在一起,形成了一个全功能的Web应用服务器。不同于传…

二维码批量识别—混乱多张二维码识别-物品分拣—-未来之窗-仙盟创梦IDE

仙盟模型 用途 精准分拣:快速准确识别物品上复杂或多个二维码,依据码中信息(如目的地、品类等)实现物品自动化分拣,提高分拣效率与准确性。库存管理:识别入库、出库物品二维码,更新库存数据&am…

scikit-learn在监督学习算法的应用

shiyonguyu大家好,我是我不是小upper!最近行业大环境不是很好,有人苦恼别人都开始着手项目实战了,自己却还卡在 scikit-learn 的代码语法上,连简单的示例运行起来都磕磕绊绊。确实,对很多机器学习初学者来说…

dragonfly docker pull 报错 error parsing HTTP 404 response body

问题描述 在部署了 dragonfly 的机器上 docker pull 镜像发现如下报错 docker pull uhub.service.ucloud.cn/openbayes/test-job-sidecar:latest Error response from daemon: error parsing HTTP 404 response body: invalid character p after top-level value: "404 …

C++11新特性_标准库_正则表达式库

C11 引入了标准正则表达式库 <regex>&#xff0c;它提供了强大且灵活的文本匹配和替换功能。下面为你详细介绍该库的相关内容&#xff0c;包括主要组件、使用方法、示例代码等。 主要组件 std::regex&#xff1a;用于表示一个正则表达式对象&#xff0c;可通过构造函数…

【多线程】七、POSIX信号量 环形队列的生产者消费者模型

文章目录 Ⅰ. 信号量一、POSIX 信号量的概念二、POSIX 信号量的类型区别三、POSIX 信号量与 SystemV 信号量的区别Ⅱ. 线程信号量基本原理一、为什么要引入信号量❓二、PV 操作三、POSIX 信号量的实现原理四、CAS操作介绍Ⅲ. POSIX未命名信号量接口一、初始化无名信号量二、销毁…

ES基本使用方式

ES基本使用 文章目录 ES基本使用1.es的访问使用URL访问 2.mapping的理解Dynamic Mappingkeyword 与 text的区别‌基础定义与核心差异主字段&#xff0c;子字段 创建mapping 3.创建索引4.查看索引列表5.删除索引6.添加数据7.查询数据 重置es密码&#xff0c;初始用户elastic el…

玩转Docker | 使用Docker部署AI证件照工具

玩转Docker | 使用Docker部署AI证件照工具 前言一、HivisionIDPhotos介绍项目简介主要特点二、系统要求环境要求环境检查Docker版本检查检查操作系统版本三、部署HivisionIDPhotos服务下载镜像创建容器创建容器检查容器状态检查服务端口安全设置四、访问HivisionIDPhotos服务访…

【掌握 DDL】:SQL 中的数据库与表管理

掌握 DDL&#xff1a;SQL 中的数据库与表管理 掌握 DDL&#xff1a;SQL 中的数据库与表管理数据库 DDL创建数据库查看数据库查看所有数据库查看数据库创建语句 进入数据库删除数据库备份数据库备份恢复 查看数据库连接深入理解数据库创建与删除数据库字符集与校验规则 表 DLL创…

基于「骑手外卖系统」串联7大设计原则

你说得对&#xff01;这些设计原则听起来都很抽象、很“玄”&#xff0c;如果不是实际开发过系统&#xff0c;很难理解“到底为什么要这样设计”。 那我现在就用一个你能想象得很清楚的真实例子&#xff0c;帮你把这7个设计原则一一落地到具体情境里&#xff0c;你会一眼明白。…

基于轻量化YOLO的车载设备实时视频目标检测方案

一、背景与需求 在智能汽车后装市场,设备的视觉感知能力日益成为差异化竞争点。传统后装产品主要关注车辆诊断和位置跟踪,但在智能辅助驾驶(ADAS)与车联网(V2X)大潮下,如果能在已有硬件平台上新增“视频级行人、车辆、交通标志检测”功能,不仅可提升安全预警,也能为后…

HTTPS协议:更安全的HTTP

目录 1. 前言 2. HTTP 与 HTTPS&#xff1a;安全的分水岭 2.1 HTTP 的安全隐患 2.2 HTTPS 的安全提升 3. HTTPS 的核心概念 3.1 加密三剑客&#xff1a;对称加密、非对称加密与哈希算法 3.2 SSL/TLS 握手过程&#xff1a;建立安全通道的关键步骤 3.3 数字证书&#xff…

使用 Go 和 Gorgonia 实现图像验证码识别系统

本文将介绍如何使用 Go 语言结合 Gorgonia 构建一个简单的图像验证码识别模型。Gorgonia 是一个专为机器学习打造的计算图库&#xff0c;在 Go 中支持自动微分与深度学习构建。 1. 项目依赖 首先安装 Go 语言环境和 Gorgonia&#xff1a; 登录后复制 go install gorgonia.org/g…