FastGPT 引申:基于 Python 版本实现 Java 版本 RRF
文章目录
- FastGPT 引申:基于 Python 版本实现 Java 版本 RRF
- 函数定义
- 使用示例
FastGPT 引申:基于 Python 版本实现 Java 版本 RRF
函数定义
使用 Java 实现 RRF 相关的两个函数:合并结果、过滤结果
import java.util.*;// 搜索结果类型定义
public class SearchDataResponseItem {private String id;private String q;private String a;private List<Score> score;private double rrfScore; // 临时存储RRF分数// 其他字段...// getter和setter方法
}// 分数类型定义
public class Score {private String type;private double value;private int index;// getter和setter方法
}// 搜索结果合并工具类
public class DatasetSearchUtils {/*** RRF搜索结果合并* @param searchResults 搜索结果列表,包含k值和结果列表* @return 合并后的结果*/public static List<SearchDataResponseItem> datasetSearchResultConcat(List<SearchResultGroup> searchResults) {// 过滤空结果searchResults = searchResults.stream().filter(item -> !item.getList().isEmpty()).collect(Collectors.toList());// 处理边界情况if (searchResults.isEmpty()) {return new ArrayList<>();}if (searchResults.size() == 1) {return searchResults.get(0).getList();}// 用Map存储合并结果Map<String, SearchDataResponseItem> resultMap = new HashMap<>();// RRF算法实现for (SearchResultGroup group : searchResults) {int k = group.getK();List<SearchDataResponseItem> list = group.getList();for (int i = 0; i < list.size(); i++) {SearchDataResponseItem data = list.get(i);int rank = i + 1;double score = 1.0 / (k + rank);SearchDataResponseItem record = resultMap.get(data.getId());if (record != null) {// 合并分数List<Score> concatScore = new ArrayList<>(record.getScore());for (Score dataScore : data.getScore()) {Optional<Score> sameScore = concatScore.stream().filter(s -> s.getType().equals(dataScore.getType())).findFirst();if (sameScore.isPresent()) {sameScore.get().setValue(Math.max(sameScore.get().getValue(), dataScore.getValue()));} else {concatScore.add(dataScore);}}// 更新记录record.setScore(concatScore);record.setRrfScore(record.getRrfScore() + score);resultMap.put(data.getId(), record);} else {// 新记录data.setRrfScore(score);resultMap.put(data.getId(), data);}}}// 排序List<SearchDataResponseItem> results = new ArrayList<>(resultMap.values());results.sort((a, b) -> Double.compare(b.getRrfScore(), a.getRrfScore()));// 格式化结果for (int i = 0; i < results.size(); i++) {SearchDataResponseItem item = results.get(i);Optional<Score> rrfScore = item.getScore().stream().filter(s -> s.getType().equals("rrf")).findFirst();if (rrfScore.isPresent()) {rrfScore.get().setValue(item.getRrfScore());rrfScore.get().setIndex(i);} else {Score newScore = new Score();newScore.setType("rrf");newScore.setValue(item.getRrfScore());newScore.setIndex(i);item.getScore().add(newScore);}// 清除临时RRF分数item.setRrfScore(0);}return results;}/*** 按最大Token数过滤结果* @param list 搜索结果列表* @param maxTokens 最大token限制* @return 过滤后的结果*/public static List<SearchDataResponseItem> filterSearchResultsByMaxChars(List<SearchDataResponseItem> list, int maxTokens) {List<SearchDataResponseItem> results = new ArrayList<>();int totalTokens = 0;for (SearchDataResponseItem item : list) {// 注意:这里需要实现countPromptTokens方法int tokens = countPromptTokens(item.getQ() + item.getA());totalTokens += tokens;if (totalTokens > maxTokens + 500) {break;}results.add(item);if (totalTokens > maxTokens) {break;}}// 确保至少返回一条结果if (results.isEmpty() && !list.isEmpty()) {results.add(list.get(0));}return results;}/*** 计算文本的token数量* 注意:这是一个示例实现,实际需要根据具体的分词算法来实现*/private static int countPromptTokens(String text) {// 这里需要实现实际的token计算逻辑// 可以使用各种NLP库或自定义的分词算法return text.length(); // 示例实现}
}// 搜索结果分组类
class SearchResultGroup {private int k;private List<SearchDataResponseItem> list;// getter和setter方法
}
使用示例
// 使用示例
List<SearchResultGroup> searchResults = new ArrayList<>();
// ... 添加搜索结果// 合并结果
List<SearchDataResponseItem> mergedResults = DatasetSearchUtils.datasetSearchResultConcat(searchResults);// 过滤结果
List<SearchDataResponseItem> filteredResults = DatasetSearchUtils.filterSearchResultsByMaxChars(mergedResults, 1500);
相关文章:
FastGPT 引申:基于 Python 版本实现 Java 版本 RRF
文章目录 FastGPT 引申:基于 Python 版本实现 Java 版本 RRF函数定义使用示例 FastGPT 引申:基于 Python 版本实现 Java 版本 RRF 函数定义 使用 Java 实现 RRF 相关的两个函数:合并结果、过滤结果 import java.util.*;// 搜索结果类型定义…...
面试八股文--数据库基础知识总结(3)MySQL优化
目录 1、慢查询 Q1:在mysql中如何定位慢查询? Q2:SQL语句执行很慢,如何分析? 2、索引 Q3:什么是索引? Q4:什么是聚簇索引和非聚簇索引? Q5:什么是回表查…...
汇编前置知识学习 第11-13天
今天要做什么? 1:虚拟机准备环境 2:virtualBox 创建虚拟硬盘,配置bochs文件启动 一: VMDK(VMWare 虚拟机) VDI(VirtualBox虚拟机) VHD(virtual-PC/Hyper-V 虚拟机)…...
springboot在业务层校验对象/集合中字段是否符合要求
springboot在业务层校验对象参数是否必填 1.场景说明2.代码实现 1.场景说明 为什么不在控制层使用Validated或者Valid注解直接进行校验呢?例如通过excel导入数据,将excel数据转为实体类集合后,校验集合中属性是否符合要求。 2.代码实现 定义…...
python二级考试中会考到的第三方库
在 Python 二级考试中,可能会涉及一些常用的第三方库。这些库可以帮助考生更好地理解和应用 Python 编程。以下是一些在 Python 二级考试中可能会用到的第三方库及其简要介绍:1. requests 用途:用于发送 HTTP 请求。安装:pip install requests示例代码:import requestsres…...
Linux中死锁问题的探讨
在 Linux 中,死锁(Deadlock) 是指多个进程或线程因为竞争资源而相互等待,导致所有相关进程或线程都无法继续执行的状态。死锁是一种严重的系统问题,会导致系统资源浪费,甚至系统崩溃。 死锁的定义 死锁是指…...
【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.3.1 避免频繁更新(Update by Query的代价)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 Elasticsearch数据更新与删除深度解析:2.3.1 避免频繁更新(Update by Query的代价)案例背景1. Update by Query的内部机制解析1.1 文档更…...
【Python项目】基于Python的书籍售卖系统
【Python项目】基于Python的书籍售卖系统 技术简介:采用Python技术、MYSQL数据库等实现。 系统简介:书籍售卖系统是一个基于B/S结构的在线图书销售平台,主要分为前台和后台两部分。前台系统功能模块分为(1)用户中心模…...
spring boot + vue 搭建环境
参考文档:https://blog.csdn.net/weixin_44215249/article/details/117376417?fromshareblogdetail&sharetypeblogdetail&sharerId117376417&sharereferPC&sharesourceqxpapt&sharefromfrom_link. spring boot vue 搭建环境 一、浏览器二、jd…...
Linux下的shell指令(一)
作业 1> 在终端提示输入一个成绩,通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash read -p "请输入学生成绩:" score if [ "$score" -ge 90 ] && [ "$scor…...
JS禁止web页面调试
前言 由于前端在页面渲染的过程中 会调用很多后端的接口,而有些接口是不希望别人看到的,所以前端调用后端接口的行为动作就需要做一个隐藏。 禁用右键菜单 document.oncontextmenu function() {console.log("禁用右键菜单");return false;…...
GIt分支合并
分支 1: C0 → C1 → C2 → C3(最新) 分支 2: C0 → C4 → C5 → C6(最新)1. 找到共同父节点 C0 Git 会先找出 branch1 和 branch2 的共同祖先节点 C0。这通常借助 git merge-base 命令达成,虽然在日常使用 git merge…...
Sqli-labs
1.搭建【前提是已经下载安装好phpstudy_pro】 1.1源码准备 1.1.1源码下载 这里从github下载 https://codeload.github.com/Audi-1/sqli-labs/zip/masterhttps://codeload.github.com/Audi-1/sqli-labs/zip/master 1.1.2下载的靶场源码放到WWW下 将刚才下载的压缩包解压到…...
unreal engine gameplay abiliity 获取ability的cooldown剩余时间
unreal engine gameplay abiliity 获取ability的cooldown 版本 5.4.4 参考 测试代码 if (HasAuthority() && AbilitySystemComponent){TArray<FGameplayAbilitySpecHandle> OutAbilityHandles;AbilitySystemComponent->GetAllAbilities(OutAbilityHandles…...
【GenBI优化】提升text2sql准确率:建议使用推理大模型,增加重试
引言 Text-to-SQL(文本转 SQL)是自然语言处理(NLP)领域的一项重要任务,旨在将自然语言问题自动转换为可在数据库上执行的 SQL 查询语句。这项技术在智能助手、数据分析工具、商业智能(BI)平台等领域具有广泛的应用前景,能够极大地降低数据查询和分析的门槛,让非技术用…...
【六祎 - Note】SQL备忘录;DDL,DML,DQL,DCL
SQL备忘录 from to : 点击访问源地址...
高频 SQL 50 题(基础版)_1341. 电影评分
高频 SQL 50 题(基础版)_1341. 电影评分 思路 思路 (select Users.name results from Users left join MovieRating on Users.user_id MovieRating.user_id group by(Users.name) order by count(MovieRating.movie_id) desc,Users.name asc limit 1) u…...
JavaScript 变量命名规范
在编写JavaScript代码时,选择合适的变量名对于代码的清晰度、可读性和可维护性至关重要。一个良好的变量命名规范不仅能帮助团队成员更好地理解代码意图,还能减少错误发生的可能性。本文将介绍一些广泛接受的JavaScript变量命名规则和最佳实践。 命名的…...
解决 uView-UI和uv-ui 中 u-tabs 组件在微信小程序中出现横向滚动条的问题
问题描述 在微信小程序中使用 uView-UI 的 u-tabs 组件时,用户可能会遇到横向滚动条的问题。这不仅影响了页面的美观,还可能导致用户误操作。 问题原因 该问题的根本原因是未在微信小程序环境下屏蔽滚动条。uView-UI 的 u-tabs 组件默认只在 H5 环境下…...
20250304解决在飞凌的OK3588-C的Linux R4下解决使用gstreamer保存的mp4打不开
sync poweroff rootok3588:/# sync rootok3588:/# sync rootok3588:/# cd 107 rootok3588:/107# ls -l total 0 rootok3588:/107# sync rootok3588:/107# poweroff 20250304解决在飞凌的OK3588-C的Linux R4下解决使用gstreamer保存的mp4打不开 2025/3/4 10:58 缘起:…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
