This commit is contained in:
2026-05-07 01:40:58 +08:00
parent 093ce2e8bc
commit 549b706fcc
30 changed files with 2159 additions and 53 deletions
+38 -3
View File
@@ -9,6 +9,8 @@ return [
* - LLM_API_KEY
* - LLM_CHAT_MODEL
* - LLM_EMBEDDING_MODEL
* - BIGMODEL_API_BASE_URL
* - BIGMODEL_API_KEY
*/
'default' => [
'base_url' => getenv('LLM_API_BASE_URL') ?: 'https://api.openai.com/v1',
@@ -48,10 +50,43 @@ return [
],
'embedding' => [
'model' => getenv('LLM_EMBEDDING_MODEL') ?: 'text-embedding-3-small',
'batch_size' => (int) (getenv('LLM_EMBEDDING_BATCH_SIZE') ?: 64),
'base_url' => getenv('BIGMODEL_API_BASE_URL') ?: 'https://open.bigmodel.cn/api/paas/v4',
'api_key' => getenv('BIGMODEL_API_KEY') ?: (getenv('LLM_EMBEDDING_API_KEY') ?: getenv('LLM_API_KEY')),
'model' => getenv('LLM_EMBEDDING_MODEL') ?: 'embedding-3',
'batch_size' => min(64, max(1, (int) (getenv('LLM_EMBEDDING_BATCH_SIZE') ?: 32))),
'dimensions' => getenv('LLM_EMBEDDING_DIMENSIONS') !== false
? (int) getenv('LLM_EMBEDDING_DIMENSIONS')
: null,
: 2048,
'timeout' => (int) (getenv('LLM_EMBEDDING_TIMEOUT') ?: 60),
'connect_timeout' => (int) (getenv('LLM_EMBEDDING_CONNECT_TIMEOUT') ?: 10),
'retry' => [
'enabled' => (getenv('LLM_EMBEDDING_RETRY_ENABLED') ?: 'true') !== 'false',
'max_attempts' => (int) (getenv('LLM_EMBEDDING_RETRY_MAX_ATTEMPTS') ?: 3),
'base_delay_ms' => (int) (getenv('LLM_EMBEDDING_RETRY_BASE_DELAY_MS') ?: 1500),
'max_delay_ms' => (int) (getenv('LLM_EMBEDDING_RETRY_MAX_DELAY_MS') ?: 10000),
'retry_statuses' => [429, 500, 502, 503, 504],
'retry_error_codes' => ['1302', '1303', '1304', '1305', '1306', '1307', '1308'],
],
],
'search_keywords' => [
'enabled' => (getenv('LLM_SEARCH_KEYWORDS_ENABLED') ?: 'true') !== 'false',
'model' => getenv('LLM_SEARCH_KEYWORDS_MODEL') ?: (getenv('LLM_METADATA_MODEL') ?: (getenv('LLM_CHAT_MODEL') ?: 'gpt-4.1-mini')),
'temperature' => (float) (getenv('LLM_SEARCH_KEYWORDS_TEMPERATURE') ?: 0.1),
'max_tokens' => (int) (getenv('LLM_SEARCH_KEYWORDS_MAX_TOKENS') ?: 1920),
'timeout' => (int) (getenv('LLM_SEARCH_KEYWORDS_TIMEOUT') ?: 12),
'connect_timeout' => (int) (getenv('LLM_SEARCH_KEYWORDS_CONNECT_TIMEOUT') ?: 5),
'response_format' => ['type' => 'json_object'],
'thinking' => [
'type' => getenv('LLM_SEARCH_KEYWORDS_THINKING') ?: 'disabled',
],
'retry' => [
'enabled' => (getenv('LLM_SEARCH_KEYWORDS_RETRY_ENABLED') ?: 'true') !== 'false',
'max_attempts' => (int) (getenv('LLM_SEARCH_KEYWORDS_RETRY_MAX_ATTEMPTS') ?: 3),
'base_delay_ms' => (int) (getenv('LLM_SEARCH_KEYWORDS_RETRY_BASE_DELAY_MS') ?: 1500),
'max_delay_ms' => (int) (getenv('LLM_SEARCH_KEYWORDS_RETRY_MAX_DELAY_MS') ?: 10000),
'retry_statuses' => [429],
'retry_error_codes' => ['1302', '1303', '1304', '1305', '1306', '1307', '1308'],
],
],
];
+6
View File
@@ -40,4 +40,10 @@ return [
'refresh' => getenv('OPENSEARCH_BULK_REFRESH') ?: 'false',
'chunk_size' => (int) (getenv('OPENSEARCH_BULK_CHUNK_SIZE') ?: 500),
],
'vector' => [
'dimensions' => (int) (getenv('OPENSEARCH_VECTOR_DIMENSIONS') ?: 2048),
'space_type' => getenv('OPENSEARCH_VECTOR_SPACE_TYPE') ?: 'cosinesimil',
'engine' => getenv('OPENSEARCH_VECTOR_ENGINE') ?: 'lucene',
],
];
+12
View File
@@ -64,5 +64,17 @@ return [
'count' => 1,
'reloadable' => true,
'constructor' => []
],
'proofdb_task_dispatcher' => [
'handler' => app\process\ProofDbTaskDispatcher::class,
'count' => 1,
'reloadable' => true,
'constructor' => []
],
'proofdb_task_worker' => [
'handler' => app\process\ProofDbTaskWorker::class,
'count' => 1,
'reloadable' => true,
'constructor' => []
]
];
+13
View File
@@ -12,4 +12,17 @@ return [
'block_timeout' => (int) (getenv('AI_METADATA_QUEUE_BLOCK_TIMEOUT') ?: 5),
'idle_sleep_seconds' => (int) (getenv('AI_METADATA_QUEUE_IDLE_SLEEP_SECONDS') ?: 1),
],
'tasks' => [
'pending' => 'proofdb:tasks:pending',
'delayed' => 'proofdb:tasks:delayed',
'failed' => 'proofdb:tasks:failed',
'retry_prefix' => 'proofdb:tasks:retry:',
'error_prefix' => 'proofdb:tasks:error:',
'max_retries' => (int) (getenv('PROOFDB_TASK_QUEUE_MAX_RETRIES') ?: 5),
'base_delay_seconds' => (int) (getenv('PROOFDB_TASK_QUEUE_BASE_DELAY_SECONDS') ?: 60),
'block_timeout' => (int) (getenv('PROOFDB_TASK_QUEUE_BLOCK_TIMEOUT') ?: 5),
'idle_sleep_seconds' => (int) (getenv('PROOFDB_TASK_QUEUE_IDLE_SLEEP_SECONDS') ?: 1),
'dispatcher_interval_seconds' => (int) (getenv('PROOFDB_TASK_DISPATCHER_INTERVAL_SECONDS') ?: 15),
'dispatcher_batch_size' => (int) (getenv('PROOFDB_TASK_DISPATCHER_BATCH_SIZE') ?: 20),
],
];
+1 -1
View File
@@ -14,7 +14,7 @@
return [
'default' => [
'password' => 'qi2005112',
'password' => 'proofdb',
'host' => '127.0.0.1',
'port' => 6379,
'database' => 0,
+3 -3
View File
@@ -15,7 +15,7 @@
use Webman\Route;
Route::post('/api/articles/import', [app\controller\Api\ArticleImportController::class, 'import']);
Route::post('/api/search/fulltext', [app\controller\Api\SearchController::class, 'fulltext']);
Route::post('/api/search/vector', [app\controller\Api\SearchController::class, 'vector']);
Route::post('/api/search/hybrid', [app\controller\Api\SearchController::class, 'hybrid']);