做了一个自动上传文件到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上传"就可以得到全部源码链接!

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

注:原文链接

相关推荐
TrisighT7 小时前
让 Claude 自己管自己:Hooks 拦截 rm -rf 的那一次救场
aigc·agent·ai编程
Am-Chestnuts8 小时前
DeepSeek、豆包与Kimi多轮回答的批量导出和横向对比方法
aigc
西安老张(AIGC&ComfyUI)18 小时前
第030章:ComfyUI视频制作LTX-2.3模型文生视频工作流详解(三)
人工智能·aigc·comfyui
深蓝AI1 天前
NVIDIA 发布 Nemotron 3 Embed:开源嵌入模型登顶 RTEB,RAG 检索精度全面提升
aigc
TrisighT1 天前
Skill 写成 2000 字说明书?Claude 根本不读——路由器思维与渐进式披露
aigc·ai编程·claude
食尘者1 天前
MacBook Pro M5Max 本地大模型推理实践
macos·aigc
倾颜1 天前
AI 聊天刷新后记录全丢?用浏览器本地存储给 AI Chat 加一层"离线记忆"
前端·aigc
刘棕霆1 天前
企业测试造数为什么这么难?我把熟手经验做成了一个可交付的造数 Skill
aigc·agent·测试
武子康1 天前
HunyuanVideo 全家族选型:原版 13B / I2V / Avatar / Foley / 1.5 8.3B 怎么分工
人工智能·llm·aigc