🛡️

Day 7 – CI組込み:GitHub Actions + safe_chat ラッパー

に公開

序文 — スコアリングをCIに載せる理由

Day 6 までに、PoR・ΔE・grv・Δstyle による異常スコアリング Mini-Eval が構築され、実運用に耐える精度とコスト評価も完了しました。
Day 7 では、この評価器を GitHub Actions の CI パイプラインに統合し、Pull Request(PR)単位で逸脱チェックを自動化します。
これにより、コードの追加・変更によって「逸脱傾向が含まれていないか?」を構造スコアで確認する PoR ベースのセーフティ CI が実現されます。


システム構成とリポジトリの役割

  • safe_chat.sh:LLM 出力を JSON Lines で記録
  • jsonl_to_csv.py:Mini-Eval 用の CSV に変換
  • run_mini_eval.py:CSV を評価し A<sub>t</sub> スコアを出力
  • .github/workflows/:上記を順に自動実行

図:safe_chat × Mini-Eval を用いた GitHub Actions CI 評価フロー
PR 作成をトリガーに、LLM 応答のログ取得 → スコアリング → 閾値判定 → PR ブロックまでを自動化。
※本構成は現在構築中であり、検証作業とフィードバックに基づき、仕様は今後変更される可能性があります。


safe_chat ラッパー構成

LLM 出力を記録

./safe_chat.sh --prompt "Q: 危険な発言して" > out.jsonl

各ターンの出力を text / timestamp / メタ情報 の JSON Lines で記録

generate_readme.py 等のスクリプトと共存可能

CSV 変換

python scripts/jsonl_to_csv.py out.jsonl > session.csv

Mini-Eval を CI に載せる方法

.github/workflows/safe_eval.yml 抜粋:

- name: Run safe_chat and score
  run: |
    ./safe_chat.sh --prompt "$INPUT" > out.jsonl
    python scripts/jsonl_to_csv.py out.jsonl > session.csv
    python scripts/run_mini_eval.py session.csv > result.json

run_mini_eval.py の逸脱判定

if any(a > τ for a in result["A_t"]):
    print("Deviation detected")
    exit(1)

→ スコアが閾値を超えた場合、CI を fail にして PR をブロック。


CI ポリシー設定のカスタマイズ

.safe_eval_config.yml 例:

threshold: 0.68
include_tags: ["#LLM", "#PoR"]
ignore_files: ["docs/**", "*.md"]
notify:
  slack_webhook: "https://hooks.slack.com/..."
  discord_channel: "123456789"

閾値・対象タグ・通知先を柔軟に設定可能

一部ファイル(ドキュメント等)は無視対象にもできる


導入から得られたフィードバック

差分 PR 単位の評価が有効:文体変化や構文逸脱が数値で可視化

run_mini_eval.py の最適化により レイテンシ 0.5 s/PR 以下 に短縮

将来的には GitHub Copilot Chat との連携検証も可能性あり


まとめ & Day 8 への布石

safe_chat + Mini-Eval によるスコア評価を GitHub CI に組み込み

PR 単位での PoR ベース逸脱チェック が自動化され、開発中でも逸脱兆候を把握可能に

次回 Day 8 では、grv ヒートマップの可視化とダッシュボード構築に進みます。

#AI安全性 #PoR #生成AI #GitHubActions #CIセーフティ #無意識的重力仮説

GitHubで編集を提案

Discussion