Compare commits
2 Commits
3bfc0e358f
...
2e252eb70e
| Author | SHA1 | Date | |
|---|---|---|---|
| 2e252eb70e | |||
| d16626d121 |
@@ -40,37 +40,60 @@ class BaccaratPredictionService
|
||||
/**
|
||||
* 调用 AI 接口预测百家乐下注方向
|
||||
*
|
||||
* 将近期路单格式化后发给 AI,解析其返回的预测结果。
|
||||
* 若 AI 不可用或解析失败,返回 null 以便调用方回退本地逻辑。
|
||||
* 优先使用 PREFERRED_MODEL 对应的厂商,调用失败时自动按
|
||||
* sort_order 依次尝试其余已启用厂商(与 AiChatService 故障转移逻辑一致)。
|
||||
* 所有厂商均失败时返回 null,由调用方回退本地路单决策。
|
||||
*
|
||||
* @param array<int, string> $recentResults 近期已结算路单('big'|'small'|'triple',从最新到最旧)
|
||||
* @return string|null 预测结果:'big'|'small'|'triple',或 null(AI 不可用)
|
||||
* @return string|null 预测结果:'big'|'small'|'triple',或 null(AI 全部不可用)
|
||||
*/
|
||||
public function predict(array $recentResults): ?string
|
||||
{
|
||||
// 优先使用指定模型,找不到则回退默认配置
|
||||
$provider = AiProviderConfig::findByModel(self::PREFERRED_MODEL)
|
||||
?? AiProviderConfig::getDefault();
|
||||
// 获取所有已启用厂商,PREFERRED_MODEL 对应的排在最前面
|
||||
$providers = AiProviderConfig::getEnabledProviders();
|
||||
|
||||
if (! $provider) {
|
||||
Log::warning('百家乐 AI 预测:无可用 AI 厂商配置,跳过 AI 预测');
|
||||
if ($providers->isEmpty()) {
|
||||
Log::warning('百家乐 AI 预测:无任何已启用的 AI 厂商配置');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// 将首选模型提到队列最前(若存在)
|
||||
$preferred = $providers->firstWhere('model', self::PREFERRED_MODEL);
|
||||
if ($preferred) {
|
||||
$providers = $providers->reject(fn (AiProviderConfig $p) => $p->model === self::PREFERRED_MODEL)
|
||||
->prepend($preferred)
|
||||
->values(); // 重置索引,消除 IDE 类型推断警告
|
||||
}
|
||||
|
||||
$prompt = $this->buildPredictionPrompt($recentResults);
|
||||
|
||||
try {
|
||||
return $this->callProvider($provider, $prompt);
|
||||
} catch (\Exception $e) {
|
||||
Log::warning('百家乐 AI 预测调用失败,将使用本地决策兜底', [
|
||||
'provider' => $provider->name,
|
||||
'model' => $provider->model,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
// 依次尝试每个厂商,失败则切换下一个
|
||||
foreach ($providers as $provider) {
|
||||
try {
|
||||
$result = $this->callProvider($provider, $prompt);
|
||||
Log::info('百家乐 AI 预测成功', [
|
||||
'provider' => $provider->name,
|
||||
'model' => $provider->model,
|
||||
'result' => $result,
|
||||
]);
|
||||
|
||||
return null;
|
||||
return $result;
|
||||
} catch (\Exception $e) {
|
||||
Log::warning('百家乐 AI 预测厂商调用失败,尝试下一个', [
|
||||
'provider' => $provider->name,
|
||||
'model' => $provider->model,
|
||||
'error' => $e->getMessage(),
|
||||
]);
|
||||
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// 所有厂商均失败
|
||||
Log::error('百家乐 AI 预测:所有 AI 厂商均不可用,将使用本地决策兜底');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,7 +248,7 @@ PROMPT;
|
||||
): void {
|
||||
try {
|
||||
AiUsageLog::create([
|
||||
'user_id' => 0, // AI 系统行为,无对应用户
|
||||
'user_id' => null, // AI 系统行为,无对应用户
|
||||
'provider' => $config->provider,
|
||||
'model' => $config->model,
|
||||
'action' => 'baccarat_predict',
|
||||
|
||||
Reference in New Issue
Block a user