評価と公開
評価セットを作り、モデルを評価者にして較正し、各ステップのログを記録し、コスト削減と高速化を行い、入出力のガードレールを加え、最後に RepoBot を Web サービスにして公開します。
レッスン一覧
- 01評価セットを作る
RepoBot のために 36 問を用意し、ドキュメントの問題、ソースコードの問題、断るべき問題、答えのない問題、インジェクションをカバーします。JSONL に保存してコマンド一つで実行し、カテゴリ別にステップ数、所要時間、費用を集計して、ルールでざっと確認します。
40 分 · 中級 - 02モデルを評価者にする
36 の回答に採点基準を書き、モデルを評価者にして、人のラベルと一件ずつ比べます。モジュール 04 の教訓を生かした結果、評価者と人の判定は 36 問すべてで一致し、説明の中に隠れていた誤りも見つけ出しました。
45 分 · 中級 - 03ログと可観測性
数十行のトレーサーを書き、エージェントのモデル呼び出しとツール呼び出しを一回ずつ、1 行の JSON として記録します。後からログだけを読めば、各質問にかかったお金と時間、最も遅いステップ、エラーを出しているツールがわかります。
40 分 · 中級 - 04コスト削減と高速化
五つの小さな実験です。固定の資料を先頭に置いて 64% 節約、簡潔さを求めて出力を 92% 削減、簡単な質問では思考をオフ、結果キャッシュの自作、並行処理で 10 件のリクエストを 9.5 秒から 2.3 秒に短縮。
35 分 · 中級 - 05ガードレール:入れてはいけないもの、出してはいけないものを止める
入力のガードレールは安価な呼び出し 1 回で質問を分類し、42 問中 41 問を正しく判定、ルールを一つ補うと全問正解になりました。出力のガードレールは正規表現で回答の中のキーや携帯電話番号を隠し、ストリーミング出力で秘密が二つに分割される問題にも対処します。
40 分 · 中級 - 06プロジェクト:Q&A アシスタントを公開する
RepoBot を Web サービスにします。FastAPI のストリーミング API、ストリーミングのエージェントループ、入出力のガードレール、追跡ログ、入力の検証を備え、さらにサーバーへのデプロイ方法を説明します。第 1 部を貫くプロジェクトはここで完成します。
90 分 · 中級
AI アプリが自分のパソコンで動くことと、人に使ってもらえることの間には、まだ大きな距離があります。うまく答えられているのか、変更したら悪くなっていないか、問題が起きたら原因を突き止められるか、毎月いくらかかるのか、悪用されないか。そうしたことを知る必要があります。
このモジュールはこれらの問いに答えます。最初の二つの課は評価です。問題を用意し、モデルを評価者にして、人のラベルで評価者が信頼できるかを確かめます。第 3 課はログ、第 4 課はコスト削減と高速化、第 5 課はガードレールです。最後の課で、すべてを RepoBot に組み込んで Web サービスにします。
なぜこの順番なのか
評価を一番前に置いたのは、この後のあらゆる変更(コストの最適化、ガードレールの追加、Web サービス化)で、効果が悪くなっていないことを評価で確かめる必要があるからです。ログを最適化の前に置いたのは、お金と時間がどこにかかっているかを先に知らなければ、何を最適化すべきかがわからないからです。ガードレールを最後にしたのは、ガードレールはリクエストを止めるので、正常な質問を巻き添えにしていないことを評価セットで確かめる必要があるからです。
修了の目安
- 自分のアプリのために、正常、境界、拒否、インジェクションの各ケースをカバーする評価セットを用意し、コマンド一つで実行できる。
- LLM 評価者のプロンプトを書き、数十件の人のラベルで、評価者の判断が人とどれだけ一致するかを確かめられる。
- エージェントに追跡ログを加え、ログから各リクエストのステップ数、所要時間、費用を計算できる。
- コスト削減や高速化の方法を少なくとも三つ挙げ、自分のアプリでその効果を測れる。
- 入力の分類ガードレールと出力のマスキングガードレールを実装し、それぞれが何を防げないかを知っている。
- RepoBot v4 が自分のパソコンで Web サービスとして動き、公開前にまだ何が足りないかを説明できる。
このモジュールのコード
コードと実行結果は実際に動かしたときのまま載せているため、コメントと出力は中国語です。
- code/06-production/answers.jsonl
- code/06-production/cost_latency.py
- code/06-production/evalset.jsonl
- code/06-production/guardrails.py
- code/06-production/human_labels.json
- code/06-production/judge.py
- code/06-production/judged.jsonl
- code/06-production/run_eval.py
- code/06-production/traced_agent.py
- code/06-production/traces.jsonl
- code/06-production/tracing.py
- projects/repobot/v4/agent.py
- projects/repobot/v4/Dockerfile
- projects/repobot/v4/guard.py
- projects/repobot/v4/llm.py
- projects/repobot/v4/logs/traces.jsonl
- projects/repobot/v4/README.md
- projects/repobot/v4/requirements.txt
- projects/repobot/v4/retrieval.py
- projects/repobot/v4/server.py
- projects/repobot/v4/static/index.html
- projects/repobot/v4/tools.py
- projects/repobot/v4/tracing.py