1.状況
Agent作成にチャレンジしていますが、Claude 3.7 Sonnetで、試してみました。
最初、2/27頃に、AnthropicのChatで設計したものを、WindSurfで続きを実装していたのですが、どうも途中でWindSurfのAIのレスポンスの解析がおかしくなって、そのうち、「Not enough Premium Flow Action credits. Purchase more or switch to Cascade Base model.」となったので、ちょっと断念。数日前なので、WindSurfも改善されているかもしれません。
2.Cusor + Claude 3.7 Sonnet-tninking
2.1 試した条件
最初、プロジェクトルールなしで試したのですが、途中でおバカになったので、下記の条件で試してみました
- ・CuosorのYoloモード
- ・Claude 3.7 Sonnet-tninking
- ・cursorのプロジェクトルールを設定
- ・cursorにドキュメントを作成させ、適宜参照させる
- ・Claude 3.7 Sonnet-tninking
(a)開発の進め方(★重要)
1) ユーザの要件に対して、要件分析を行う。
- 要件分析の過程で、不足している条件がある場合、ユーザにヒアリングを行う。
- 次工程の外部設計が実施可能となるだけの情報が分析、整理できているかを確認する。
- 要求分析の結果をドキュメントとして出力する。
2) 要件分析の結果に従い、外部設計を行う。
- 開発すべきシステムが持つ機能を分析し、整理する。
- 開発すべきシステムの境界面と、外部との入出力を明確にする。
- 開発すべきシステムの構成モジュールを明確にする。
- 構成モジュールは、システム、サブシステム、プロセス等の観点や、file, class, functionなどの観点で、階層的、内包的に検討すべきである。
- システムが扱うべきデータを明確にする。
- データの内容や属性、及び、どのようなタイミングでデータのCRUDが発生するかを明確にする。
- 外部設計の結果をドキュメントに出力する。
3) 要件分析と外部設計の結果に基づき、実装計画を立てる。
- 実際に必要な内容を整理し、優先順を検討し、計画を立てる。
- 適切に実装されているかを確認するテスト方法、テスト内容も計画に含める。
- テストは可能な限り自動実行できることが望ましい。
4) 要件分析、外部設計、実装計画に基づき、ユーザの要件を実現する、システムを作成する。
5) 設計、デバッグ中の方針
- デバッグするときは、考えられる原因を複数想定し、ロジカルに原因を分析し、テストコードで確認した上で、対策を実施する。
- 必要なテスト実行コードを作成し、テスト結果を集計できるようにする。
- システム作成中に、不具合等が発生したときは、不具合の現象、調査結果、対策内容等を整理したドキュメントを作成する。
- システム作成中に、試行錯誤した内容は、解決しようとした課題、試行内容、試行結果、最終的な結論などを整理したドキュメントを作成する。
- 作成中に、ドキュメントは適宜、最新状況に更新する。
(b)ユーザの要件
1)開発すべきシステムの概要
- ユーザの要件をヒアリングし、それを実現するシステムの要求分析結果と外部設計結果を出力するアプリケーションを開発する。
- langchain v0.3,JavaScriptで、ReAct技術を使用したエージェントを活用する。
2)基本機能
- OpenAI, Gemini、Claude、DeepSeekの複数のモデルを、ユーザが切り替えて使用できる。
- 使用できるモデルは、gpt-4-turbo、gpt-4o、gpt-4o-mini、gemini-2.0-flash、gemini-1.5-flash、gemini-1.5-pro、claude-3-5-sonnet-20241022、claude-3-5-haiku-20241022、claude-3-opus-20240229とする。
- ユーザの入力に対して、ReActエージェントによりAIモデルを呼出し、分析を行う。
- 分析に必要な情報が不足しているときは、ユーザ対してヒアリングを行う。
- 分析結果をユーザに提示し、ユーザからのフィードバックを行う。
- ユーザとの対話の結果、要求分析が完了したら、ReActエージェントにより外部設計を行う。
- 外部設計では、下記を明確にする必要がある。
-- 開発すべきシステムが持つ機能を分析し、整理する。
-- 開発すべきシステムの境界面と、外部との入出力を明確にする。
-- 開発すべきシステムの構成モジュールを明確にする。
-- 構成モジュールは、システム、サブシステム、プロセス等の観点や、file, class, functionなどの観点で、階層的、内包的に検討すべきである。
-- システムが扱うべきデータを明確にする。
-- データの内容や属性、及び、どのようなタイミングでデータのCRUDが発生するかを明確にする。
-- 外部設計の結果は、必要に応じて、システム構成図、クラス図、シーケンス図などをMARKDOWN記法で表現する。
- 外部設計字に情報が不足している場合は、ユーザに対して、ヒアリングを行う。
- 要求分析の結果、外部設計の結果とも、ファイルの保存する。
3)保守機能
- システムのログをファイルに記述する。ログレベルはINFO,WARN,ERRのレベル分けをする。
- システム内でエラーが発生したときに、発生したエラーやスタックとレースが必ずログに残るようにする。
- AIとのエージェントレベルのやり取りを、チャットログファイルに記録する。
- チャットログには、llm/start, llm/end, chain/start, chain/end等の情報も含める。
- アプリケーションログ、通信ログ、チャットログとも、同一日付の記録は同一ファイルとする。
4)その他
- langChain v0.2とv0.3では、大きな非互換性があります。参考にするソースコードがv0.3であることを常に注意すること。
- Langchainのモジュールを新たにインポートするときは、Webサイトの公式情報や関連情報を検索し、最新状況を確認すること。
- フォルダ構成は、"SevenStudy/doc"が設計ドキュメント等、"SevenStudy/src"がプログラムコード等、"SevenStudy/test"がテストコード等の格納先です。
2.2. 成果
(a)デバッグの能力の向上
これまで、Windurf/cursorで、Claude 3.5 Sonnetを使っていましたが、デバッグ時の進め方が、個人的には今一だと思っていました。どう思っていたかというと、「近い事象の原因の可能性が高い数パターンを試している感じ」がして、「ロジカルに考えてほしい」という印象でした。
Claude 3.7 Sonnet-tninkingだと、人間相手にしているのに近いくらい、考えてくれている印象です。
具体的には、langchainのバージョン間の非互換問題にはずっと苦労していたのですが、Claude 3.7 Sonnet-tninkingだとAIのみで解決でき、人間でも解決が簡単にはいかないのではないかというバグも解決してくれました。下記は、プロジェクトルールなし版のバグレポートです。
(b)進め方のノウハウ
下記のようにすると、だいぶ快調になりました。
・AIエディタのプロジェクト単位のプロンプトを活用する(Cursorのプロジェクトルール等)。ただ、それでも忘れているような時があるので、明示的に指示するときもあり。
・要件分析、設計、実装計画などをAIに検討させ、そのアウトプットのドキュメントを生成させる。そして、適宜、参照や最新状況への更新の指示する。チャットだけで会話していると、いつの間にか忘れるので、AIと人間が共有できるドキュメントは必要だと思います。
・デバッグの記録やノウハウなども、AIに整理させる。どちらかというと、人間側のスキルアップのために必要。
下記は、AIに作成させたドキュメントの例です。
要件定義
3.リポジトリ
2025.03.03 山崎作成