最近、Prefect HQのMarvinというツールをプロジェクトに導入してから、LLMを使ったエージェント開発の進め方がガラッと変わった。スター数も6000超えてるから、同じ悩みを持ってる人は結構いるんだと思う。
きっかけ
これまでClaudeでエージェント開発してたんだけど、やたらとプロンプトの管理が煩雑だった。会話履歴の管理、ツール定義、エラーハンドリング、リトライロジック……全部プロンプトに詰め込むか、別途Pythonで実装するかしかなくて、どちらにしても大変。チームの別メンバーが書いたコードを見直すときも「このプロンプトの意図は何か」を毎回確認する必要があって、正直ストレスだった。
使ってみた
Marvinのコンセプトは「Pythonの関数をAIに拡張する」という感じで、かなりシンプル。git cloneしてセットアップしたら、さっそく試してみた。基本的には@ai_fnデコレータで関数をAI化して、LLMに処理させる流れ。たとえば、テキスト分類なら
from marvin import ai_fn
@ai_fn
def classify_sentiment(text: str) -> str:
"""テキストのセンチメント判定"""
result = classify_sentiment("このサービス最高!")
この程度で動く。プロンプト管理もドキュメント文字列に書くだけで、型安全に結果を取り出せる。最初は「こんなシンプルで大丈夫か?」って思ったけど、実際に動かしてみたら想像以上に堅牢だった。
ここが良い
何より良いのは、複雑なプロンプトエンジニアリングをほぼ不要にしてくれる点。今まで「ユーザー入力を適切にパース」するのに20行のプロンプトが必要だったのが、型定義で完結する。Pydanticのモデルを使えば、バリデーションも同時に入るから、エラーハンドリングのコード量も減った。
もう一つは、複数のタスクを組み合わせやすいこと。エージェントのステップをPythonの関数で定義できるから、テスト書くのも簡単だし、ロジックの流れが見える。前のやり方だと、全体の設計図がプロンプトに埋まってて、可視性が悪かった。
気になった点
ドキュメントはまだ発展途上という感じで、複雑なユースケースになると公式ドキュメントだけでは足りないことがある。あとモデル選択の柔軟性が今後どう進化するかは見守る必要がありそう。
まとめ
LLMベースのツールを開発してて「プロンプト管理が大変」「ロジックの見通しが悪い」と感じてる人には、本当に試してみてほしい。仕組みがシンプルなので、オンボーディングも楽だし、チーム開発でも認識のズレが生まれにくい。自分としては、今後のエージェント開発はこのアプローチが基本になると思ってる。
より本格的なエージェントワークフロー環境が必要であればLangChainやDifyも比較してみてください。ビジュアルUIでフローを設計したい場合はLangflowが参考になります。