利用Gearman实现并发查询(Multi-Query)

RAG进阶(一): 多重查询(Multi Query) 今天我们学习了如何如何避免在做RAG检索时,由于查询语句因人而异而导致检索结果不够全面和完整。我们的主要方法是当用户在做检索时,我们让LLM基于用户的查询语句再生成多个查询语句,这些由LLM生成的查询语句能够从多个视角用户的查询语句进行补充。这样可以使得LLM能够更加准确的理解用户查询语句的真正含义从而给出更加完整且全面的答案。 阅读详情
这个例子是想从数据库查询出几个结果集,一般的做法是,一个接一个的发送查询,然后汇总结果进行输出。

下面我们利用Gearman的gearman_client_run_tasks实现并发的查询,gearman_client_run_tasks接口可以一次性的提交多个任务,然后在callback函数中异步的处理结果。


PHP的示例如下:

The client:

<?php

$client = new GearmanClient();
$client->addServer();

// initialize the results of our 3 "query results" here
$userInfo = $friends = $posts = null;

// This sets up what gearman will callback to as tasks are returned to us.
// The $context helps us know which function is being returned so we can 
// handle it correctly.
$client->setCompleteCallback(function(GearmanTask $task, $context) use (&$userInfo, &$friends, &$posts) {
    switch($context) {
        case 'lookup_user':
            $userInfo = $task->data();
            break;
        case 'baconate':
            $friends = $task->data();
            break;
        case 'get_latest_posts_by':
            $posts = $task->data();
            break;
    }
});

// Here we queue up multiple tasks to be execute in *as much* parallelism as gearmand can give us
$client->addTask('lookup_user', 'joe@joe.com', 'lookup_user');
$client->addTask('baconate', 'joe@joe.com', 'baconate');
$client->addTask('get_latest_posts_by', 'joe@joe.com', 'get_latest_posts_by');

echo "Fetching...\n";
$start = microtime(true);
$client->runTasks();
$totaltime = number_format(microtime(true) - $start, 2);

echo "Got user info in: $totaltime seconds:\n";
var_dump($userInfo, $friends, $posts);


The worker:

<?php

$worker = new GearmanWorker();
$worker->addServer();

$worker->addFunction('lookup_user', function(GearmanJob $job){
    // normally you'd so some very safe type checking and query binding to a database here.
    // ...and we're gonna fake that.
    sleep(3);
    return 'The user requested ('. $job->workload() .') is 7 feet tall and awesome';
});

$worker->addFunction('baconate', function(GearmanJob $job){
    sleep(3);
    return 'The user ('. $job->workload() .') is 1 degree away from Kevin Bacon';
});

$worker->addFunction('get_latest_posts_by', function(GearmanJob $job){
    sleep(3);
    return 'The user ('. $job->workload() .') has no posts, sorry!';
});

while ($worker->work());

运行结果:

Fetching...
Got user info in: 9.00 seconds:
string(59) "The user requested (joe@joe.com) is 7 feet tall and awesome"
string(56) "The user (joe@joe.com) is 1 degree away from Kevin Bacon"
string(43) "The user (joe@joe.com) has no posts, sorry!"</span>

发现还是用了9S时间,那是因为只有一个worker,它只能是顺序执行。


一起运行三个worker或更多,再来试试:

Fetching...
Got user info in: 3.00 seconds:
string(59) "The user requested (joe@joe.com) is 7 feet tall and awesome"
string(56) "The user (joe@joe.com) is 1 degree away from Kevin Bacon"
string(43) "The user (joe@joe.com) has no posts, sorry!"</span>


这只是一个并行执行的例子,实际应用中可以有更好的并发性能。




Gearman中文手册最新完整版chm Gearman中文手册,gearman手册chm,Gearman中文详解,分享gearman技术心得,主要是为了分享技术,所以不要大家的资源分。 立即下载

相关推荐

Gearman中文手册,Gearman中文详解,gearman手册chm

Gearman中文手册,gearman手册chm,Gearman中文详解,分享gearman技术心得,主要是为了分享技术,所以不要大家的资源分。

mysql multi_query_MySQLi面向对象实践--multi_query

使用multi_query可以实现执行多条SQL语句,每一条SQL语句通过分号分隔。需要注意的是:多条用分号分隔的SQL语句中,只要有一条SQL语句执行失败,那么这一条SQL语句以及之后的SQL语句就不会执行。只有当第一条SQL语句执行失败,那么multi_query()的返回值才为false。如果第一条SQL语句执行成功了,那么都会返回true。$mysqli = new Mysqli();$m...

weixin_39631649的博客 1033

C#实战:5分钟搞定Modbus RTU通讯(基于NModbus4库)

本文详细介绍了如何使用C#和NModbus4库快速实现Modbus RTU通讯,包括环境配置、核心功能实现、性能优化及常见问题排查。通过代码示例和实用技巧,帮助开发者高效完成工业自动化设备的数据采集与控制任务。

weixin_30689307的博客 467

RAG查询转换(Query Transformations)的优化方案(1)——多查询(Multi Query)

爬取网页内容,提取 main_box 里的文本。 把文本向量化并存储到 FAISS 数据库。 让 LLM 生成 5 个改写版本的问题,提高召回率。 用这 5 个问题去数据库检索,获取相关文档。

陈开心的博客 1337

土地利用数据从1972到2023:如何利用Landsat和Sentinel数据构建长期变化监测模型

本文详细解析了如何利用1972至2023年的Landsat和Sentinel遥感数据构建土地利用长期变化监测模型。通过多源数据融合策略、时间序列预处理流程和深度学习算法,实现高精度的土地利用分类与变化检测,为生态评估和城市规划提供科学依据。文章还探讨了验证方法和实际应用案例,展示了长期遥感数据在环境建模中的独特价值。

weixin_28720573的博客 443

英飞凌IGBT驱动芯片2ED020I12F2去饱和电路设计总结整理收集

记录下英飞凌IGBT驱动芯片限流电阻阻值设计

nizhenyuchina的博客 5994

【小白秒懂】AI 大模型零基础学习路线,附全套免费资源

【小白秒懂】AI 大模型零基础学习路线,附全套免费资源

优快云_224022的博客 1254

从UE4到Unity:双叶高光技术在角色皮肤渲染中的移植全流程

本文详细解析了将UE4中的双叶高光技术移植到Unity引擎的全流程。该技术通过模拟皮肤油脂层和真皮层的不同反射特性,能显著提升角色皮肤渲染的真实感。文章从核心原理、贴图资产处理、Shader代码重构到参数调校,提供了完整的跨引擎移植实战指南,帮助开发者实现高质量的皮肤质感还原。

alice7model的博客 476

LLM 加速技巧:Muti Query Attention

MQA是在2019年提出的,当时的应用还没有那么广泛。这是因为以前的模型不需要关心这些方面,例如,LSTM只需要维护一个状态,而不需要保留任何缓存。当transformer最初被提出时,它主要用于Seq2Seq任务,特别是在Encoder-Decoder模型中。由于模型的规模不是很大,也并且没有太多的实际需求,所以MQA并没有引起太多的关注。直到近年来(尤其是2023年开始)基于transformer的大型语言模型(如GPT)得到广泛应用后,推理的瓶颈才被人们重视。

deephub 4982

目标检测YOLO实战应用案例100讲-基于YOLOv7的番茄采摘机械手场景感知及试验(下)

根据软件系统的设计需求,制定系统的可行性方案分析,编写系统的相关程序和 调试运行环境,对系统进行测试,以实现对番茄数据的采集及监测。登陆界面登陆后,进入选择界面,菜单包括了对番茄种植棚室的固定相机数据的监测、 对番茄采摘机械手的双目相机采集的番茄的静态、动态数据的获取、对番茄静态、动态数 据处理的功能菜单等选项。与利用人工去进行对于番茄果实的识别和数目的统计相比,番茄视觉系统自动记录番 茄数量以及红色已经成熟的番茄、青色未成熟番茄的数量,减轻人工记录的工作量,减少 人工记录的误差,从经济方面是可行的。

qq_36130719的博客 811

【信息系统项目管理师】第1章:信息化发展 考点梳理

本文主要详细梳理高项:信息化、新型基础设施建设、两化融合、数字中国、数字化转型与元宇宙等内容。

数据知道的博客 8567

第70篇 一对多自由控制语音及PHP MySQL插入多条数据

关键词:一对多自由控制语音, PHP MySQL插入多条数据 一、一对多自由控制语音 1.1问题描述 针对一对多,需要自由控制语音和视频,存在的场景是老师能和学生视频,同时也能关掉视频;同样的,老师能允许学生发言,同时,也可以禁止学生发言。因为语音和视频类似,所以,接下来,主攻自由控制语音。 1.2 在测试服务器上搞 先在demos里面搞,看它的例子,看能不能有什么灵感。Demos

二刀流的博客 881

基于BQ25895RTWR的锂电池充电管理硬件设计

BQ25895 是一款适用于单节锂离子电池和锂聚合物电池的高度集成型 5A 开关模式电池充电管理和系统电源路径管理器件。此类器件支持高输入电压快速充电。低阻抗电源路径对开关模式运行效率进行了优化、缩短了电池充电时间并延长了放电阶段的电池使用寿命。• 移动电源、移动 Wi-Fi 热点。• 便携式互联网器件。

corlin6688的博客 1085

gearman性能与应用架构设计

一、Gearman架构中的三个角色 client:    请求的发起者,工作任务的需求方(可以是C、PHP、Java、Perl、Mysql udf等等) Job Server:请求的调度者,负责将client的请求转发给相应的worker(gearmand服务进程创建) worker:    请求的处理者(可以是C、PHP、Java、Perl等等) Fig-1 从上图可以看出,Gea

北雨南萍 1799

RK3568笔记六十一:MIPI摄像头应用程序编写

V4L2设备驱动框架向应用层提供了一套统一、标准的接口规范,应用程序按照该接口规范来进行应用编程,从而使用摄像头。对于摄像头设备来说,其编程模式如下所示:1.首先是打开摄像头设备;2.查询设备的属性或功能;3.设置设备的参数,譬如像素格式、帧大小、帧率;4.申请帧缓冲、内存映射;5.帧缓冲入队;6.开启视频采集;7.帧缓冲出队、对采集的数据进行处理;8.处理完后,再次将帧缓冲入队,往复;9.结束采集。

1003

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

gearman 并发的执行多个任务

Examples: Multi-Query In this example we know that we need to fetch several result sets from a database. Traditionally you would make the requests one after the other, gathering results, and finally ...

weixin_30270561的博客 189

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

php multi_query()函数

multi_query()函数:同时执行多条查询语句;

苦艾文艺 2234

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

一文细数Vision transformer家族成员

可以看作是vision transformer的idea集,查漏补缺使用。需要精读的文章前面加了*号,均附有文章链接及代码链接。 下面这个链接基本上有所有的ViT的论文地址:https://github.com/dk-liang/Awesome-Visual-Transformer Image Classification Uniform-scale *ViT paper:https://arxiv.org/abs/2010.11929 code:https://github.com/go.

Drug discovery 2930

mysqli_multi_query() 函数

查看更多 https://www.yuque.com/docs/share/9048a6c5-a150-466a-97b9-18e7ff8a2036

冷月醉雪的博客 815

php multi_query()函数 实现批量执行sql语句

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34399060的博客 1233

[Elasticsearch] 多字段搜索 (三) - multi_match查询和多数字段

multi_match查询 multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询。 NOTE 存在几种类型的multi_match查询,其中的3种正好和在"了解你的数据"一节中提到的几种类型相同:best_fields,most_fields以及cross_fields。 默认情况下,该查询以best_fields类型执行,它会为每个字段生成一

不忘初心,好好沉淀 9万+

Pig—MultiQuery Execution

A = LOAD'/user/input/t.txt' as (k:chararray,c:int); B = group A BY k; C = foreach Bgenerate group,SUM(A.c); store C into'/user/output/test1.out'; DUMP C; store C into'/user/output/test2.out...

238

php5以上一次执行多条SQL语句

使用mysqli对象中的query()方法每次调用只能执行一条SQL命令。如果需要一次执行多条SQL命令,就必须使用mysqli对象中的 multi_query()方法。具体做法是把多条SQL命令写在同一个字符串里作为参数传递给multi_query()方法,多条SQL之间使用分号 (;)分隔。如果第一条SQL命令在执行时没有出错,这个方法就会返回TRUE,否则将返回FALSE。      

大庄园 5645

Gearman 性能调优

文章来自:http://blog.flier.lu/2010/04/gearman-performance-tunning/ Gearman是最早由LiveJournal内部开发并使用的一个通用并行任务调度框架,允许不同语言直接通过非常简单的方式进行互操作。前台提交工作任务(Task)和参数,由后台工作进程(Worker)完成实际工作。 例如前台提交用户需要进行渲染的图片,由Gearm...

freespace 292
上一篇: MySQL优化原则
下一篇: 程序员要不断学习和实时积累
笑天居士
博客等级 码龄24年 292粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值