ChatGPT工作提效之小鹅通二次开发批量API对接解决方案(学习记录同步、用户注册同步、权益订购同步、开发文档)

简介: ChatGPT工作提效之小鹅通二次开发批量API对接解决方案(学习记录同步、用户注册同步、权益订购同步、开发文档)

ChatGPT是一种实时对话生成模型,能够帮助用户快速地回答问题、提供信息,并且能够流畅地进行对话,准确理解用户的意图,并作出相应的回应。


ChatGPT模型的优点在于其生成文本的自然度和连贯度都非常好,不会出现明显的逻辑错误和语法错误。此外,ChatGPT的训练数据集丰富多样,能够应对大部分的问题场景。由于使用预训练模型,可以快速定制成各种应用场景的问答模型,能够大幅提升开发效率。不过,ChatGPT也存在一些缺点。由于其是基于预训练模型的生成模型,无法像传统的规则引擎一样对自己的回答逻辑处理进行调整,因此产生了一些无意义的回答或者矛盾的回答。


近期,在小鹅通的项目实战开发过程中,增加了“面向ChatGPT开发”的使用频率。现就有关过程记录如下:


一、项目需求

调用小鹅通API接口获取指定资源学习记录信息,xe.user.leaning_record_by_resource.get/1.0.0。

请求方式及url


请求方式:POST

请求头:Content-Type:application/json

接口地址:https://api.xiaoe-tech.com/xe.user.leaning_record_by_resource.get/1.0.0

频率限制:10秒3000次

备注:数据是准实时的,4~5分钟延迟

user_id数组,请求数量上限,请求参数如图:


目前需要在小鹅通上述API条件的限制做,批量获取用户指定资源的学习记录。在php中是完善的延迟进程的算法的,很容易API超限或请求频繁导致token失效。

如何实现队列更新呢?


1.chatGPT:使用php分批分时输出的代码

php写一下一个100长度的数组,分批分时输出的代码

<?php
// 创建一个100长度的数组
$array = range(1, 100);
// 每批输出的长度
$batch_size = 10;
// 循环输出数组内容
for ($i = 0; $i < count($array); $i += $batch_size) {
    echo "批次 " . ($i / $batch_size + 1) . "\n";
    echo implode(", ", array_slice($array, $i, $batch_size)) . "\n";
    sleep(1); // 暂停1秒,以模拟分时输出
}
?>


sleep(1)

2.chatGPT使用javascript分批分时输出的代码

在javascript中实现一个100长度的数组,分批分时输出的代码怎么写

 var arr = Array(100).fill(null).map((_, i) => i + 1); // 创建长度为100的数组
    function outputArrayInBatch(arr, batchNum, interval) {
        var startIndex = batchNum * interval; // 当前批次的起始索引
        var endIndex = (batchNum + 1) * interval; // 当前批次的结束索引
        if (startIndex > arr.length - 1) {
            return; // 当所有元素都输出完毕后,退出递归
        }
        if (endIndex > arr.length) {
            endIndex = arr.length; // 当结束索引超过数组长度时,将结束索引设置为数组的最后一个元素的索引
        }
        var batchArr = arr.slice(startIndex, endIndex); // 当前批次需要输出的元素数组
        //对批次数组进行遍历操作;
        console.log(batchArr); // 输出当前批次的元素
        setTimeout(function () {
            outputArrayInBatch(arr, batchNum + 1, interval); // 递归调用下一批次的输出
        }, 2000); // 每隔1秒输出一批次
    }
    // 执行输出
    outputArrayInBatch(arr, 0, 10); // 一次输出10个元素,共分10批输出

代码中首先创建了长度为100的数组。outputArrayInBatch()函数接收三个参数:待输出的数组、当前批次数、每批次需要输出的元素个数。在函数中,首先根据批次数和输出元素个数计算当前需要输出的元素数组;然后输出当前批次的元素,并通过setTimeout()函数递归调用函数,输出下一批次的元素。


这里输出的是每隔1秒输出一批次的元素,可以根据具体需求调整输出时间间隔。


二、批量修复API接口

1.修复单位不存在API

public function upDepart()
    {
        global $db, $res;
        dbc();
        @$user_phone = get_param('user_phone');
        if ($user_phone == "") {
            die("参数错误");
        }
        //读取单位认证
        $row = $db->fetch('depart_audit', '*', array('user_phone' => $user_phone), ' audit_id DESC');
        //获取单位ID
        $row_depart = $db->fetch('depart', 'depart_id', array('depart_name' => $row['depart_name']), ' depart_id DESC');
        if ($row_depart['depart_id'] == "") {
            die("单位不存在或未验证");
        }
        //更新单位库
        $user_roles = 1;//单位管理员权限;
        $user_menu = 0;//可操作
        $user_auth = 1;//已审
        $db->insert('admin', array('user_phone' => $user_phone, 'user_name' => $row['user_name'], 'user_pwd' => $row['user_pwd'], 'user_mail' => $row['user_mail'], 'depart_id' => $row_depart['depart_id'], 'user_depart' => $row['depart_name'],
            'user_branch' => $row['user_branch'], 'user_titles' => $row['user_titles'], 'user_province' => $row['province'], 'user_city' => $row['city'], 'user_area' => $row['area'],
            'user_roles' => $user_roles, 'user_menu' => $user_menu, 'user_auth' => $user_auth));
        $res["data"] = $user_phone . "-更新成功";
        die(json_encode_lockdata($res));
    }


2.修复单位depart_id不存在

public function upDeID()
    {
        global $db, $res;
        dbc();
        //读取管理员信息
        $sql = "select depart_id,user_depart FROM " . $db->table('admin') . " WHERE depart_id IS NULL";
        $sql .= " ORDER BY user_id DESC";
        $row = $db->queryall($sql);
        for ($i = 0; $i < count($row); $i++) {
            // echo $row[$i]['user_depart'] . '<br>';
            //获取单位ID
            $row_depart = $db->fetch('depart', 'depart_id,depart_name', array('depart_name' => $row[$i]['user_depart']), ' depart_id DESC');
            if ($row_depart) {
                $db->update('admin', array('depart_id' => $row_depart['depart_id']), array('user_depart' => $row[$i]['user_depart']));
            }
        }
        $res["data"] = "更新成功";
        die(json_encode_lockdata($res));
    }


3.批量更新登录权限

public function upAuth()
    {
        global $db, $res;
        dbc();
        $db->update('user', array('user_auth' => 1), array('user_auth' => 0));
        $res["data"] = "更新成功";
        die(json_encode_lockdata($res));
    }

三、开发中遇见的问题

1.查询字段为空的sql语句

mysql筛选某字段未空的查询语句怎么写


在MySQL中,筛选某字段未空的查询语句可以使用 IS NOT NULL 来表示。例如,假设有一个表名为 my_table,其中包含 field1 字段,要查找 field1 字段不为空的数据,可以使用以下 SQL 查询语句:

SELECT * FROM my_table WHERE field1 IS NOT NULL;

其中 SELECT * 表示选择所有列,FROM my_table 表示从 my_table 表中查询数据,WHERE field1 IS NOT NULL 表示筛选 field1 字段不为空的数据。

如果要筛选出某个字段值为空的数据,可以使用 IS NULL 来表示,例如:


SELECT * FROM my_table WHERE field1 IS NULL;

这条 SQL 查询语句将会返回 field1 字段为空的记录所有数据,其他字段可能为空或者有值。


而在实际的开发过程中,在写查询字段为空的sql语句中时,用了is null查表中user_eid为空的记录,结果是没有结果。其原因在于,只有是显示(null)的字段才是真正的空值,如果之前为该字段赋值之后删除值框里什么都没有应该是下面的写法:user_eid = ''

    public function getEid()
    {
        checkAdminAuth($_COOKIE['admin_roles'], '0', 1);//超管权限
        global $db, $res;
        dbc();
        //读取管理员信息
        $sql = "select user_eid,user_name,user_phone FROM " . $db->table('user') . " WHERE user_eid = ''";
        $sql .= " ORDER BY user_id DESC";// LIMIT 100
        $row = $db->queryall($sql);
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }


2.设置登录cookie永不过期

php如何设置登录cookie永不过期

要设置PHP登录cookie永不过期,可以指定一个很大的过期时间,如设置为2038年1月19日,这是PHP可以处理的最大日期。

可以使用setcookie()函数设置cookie,具体示例如下:

$cookie_name = "user";
$cookie_value = "John Doe";
$expiry_date = strtotime('2038-01-19');
setcookie($cookie_name, $cookie_value, $expiry_date, "/");


在上面的示例中,$expiry_date变量设置为2038年1月19日的时间戳,该时间戳将在setcookie()函数中设置为cookie的过期时间。在本例中,cookie的路径设置为“/”,这表示cookie与服务器上所有页面都关联,而不是仅与当前页面关联。


这样设置后,用户的登录cookie将被永久保存,直到浏览器将其删除或达到在服务器上规定的最长持续时间为止。


3.实现短信验证码的代码是什么

除了Redis外,还有很多其他的方式实现短信验证码的流控。下面是一个基于文件系统的示例代码:

<?php
// 定义短信验证码保存目录
define('SMS_DIR', '/path/to/sms/dir/');
// 获取客户端IP地址
$ip = $_SERVER['REMOTE_ADDR'];
// 获取手机号码
$phone = 'your_phone_number';
// 定义文件名规则
$filename = md5($ip . $phone) . '.json';
// 检查文件是否存在
if (file_exists(SMS_DIR . $filename)) {
    // 如果文件存在,则读取文件内容
    $content = file_get_contents(SMS_DIR . $filename);
    // 解析JSON内容
    $data = json_decode($content, true);
    // 如果超过发送次数限制,则提示用户并退出
    if ($data['count'] >= 5 && time() - $data['timestamp'] < 300) {
        echo "发送频率过快,请稍后再试。";
        exit;
    } else {
        // 如果可以发送,则将发送次数加1,并更新时间戳
        $data['count']++;
        $data['timestamp'] = time();
    }
} else {
    // 如果文件不存在,则创建新文件并写入初始内容
    $data = [
        'count' => 1,
        'timestamp' => time()
    ];
    $content = json_encode($data);
    file_put_contents(SMS_DIR . $filename, $content);
}
// 发送短信验证码
?>

在上述代码中,将短信验证码的发送次数保存在一个JSON文件中,与客户端IP地址和手机号码相关联。代码中使用md5值来生成文件名,文件内容为JSON格式的字符串,包含发送次数和最后发送时间戳两个字段。


在发送短信验证码时,先根据请求参数生成文件名,然后检查是否存在对应的文件。如果文件存在,则读取文件内容,检查发送次数和时间戳是否超过限制。如果可以发送,则将发送次数加1,并将更新后的内容写回文件;如果发送次数已经达到限制,则提示用户稍后再试。如果文件不存在,则创建新文件,并写入初始的发送次数和时间戳。


基于文件系统的方式性能略低于Redis或其他内存型数据库,同时也更容易受到并发访问的影响。因此,建议在高并发场景下使用更为高效的Redis等缓存服务器。


@漏刻有时


相关文章
|
1天前
|
API 数据安全/隐私保护 UED
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
在掌握了鸿蒙系统的开发基础后,我挑战了蓝牙功能的开发。通过Bluetooth A2DP和Access API,实现了蓝牙音频流传输、设备连接和权限管理。具体步骤包括:理解API作用、配置环境与权限、扫描并连接设备、实现音频流控制及动态切换设备。最终,我构建了一个简单的蓝牙音频播放器,具备设备扫描、连接、音频播放与停止、切换输出设备等功能。这次开发让我对蓝牙技术有了更深的理解,也为未来的复杂项目打下了坚实的基础。
81 58
探索鸿蒙的蓝牙A2DP与访问API:从学习到实现的开发之旅
|
20天前
|
人工智能 API 语音技术
开发者福利,魔搭推出免费模型推理API,注册就送每日2000次调用!
今天,魔搭社区开放了免费的开源模型推理API,仅需使用魔搭的SDK Token,就可以通过简单的API请求探索各种强大的开源模型的使用。
|
4月前
|
JSON API 数据处理
Winform管理系统新飞跃:无缝集成SqlSugar与Web API,实现数据云端同步的革新之路!
【8月更文挑战第3天】在企业应用开发中,常需将Winform桌面应用扩展至支持Web API调用,实现数据云端同步。本文通过实例展示如何在已有SqlSugar为基础的Winform系统中集成HTTP客户端调用Web API。采用.NET的`HttpClient`处理请求,支持异步操作。示例包括创建HTTP辅助类封装请求逻辑及在Winform界面调用API更新UI。此外,还讨论了跨域与安全性的处理策略。这种方法提高了系统的灵活性与扩展性,便于未来的技术演进。
283 2
|
4月前
|
开发框架 缓存 前端开发
基于SqlSugar的开发框架循序渐进介绍(23)-- Winform端管理系统中平滑增加对Web API对接的需求
基于SqlSugar的开发框架循序渐进介绍(23)-- Winform端管理系统中平滑增加对Web API对接的需求
|
1月前
|
搜索推荐 数据挖掘 API
淘宝商品API接口的对接及收益
淘宝商品API接口是淘宝开放平台提供的数据服务,支持商品搜索、详情、评价等功能,帮助开发者快速获取商品数据,提升用户体验,降低运营成本,增强市场竞争力,并支持数据分析和业务决策。对接流程包括注册账号、获取API密钥、阅读文档、编写请求代码、发送请求、解析数据、错误处理和日志记录等步骤。通过实际案例,如价格比较网站、库存管理工具、个性化推荐系统等,展示了API接口的应用价值。
100 5
|
1月前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。
|
2月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
70 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
2月前
|
监控 安全 测试技术
如何确保API对接过程中的数据安全?
确保API对接过程中的数据安全至关重要。最佳实践包括:使用HTTPS协议、强化身份验证和授权、数据加密、输入验证、访问控制、限流限速、日志记录和监控、安全测试、数据脱敏、错误处理、API网关、Web应用程序防火墙(WAF)、审计和合规性。这些措施能有效提升API的安全性,保护数据免受恶意攻击和泄露风险。
|
2月前
|
自然语言处理 数据安全/隐私保护 iOS开发
ChatGPT使用学习(三):ChatGPT桌面版使用
本文介绍了ChatGPT桌面版,一个由OpenAI推出的独立桌面应用程序,支持离线使用、数据隐私保护和快速响应。用户界面友好,支持多语言交互。桌面版无需网络连接,保护用户数据隐私,并提供快速响应。用户可通过Github链接下载安装,使用谷歌账号登录。此外,OpenAI官方也发布了适用于macOS的桌面端应用,并向所有用户免费开放。
64 1
|
2月前
|
数据挖掘 数据库
ChatGPT在数据分析学习阶段的应用
ChatGPT在数据分析学习阶段的应用
50 6