ChatGPT 業務効率化シリーズ
- ChatGPT業務効率化の方法を予備調査
- ChatGPTの作業効率を上げるためのプログラム開発の工夫と指示(MySQL文、PHP文の作成、JavaScriptの使い方、Pythonのやりとり)
- ChatGPT 開発要件と見積書を作成し、Excel 形式に変換する作業効率化
ChatGPT 作業効率向上: Xiaogetong 二次開発バッチ API ドッキング ソリューション
ChatGPT は、ユーザーが質問に迅速に回答し、情報を提供し、対話をスムーズに実行し、ユーザーの意図を正確に理解し、それに応じて応答するのに役立つリアルタイム対話生成モデルです。
ChatGPT モデルの利点は、生成されたテキストの自然性と一貫性が非常に優れており、明らかな論理エラーや文法エラーがないことです。さらに、ChatGPT のトレーニング データ セットは豊富で多様であり、ほとんどの問題シナリオに対処できます。事前トレーニング済みモデルを使用するため、さまざまなアプリケーション シナリオに合わせた質問応答モデルに迅速にカスタマイズでき、開発効率が大幅に向上します。ただし、ChatGPT にはいくつかの欠点もあります。事前学習済みモデルに基づく生成モデルであるため、従来のルールエンジンのように回答ロジック処理を調整することができず、意味のない回答や矛盾した回答が生成されてしまいます。
最近、Goose Communication プロジェクトの実際の開発プロセスにおいて、「ChatGPT 指向開発」が使用される頻度が増えています。関連するプロセスが次のように記録されます。
1. プロジェクトの要件
Leaning 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の配列、リクエスト数の上限、リクエストパラメータは図のとおりです。
現状では上記の制約のもと、ユーザーが指定したリソースの学習記録を一括で取得する必要があります-Xiaogetong の API 条件について言及しました。php には処理を遅らせる完璧なアルゴリズムがあり、API が制限を超えたり、リクエストが頻繁に発生したりしてトークンが無効になることが容易に発生します。
キュー更新を実装するにはどうすればよいですか?
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秒,以模拟分时输出
}
?>
睡眠(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() 関数は、出力される配列、現在のバッチ番号、各バッチで出力される要素の数という 3 つのパラメーターを受け取ります。この関数では、まずバッチ数と出力要素の数に従って出力される要素の現在の配列を計算し、次に現在のバッチの要素を出力し、setTimeout() 関数を通じて関数を再帰的に呼び出して、次のバッチの要素。
ここでの出力は、要素のバッチを 1 秒ごとに出力することであり、出力時間間隔は特定のニーズに応じて調整できます。
2. バッチ修復 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. 修理ユニットの出発 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));
}
3. 開発中に遭遇した問題
1. クエリフィールドが空の SQL ステートメント
mysql で空ではないフィールドをフィルタリングするクエリ ステートメントを作成する方法
MySQL では、特定のフィールドが空ではないというクエリ ステートメントをフィルタリングするIS NOT NULL
ために。たとえば、フィールドmy_table
を含むという名前のテーブルがあり、フィールドが空ではないデータを検索するには、次の SQL クエリ ステートメントを使用できます。field1
field1
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) のみが実際の 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 が期限切れにならないように設定するには、PHP が処理できる最大日付である 2038 年 1 月 19 日など、長い有効期限を指定できます。
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. SMS認証コードを実現するコードとは何ですか
Redis に加えて、SMS 検証コード フロー制御を実装する方法は他にもたくさんあります。ファイル システムに基づくサンプル コードは次のとおりです。
<?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);
}
// 发送短信验证码
?>
上記のコードでは、SMS 確認コードの送信数がクライアントの IP アドレスと携帯電話番号に関連付けられた JSON ファイルに保存されます。md5 値はファイル名を生成するコードで使用され、ファイルの内容は、送信回数と最終送信タイムスタンプの 2 つのフィールドを含む JSON 形式の文字列です。
SMS 認証コードを送信するときは、まずリクエスト パラメーターに従ってファイル名を生成し、次に対応するファイルが存在するかどうかを確認します。ファイルが存在する場合は、ファイルの内容を読み込み、送信回数やタイムスタンプが制限を超えていないか確認してください。送信できた場合は送信回数に1を加えて更新内容をファイルに書き戻し、送信回数が制限に達した場合は後で再試行するようユーザーに促します。ファイルが存在しない場合は、新しいファイルを作成し、最初の送信回数とタイムスタンプを書き込みます。
ファイル システム ベースの方法のパフォーマンスは、Redis や他のメモリ ベースのデータベースよりもわずかに低く、同時アクセスの影響も受けやすくなります。したがって、同時実行性の高いシナリオでは、Redis などのより効率的なキャッシュ サーバーを使用することをお勧めします。
@リークタイムも時々あります