一、背景
相信大家最近应该都听过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上传"就可以得到全部源码链接!
最后如果这个工具能帮到你的话,还请多多点赞,你的点赞是我不断更新的动力!
注:原文链接