まえがき

この本の対象読者

あなたは、AIの誇大宣伝に懐疑的なソフトウェアエンジニアです。

フレームワークを試したことがあり、LangChainアプリがハルシネーションを起こしながら本番データベースを削除するところを目の当たりにした経験もあるでしょう。そして、こう思うはずです。「もっとましな方法があるはずだ。」

あります。この本は、AIエージェントが実行されるときに実際に何が起きているのかを理解したい開発者のためのものです。マーケティング資料のダイアグラムの話ではありません。「推論エンジン」という抽象概念の話でもありません。実際のHTTPリクエスト。実際のwhileループの話です。

Pythonが読めて、WebアプリかCLIツールを作ったことがあれば、必要なものはすべて揃っています。

何を作るか

Nanocodeは、ターミナル上で動作するコーディングエージェントです。本書を読み終えるころには、以下のことができるようになります。

  • コードベース内のファイルを読み書きする
  • シェルコマンドを実行する
  • 純粋なPythonでコードを検索する
  • セッションをまたいでコンテキストを記憶する
  • セーフティモードによって計画と実行を分離する
  • ドキュメントや回答をウェブで検索する

requestspython-dotenvpytestを使ってゼロから構築します。シェルアクセスにはPythonの標準ライブラリであるsubprocessモジュールを使います。LangChainは使いません。ベクターデータベースも使いません。「オーケストレーションフレームワーク」も使いません。print()でデバッグできる、シンプルなPythonだけです。

唯一の例外として、第11章ではウェブ検索のためにddgsを追加します――これは軽量な依存関係がひとつ増えるだけです。

テストのアプローチ

本書では「テストと実装を並行して進める」アプローチを採用しています。ほとんどの機能について、次の流れで進めます。

  1. コンセプトの紹介――なぜこれが必要なのか
  2. まずテストを提示し、成功がどのような状態かを明確にする
  3. テストをパスするコードを実装する
  4. pytestで検証する

これにより、紙面上でレッド・グリーン・リファクタリングのすべての手順を踏まなくても、テスト駆動開発の考え方を身につけられます。また、これは重大な問題も解決してくれます。LLMを使ったアプリケーションは、実際にLLMを呼び出してテストすることができません。APIコールは遅く、コストがかかり、非決定論的です。

第3章からは、FakeBrainパターンを導入します――予測可能なレスポンスを返すテストダブルです。これにより、APIコールを一切行わず、一銭も使わずにテストスイート全体を実行できます。

コード例

本書は「コードファースト」アプローチに従っています。各章は前の章の上に積み上げられており、すべてのコード例は実際に動作するファイルから抽出されています。

コードの入手方法:

  • GitHub: GitHubからクローンまたはダウンロードしてください。1
  • Leanpub: 購入時のダウンロードリソースにも完全なソースコードが含まれています。

コードは章ごとに整理されています(ch01/ch03/ch04/など)。また、appendix/フォルダもあります。ほとんどのフォルダには以下が含まれています。

  • nanocode.py ― その章の完全な実行可能なエージェント
  • test_nanocode.py ― APIコールなしでコードが正しく動作することを検証するテスト

例外が2つあります。ch02/にはスタンドアロンのtest_api.pyスクリプトのみが含まれており(一度使ったら捨てるものです)、ch12/のエージェントのスナップショットは機能的にはch11/と同じで、集大成となる成果物が追加されています。

任意の章のフォルダをコピーして、そこから再開できます。pytestを実行して、コードが期待どおりの動作と一致するか確認してください。

本書で使用する表記規則

本書を通じて、3種類のコールアウトが登場します。

An icon of a warning1

警告: セキュリティや安全性に関するリスクです。注意してください――無視するとファイルが削除されたり、APIキーが漏洩したりする可能性があります。

An icon of a info-circle1

補足: 深掘りや脱線です。有益なコンテキストですが、最初に読む際はスキップしても流れを見失うことはありません。

コードのウォークスルーは一貫したパターンに従います。まずコンテキスト(なぜこのコードが必要なのか)、次にコード本体、そして重要な部分の行ごとの説明、という順序です。

さあ、コードを書きましょう。


  1. https://github.com/optimalone/build-your-own-coding-agent↩︎