実測

軽量RAGスキル5本を測った
— 素のモデルは「2020年民法改正前」の答えを自信満々に返した

teai.io の CLI エージェント tete legal(日本法) te security(セキュアコーディング) te freelance(フリーランス実務) te infra(クラウド運用) te license(OSSライセンス)、 計727件のQ&Aコーパスを載せたβスキルを5本出しました。

出しっぱなしにせず、「素のモデルに直接聞く」「RAGコーパスを併用する」「もっと大きいモデルに直接聞く」の3条件で実際に測りました。 結果、一番びっくりしたのは自分たちのRAGの成績ではなく、素のモデルが自信満々に古い法律を答えてくる場面と、 RAG側が無関係な質問の8割に「参考情報」をでっち上げていたことです。両方そのまま書きます。

読み間違いゼロ合成・koe.live

先に結論(te legal・条文で裏取りできる20問)

条件正答モデル
① 素のモデルに直接聞く16/20 (80%)deepseek-chat・コンテキストなし
② RAGコーパス併用19/20 (95%)deepseek-chat + te legal検索結果
③ フロンティアモデルに直接聞く19/20 (95%)claude-sonnet-5・コンテキストなし

安いモデルにRAGを足すと、コンテキストなしのフロンティアモデルと同じ正答率まで届きました。 ただしこの数字だけで「RAGが勝った」と言うのは早計です。理由は後述します。

一番刺さった発見 — 「改正前の民法」を自信満々に返してきた

「契約に基づく権利が時効で消滅するのは何年ですか?不法行為の損害賠償請求権は?」という設問に対して、 素のモデル(deepseek-chat)はこう答えました。

民法では、債権の消滅時効について定めています。契約に基づく権利(債権)は、原則として10年で時効により消滅します(民法第167条第1項)。ただし、5年で時効により消滅する例外もあります(同条第2項)。

これは2020年の民法改正前のルールです。改正後は原則5年(権利を行使できると知った時から)・最長10年に変わっています。 条文番号まで添えて、もっともらしく、古い法律を答えてきました。RAGコーパス併用版はこうです。

契約に基づく権利(請求権)は通常5年で時効により消滅します。一方、不法行為による損害賠償請求権は3年で消滅します(民法第166条・第724条)。

学習データのカットオフより後に変わった制度、あるいは学習データの中で新旧の記述が混在している論点は、 モデルサイズを上げても直らないことがあります。実際、フロンティアモデル(claude-sonnet-5)も同じ設問に正しく答えられましたが、 安いモデル単体では引っかかりました。RAGで参照情報を渡すことで、安いモデルでもフロンティアモデル相当の正答に揃えられる、という具体例です。

一番大事な発見(ネガティブ) — 無関係な質問の4/5に「参考情報」を捏造した

コーパスに一切関係ないはずの質問を5問投げてみました。「te legal」は本来、関連度が閾値未満なら results: [] で「該当なし」を返す設計です(前回の記事で入れた足切り)。 結果は次の通りです。

質問本来の期待実際
AIが生成した契約書に法的拘束力はありますか?該当なし「遺言書の種類」「引用の文字数上限」がヒット
仮想通貨の相続税評価はどう計算しますか?該当なし無関係な条文がヒット
副業の確定申告で必要な書類を教えてください該当なし該当なし(正しく機能)
リモートワーク中の労災は認定されますか?該当なし「労災保険の給付の種類」がヒット
生成AIの学習データの著作物、権利者は補償される?該当なし「労災保険の給付の種類」がヒット(「〜受けられますか」の語尾だけが一致)

たとえば最後の例は、質問文と「労災保険からはどのような給付が受けられますか?」が 文字bigram(2文字の並び)のJaccard類似度で偶然0.10を超えただけで、内容は完全に無関係です。 コーパスを94件から259件に増やしたことで、偶然一致する組み合わせの母数自体が増えたのも一因とみています。

これは「壊れた」ではなく「そもそも意味を理解していない」だけです。bigram類似度は依存ライブラリなしで動く軽量実装として選んだ設計で、 無関係な質問を確実に弾くには埋め込み(embedding)ベースの意味検索が必要です。前回の記事で土台だけ作って、 ローカルの4種類のOPENAI_API_KEYが全部無効で実データ生成がまだできていない、と正直に書いた機能がこれで、 この結果を見る限り優先度を上げるべきだと判断しています。

ベンチ自体にあった欠陥(3件)

前回と同じで、モデルが揃って間違えたように見えたときはまず自分の採点を疑う方が当たります。今回も3件出ました。

設問何を間違えたか
法定休日は週何回か正解は「週1回」。回答は全角の「1回」だったが、採点スクリプトは半角「1回」しか見ておらず不正解に誤判定していた
接道義務の道路幅フロンティアモデルの回答は「4m」「2m」で正しかったが、採点スクリプトは「4メートル」「2メートル」でしか一致を見ていなかった
接道義務(RAG側)この言い換え質問はRAG検索が閾値未満で「該当なし」を返し、採点上は不正解扱いにした。実際の te legal はこの場合サーバー側が空応答を返し、クライアント側(te-install.sh)が通常runにフォールバックする設計なので、本番では素のモデルと同じ回答になり、この設問は正解している

つまり機械採点の「16/20」「19/20」は、全角数字とメートル表記の揺れで数問分ブレます。 表の数字はそのまま載せていますが、鵜呑みにせず上の注記込みで読んでください。

他4スキル — 一般的な話題ではRAGの上乗せは小さかった

security/infra/freelance/license は条文のような「唯一の正解」がないので、各6問をLLM審判(claude-sonnet-5)に コーパスの回答と突き合わせて1〜5点で採点させました。

スキル素のモデル(平均)RAG併用(平均)
te security5.00 (n=5)5.00 (n=6)
te infra4.80 (n=5)4.75 (n=4)
te freelance5.00 (n=3)4.80 (n=5)
te license5.00 (n=5)5.00 (n=6)

MITライセンスの商用利用可否、SQLインジェクション対策の基本、Fly.ioのシークレット設定コマンド—— こういう広く文書化された一般的な話題は、コンテキストなしの安いモデルでもほぼ満点でした。 te legal ほど劇的な差が出なかったのは、法律の具体的な数字(期間・割合・控除額)と違って、 一般的な技術知識はモデルの事前学習だけで十分カバーされているためだと考えています。

採点のNG開示: LLM審判へのmax_tokensを10に絞ったせいで、審判が数字を出す前に打ち切られ 採点不能(None)になったケースが24件中10件(42%)ありました。上の平均は採点できた分のみの平均で、 「取れなかった」を隠して平均を良く見せていません。次にやるならここを直します。

まとめ

使い方

curl -fsSL https://teai.io/te | sh
te legal "遺留分とは何ですか"
te security "SQLインジェクションを防ぐには"
te freelance "インボイス登録の手続きは"
te infra "Fly.ioでシークレットを設定するには"
te license "AGPLをSaaSで使う注意点は"