做了一个自动上传文件到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 小时前
第79期 | GPTSecurity周报
gpt·aigc
Jeremy_lf2 小时前
【生成模型之三】ControlNet & Latent Diffusion Models论文详解
人工智能·深度学习·stable diffusion·aigc·扩散模型
程序员X小鹿4 小时前
羡慕了!小红书上3w+点赞的治愈系插图,用这个免费的AI工具,1分钟搞定!(附详细教程)
aigc
AIGC大时代16 小时前
如何使用ChatGPT辅助文献综述,以及如何进行优化?一篇说清楚
人工智能·深度学习·chatgpt·prompt·aigc
吕小明么1 天前
OpenAI o3 “震撼” 发布后回归技术本身的审视与进一步思考
人工智能·深度学习·算法·aigc·agi
聆思科技AI芯片2 天前
实操给桌面机器人加上超拟人音色
人工智能·机器人·大模型·aigc·多模态·智能音箱·语音交互
minos.cpp2 天前
Mac上Stable Diffusion的环境搭建(还算比较简单)
macos·ai作画·stable diffusion·aigc
AI小欧同学2 天前
【AIGC-ChatGPT进阶副业提示词】育儿锦囊:化解日常育儿难题的实用指南
chatgpt·aigc
剑盾云安全专家2 天前
AI加持,如何让PPT像开挂一键生成?
人工智能·aigc·powerpoint·软件
合合技术团队2 天前
高效准确的PDF解析工具,赋能企业非结构化数据治理
人工智能·科技·pdf·aigc·文档