做了一个自动上传文件到Coze的小工具

一、背景

相信大家最近应该都听过Coze,我之前有一篇文章《字节AI大杀器:Coze》 也提到过它,简单来说它是由字节跳动出品,是一款用来开发新一代 AI Chat Bot 的应用编辑平台。

Coze里面有个知识库 的功能,它跟目前很火的检索增强生成(RAG)技术类似,主要作用就是提高回答的准确性,我之前也出过几篇文章对其进行系统的讲解,有兴趣的可以看我的主页。

之所以有这篇文章,是因为最近在使用知识库这个功能的时候遇到了一些不便

1、TXT格式的文件每次最多上传10个

如果你的语料比较多,每次又只能上传10个,如果有1000份文件,则要上传100次,感觉想想都头皮发麻

2、Excel表格每个单元的字符最大是1024个字符

因为Coze支持上传的方式其实还是比较多的,既然上传TXT有数量限制,那就换个思路,把TXT的内容整合到一份Excel表格,再进行上传,但是很快就打脸了,如果你每个单元的内容太长,超过1024个字符,则会上传失败

虽然Coze还支持API等方式,但我也不想一个个试,要是其他方式也有限制就太麻烦了,所以就想着能不能自己实现一个自动上传的小工具,先放下最终效果

二、技术选型

由于之前有Python相关经验,而自动化这块Python的Selenium比较出名,所以最终敲定的技术栈是Python3 + Selenium

注:系统是Ubuntu

2.1 安装chromedriver

由于太久没接触有些生疏,当我把 Selenium 启动的代码敲下去之后,发现并没有调起Chrome浏览器,后面才明白是 chromedriver 驱动没安装

注:没安装驱动的时候会一直等待

安装前需要先确定本机Chrome浏览器的版本,两者的版本一定要匹配!

浏览器输入: chrome://version/

我一开始是安装网上教程去下载安装,但是它提供的网址并没有和我版本一致的驱动,所以我就下了一个低一点的版本,版本号是 114.0.5735.90

下载并解压后,执行下面的命令就行

shell 复制代码
$ sudo mv -f chromedriver /usr/local/share/chromedriver

$ sudo ln -sf /usr/local/share/chromedriver /usr/local/bin/chromedriver

$ sudo ln -sf /usr/local/share/chromedriver /usr/bin/chromedriver

$ chromedriver --version         
ChromeDriver 114.0.5735.90 (386bc09e8f4f2e025eddae123f36f6263096ae49-refs/branch-heads/5735@{#1052})

但随后就栽了跟头了,发现版本不对Chrome浏览器起不来

后面就去了官网看了说明,原来网上博客提供的地址是给老版本使用的

最新的版本chromedriver驱动在这里下载:

googlechromelabs.github.io/chrome-for-...

因为上面的地址列举的是最新版本,并没符合我的浏览器版本的驱动,所以抱着试一试的心态,但结果还是不行

后面灵机一动,把最新版本链接中的版本替换为我的版本,结果还真的可以!

storage.googleapis.com/chrome-for-...

再次执行上面的安装命令,随后就能正常启动了

bash 复制代码
$ chromedriver --version         
ChromeDriver 123.0.6312.86 (9b72c47a053648d405376c5cf07999ed626728da-refs/branch-heads/6312@{#698})

三、项目实战

项目总体的思路还是蛮简单的,就是遍历本地文件,然后找到Coze的各个按钮的xpath路径,然后一路执行就行。

3.1 本地文件读取

首先是读取配置文件里的路径,然后使用Python的文件函数列举出文件夹下面的所有文件(注意这里不会遍历子文件夹,偷懒了),最后再筛选出特定后缀的文件,因为Coze目前只支持 TXT、PDF、Doc、Docx 这四种

3.2 调起Chrome浏览器

我们一般使用这行代码调起Chrome浏览器

ini 复制代码
driver = webdriver.Chrome()

但这种方式,每次重新调起Chrome浏览器的时候,之前的登录态都会丢失,所以Coze每次都得重新登录,非常麻烦,所以这里把登录数据存本地了,这样就不用每次都得登录

3.3 打开Coze的知识库主页

注意是这个页面

代码里面的get方法就是打开这个页面,然后模拟 Add unit 按钮的点击事件

3.4 模拟剩余的上传操作

剩下的这些代码就是模拟点击Add unit 按钮之后的一些操作,比如上传文件,各种Next按钮的点击等。

这里有个要说明的是,由于Processing阶段Coze是异步处理的,所以你可以不用等进度条完成才点Confirm按钮(所以我代码就是最多等待10秒)

四、一些注意事项

4.1 代码执行

由于我这里并没有提供图形化界面,所以可能对小白不太友好,如果了解过Python的应该就能很快上手,因为需要装各种环境和依赖啥的

4.2 每个知识库最大支持100个unit

这个也是我试出来的,感觉有点低,所以我在代码里面也加了判断,如果超过100个文件,是不会执行的

这个感觉是Coze的Bug,明明最大是100个,但是提示是300个

4.3 页面等待时间

因为HTML里面的元素要等页面渲染完才会出现,所以我里面每一步都有一个等待时间,但这个时间不一定是适用全部人的。

Selenium里面有个方法可以等待元素渲染完才执行(WebDriverWait),但是我并没有每一步都使用这个方法(还是偷懒了)

Selenium 设置元素等待的三种方式_driver.implicitly_wait-CSDN博客

4.4 记录已经上传的文件和失败的文件

由于不能保证代码就一定能执行成功,有时候会由于一些奇奇怪怪的问题导致找不到元素,然后就没办法执行下一步了,所以代码里面也记录失败的文件名,已经增加已经上传文件的过滤

可以抓包 www.coze.com/api/memory/... 接口,里面有返回已经上传的文件名

4.5 XPath 路径问题

由于我是根据XPath方式定位HTML元素的,所以如果Coze前端页面改了样式,大概率就会出现找不到对应元素的问题,如果遇到这种问题,大家记得更新XPath路径

4.6 源码获取

关于完成源代码的获取,搜索公众号"AI技术巫 "回复"Coze上传"就可以得到全部源码链接!

最后如果这个工具能帮到你的话,还请多多点赞,你的点赞是我不断更新的动力!

注:原文链接

相关推荐
杰说新技术1 小时前
Meta AI最新推出的长视频语言理解多模态模型LongVU分享
人工智能·aigc
热爱跑步的恒川7 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程
火山引擎边缘云15 小时前
创新实践:基于边缘智能+扣子的智慧婴儿监控解决方案
物联网·aigc·边缘计算
算家云15 小时前
如何在算家云搭建Aatrox-Bert-VITS2(音频生成)
人工智能·深度学习·aigc·模型搭建·音频生成·算家云
AI绘画小3321 小时前
【comfyui教程】comfyui古风一键线稿上色,效果还挺惊艳!
人工智能·ai作画·stable diffusion·aigc·comfyui
AI绘画月月1 天前
【comfyui教程】ComfyUI有趣工作流推荐:快速换脸,创意随手掌握!
人工智能·ai作画·stable diffusion·aigc·comfyui
AI绘画咪酱1 天前
【AI绘画】AI绘图教程|stable diffusion(SD)图生图涂鸦超详细攻略,教你快速上手
人工智能·ai作画·stable diffusion·aigc·midjourney
过去式的马马马1 天前
文多多AIPPT
ai作画·aigc·文心一言·ai编程·dall·e 2
逐星ing1 天前
【AIGC】腾讯云语音识别(ASR)服务在Spring Boot项目中的集成与实践
aigc·腾讯云·语音识别
花千树-0101 天前
Milvus - GPU 索引类型及其应用场景
运维·人工智能·aigc·embedding·ai编程·milvus