第3回まで無料

AI アプリ開発入門コース

Ollama のセットアップから、トークンと temperature・Chat API・プロンプト設計・Tool use・RAG・本番運用、そして FastAPI の車両情報アシスタントまで。全50レッスンで、出来合いの LLM を使って「自分で AI アプリを組み立てられる」ところまで進みます。有料の API キーは使わず、手元のローカル LLM と自動車の公開データで実際に動かしたコードを載せています。

カリキュラム

全50レッスンを7つの章に分けています。第1章から順に進めるのがおすすめですが、 気になるところだけ拾い読みしてもかまいません。 ※ Ollama やネットワークを使うコードはブラウザ内で実行できないため、第2回で用意するローカル環境(Ollama と Python)で試してください。ブラウザで実行できるのは、標準ライブラリだけで書ける部分です。

Chapter 1 — LLM とは何か(第1〜6回)

有料の API キーを使わず、手元の Ollama でローカル LLM を動かすところから始めます。トークン・出力の長さ・temperature と seed・モデルの選び方まで、LLM を部品として扱うための基礎をそろえます。

Chapter 2 — Chat API を使いこなす(第7〜13回)

system・user・assistant の役割、マルチターン、ストリーミング、JSON 出力と、会話 API の使い方をひととおり押さえます。最後は履歴を持つターミナルチャットを組み立てます。

7

system と user と assistant

system・user・assistant の 3 つの役割と、/api/chat に送るメッセージの列。system に書いた制約で返答の振る舞いを固定するところまで。

🔒 ベーシック
8

マルチターン会話

LLM は状態を持たないので、過去のやり取りを毎回まとめて渡す。マルチターン会話の仕組みと、履歴が増えるほどトークンを食うこと。

🔒 ベーシック
9

ストリーミング

長い応答を待たせないためのストリーミング。stream=True で 1 行ずつ届く断片を順に受け取り、届いたそばから表示する仕組み。

🔒 ベーシック
10

JSON 出力を強制する

アプリに組み込むための、機械で読める出力。format="json" で必ず json.loads できる JSON を返させる方法と、その限界。

🔒 ベーシック
11

構造化データを取り出す

「2019年式のTesla Model 3、燃料は電気。」のような自由文から、make・model・year・fuel の決まったキーを持つ JSON を取り出す抽出タスクの基本形。

🔒 ベーシック
12

会話履歴の管理

履歴を全部渡し続けるとトークンを食う。system は必ず残し、直近 N 往復だけに切り詰める trim_history の書き方。

🔒 ベーシック
13

【実践】履歴を持つターミナルチャット

第2章のまとめとして、履歴を持つ対話ループ Chat を作る演習。send のたびに user と assistant を積み、system と 2 往復で 5 件たまることの確認。

🔒 ベーシック

Chapter 3 — プロンプト設計(第14〜20回)

役割の指定・few-shot・XML タグ・出力フォーマットの固定と、プロンプトを部品として組み立てる型を身につけます。最後は小さな評価データを作り、プロンプトの良し悪しを数字で比べて改善します。

14

よいプロンプトの基本(役割を与える)

第3章の入口。役割(ペルソナ)を与えてから頼む with_role の書き方と、役割・文脈・具体的な指示というよいプロンプトの 3 つの土台。

🔒 ベーシック
15

例示(few-shot)で出力の形をそろえる

指示だけではぶれる出力を、入出力の例で真似させる few-shot。燃料種別の分類を題材に、例 2〜3 個で形がそろうことの確認。

🔒 ベーシック
16

XML タグで指示とデータを区切る

外部データに紛れた「これまでの指示を無視して」に引きずられないための区切り方。xml_tag・build_context での組み立てと、指示上書きの一次検知。

🔒 ベーシック
17

出力フォーマットを JSON スキーマで固定する

format="json" では縛れないキーを、JSON スキーマで固定する。required に入れたキーが必ず入り、後段のコードが安心して読めるようになるまで。

🔒 ベーシック
18

自動車ドメインのプロンプト(諸元を資料として渡す)

LLM に推測させず、事実を渡して根拠に基づかせる。vPIC で解読した Tesla Model 3 の諸元を資料として渡し、燃料種別を「電気」と答えさせるまで。

🔒 ベーシック
19

評価データを作る

「なんとなく良くなった」を数字に変える土台。入力と期待出力の組を並べた評価データと accuracy、そして評価器そのものの確かめ方。

🔒 ベーシック
20

プロンプトを評価して改善する

評価データでプロンプトを測って直すサイクル。few-shot 付きの予測を accuracy で測り、3 問中 2 問以上という合格ラインの確認。

🔒 ベーシック

Chapter 4 — ツール利用(Tool use)(第21〜28回)

ツールを定義し、モデルからの tool_call を受けて自動車の公開 API(vPIC)を実行し、結果を返して最終回答まで回します。最後は、選び・実行し・答えるループを持つ最小のエージェントを作ります。

21

ツールとは何か(LLM に外の道具を使わせる)

第4章の入口。学習時点の知識しか持たない LLM に、外の道具(ツール)を使わせて事実に基づかせる Tool use の考え方と、このコースの道具 vPIC。

🔒 ベーシック
22

ツールを定義する(名前・説明・引数スキーマ)

ツールを JSON でモデルに教える書き方。name・description・parameters の役割と、ツール選択の精度を左右する description の書き方。

🔒 ベーシック
23

tool_call を受け取る

ツールを渡して質問すると、モデルは自分で答えずに「この道具をこの引数で」と返してくる。tool_calls の中身と、名前と引数だけを見る確かめ方。

🔒 ベーシック
24

vPIC ツールを実行する

モデルの指名を実データに変える。run_tool で名前から関数を引き、NHTSA vPIC(鍵不要)で VIN の解読とモデル一覧の取得を行う。テストは fixture で決定的に。

🔒 ベーシック
25

結果を返してループを閉じる

ツールの結果を role: tool のメッセージとしてモデルに戻し、最終回答を書かせる。「指名 → 実行 → 回答」の一巡を閉じる run_agent の読み方。

🔒 ベーシック
26

複数ツールと選択

道具が 2 つ以上あるときに、質問に応じて正しい道具を選ばせる。選択の手がかりになる description と、steps で何を使ったかを確かめる方法。

🔒 ベーシック
27

ツールのエラーとリトライ

ツールの失敗を 2 種類に分けて扱う。存在しない VIN のような壊れた入力は握ってモデルに返し、一時的な失敗は指数バックオフ付きの retry で吸収する、失敗の分け方。

🔒 ベーシック
28

エージェントの最小形

ツールを選び・実行し・結果を見てまた考える、を繰り返すエージェントの最小形。run_agent のループと、暴走を止める max_steps の役割。

🔒 ベーシック

Chapter 5 — RAG(検索拡張生成)(第29〜36回)

文書を埋め込みベクトルにし、コサイン類似度で検索し、長い文書はチャンクに切って、リコール文書を根拠に答えさせます。引用付きの回答と検索の評価を経て、資料に無いことを答えさせない落とし穴まで扱います。

29

RAG とは何か(外部文書を根拠に答えさせる)

第5章の入口。モデルが知らない文書を検索してプロンプトに持ち込み、それを根拠に答えさせる RAG の全体像。題材はリコール文書 5 件。

🔒 ベーシック
30

埋め込み(embedding)

RAG の心臓部。文を意味を表すベクトルに変える埋め込みと、/api/embed を呼ぶ embed 関数。nomic-embed-text が 768 次元で決定的であることの確認。

🔒 ベーシック
31

コサイン類似度で検索する

ベクトルの近さをコサイン類似度で測る。同じ向きなら 1、直交なら 0 という性質と、質問と各文書のスコアを高い順に並べるだけの検索。

🔒 ベーシック
32

チャンク分割

長い文書を検索できる大きさに切る。段落で分け、長すぎる段落は文字数で刻む chunk の書き方と、検索の精度を左右する粒度の考え方。

🔒 ベーシック
33

リコール文書を RAG で引く

リコール文書のインデックスで、質問ごとに正しい文書を引けるかを確かめる。言い回しが文書と違っても意味で引ける、埋め込み検索の強み。

🔒 ベーシック
34

引用付きで答えさせる

RAG の仕上げ。検索した資料だけを根拠に、使った資料の ID を角括弧で引用させる answer_with_citation と、資料に無いことを作らせない指示。

🔒 ベーシック
35

検索の評価(hit 率)

RAG の答えが悪いとき、原因は検索か生成か。期待する文書が上位 k 件に入る割合(hit 率)で検索を単体で測り、生成より先に検索を直す順序。

🔒 ベーシック
36

RAG の落とし穴(資料に無いことを拾わせない)

無理やり何かを引いて答えると RAG は誤答する。無関係な質問は最上位でもスコアが低いことを使い、しきい値で「資料にありません」と判断する方法。

🔒 ベーシック

Chapter 6 — 本番運用(第37〜44回)

コストの試算、レート制限とリトライ、タイムアウト、ログ、プロンプトインジェクションと個人情報、出力のガードレールと、公開前に要る守りを一つずつ足します。最後は決定的な出力を活かしたキャッシュで締めくくります。

37

トークンとコストの計算

第6章の入口。ローカル LLM は API 課金 0 円でも、クラウドに載せ替えるときのためにコストを試算する。入力と出力で単価が違うトークン課金の計算方法。

🔒 ベーシック
38

レート制限とリトライ

乱用や暴走で跳ねるコストを、時間窓で回数を絞るレート制限で抑える。一時的な失敗は指数バックオフのリトライで吸収し、駄目なら例外を呼び出し側に返す設計。

🔒 ベーシック
39

タイムアウトと並行数

遅い応答を待ち続けてリクエストを詰まらせないために、すべての呼び出しに timeout を持たせて打ち切る。同時実行の数を絞ってサーバーとコストを守る考え方。

🔒 ベーシック
40

ログと観測

本番では何を・どれだけ・どれくらいの速さで使ったかを残す。ただしログに個人情報は残さない。redact_pii を通してから記録する make_log の形。

🔒 ベーシック
41

プロンプトインジェクション対策

外部データに「これまでの指示を無視して」と紛れ込ませる攻撃への備え。looks_like_injection による一次検知と XML タグでの隔離、それでも足りない部分の補い方。

🔒 ベーシック
42

PII と安全性(メール・電話を伏せる)

利用者の入力に混ざる個人情報を、LLM に送る前・ログに残す前に伏せる。redact_pii の正規表現と、それで拾える範囲・拾えない範囲。

🔒 ベーシック
43

出力の検証(ガードレール)

スキーマで縛っても LLM の出力は完全ではない。後段に渡す前に必須キーを validate_json_shape で検証し、欠けていればリトライかエラーにするガードレール。

🔒 ベーシック
44

キャッシュと再現性

temperature=0 と seed の固定で出力が決まるからこそ、同じ入力なら前の答えを使い回すキャッシュが安全に効く。Cache クラスと、2 回目は LLM を呼ばないことの確認。

🔒 ベーシック

Chapter 7 — アプリを作りきる(第45〜50回)

ここまでの部品を組み合わせ、質問を種類ごとに振り分ける車両情報アシスタントを設計し、FastAPI のエンドポイントとして Web に出します。VIN の解読とリコールの RAG をエンドポイントに組み込み、テストで全体を確かめて締めくくります。

45

車両情報アシスタントの設計(質問の振り分け)

第7章の集大成の入口。質問を VIN・リコール・それ以外の 3 種類に振り分け、vPIC ツール・リコールの RAG・素の LLM を使い分ける classify の設計。

🔒 ベーシック
46

FastAPI のエンドポイント

車両情報アシスタントを FastAPI で Web に出す。app/main.py の 3 つのエンドポイントの全体像と、TestClient で /api/health を確かめるところまで。

🔒 ベーシック
47

vPIC ツールをエンドポイントに組み込む

第4章の Tool use を /vin/{vin} のエンドポイントにする。ツールを HTTP にそのまま出すだけで、学んだ部品がアプリの機能になることの確認。

🔒 ベーシック
48

リコール RAG を /ask に組み込む

第5章の RAG を /ask エンドポイントにする。質問を振り分け、リコールなら引用付きで答えて、使った資料の ID も citations として返すまで。

🔒 ベーシック
49

テストと評価(アプリ全体を確かめる)

公開前に、アプリ全体が期待どおりに振る舞うかを入口から出口まで確かめる。VIN の質問はツール経路、リコールの質問は RAG 経路に進むことの検証。

🔒 ベーシック
50

公開と総まとめ

全50回の締めくくり。成果物がそろっていることをテストで確かめ、7 章で作ったものと、推測させず事実に基づかせて決定的に検証するというコースの軸の振り返り。

🔒 ベーシック

全50レッスンを終えたら、次はこのアシスタントをサーバーに載せて公開する サービス公開と運用 へ。メンバーシップで全コースが解放されます。