option('sid')); $pali = PaliSentence::where('book', $sid[0]) ->where('paragraph', $sid[1]) ->where('word_begin', $sid[2]) ->where('word_end', $sid[3]) ->value('text'); //获取nissaya $nissaya = Sentence::where('channel_uid', $this->option('nissaya')) ->where('book_id', $sid[0]) ->where('paragraph', $sid[1]) ->where('word_start', $sid[2]) ->where('word_end', $sid[3]) ->value('content'); //获取ai结果 $api = $this->getEngin($this->option('api')); if (!$api) { $this->error('ai translate no api'); return 1; } $json = $this->fetch($api, $pali, $nissaya); $this->info('ai translate', ['json' => $json]); //写入 return 0; } private function getEngin($engin) { $api = config('mint.ai.accounts'); $selected = array_filter($api, function ($value) use ($engin) { return $value['name'] === $engin; }); if (!is_array($selected) || count($selected) === 0) { return null; } return $selected[0]; } private function fetch($api, $origin, $nissaya = null) { $prompt = '翻译上面的巴利文为中文'; if ($nissaya) { $prompt = '根据下面的解释,' . $prompt; } $message = "{$origin}\n\n{$prompt}\n\n{$nissaya}"; $url = $api['api_url']; $param = [ "model" => $api['model'], "messages" => [ ["role" => "system", "content" => "你是翻译人工智能助手,bhikkhu 为专有名词,不可翻译成其他语言。"], ["role" => "user", "content" => $message], ], "temperature" => 0.3, ]; $response = Http::withToken($api['token']) ->post($url, $param); if ($response->failed()) { $this->error('http request error' . $response->json('message')); Log::error('http request error', ['data' => $response->json()]); return null; } else { return $response->json(); } } }