用 SQL 快速对百万图片生成图片解读

随着大模型百万token进入1元时代,在 SQL中调用大模型 很快要进入大众视野了。 对于业务数据库(数仓,数据湖),我们可以用Load加载任意数据库,或者文件系统的数据,然后用 select语句使用大模型UDF函数对每条记录或者聚合后的每条数据做处理,处理完用save语句保存回数据系统。

打开web,三条语句完成一个业务需求。

但是如果是去年,你可能一条SQL语句执行下去,会遇到两个情况:

1. 账单爆了。

2. 跑不出来(执行时间太长。。。)。

Byzer SQL 可以注册任意模型为UDF,使得你可以方便用大模型处理数据,比如加载图片,然后用vl提取图片信心,再保存成一个新字段。

其次 Byzer Notebook 作为交互产品,提供了编写SQL的辅助功能,可以让编写复杂SQL变得原来越简单。

为了证明我不是我吹牛,我我们今天举一个实际比较有价值的例子:如何使用多模态模型批量处理图片。

正常情况,你要编写Python代码来完成这件事。但是你的数据可能在 OSS上甚至在数据库里,所以你要学习:

  1. 如何使用 Python 库调用多模态大模型

  2. 如何使用 Python 的某个库来完成某个数据库或者某个对象存储读取

  3. 你可能还要考虑使用某些库来讲调取的数据写回到某个业务库

  4. 你可能还要考虑怎么并行化处理(Process?Thread?Async?)

如果你不是很熟悉这些东西,尽管我们要做的事情相当简单,你可能还是要花费很多功夫,可能半天,可能一天,甚至两天,你才能解决这个似乎和简单的一个活。

但是如果你使用 SQL, 这件事就变得特别容易。让我们来看看如何用Byzer-SQL 完成这件事情。

部署一个模型

这里我们部署一个 yi_vision 做演示,你也可以部署一个私有的,比如Qwen-VL 等。

执行下面的命令在 Byzer-SQL 所在的服务器上:

byzerllm deploy  --pretrained_model_type saas/openai  \
--cpus_per_worker 0.001 \
--gpus_per_worker 0 \
--num_workers 1 \
--worker_concurrency 10 \
--infer_params saas.api_key=${MODEL_YI_TOKEN} saas.model=yi-vision saas.base_url=https://api.lingyiwanwu.com/v1 \
--model yi_vl_chat

现在,可以打开 Byzer Notebook(Byzer-SQL专有编辑器),在自己的会话里连接下已经部署的模型:

!byzerllm setup single;


run command as LLM.`` where 
action="infer"
and reconnect="true"
and pretrainedModelType="saas/*"
and udfName="yi_vl_chat";

现在可以加载图片目录了:

load binaryFile.`/tmp/upload/images` as images;
!desc images;

be15fe7bc019116c81d66f83c669ef56.png

可以看到加载的数据集的schema。接着我就可以用函数 yi_vl_chat 处理这些图片了,但是我还不太清楚怎么做base64 编码和把结构转化为 json,所以我打开一个cell问了下:

e66d672e059cb733fb7cccef7727eee2.png

Byzer-Notebook 秒变对话应用。

现在我们开始SQL处理这些图片:

select 
yi_vl_chat(llm_param(
map(


   "query",to_json(array(map(
    "image",base64(content),
    "text","详细描述图片里都有啥"
   )))
              
)))


as response from images as table1;


select llm_result(response) as result from table1 as output;

处理的模式很简单,yi_vl_chat 函数要求传递的参数必须用 llm_param/map 进行包裹,然后这个map有个query参数,因为必须都是字符串格式(SQL要求map的里的类型保持一致),所以我们把参数进行json化。

总体而言,这是一个固定格式,大家照着抄,替换掉 image/text就好。

不过当我执行这个代码的时候,报错了,服务器端说 base64 格式不对。所以我自己用 Scala 语言写了个 base64 UDF函数:

ac36b36c056583a7c8c2a5c784b4a6d7.png

Byzer-SQL 支持动态构建UDF函数从Scala/Java/Python源码。推荐使用 Scala。如果Scala你不熟悉,也可以像前面咨询 base64/json化怎么用一样,在 Byzer Notebook 里让大模型帮你写这个函数。

点击运行下,上面的cell, 然后你就可以在后续的 SQL 中使用 my_base64函数了,我们把原来的 base64替换成 my_base64,搞定,可以正常运行了。

7a22f80b2da70d113343cbc970507ab6.png

运行结果看起来是对的。接着如果你希望把结果保存起来,可以用 save 语法,把 table1 表保存到任何你想保存的地方。

总结

可以看到,我们可以从对象存储加载一堆文件,然后用一条SQL语句,就完成了对图片的解读操作,然后保存到任何你想保存的地方。相比你使用 Python, 不但对环境要求高,可以有效的屏蔽各种库的使用,提升效率。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值