amber-laravel/app/Http/Controllers/Api/ChatHistoryController.php

74 lines
1.9 KiB
PHP
Raw Normal View History

2024-07-24 17:16:41 +00:00
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Chat;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
class ChatHistoryController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Chat $chat)
{
return $this->success(
$chat->histories()->get()
);
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request, Chat $chat)
{
// 获取上一条记录
$last_history = $chat->histories()->orderBy('id', 'desc')->first();
// 如果存在
if ($last_history) {
// 如果上一条是 user
if ($last_history->role == 'user') {
// 不允许发送消息
return $this->badRequest('你已经回复过了,请等待 AI 响应。');
}
// 检查缓存是否存在
$last_stream_key = 'chat_history_id:'.$last_history->id;
// 如果存在
if (Cache::has($last_stream_key)) {
return $this->conflict('上一个流信息还没有获取,请等待一分钟后重试。');
}
}
$request->validate([
'message' => 'required',
]);
$chat->histories()->create([
'content' => $request->input('message'),
'role' => 'user',
]);
$random_id = Str::random(20);
$last_stream_key = 'chat_history_id:'.$last_history->id;
// 设置缓存
Cache::put($last_stream_key, $random_id, 60);
Cache::put("chat_history_stream_id:$random_id", $last_history->id, 60);
return $this->success([
'stream_url' => route('chat-stream', $random_id),
]);
}
public function stream(string $stream_id)
{
return $stream_id;
}
}