Files
tougao/application/api/job/FillExpertCountry.php
2026-08-03 18:06:16 +08:00

40 lines
1.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace app\api\job;
use think\queue\Job;
use app\common\ExpertFinderService;
/**
* 队列任务:用大模型从 affiliation 推断国家,写入 expert.country_id / country。
* 处理完当前专家后,自动找下一个推入同一队列(链式执行),直到全部处理完。
*
* 模型地址:默认不传 chat_url由 ExpertFinderService::fillExpertCountry
* 按 affiliation 长度在本地/远程模型间动态选择;显式传入 chat_url 时强制使用。
*
* 单条任务受 LLM 响应时间影响(一般 2-10s常驻 worker 由 QueueJob
* 在进程超 6h 或遇致命 DB 错误时主动 exit(1) 让 supervisor 拉起新进程。
*/
class FillExpertCountry
{
public function fire(Job $job, $data)
{
$expertId = intval(isset($data['expert_id']) ? $data['expert_id'] : 0);
$affiliation = isset($data['affiliation']) ? trim((string)$data['affiliation']) : '';
$queue = isset($data['queue']) ? (string)$data['queue'] : 'FetchExperts';
// 留空则每条任务按上下文长度自行选模型,不要把上一条的 URL 固定传下去
$chatUrl = isset($data['chat_url']) ? (string)$data['chat_url'] : '';
$service = new ExpertFinderService();
if ($expertId && $affiliation !== '') {
$service->fillExpertCountry($expertId, $affiliation, $chatUrl);
}
$job->delete();
// 链式:下一条也不透传固定 URL继续按条动态选模型
// $service->enqueueNextCountryFill(5, $queue, '');
}
}