メインコンテンツへスキップ

共有メソッドインターフェース

要約。 このページでは、Arenaのすべてのメソッドが実装しなければならないTranslationMethodプロトコル、6つのメソッドクラス(raw-llmcoached-llmpipelinecustom-pluginapihuman)、メソッドプラグインの形式、および評価サンドボックスでの実行と賞の受賞資格を決定する依存クラス(S/O/A1/A2/X)について説明します。このプロトコルを実装したあらゆるアプローチをベンチマーク対象にできます。何に依存しているかによって、どのカテゴリで競えるかが決まります。

evalハーネスとchampollionは、翻訳メソッドという共通の概念を持っています。メソッドとは、ソーステキストを受け取り翻訳テキストを生成するあらゆる手順を指します。直接的なLLM呼び出し、多段階パイプライン、サードパーティAPI、人間による翻訳など、いずれも対象となります。

アーキテクチャ

Method Plugin (v2 Spec)
├── method.json ← Manifest (name, class, entry_point, dependencies, metadata)
├── method_card.json ← Leaderboard description (what, not how)
├── pipeline.py ← Python module implementing TranslationMethod
└── (optional helpers) ← Additional Python modules

--method path/to/dirを通じて読み込まれます。ハーネスは自動的に何も検出しません。

2つのシステム、1つのインターフェース

Eval Harnesschampollion
言語PythonNode.js
エントリーポイントtranslate.pytranslate.js
インターフェースTranslationMethodプロトコルmethodPlugin設定
目的スコアリングを伴うバッチ評価開発/CIにおけるライブローカライゼーション
出力メトリクス付きランカード翻訳済みロケールファイル

両方のシステムに対応するメソッドは、各言語ランタイム用に2つのエントリーポイントを提供します。メソッドカードはその橋渡し役であり、両システムが理解できる形式でメソッドを記述します。

メソッドカード

メソッドカードは、完全なシステムプロンプトなどの独自情報を開示することなく、翻訳メソッドが何であるかを記述します。以下の問いに答えます。

  • このメソッドはどのクラスに属するか?(生のLLM、coached LLM、パイプライン、APIなど)
  • どのツールを使用しているか?(FSTアナライザー、辞書など)
  • 実装はオープンソースか?
  • どの言語ペアに対応しているか?

完全なJSONスキーマについては、メソッドカード仕様を参照してください。

{
"method_id": "fst-gated-v8",
"name": "FST-Gated Coached Translation v8",
"class": "pipeline",
"description": "LLM translation with morphological validation. Failed words are retried with FST feedback.",
"author": "Curtis Forbes",
"tools_used": ["HFST morphological analyzer", "Wolvengrey dictionary"],
"open_source": false,
"dependency_class": "A2",
"supported_pairs": ["eng>crk"]
}

dependency_classフィールドは、メソッドの実行と転送に必要なものをまとめています。詳細は後述のメソッドの有効性と依存クラスを参照してください。

メソッドクラス

クラス説明
raw-llm最小限の指示による直接LLM呼び出し
coached-llm構造化プロンプト、例示、制約を伴うLLM
pipeline決定論的コンポーネントを含む多段階パイプライン
custom-pluginTranslationMethodプロトコルを実装した外部プロセス
apiサードパーティ翻訳API(Google Translate、DeepLなど)
human人間による翻訳(ベースライン確立用)

メソッドの有効性と依存クラス

メソッドの実行可能性および転送可能性は、その依存関係の中で最も利用しにくいものによって決まります。Arenaには、メソッドが何を必要とするかを正確に把握することに依存する2つの仕組みがあります。

  1. サンドボックス評価ベンチマーク仕様 §8.2)— 公式のゴールドスタンダードスコアは、ネットワークポリシーがデフォルト拒否のサンドボックスから得られます。外部サービスを暗黙的に必要とするメソッドは、公式スコアを生成できません。
  2. 賞の転送賞仕様)— 受賞メソッドは言語コミュニティのガバナンス組織に転送されます。提出者が含める権利を持たないコンテンツをバンドルしたメソッドは、合法的に転送できません。提出者は、パッケージ内のすべてのものについて権利を保有している(または付与されている)必要があります。

両方のチェックをアドホックではなく機械的に行うために、すべてのメソッドはmethod.json依存マニフェストから導出される依存クラスを宣言します。

命名に関する注記。 メソッドクラス(前節:raw-llmpipeline、…)はメソッドがどのように翻訳するかを表します。依存クラス(本節)はメソッドの実行と転送に何が必要かを表します。これらは独立した軸であり、pipelineメソッドはいずれの依存クラスにもなり得ます。

5つの依存クラス

クラス名称定義サンドボックス実行可能?賞の受賞資格あり?
S自己完結型すべてのコード、データ、モデル、重みがメソッドディレクトリ内に含まれており、再配布とコミュニティ転送を許可するライセンスの下にある。✅ そのまま実行可能✅ あり
Oオープン外部依存再配布を許可するオープンライセンス(AGPLなどのコピーレフトライセンスを含む)の下で外部ホストされた成果物に依存する(例:インストール時にダウンロードされるFST)。✅ 可能 — 成果物はピン留めされ、提出物にミラーリングされる✅ あり(ライセンス互換性条件付き:コピーレフト条項は転送を通じて保持され、コミュニティはライセンスが全員に付与するのと同じ権利を受け取る)
A1API依存・代替可能ランタイムLLM推論を必要とし、モデルが代替可能な設定である場合 — 十分な能力を持つモデルであれば差し替えが可能。メソッドの価値はプロンプト、コーチングデータ、コードにあり、特定のプロバイダーのモデルには依存しない。⚠️ サンドボックス仕様が定義するLLMゲートウェイ経由のみ(🔲 計画中 — 後述)⚠️ 条件付き — 後述
A2API依存・代替不可ミラーリングや代替ができない外部データまたはサービスAPIへのランタイム呼び出しを必要とする — 通常、提供されるコンテンツが独自仕様または未ライセンスであるため(例:基盤となる辞書に公開ライセンスがない辞書API)。❌ 不可 — 権利者の許可なしにサンドボックス内に依存関係を置くことはできない❌ 権利者がサンドボックスへの組み込みおよび転送許可を付与するまで不可。オープン(開発セグメント)リーダーボードでは**「外部依存」**フラグ付きで掲載可能
Xクローズド提出者が再配布する権利を持たないコンテンツをバンドルしている — 未ライセンスのデータセット、スクレイピングされた独自コンテンツ、ライセンス非互換のコンポーネントなど。❌ すべてのレーンで不受理。権利なしにコンテンツをバンドルすることは、メソッドの実行場所に関わらずライセンス違反となる

実効クラス。 メソッドの依存クラスは、宣言されたすべての依存関係の中で最も制限の厳しいクラスであり、S < O < A1 < A2 < Xの順で判定されます。未ライセンスの辞書が1つあるだけで、それ以外は自己完結型のパイプラインがクラスA2(ランタイムでアクセスする場合)またはクラスX(権利なしにバンドルする場合)になります。

A1/A2の区別:代替可能性

ほとんどのメソッドはLLMを呼び出します。Arenaはそれを否定しませんが、2種類のAPI依存を区別します。

  • A1(代替可能): APIはコモディティなLLM推論を提供します。モデル識別子は設定であり、メソッドはコミュニティがホストするオープンウェイトモデルを含む任意の互換推論エンドポイントに対してエンドツーエンドで動作しなければなりません。モデルによって出力品質は異なる場合がありますが、それは開発者のリスクであり、公式スコアは評価で使用されたピン留めモデルに紐付けられます。プロバイダー側の状態(プロバイダーのみでホストされるファインチューン、プロバイダーのファイルストア、プロバイダー固有のアシスタント)に依存するメソッドは代替可能ではありません。その状態は差し替えられないため、基盤となる重みやデータが提出物に含まれていない限り、依存関係はA2となります。
  • A2(代替不可): APIは固有のもの — 通常は独自仕様または未ライセンスのデータ — を提供します。代替エンドポイントはそれを提供できず、権利者の許可なしにコンテンツをサンドボックスにミラーリングすることもできません。メソッドはオープンリーダーボード(フラグ付き)では動作しますが、許可が得られるまで公式サンドボックススコアの生成や賞の受賞資格はありません。

A1賞転送で実際に何が移転するか。 コミュニティはモデルを受け取りません — Anthropic、Google、OpenAIの重みを誰も転送することはできません。転送の対象はモデルを取り巻く完全なレシピです。すべてのプロンプト、コーチングデータ、パイプラインコード、リトライロジック、設定、および文書化されたモデル要件が含まれます。モデルは設計上代替可能であるため、コミュニティは開発者の関与なしに、転送されたメソッドを任意のプロバイダー、または自社ハードウェア上のオープンウェイトモデルに向けることができます。レシピは所有され、エンジンは賃借されており、交換可能です。

依存マニフェスト(method.json

すべてのメソッドはmethod.jsonマニフェストで依存関係を宣言します。各エントリーには、成果物の内容、出所、適用ライセンス、およびメソッドがどのようにアクセスするかが記録されます。

{
"name": "FST-Gated Coached Translation v8",
"method_id": "fst-gated-v8",
"class": "pipeline",
"entry_point": "pipeline:PipelineMethod",
"supported_pairs": ["eng>crk"],
"dependency_class": "A2",
"dependencies": [
{
"id": "giellalt-lang-crk-fst",
"kind": "software",
"license": "AGPL-3.0-or-later",
"access": "mirrored",
"source": "https://github.com/giellalt/lang-crk",
"pin": "sha256:3f1a…",
"redistributable": true,
"transferable": true
},
{
"id": "llm-inference",
"kind": "model",
"license": "proprietary",
"access": "gateway",
"source": "openrouter:google/gemini-2.5-flash",
"substitutable": true,
"redistributable": false,
"transferable": false,
"notes": "Any compatible chat-completions endpoint works; the model slug is configuration."
},
{
"id": "crk-dictionary-api",
"kind": "service",
"license": "none",
"access": "external-api",
"source": "https://itwewina.altlab.app/",
"redistributable": false,
"transferable": false,
"notes": "Dictionary content has no public license; runtime lookups only. Class A2 until the rights holders grant permission."
}
]
}
フィールド必須説明
id依存関係の安定した識別子
kinddatamodelsoftware、またはservice
licenseSPDX識別子、proprietary、またはnonenoneは公開ライセンスが存在しないことを意味し、全権留保として扱われる
accessbundled(メソッドディレクトリに同梱)、mirrored(インストール時に取得、ピン留めされ提出物にベンダリング)、gateway(評価ゲートウェイ経由のランタイムLLM推論)、external-api(その他のランタイムネットワーク呼び出し)
source正規URLまたはprovider:slug識別子
pinmirroredの場合正確な成果物をピン留めするバージョン、コミット、またはコンテンツハッシュ
substitutablegateway/external-apiの場合この依存関係を提供できる互換エンドポイントが存在するか
redistributableライセンスが成果物の再配布を許可しているか
transferable成果物(またはその権利)が賞転送条件の下でコミュニティに移転できるか
notes自由記述の補足情報

クラスの導出。 各依存関係がクラスに寄与し、メソッドのdependency_classは最も制限の厳しいものになります。

依存プロファイル寄与クラス
bundled + ライセンスが再配布と転送を許可S
mirrored + 再配布を許可するオープンライセンス(コピーレフト含む)O
gateway + substitutable: true(LLM推論)A1
external-api、またはgatewayかつsubstitutable: falseA2
bundled + license: noneまたは再配布非互換ライセンスX

宣言されたdependency_classは、ハーネスがマニフェストから導出するクラスと一致しなければなりません。不一致はバリデーションエラーとなります。

外部依存関係がないメソッドは"dependency_class": "S""dependencies": []を宣言します。空の配列は肯定的な宣言であり、他と同様に監査されます。

有効性の検証方法

コストの低い順から最も権威ある順に、3つの層があります。

  1. マニフェスト監査。 ハーネスはマニフェストから実効クラスを導出し、不一致を拒否します。レビュアーは宣言された各依存関係をそのライセンスとソースに照らして確認します — redistributable: trueと宣言されているが上流ライセンスがそれを否定している依存関係はレビューで不合格となります。
  2. 静的解析。 提出されたコードは、マニフェストに記載されていないネットワーク呼び出し、動的ダウンロード、ファイルシステムアクセスについてスキャンされます。レビューで発見された未宣言の依存関係は、そのクラスに関わらず拒否の根拠となります — マニフェストは正確であるだけでなく、完全でなければなりません。
  3. サンドボックスネットワークポリシー。 サンドボックス仕様はデフォルト拒否の外向き通信を要求します。メソッドコンテナは、パスが明示的に許可リストに登録されていない限りネットワークアクセスを持ちません。仕様が定義する唯一の外向き通信パスはLLMゲートウェイです — 評価インフラが運用する推論プロキシで、ピン留めされたモデルの明示的な許可リストに制限され、すべてのリクエストとレスポンスが実行後の監査のためにログに記録されます。許可リストにないものはポリシー層ではなくネットワーク層で失敗します。ネットワークポリシーとゲートウェイ設計についてはベンチマーク仕様 §8.6を参照してください。

🔲 計画中。 サンドボックスとそのLLMゲートウェイは仕様として定義されていますが、まだ構築されていません。ゲートウェイが稼働するまで、サンドボックスで評価できるのはクラスSおよびクラスOのメソッドのみです。クラスA1のメソッドは原則として賞の受賞資格がありますが、現時点では公式のゴールドスタンダードスコアを生成できません。このページは現在動作しているものではなく、仕様が要求するものを説明しています。

リーダーボードの表示

  • リーダーボードには、各メソッドの依存クラスがメソッドクラスバッジとともに表示されます。
  • オープンリーダーボード上のクラスA2メソッドには、**「外部依存」**フラグが表示されます。これらのスコアは変更または消滅する可能性のあるサードパーティサービスに依存しており、現時点では賞の受賞資格がありません。
  • クラスXのメソッドは掲載されません。

Eval Harness:TranslationMethodプロトコル

evalハーネスはプラグインにPythonの構造的型付け(Protocol)を使用します。正しいメソッドシグネチャを持つクラスであれば動作します — 継承は不要です。

class MyMethod:
async def translate(self, entries: list[dict], config: RunConfig) -> list[dict]:
results = []
for entry in entries:
translation = await self.do_translation(entry["source"])
results.append({
"id": entry["id"],
"predicted": translation,
"latency_s": 0.5,
"usage": {"prompt_tokens": 0, "completion_tokens": 0},
"error": None,
"tool_calls": [],
"tool_call_count": 0,
"metadata": {},
})
return results

非Pythonメソッドのラッパー例を含む完全なドキュメントについては、プラグインプロトコルを参照してください。

champollion:methodPlugin設定

champollionでは、メソッドはchampollion.config.jsonで言語ペアごとに登録されます。

{
"version": 3,
"pairs": {
"en:crk": {
"methodPlugin": "crk-coached-v1"
}
}
}

champollion側のインターフェースについては、プラグイン仕様を参照してください。

リーダーボード統合

メソッドカードが(--method-cardを通じて)ランに添付されると、ランカードに埋め込まれ、リーダーボードに表示されます。

# Run with method card attached
mt-eval run \
--method path/to/my-method \
--corpus data/edtekla-dev-v1.json \
--method-card method_card.json

# Publish to the leaderboard
mt-eval publish eval/logs/harness/your-run-card.json

--method-cardが提供されていない場合、mt-eval publishはメソッドの説明を案内するインタラクティブウィザードを起動します。

リーダーボードには以下が表示されます。

  • クラスバッジ — 視覚的インジケーター(例:「pipeline」、「coached-llm」)
  • 依存クラス — S/O/A1/A2(メソッドの有効性と依存クラスを参照);A2メソッドには「外部依存」フラグが付く
  • メソッド名 — メソッドカードから取得
  • 使用ツール — メソッドカードから一覧表示
  • オープンソースインジケーター

メソッドカードが添付されていない場合、リーダーボードにはハーネスネイティブの設定(モデル、プロンプトバージョン、温度、有効なツール)が表示されます。

:::danger 評価データでのトレーニング禁止 評価データセットをトレーニングデータ、few-shotの例示、辞書エントリー、またはプロンプトチューニング素材として開発プロセスに使用したメソッドは、リーダーボードから失格となります。良いメソッドと悪いメソッドを区別するものについては、MT評価を参照してください。 :::


関連情報