前言:
02/29更新:
现在暂时不能用了
作者回复:“2/27测试,Coze开始校验前端url中的_signature,疑似Coze官方开始察觉异常流量
Coze的Signature包含了对url和body的签名,逆向可能还需要一段时间。”
详见: 发送消息失败:We’ve detected unusual traffic from your network, so Coze is temporarily unavailable. · Issue #5 · CrazyCreativeDream/Real-Coze-API (github.com)
今晚在群里看到赢驷佬的分享,迫不及待地部署试了一下,响应速度不错。于是水此一贴,同时想冲个2级,奉上部署流程~
项目链接:Real-Coze-API (喜欢的话希望可以给作者点个star
)
亮点(作者原话):
通过Coze原有PlayGround的API,逆向前端脚本,模拟请求,以实现将Coze的API暴露出来的功能。
流式效果:
role
参数定义:
1
: 机器人Assistant
2
: 用户```User``
6
: 知识库Knowledge
作者原话: 可能
0
为系统system
身份,但是你可以直接在网页中预设里设置,不需要在ChatHistory中设置。ChatHistory
最后一项的role
最好是2
用户,否则会出现奇怪的问题。
==============================================================================
部署流程:
本贴介绍的是本地部署,作者还支持部署到
CloudFlareWorker
,参见: 如何部署到CloudFlare
1. git clone 到本地
https://github.com/CrazyCreativeDream/Real-Coze-API.git
2. 准备环境配置.env
将项目根目录下的.example.env
拷贝并重命名为.env
(也是放在根目录)
非大陆地区需要配置代理,需要注意的是代理类型仅支持
socks
3. 获取sessionid
进入Coze官网并登录后,F12进入开发者模式
在应用/Application
选项卡,于左侧菜单选择Cookie
,在名称
列中找到并选择sessionid
,从下面的Cookie Value
栏复制出你的id
最后,把值赋给项目根目录下.env
文件中的session_id
变量
具体如下图所示:
4. 下载Coze机器人配置
打开Coze机器人的配置页面(也就是发布机器人前添加各种插件的那个页面,Url类似: https://www.coze.com/space/一串数字/bot/一串数字
)
靠,写到这的时候本来想截个图,结果上去就提示
Our services are not available in your country or region
,挂全局/无痕都进不去,不知道搞什么鬼。所以此处没有截图了,抱歉
F12进入开发者模式,把以下代码复制到控制台并按下回车(也可以使用作者的油猴脚本DownloadBotConfig.user.js)
(async function () {
'use strict';
if(!location.pathname.match(/\/space\/\d+\/bot\/\d+/g)) return;
await new Promise((resolve) => {
const interval = setInterval(() => {
if (Object.values(document.querySelectorAll('span')).filter((span) => span.innerText === 'Publish')[0]) {
clearInterval(interval)
resolve()
}
}, 1000)
})
const PublishButtonSpan = Object.values(document.querySelectorAll('span')).filter((span) => span.innerText === 'Publish')[0]
const PublishButton = PublishButtonSpan.parentElement
const SaveButtonSpan = PublishButtonSpan.cloneNode(true)
const SaveButton = PublishButton.cloneNode(true)
SaveButtonSpan.innerText = 'Download'
SaveButton.innerHTML = ''
SaveButton.appendChild(SaveButtonSpan)
PublishButton.parentElement.appendChild(SaveButton)
const download = (content) => {
const a = document.createElement('a')
const blob = new Blob([content], { type: 'text/plain' })
a.href = URL.createObjectURL(blob)
a.download = 'config.json'
a.click()
}
SaveButton.addEventListener('click', () => {
const originSend = XMLHttpRequest.prototype.send
XMLHttpRequest.prototype.send = function (body) {
if (this._url === '/api/draftbot/update') {
const data = JSON.parse(body)
download(JSON.stringify(data, null, 4))
XMLHttpRequest.prototype.send = originSend
} else {
return originSend.apply(this, arguments)
}
}
setTimeout(() => {
PublishButton.click()
}, 1000);
})
})();
之后视线回到页面,正常情况左上角 最右边会多出一个Download
的按钮(如下图所示)
如果使用的是油猴脚本,没看见按钮的话刷新一下页面就出来了
点击Download
按钮,提示下载机器人配置config.json
,放至项目根目录即可
5. 安装依赖
进入项目根目录,运行:
npm install
6. 运行(两种模式)
Command(命令行)模式:
npm run command
Server(API)模式:
npm run server
服务端口为项目根目录
.env
文件中的server_port
变量,默认为8080非流式请求url : http://127.0.0.1:8080
流式请求url: http://127.0.0.1:8080/?stream=true
对于流式请求的响应,作者有所说明:
当
continue
为false
时,content
内容可能不完整
根据作者的示例代码,可以"}"号作分割,再格式化为json取出内容
以上流程已经尽可能详细了,如有不便之处还望多包涵。
佬友们可以直接甩本贴link带你们的朋友一起造吧~