文心一言机器人(技术预览版)已加入虎绿林

@Ta 2023-04-02发布,2023-10-06修改 406003点击

使用方法:在帖子或聊天室里发:

@文心一言,问题。

机器人源代码(机器人使用说明在注释里):


使用方法:

  1. 使用最新版的Chrome谷歌浏览器或Firefox火狐浏览器,不要使用QQ浏览器、360浏览器等,不保证兼容。
  2. 安装油猴插件:https://www.tampermonkey.net/
  3. 在油猴里添加新脚本,粘贴如下代码并保存:
// ==UserScript==
// @name         虎绿林文心一言机器人
// @namespace    https://hu60.cn/
// @version      1.0
// @description  把文心一言接入hu60wap6网站程序
// @author       老虎会游泳
// @match        https://yiyan.baidu.com/
// @icon         https://hu60.cn/favicon.ico
// @grant        none
// ==/UserScript==

document.hu60VConsole = false; // 是否显示调试控制台,false:隐藏;true:显示。
document.hu60User = ''; // 虎绿林用户名
document.hu60Pwd = ''; // 虎绿林密码
document.hu60AdminUids = [1, 19346, 15953]; // 机器人管理员uid,管理员可以发“@文心一言,刷新页面”来重启机器人
document.hu60Domain = 'https://hu60.cn'; // 如果要对接其他网站,请修改此处的域名(必须是https的否则连不上)
var script = document.createElement("script");
script.src = document.hu60Domain + '/tpl/jhin/js/chatgpt/yiyan.js?r=' + (new Date().getTime());
document.head.appendChild(script);
  1. 打开 https://yiyan.baidu.com/ 并登录。
  2. 在来到聊天页面时,会弹出输入虎绿林用户名密码的提示框。
    如果你要把机器人接入虎绿林,请注册一个新帐号。使用现有帐号运行机器人将被删帖或禁言
    输入新帐号用户名密码后,机器人即启动,保持页面不要关闭。
    机器人会使用你在此处输入的帐号与其他用户进行对话,在虎绿林用其他帐号@该帐号即可尝试对话。
    注意,使用该帐号自己@自己是不会有反应的,必须用另一个账号来和机器人对话。
  3. 如果要打开F12开发者控制台,必须在“调试器”或“源代码”页面点击“停用断点”按钮(右上角的=/=>图标)并刷新,否则百度会暂停页面的运行。
  4. 如何切换登录的帐号?按F12打开开发者工具,点“控制台”或“Console”,然后输入以下代码并回车:
    login(true)
    将会重新弹出用户名密码输入框。
  5. 也可以把用户名密码填在油猴脚本里,这样就不用在对话框里输入了。

如何把机器人接入其他类型的网站?

你可以在油猴脚本的末尾添加一个自定义主循环,用于把机器人接入其他类型的网站。以下是一个例子:

document.run = async function() {
    while (true) {
        try {
            // 访问你的网站获取要发给文心一言的内容
            // 网站必须是https的,否则连不上。
            // 此外网站还必须设置 Access-Control-Allow-Origin: * 头信息,否则也连不上。
            let response = await fetch('https://example.com/my-message.php');

            // 假设获取到的信息是JSON,把它转换成JSON对象
            // 网站必须设置 content-type: application/json 头信息,否则转换会失败。
            let messages = response.json();

            // 假设JSON结构是这样:
            // {"data": [
            //    {"uid":3, "text":"@文心一言,你好"},
            //    {"uid":2, "text":"@文心一言,我有一个问题"},
            //    {"uid":1, "text":"@文心一言,刷新页面"},
            // ]}
            let exceptionCount = 0;
            for (let i=0; i<messages.data.length; i++) {
                // 要发给文心一言的话,开头包含的“@机器人名称,”会被后续流程自动去除。
                let text = messages.data.text;

                // 用户id,可以是字符串,所以给出用户名也是可以的。
                let uid = messages.data.uid;

                try {
                    // 把对话发给文心一言
                    // 返回的 modelIndex 是为对话选择的模型id(从0开始编号),目前始终是0
                    let modelIndex = await sendRequest(text, uid);

                    // 从文心一言读取回复
                    let replyText = await readReply();

                    // 发送回复到你的网站
                    // 创建一个POST表单
                    let formData = new FormData();
                    formData.append('token', '用于用户身份验证的密钥');
                    formData.append('reply', replyText); // 回复内容

                    // 提交POST表单
                    // 网站必须是https的,否则连不上。
                    // 此外网站还必须设置 Access-Control-Allow-Origin: * 头信息,否则也连不上。
                    let response = await fetch('https://example.com/my-reply.php', {
                        body: formData,
                        method: "post",
                        redirect: "manual" // 不自动重定向
                    });

                    // 在控制台打印提交结果
                    if (response.type == 'opaqueredirect') {
                        console.log('提交后收到重定向(目标网址未知,根据标准,浏览器不告诉我们),不清楚提交是否成功');
                    } else {
                        let result = await response.text();
                        console.log('提交结果', result);
                    }

                    // 避免操作太快
                    await sleep(100);
                } catch (ex) {
                    exceptionCount++;  // 统计异常次数
                    console.error(ex); // 打印异常到控制台
                    await sleep(1000); // 异常后等久一点
                }

                // 重命名会话
                await renameWant();
            }

            // 执行管理员命令(比如“刷新页面”)
            await runAdminCommand();

            // 异常太多,自动刷新页面
            if (exceptionCount > 0 && exceptionCount >= messages.data.length) {
                location.reload();
            }

            // 限制拉取信息的速度,避免对自己的网站造成CC攻击
            await sleep(1000);
        } catch (ex) {
            console.error(ex);
            await sleep(1000);
        }
    }
}
回复列表(400|隐藏机器人聊天)
添加新回复
回复需要登录