
2026/09/21 2:51
私はJevを(ひどい)チャットボットに変えました
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Jevchat は、Jev 言語モデルを変換し、システムが停止条件を満たされるまで正規化された確率分布からサンプリングすることで、一度に一つの質問ごとに次のシンボルを決定するインタラクティブなチャットインターフェースへと変えます。この実験は、Claude などの外部ツールを用いて加速・実装されており、開発者はライブ更新を通じてシンボル数/秒、経過時間、および最高得点確率などのリアルタイムメトリクスを監視できます。インターフェースは特定の相互作用モードをサポートしており(
ask は単一問い合わせ、interactive は連続セッション)、ネットワークアクセスや API キーなし(フィッククライアントとモックトランスポートを使用)で機能を検証する包括的な 158 のオフラインテストスイートを備えています。設定は .env ファイルを通じて行われ、Jev と Typesafe API キーの両方をサポートしており、主なコマンドには poetry run jevchat、ask、bench、および alphabets などのユーティリティが含まれます。ユーザーは動的に二つの核心コンポーネントを切り替えられます:分布戦略(大規模セット如对 bpe5k では choice、bisect、buckets を提供し、または refine)およびシンボルアルファベット(lower26 や ascii から複雑なトークンセットまで)。システムはチャットコマンド(/help、/reset、/stats など)で高い柔軟性を備えており、Ctrl-C でキャンセルが可能(特定のを待ってから復帰し、その後中止するシーケンス)、標準シンボル生成と比較してトップ1の確率を大幅に改善する hypothesis などの高度なランキングモードをサポートします。本文
Jev と Jevchat:チャット用モデル変換ツールの使い方
概要
Jevchat は、Jev モデルをチャット用に変換するツールです。この仕組みはユーモラスで面白い結果をもたらしますが、コスト面では現実的ではありません(実験目的)。
- 動作原理: ユーザーの質問と現在の返信内容を元に「次の記号は何か?」と Jev に問いかけます。
- 選択肢: 英文字(アルファベット)の一つか、「発話を停止する(STOP)」です。
- サンプリング: Jev が確率を返し、サンプリング器が正規化された分布から次の記号を選び出します。
- フロー: 「STOP」まで生成され続け、「付与(Append)」や「繰り返し(Repeat)」のプロセスを経ます。
注釈: これは Claude が加速した実験です。サンプリングアルゴリズムの説明は人間が、実装は Claude が行いました。
セットアップ
まずは環境変数を準備します。
1. API キーの配置
.env ファイルに API キーを格納してください(git に追加しないよう設定):
JEV_API_KEY=your_key_here TYPESAFE_API_KEY=your_key_here
ポイント:
ファイル内の値は環境変数の値よりも優先されます。ファイル編集だけで切り替え可能です。.env
2. コマンド実行例
以下のコマンドを実行します:
| コマンド | 説明 |
|---|---|
| インタラクティブなチャットモード |
| 質問に対する回答を取得 |
| サンプリング可能なアルファベットを確認 |
| すべてのモードを比較(ベンチマーク) |
3. リアルタイム表示と制御
- 表示内容: 生成速度(記号/秒、文字/秒)、API コール時間(ms)、経過時間などがパネルにリアルタイムで表示されます。
- 上位候補表示: 直前のステップで得点化した上位記号も表示され、サンプリング分布を可視化できます。
- キャンセル (Ctrl+C):
- 初回押下: 進行中のリクエストが完了するまで一時停止し、部分的な返信は保持します。
- 2 度目以降:即時中止されます。
- チャットモード: 部分的な返信は会話履歴に保持されます。
- ask コマンド: キャンセルされた場合はステータスコード
で終了します。130
4. チャットコマンド
インタラクティブモードで使用可能なコマンド:
/help # ヘルプ表示 /alphabet [名前] # アルファベット切り替え /temp <値> # 温度パラメータ設定 /stop-bias <値> # バイアス停止設定 /reset # リセット /stats # 統計情報表示 /exit # エクスィット
モードとオプション
選択する記号の分布(確率分布)と対象要素は
-s/--strategy および -a/--alphabet で切り替えることができます。
サンプリング戦略 (Strategies)
choice:全体を一つの質問として扱う(デフォルト)
poetry run jevchat -s choice ask "how many eyes do people have?"
...without the re-ordering that cancels Jev's position bias
最悪のパフォーマンスとなるモードです。
poetry run jevchat -s choice --no-shuffle-criteria ask "how many eyes do people have?"
...averaging 4 re-orderings
一つのリクエスト内で並行して 4 つの質問を送信し、平均化します。
poetry run jevchat -s choice --ensemble 4 ask "how many eyes do people have?"
bisect: グループを段階的に絞り込む
グループを 2 つに分割するまで繰り返し、各分割に対して両方向(前半/後半)の質問を行います。
poetry run jevchat -s bisect ask "how many eyes do people have?"
...cheaper: 廉価版 Bisect
より大きなグループごとに、一度だけの質問を行います。
poetry run jevchat -s bisect --bisect-cutoff 32 --no-bisect-swap ask "how many eyes do people have?"
buckets: 多数の質問に分割(255 個以上の記号へ)
アルファベットを多数の質問にまたがって分割し、各質問には「他(OTHER)」へのエスケープオプションを含みます。255 個以上の記号を扱う唯一の方法です。
poetry run jevchat -a words1k -s buckets ask "what colour is snow?" poetry run jevchat -a bpe5k -s buckets --bucket-size 127 ask "what is the capital of france?"
refine: 勝者への再スコアリング
まず「buckets」方式で処理した後、上位候補(勝者)に関する質問を行い、再スコアリングされた核(nucleus)へ遷移します。
- 正しい記号への確率は約2 倍に増加します。
- 語彙の解決能力は約19 倍に向上します。
poetry run jevchat -a words1k -s refine ask "where do fish live?" poetry run jevchat -a words1k -s refine --refine-nucleus 6 --refine-rounds 2 ask "…"
プレゼンテーション形式 (Presentations)
hypothesis(デフォルト):生成されたテキストそのものを表示
poetry run jevchat -p hypothesis --window 40 ask "what colour is snow?"
symbol: 単なる記号そのものを表示
ツールの初期バージョンにおける挙動と同様です。
poetry run jevchat -p symbol ask "what colour is snow?"
ビーム検索 (Beam search)
複数の候補を同時に維持しながら生成を進める手法です。
poetry run jevchat -b 3 ask "what is the opposite of hot?"
- 動作: 記号一つずつ確定させるのではなく、3 つの候補返信を同時に維持します。
- 注意点: ビーム幅が 1 より大きい場合、
、temperature
、top_p
は適用されません(確率に基づいてランク付けされます)。top_k
アルファベットの種類 (Alphabets)
以下はコマンド例です:
# 小文字とスペースのみ ('a'〜'z') poetry run jevchat -a lower26 -t 0 ask "what is 2+2?" # アスキー文字(何でも表現可能) poetry run jevchat -a ascii -t 0 ask "what is 2+2?" # 単語全体単位(トークン) poetry run jevchat -a tokens -t 0 ask "do people need water?"
⚠️ 必須条件:buckets ストラテジーが必要な場合
以下の 3 つのアルファベットは選択肢が 255 を超えるため、必ず
--strategy buckets を指定してください。
poetry run jevchat -a words1k -s buckets -t 0 ask "what colour is grass?" poetry run jevchat -a bpe2k -s buckets -t 0 ask "where do fish live?" poetry run jevchat -a bpe5k -s buckets -t 0 ask "what do bees make?"
組み合わせた使用例
複数のオプションを組み合わせる場合:
poetry run jevchat -a tokens -s bisect --bisect-cutoff 20 ask "do people need water?" poetry run jevchat -a ascii -s choice --ensemble 12 -t 0.2 --repetition-penalty 1.0 \ ask "what colour is grass?"
Hypothesis オプションの詳細
質問を Jev に与える際、2 つの異なるアプローチがあります。
--presentation symbol
(記号モード)
--presentation symbol- 選択肢: 単なる記号('a', 'i', 'the' など)。
- 動作: Jev は自身の思考プロセスの中で、その選択肢を返信に付与し、文法やスペルをチェックする必要があります。
- 指示: 「単独で選択肢を評価するのではなく、付与後の連結文字列全体の文法やスペルをチェックせよ」。
--presentation hypothesis
(仮説モード・デフォルト)
--presentation hypothesis- 選択肢: すでに完成形(または進行形だが意味を持つ)のテキスト。
- 動作: 「付与」作業は既に完了しているため、Jev は完成した文字列だけをランク付けすればよく、これが意思決定モデルが本来行うべきことです。
比較例
| モード | 選択肢の内容 |
|---|---|
| symbol | , , , …, |
| hypothesis | , , , (不変/STOP)` |
効果: 符号ごとの説明を伴う単一の記号選択肢を使用する場合と比較して、
- top-1 の精度: 約 3 倍向上
- 正しい記号への確率質量: 約 2 倍増加
- 入力トークン数: 少ないトークンで達成可能
これは本プロジェクトにおいて最も大きな改善点です。
テスト環境 (Tests)
- 全 158 のテスト: オフラインで実行可能です。
- 仕組み:
- 生成ループ用:スクリプト化されたフィクティブ(架空)クライアントを使用。
- HTTP レイヤー:
を使用。httpx.MockTransport - API キーやネットワーク接続は不要です。
- API 実装確認: 実際に API を叩くのは
コマンドの一部だけです。jevchat bench