station_id ? [$terminal->station_id] : []; $results = $this->searchService->search($query, $stationIds); if ($results->isEmpty()) { return ['context' => '', 'sources' => []]; } $context = ''; $sources = []; foreach ($results as $document) { $snippet = $this->extractSnippet($document); if (mb_strlen($context) + mb_strlen($snippet) > self::MAX_CONTEXT_LENGTH) { break; } $context .= $snippet . "\n\n"; $sources[] = [ 'title' => $document->title, 'id' => 'kb-doc-' . str_pad($document->id, 3, '0', STR_PAD_LEFT), ]; } return [ 'context' => trim($context), 'sources' => $sources, ]; } private function extractSnippet($document): string { $content = $document->getMarkdownContent() ?? $document->description ?? ''; if (mb_strlen($content) <= 500) { return "【{$document->title}】\n{$content}"; } return "【{$document->title}】\n" . mb_substr($content, 0, 500) . '...'; } }