火山引擎、エージェント駆動の検索自迭代技術をオープンソース化
本文の状態
日本語全文を表示中
詳細モードで約17分の本文を読めます。
同じ出来事の情報源
この情報源を基点に整理
ByteDance Engineering
火山引擎が検索結果の自動改善を実現する「Agent 駆動型検索自迭代技術」をオープンソース化し、専門家の手作業に依存していた調優プロセスを自動化する新アプローチを発表した。
AI深層分析を開く2026年8月1日 00:35
AI深層分析
キーポイント
検索パラメータ調整の複雑性解消
検索システムの調優では、複数のパラメータが互いに影響し合うため、単一の変更が結果に与える影響を予測するのが困難である。
Agent による自動実験と検証
火山引擎は「vs search tune」を通じて、Agent が候補戦略の生成から実験計画、実行、評価までを一連のワークフローとして自動化する仕組みを提供する。
実証された性能向上効果
段階的なオフライン評価において、自動調優戦略は NDCG@20 で最大 13.50%、Precision@10 で最大 21.17% の向上を示した。
人間による最終確認の維持
このシステムは Agent が直接オンライン設定を変更するのではなく、生成された候補設定を人間が検証・承認してから適用する安全なループを構築している。
CLIによる安定した実行と可復現性の確保
Agent は長期間の調優タスクにおいてスクリプトを一時的に作成するのではなく、CLI を用いて安定した命令と機械可読な成果物を生成することで、ネットワーク障害やプロセス中断による結果消失を防ぐ。
重要な引用
「自迭代」は Agent が問題を発見し仮説を立てて実験を行い、結果を検証して設定を出力する一連の作業を自動化することである
「この発表が重要なのは、検索システムの調優においてパラメータ間の複雑な相互作用を人間が手動で管理する限界を超え、データ駆動型の継続的改善を実現したからだ」
「生産環境への変更には明確な人為的な境界を残す」
CLI の価値は、把这些长任务变成稳定命令和机器可读的运行产物,让 Agent 决定“做什么”,让执行层保证“可复现地做完”。
編集コメントを表示
編集コメント
検索システムの品質向上を自動化するアプローチとして、Agent の活用が具体的な数値効果を示した点は注目すべきである。専門家の知見と AI の実行力を組み合わせたハイブリッドな改善フローは、実務現場での導入可能性が高いと言える。
Source Article
元記事を日本語で読む
本文に関係しない購読案内、埋め込み通知、サイト内プロモーションは除いています。
火山引擎 AI 搜索 | 2026-07-29 18:00 北京
能够调用搜索功能,只是 Agent 实现智能搜索的第一步。真正的挑战在于:当搜索结果不理想时,系统能否自动找到改进方向,并通过多轮实验持续优化搜索效果?
假设你刚刚上线了一款商品搜索应用:用户查询品牌、品类或型号时结果基本正常,但一旦输入“适合通勤的轻便双肩包”,搜索结果就开始跑偏。
此时若提高语义召回权重,长句的理解能力确实会提升,但精确匹配型号词的能力却可能下降;若提高关键词匹配的门槛,前几条结果的精准度会上去,零结果的数量反而会增加;若扩大候选集范围,召回率提高了,噪声和延迟也可能随之上升。
许多搜索项目都会陷入类似的调优困境。问题不在于没有参数可调,而在于这些参数彼此牵制:一次看似简单的修改,往往同时影响召回率、排序质量、零结果率和响应延迟。要判断一组策略是否真的有效,还需要准备 Query 集合、批量搜索任务、相关性标注数据、离线评测体系以及 Bad Case 分析。
过去,这套工作完全依赖搜索专家反复试验。每一轮调整虽然都能完成,但很难做到低成本、可复现地持续迭代。
于是我们开始思考:既然 Agent 已经能够理解目标并调用搜索功能,它能否再向前一步——根据当前数据和 Query 分布,自动提出候选策略,通过实验验证收益,并向开发者解释“为什么这组配置更好”?
围绕这一目标,火山引擎在开源项目 SearchCLI 中推出了 vs search tune。开发者只需提供应用、数据集和 Query Set,Agent 即可调用该工具完成 Query 校验、实验规划、候选策略生成、批量搜索执行、相关性标注、指标计算、结果对比以及候选场景创建等一系列工作。
在服饰商品、综合商品和图片内容这三个业务数据集的阶段性离线评测中,采用自动调优策略后,NDCG@20 提升了 11.66%~13.50%,Precision@10 最高提升达 21.17%。
这一结果首先说明了一个重要事实:在底层模型和数据保持不变的前提下,仅针对具体业务的 Query 分布重新组织召回模式、调整关键词与语义权重、设定匹配门槛及候选规模,依然能释放出可观的效果空间。当然,上述为阶段性离线测试结果,实际收益仍取决于 Query 的代表性、标签质量以及业务数据的分布情况。
我们将这套能力称为:Agent 驱动的搜索自迭代。
所谓“自迭代”,并非让 Agent 绕过管控直接修改线上策略,而是将“发现问题—提出假设—分配评测预算—筛选候选—验证收益—输出候选配置”这一系列动作,转化为可重复运行且结果可审阅的闭环流程。
接下来,我们将拆解这套闭环如何运转,以及背后的 SPA 策略优化框架如何在有限的搜索和标注预算下,把更多实验机会留给真正有潜力的策略。
一、从“会搜索”到“会把搜索变好”
一个 AI 搜索系统通常包含召回模式、关键词与语义权重、关键词匹配门槛、候选集规模等配置。参数越多,适配不同场景的能力越强,但人工调优的门槛也随之提高。
真正困难的并非修改某一个参数,而是持续回答:当前策略在哪些 Query 上表现不佳?应该加强关键词还是语义召回?平均指标的提升是否掩盖了某类 Query 的退化?新策略是否会增加零结果和延迟?
搜索自迭代将这套专家工作流转化为一个反馈闭环:
Query 与业务数据 → 评测当前效果 → 生成候选策略 → 执行搜索与标注 → 比较指标和 Bad Case → 输出候选配置 → 人工确认后进入验证
这里的“自”指流程可由 Agent 持续驱动;“迭代”指每一轮都有 Query、标签和指标作为证据。生产变更仍保留明确的人为边界。
二、为什么是 Agent + Skills + CLI?
搜索调优既包含上下文判断,也涉及领域知识和大量确定性执行。我们将这三类工作拆给不同层次:
例えば、Agent はまずユーザーのクエリが実在するかを判断します。もしクエリが存在しない場合は、合成されたクエリを生成し、ユーザーに確認を求めます。コストのかかる評価を行う前には必ず Plan(計画)を実行し、戦略の数やクエリの数、最大ラベル数を確定させる必要があります。最終的に戦略を適用する際も、まずは dry-run(事前実行)を行い、その結果をユーザーが確認した上で候補となる Scene の作成を許可します。
一度の完全なチューニングには、数千回の検索リクエストと大量の Query-item 関連性判断が含まれる可能性があります。もし Agent が都度スクリプトを組み立てるような方式だと、ネットワークの揺らぎやレート制限、プロセスの中断などが原因で結果が失われてしまうリスクがあります。CLI の価値は、こうした長期間にわたるタスクを安定したコマンドと機械可読な実行成果物に変換することにあります。これにより、Agent は「何をすべきか」を決定し、実行層は「再現性を持って完了させること」を保証します。
- 自迭代(自己改善)の仕組み
最初のステップは Query Set の準備です。実際の検索ログやカスタマーサポートからの問い合わせ、そして人手で整理された典型的なクエリが最も価値があります。もしこれらがすぐに用意できない場合は、データセットのサンプルから合成クエリを生成することも可能です。ただしその際は、まずサンプルとタイプ分布を示し、ユーザーにそれらが真の意図を代表しているかどうかを確認してもらう必要があります。
2 つ目のステップは検証と計画です。validate(検証)機能は、フォーマット、重複するクエリ、タイプの偏り、そして sourceItemIds のカバレッジをチェックします。一方、plan(計画)機能は、検索や LLM を呼び出すことなく事前に戦略の数、検索リクエスト数、最大ラベル数を計算します。ユーザーは実際に予算を投じる前に、Query Set を絞り込んだり、候補を減らしたり、低コストのラベルを選択したりできます。
3 つ目のステップは実行とレビューです。CLI は各候補に対してバッチ検索を実行し、まず Source-item の銀標(正解データ)を使って素早くフィルタリングするか、あるいは LLM Judge を用いて意味的な関連性を判断します。その後、NDCG、MRR、Precision、ゼロ結果率、レイテンシなどを計算します。レポートには推奨戦略だけでなく、各クエリの詳細も含まれており、Agent が収益がどこから生まれたのかを説明したり、性能の低下がないかを確認したりするのに役立ちます。
最後に、Agent は異なる Run(実行)を比較し、承認された推奨設定を候補となる Scene として転記します。この一連のプロセスは「query-generate → validate → plan → run → report → compare → apply」に対応しており、各ステップには構造化された入力・出力とチェックポイントが用意されています。
三、SPA:予算をより価値のある戦略評価に集中させる
検索チューニングは一見するとパラメータ最適化のように見えますが、実際には評価コストが高く、フィードバックにノイズが含まれ、パラメータに制約があり、結果の説明可能性と実装性が求められる実験設計の問題です。
候補となる戦略の数、クエリの数、TopK が増加した場合、最悪ケースでのラベル数はおよそ以下の式で表されます:
strategy_count × query_count × topK
したがって、アルゴリズムの核心任務は、可能な限り多くの組み合わせを生成することではなく、「どの戦略を先に評価すべきか」「いつ早期に淘汰すべきか」「次の探索方向はどこか」、そして「十分な証拠が揃ったと判断していつ停止すべきか」を決定することにあります。
SPA(Strategy Population Annealing)では、検索戦略をドメインの意味を持つゲノムとしてエンコードします。専門家の事前知識を用いて初期個体群を構築し、マルチファジリティ評価、多角的な Elite 選抜、意味的な進化、そして退火メカニズムによる予算配分を行います。最後に堅牢な統計手法を用いて、安定性が高く説明可能な候補戦略を選出します。
1. Genome:搜索参数绝非简单的数值向量
{
"user_defined_recall_mode": "KeywordSemantic",
"dense_weight": 0.25,
"text_weight": 0.75,
"query_keyword_match_percent": 0.3,
"max_retrieved_num": 100
}这组参数结构复杂:既包含枚举值,也有近似连续的数值,还涉及请求侧的动态参数。更关键的是存在诸多约束条件——例如 dense_weight 与 text_weight 必须归一化,且不同召回模式下参数的具体含义也各不相同。
因此,SPA(搜索参数自动化工具)在交叉、变异和移动操作时,必须先深入理解这些语义信息。生成的新配置还需经过裁剪、归一化、合法性校验及去重处理,最终转化为可执行的系统配置。
第一阶段我们聚焦于「仅相似度优化」(similarity-only):只针对召回模式、关键词与语义的权重分配、关键词匹配比例以及最大候选数进行调优,暂不调整 Rerank(重排序)、个性化推荐、热度加权或运营规则。这样做的目的是确保效果的变化能明确归因于文本相关性策略本身的改进。
2. 初始种群:覆盖搜索行为特征,而非平均撒点
传统的 Matrix Optimizer 会在若干固定档位上组合参数。这种方法虽然简单稳定,但存在明显缺陷:不同参数的组合未必能产生差异化的搜索行为,有限的预算极易被大量相似或低价值的组合所占用。
SPA 的初始种群设计则更具策略性,由当前在线策略、默认基线(Baseline)、边界策略(如仅关键词 KeywordOnly / 仅语义 SemanticOnly)、粗粒度矩阵搜索结果以及行业先验知识共同构成。具体而言:
- 商品搜索场景可保留更多以关键词为主导的混合策略;
- 知识库问答场景则应保留更多语义增强的分支。
算法从具有实际意义的行为区域出发,而非从零散的随机点开始探索。
当前开源的首版已实现了这一层逻辑:基于多个代表性中心点,建立粗、细两种搜索半径,生成边界、中心和邻域候选解,随后执行合法化与去重。其中,粗粒度邻域用于判断优化方向,细粒度邻域则用于比较局部差异。
3. 多保真评测:先排除错误方向,再提升置信度
完整的评测体系分为三层设计:
如果一个策略连生成 Query 的源 Item(原始商品)都无法召回,就没有必要继续为其 Top20 结果支付昂贵的 LLM(大语言模型)标注成本。反之,Fast Pass(快速通道)的高分也不能直接判定胜出:它必须证明收益并非仅集中在标题改写等少数特定 Query 类型上。
4. 多视角精英策略:保留一条前沿策略
単に平均 NDCG で上位 N を選定するのは危険です。ある戦略は短語のクエリでは強力でも、自然言語クエリでは著しく性能が低下する可能性があります。一方で、平均スコアがわずかに低い戦略であっても、ゼロ結果率やレイテンシ、クエリタイプごとのパフォーマンスにおいてより安定しているケースがあります。
そのため SPA(Search Population Algorithm)は、Global Best(全体最適)、Query-Type Best(クエリタイプ別最適)、Stable Best(安定性重視)、Low-Latency Best(低遅延重視)、Low-Zero-Result Best(ゼロ結果率低減)、Baseline-Improver(ベースライン改善型)、そして十分な差異を持つ Diverse Candidate(多様な候補)の 7 つを同時に保持します。各 Elite は「なぜこの戦略がさらに予算を消費する価値があるのか」という問いに答える必要があります。これにより、単一のランキングよりもはるかに効果的に、個体群の早期収束を防ぐことができます。
- セマンティックな進化と種群の冷却(アニーリング)
次世代の候補は 3 つの操作によって生成されます。「交叉」では、2 つの Elite から検証済みの有効な構造を組み合わせます。例えば、戦略 A のキーワードやセマンティック重み付けと、戦略 B のキーワード閾値を融合させるようなケースです。「局所変異」では、優秀な戦略の周辺で重みや候補数、マッチング比率などを微調整します。「方向移動」は、候補をグローバル最適解や特定のクエリタイプにおけるローカル最適解へと近づけるための操作です。
これらの操作が単に JSON をランダムに組み合わせているわけではありません。例えば、キーワード閾値が高すぎてゼロ結果が増加した場合は、次世代で閾値を下げる方向へ調整します。また、候補数を 100 から 200 に増やしても性能向上が見られず、レイテンシだけが増大する場合は、検索規模を小さくする方向へと収束させます。
冷却温度(アニーリング温度)は探索の幅を制御します。初期段階では温度が高く、わずかに劣るが差異の大きい戦略も許容します。中期には Elite の周辺で交叉と変異を行いながら、境界領域のプローブも維持します。後期になると温度を下げて、高価値な領域での微調整に集中します。単点のシミュレーテッド・アニーリングとは異なり、SPA は複数の戦略分岐を同時に保持するため、ローカル最適解から脱出できると同時に、一度のランダム移動によって大きく逸れるリスクも低減されます。
- 頑健性の確保:一発の高スコアに騙されない
RobustScore(頑健性スコア)は以下の式で計算されます。
NDCG@20
+ α × MRR@10
- β × zero_result_rate
- γ × latency_penalty
- δ × query_type_variance
- ε × confidence_interval_width
NDCG は全体としてのソート品質を、MRR は最初の関連結果の位置を重視して評価します。ゼロ結果率とレイテンシは実運用上の制約であり、クエリタイプごとの分散(Variance)は「一部のタイプでのみ性能が高い」戦略をペナルティとして扱います。信頼区間は Bootstrap 法によって算出されます。クエリセットに対して多次再サンプリングを行い、平均値が高くても信頼区間が広い場合、それは単にその特定のクエリセットで偶然良い結果が出ただけである可能性を示唆します。
つまり、完全な SPA が目指すのは、一度の実験における最高スコアではなく、クエリの分布や評価ノイズが存在する状況下でも安定して機能する戦略です。
四、実験結果
自動チューニング戦略とデフォルト戦略を比較したところ、3 つの異なるビジネスデータセットにおいて以下の改善が確認されました。
- NDCG@20:11.66% ~ 13.50% の向上
- NDCG@10:9.56% ~ 15.08% の向上
- MRR@10:7.74% ~ 14.95% の向上
- Precision@10:7.36% ~ 21.17% の向上
五、アルゴリズムを実用化するための CLI エンジニアリング層
アルゴリズムが「何を評価すべきか」を決定する一方で、エンジニアリング層は「実験をいかに安定的に完了させるか」を担います。SearchCLI は主に 4 つの能力を蓄積・提供しています。
Plan(計画):まず実験コストを見積もります。「vs search tune plan」コマンドを実行すると、実際の検索や LLM の呼び出しを行わずに、クエリ数、候補戦略数、予想される検索リクエスト数、最大ラベル付け量を事前に提示します。これにより、Agent は高コストなタスクを開始する前に範囲を絞り込んだり、ラベルソースを調整したりすることが可能になります。
制御された並行処理:長時間かかるタスクを小分けにします。現在のオープンソース実装では、評価プロセスを「戦略 × クエリ」の単位で分割し、バッチサイズを制限したスケジューリングを採用しています。各バッチは Promise.allSettled を用いて結果を集約するため、1 つのタスクが失敗しても、そのバッチ内で完了したデータは失われず、リクエスト数が無限に増大することもありません。タスクキューとワーカープールについては、今後の拡張・進化の余地を残しています。
ラベルのキャッシュ:LLM の判断を再利用可能な資産に
異なる戦略で同じアイテムが頻繁に検索されるケースがあります。SearchCLI では、キャッシュキーにデータセット、クエリ、Item 内容、そして評価設定(Judge 設定)のすべてを含めています。これらすべての要素が一致した場合のみキャッシュが利用され、コンテンツや評価基準が変われば自動的に旧ラベルが無効化されます。この仕組みにより、コスト削減を実現しつつ、過去の結果を誤って再利用するリスクを防ぎます。
チェックポイントと再開機能:中断から続きから実行可能
CLI は、実行状態、検索結果、使用済みのラベル、失敗記録、中間指標、性能サマリーなどを継続的に保存します。タスクが中断しても、元の Run ID を指定することで未完了部分をそのまま引き継ぎ、既に完了した検索やラベリングのコストを再支払いする必要はありません。
最終的な適用(apply)にも安全策を設けています:まず dry-run で設定内容を確認し、ユーザーの承認を得てから新しい候補シーンを追加するだけで、デフォルトのエントリーポイントへの自動切り替えは行われません。自動化によって削減されるのは反復作業であり、人間の業務判断が不要になるわけではありません。
六、クイックスタート
SearchCLI は Node.js 20 以降を必要とし、Apache-2.0 ライセンスでオープンソース化されています。CLI と Viking Skills のインストール手順は以下の通りです。
git clone git@github.com:volcengine/SearchCLI.git vs
cd vs
bash ./scripts/install.sh
npx skills add "git@github.com:volcengine/SearchCLI.git" -y -g
vs auth login
vs doctor --json
Agent は以下のコマンドでチューニングを実行できます:
vs search tune validate --queries ./queries.jsonl --json
vs search tune plan \
--application-id \
--dataset-id \
--queries ./queries.jsonl \
--profile similarity-only \
--optimizer spa \
--json
vs search tune run \
--application-id \
--dataset-id \
--queries ./queries.jsonl \
--profile similarity-only \
--optimizer spa \
--label-source llm \
--json
vs search tune report --run-id --json
プロジェクトの GitHub リポジトリ:https://github.com/volcengine/SearchCLI
結び
Agent が主流となる時代、検索システムが直面する課題は、「十分な数の戦略パラメータを提供できるか」から、「現在のデータとクエリに基づいて、より適切な戦略を継続的に見つけ出せるか」へと変化しています。
SearchCLI が示す答えは、Skills で検索の専門知識を蓄積し、CLI で確定的な実験を担い、SPA(Search Performance Analyzer)で評価予算の有効性を高め、Agent によってこれらを検証可能なクローズドループに組織化することです。
「呼び出し可能」から「評価可能」へ、「設定可能」から「反復可能」へ。
これが、私たちが Agent ドライブ型の検索自迭代技術をオープンソース化した初衷です。
今後、Viking AI 検索はさらに多くの機能を追加し、皆様と共に検索をよりシンプルにし、自迭代の取り組みを継続して前進させていきます!
WeChat で開くにはこちらへ
原文を表示
Viking AI 搜索 2026-07-29 18:00 北京
image
image
会调用搜索,只是 Agent 搜索能力的第一步。更难的是:当结果不好时,它能不能找到改进方向,并通过一轮轮实验把搜索变好?
假设你刚上线一个商品搜索应用:搜品牌、品类和型号基本正常,但用户输入“适合通勤的轻便双肩包”,结果就开始跑偏。
你提高语义召回权重,长句理解变好了,精确型号词却可能变差;提高关键词匹配门槛,前几条结果更准了,零结果又开始增加;放大候选集,召回更多了,噪声和延迟也可能随之上升。
很多搜索项目都会遇到类似的调优困境。问题不是没有参数可调,而是这些参数彼此影响:一次看似简单的修改,往往同时改变召回、排序、零结果率和延迟。要判断一组策略是否真的更好,还需要准备 Query、批量搜索、相关性标注、离线评测和 Bad Case 分析。
过去,这套工作依赖搜索专家反复试验。每一轮都能做,但很难低成本、可复现地持续做。
于是我们开始思考:既然 Agent 已经能够理解目标和调用搜索,它能不能再向前一步——根据当前数据和 Query 分布,自动提出候选策略,用实验验证收益,并告诉开发者“为什么这组配置更好”?
围绕这个问题,火山引擎在开源项目 SearchCLI 中开放了 vs search tune。开发者提供应用、数据集和 Query Set 后,Agent 可以调用它完成 Query 校验、实验规划、候选策略生成、批量搜索、相关性标注、指标计算、结果对比和候选 Scene 创建。
在服饰商品、综合商品和图片内容等三个业务数据集的阶段性离线评测中,自动调优策略相较默认策略,NDCG@20 提升 11.66%~13.50%,Precision@10 最高提升 21.17%。
这组结果首先说明了一件事:底层模型和数据不变时,仅仅围绕具体业务的 Query 分布重新组织召回模式、关键词与语义权重、匹配门槛和候选规模,也能释放出可观的效果空间。以上为阶段性离线结果,实际收益仍取决于 Query 代表性、标签质量和业务数据分布。
我们把这套能力称为:Agent 驱动的搜索自迭代。
“自迭代”不是让 Agent 绕过控制、直接修改线上策略,而是把“发现问题—提出假设—分配评测预算—筛选候选—验证收益—输出候选配置”变成一套可以重复运行、结果可以审阅的闭环。
接下来,我们将拆解这套闭环如何运转,以及背后的 SPA 策略优化框架,如何在有限搜索和标注预算下,把更多实验机会留给真正有希望的策略。
一、从“会搜索”到“会把搜索变好”
一个 AI 搜索系统通常包含召回模式、关键词与语义权重、关键词匹配门槛、候选集规模等配置。参数越多,适配不同场景的能力越强,但人工调优的门槛也越高。
真正困难的不是修改某一个参数,而是持续回答:当前策略在哪些 Query 上不好?应该加强关键词还是语义召回?平均指标提升是否掩盖了某类 Query 的退化?新策略是否会增加零结果和延迟?
搜索自迭代把这套专家工作流转化为一个反馈闭环:
Query 与业务数据
→ 评测当前效果
→ 生成候选策略
→ 执行搜索与标注
→ 比较指标和 Bad Case
→ 输出候选配置
→ 人工确认后进入验证
这里的“自”指流程可以由 Agent 持续驱动;“迭代”指每一轮都有 Query、标签和指标作为证据。生产变更仍保留明确的人为边界。
二、为什么是 Agent + Skills + CLI?
搜索调优既包含上下文判断,也包含领域知识和大量确定性执行。我们将三类工作拆给不同层次:
例如,Agent 会先判断用户是否有真实 Query;没有时,才生成合成 Query 并交由用户审阅。昂贵评测前必须先执行 Plan,确认策略数、Query 数和最大标注量。最终应用策略时,也必须先 dry-run,再由用户确认是否创建候选 Scene。
一次完整调优可能包含数千次搜索请求和大量 Query-item 相关性判断。如果让 Agent 临时拼脚本,网络抖动、限流或进程中断都可能让结果丢失。CLI 的价值,是把这些长任务变成稳定命令和机器可读的运行产物,让 Agent 决定“做什么”,让执行层保证“可复现地做完”。
1、一次自迭代如何发生
第一步是准备 Query Set。真实搜索日志、客服问题和人工整理的典型 Query 最有价值;如果暂时没有,也可以从数据集样本生成合成 Query,但必须先展示样例和类型分布,由用户判断它们是否代表真实意图。
第二步是校验和规划。validate 会检查格式、重复 Query、类型倾斜和 sourceItemIds 覆盖率;plan 则在不调用搜索和 LLM 的情况下,提前计算策略数量、搜索请求数与最大标签量。用户可以在真正花费预算前缩小 Query Set、减少候选或先选择低成本标签。
第三步是运行和复核。CLI 对每个候选执行批量搜索,先用 Source-item 银标快速筛选,或直接使用 LLM Judge 进行语义相关性判断,再计算 NDCG、MRR、Precision、零结果率和延迟。报告不仅给出推荐策略,也保留每条 Query 的明细,方便 Agent 解释收益来自哪里、是否存在退化。
最后,Agent 可以比较不同 Run,并把确认后的推荐配置转成候选 Scene。整个过程对应 query-generate → validate → plan → run → report → compare → apply,每一步都有结构化输入、输出和检查点。
三、SPA:把预算花在更值得评测的策略上
搜索调优看起来像参数优化,实质上却是一个评测成本高、反馈有噪声、参数存在约束、结果还必须可解释和可落地的实验设计问题。
候选策略、Query 数量和 TopK 增加后,最坏情况下的标注量近似为:
strategy_count × query_count × topK
因此,算法的核心任务不是生成尽可能多的组合,而是决定:哪些策略值得先测,哪些应尽早淘汰,下一轮沿什么方向探索,以及何时已经有足够证据停止。
SPA(Strategy Population Annealing)把搜索策略编码为带领域语义的 Genome,以专家先验构造初始种群,通过多保真评测、多视角 Elite、语义化进化和退火机制分配预算,再用鲁棒统计选出稳定、可解释的候选策略。
1、Genome:搜索参数不是普通数值向量
{
"user_defined_recall_mode": "KeywordSemantic",
"dense_weight": 0.25,
"text_weight": 0.75,
"query_keyword_match_percent": 0.3,
"max_retrieved_num": 100
}
这组参数既有枚举值,也有近似连续值和请求侧参数;同时还存在约束,例如 dense_weight 与 text_weight 需要归一,不同召回模式下参数含义也不同。SPA 的交叉、变异和移动都必须先理解这些语义,生成后还要经过裁剪、归一化、合法性校验和去重,才能转化为可执行配置。
第一阶段聚焦 similarity-only:只优化召回模式、关键词/语义权重、关键词匹配比例和最大候选数,不同时调整 Rerank、个性化、热度或运营规则。这样才能把效果变化归因到文本相关性策略本身。
2、初始种群:覆盖搜索行为,而不是平均撒点
Matrix Optimizer 会在若干固定档位上组合参数,优点是简单、稳定;缺点是不同参数不一定产生不同搜索行为,有限预算可能被大量相近或低价值组合占用。
SPA 的初始种群由当前策略、默认 Baseline、KeywordOnly / SemanticOnly 等边界策略、粗粒度 Matrix 和行业 Prior 组成。商品搜索可以多保留关键词主导的混合策略,知识库问答则保留更多语义增强分支。算法从有意义的行为区域出发,而不是从随机点开始。
当前开源首版已实现这一层:基于多个代表性中心,建立粗、细两种搜索半径,生成边界、中心和邻域候选,再执行合法化与去重。粗粒度邻域用于判断方向,细粒度邻域用于比较局部差异。
3、多保真评测:先排除错误方向,再提高置信度
完整设计将评测分为三层:
如果一个策略连生成 Query 的源 Item 都召不回来,就没必要继续为它的 Top20 结果支付 LLM 标注成本。反过来,Fast Pass 高分也不能直接胜出:它还要证明收益不是只集中在标题改写等少数 Query 类型上。
4、多视角 Elite:保留一条策略前沿
只按平均 NDCG 选 TopN 很危险。某个策略可能在短词 Query 上很强,却让自然语言 Query 明显退化;另一个策略平均分略低,但零结果率、延迟和分类型表现更稳定。
因此,SPA 同时保留 Global Best、Query-Type Best、Stable Best、Low-Latency Best、Low-Zero-Result Best、Baseline-Improver 和差异足够大的 Diverse Candidate。每个 Elite 都回答一个问题:它为什么值得继续消耗预算?这比单一排名更能防止种群过早塌缩。
- 语义化进化与种群退火
下一代候选来自三类动作。交叉会组合两个 Elite 中已被验证的有效结构,例如采用策略 A 的关键词/语义权重和策略 B 的关键词门槛;局部变异会在优秀策略附近调整权重、候选规模或匹配比例;方向移动则让候选向全局最优或某类 Query 的局部最优靠近。
这些动作都不是随机拼 JSON。例如,高关键词门槛导致零结果上升时,下一代会降低门槛;候选数从 100 增加到 200 没有提升却增加延迟时,搜索会向较小规模收敛。
退火温度控制探索幅度:早期温度高,允许接受少量当前略差但差异较大的策略;中期围绕 Elite 交叉和变异,同时保留边界探针;后期温度降低,只在高价值区域细调。与单点模拟退火不同,SPA 同时保留多个策略分支,因此既能跳出局部最优,也不容易被一次随机移动带偏。
6、鲁棒目标:不被一次高分欺骗
RobustScore =
NDCG@20
+ α × MRR@10
- β × zero_result_rate
- γ × latency_penalty
- δ × query_type_variance
- ε × confidence_interval_width
NDCG 衡量整体排序,MRR 强调首个高相关结果的位置;零结果率和延迟是落地约束;Query 类型方差用于惩罚“只在少数类型上好”的策略。置信区间可通过 Bootstrap 得到:对 Query Set 多次重采样,如果一个策略均值高但区间很宽,说明它可能只是碰巧在这批 Query 上表现好。
因此,完整 SPA 要找的不是一次实验中的最高分,而是在 Query 分布和 Judge 噪声下仍然稳定的策略。
四、实验结果
实验比较自动调优策略与默认策略。在三个不同业务数据集上,
NDCG@20 提升 11.66%~13.50%
NDCG@10 提升 9.56%~15.08%
MRR@10 提升 7.74%~14.95%
Precision@10 提升 7.36%~21.17%。
五、让算法真正可用的 CLI 工程层
算法决定评估什么,工程层决定实验能否稳定完成。SearchCLI 重点沉淀了四类能力。
Plan:先把实验成本编译出来。vs search tune plan 不实际调用搜索或 LLM,而是提前给出 Query 数、候选策略数、预计搜索请求和最大标注量,让 Agent 在昂贵任务开始前缩小范围或调整标签来源。
受控并发:把长任务拆成小任务。 当前开源实现将评测拆为 strategy × query 任务,并采用有界批次调度;每批通过 Promise.allSettled 汇总结果,单个失败不会丢掉同批已完成的数据,也不会无限放大请求。任务队列与 Worker Pool 是后续可继续演进的方向。
标签缓存:让 LLM 判断成为可复用资产。 不同策略经常召回相同 Item。SearchCLI 的缓存 Key 同时包含数据集、Query、Item 内容和 Judge 配置;只有这些信息一致时才复用,内容或评测标准变化后旧标签会自然失效,从而在节省成本的同时避免误用历史结果。
Checkpoint / Resume:中断后接着跑。 CLI 会持续保存运行状态、搜索结果、已用标签、失败记录、中间指标和性能摘要。任务中断后,Agent 可以使用原 Run ID 继续未完成部分,不必重新支付已经完成的搜索与标注成本。
最终的 apply 也保留安全边界:先 dry-run 展示配置,获得确认后只创建新的候选 Scene,不会自动切换默认入口。自动化减少的是重复劳动,不是取消人的业务判断。
六、快速开始
SearchCLI 要求 Node.js 20 或更高版本,并采用 Apache-2.0 License 开源。安装 CLI 与 Viking Skills:
git clone git@github.com:volcengine/SearchCLI.git vs
cd vs
bash ./scripts/install.sh
npx skills add "git@github.com:volcengine/SearchCLI.git" -y -g
vs auth login
vs doctor --json
Agent可以通过以下指令进行调优:
vs search tune validate --queries ./queries.jsonl --json
vs search tune plan \
--application-id <application-id> \
--dataset-id <dataset-id> \
--queries ./queries.jsonl \
--profile similarity-only \
--optimizer spa \
--json
vs search tune run \
--application-id <application-id> \
--dataset-id <dataset-id> \
--queries ./queries.jsonl \
--profile similarity-only \
--optimizer spa \
--label-source llm \
--json
vs search tune report --run-id <run-id> --json
项目地址:https://github.com/volcengine/SearchCLI
结语
Agent 时代,搜索系统面对的问题正在从“能不能提供足够多的策略参数”,转向“能不能根据当前数据和 Query,持续找到更适合的策略”。
SearchCLI 给出的答案,是用 Skills 沉淀搜索专家知识,用 CLI 承担确定性实验,用 SPA 提高评测预算的有效性,再由 Agent 把它们组织成一个可审阅的闭环。
从“可调用”到“可评测”,从“可配置”到“可迭代”。
这正是我们开源 Agent 驱动搜索自迭代技术的初衷。
未来,Viking AI搜将推出更多能力,和我们一起,让搜索变得更简单、让自迭代这件事持续向前!
跳转微信打开
関連記事
今日のまとめ
AIデイリーブリーフで今日の重要ニュースをまとめ読み