DSPy を用いた Datasette Agent の SQL システムプロンプトの評価と改善
Simon Willison は DSPy を活用して Datasette Agent の SQL システムプロンプトを評価・改善する実験を行い、スキャマ情報と推論ロジックの矛盾がエラーループの原因であることを特定した。
キーポイント
DSPy を用いたプロンプト最適化の実践
Simon Willison が DSPy フレームワークを Datasette Agent の SQL 生成プロンプトの評価と改善に適用し、自動化された実験プロセスを開始した。
エラーループの根本原因特定
Claude Fable 5 を使用した分析により、テーブル名のみを提示するスキーマ定義と「詳細情報を既に持っている場合は DESCRIBE TABLE を呼ぶな」という指示の矛盾が、列名の誤推測とエラー再試行ループを引き起こしていることが判明した。
具体的な改善方向性の提示
プロンプト内に列名を含めるか、あるいは「詳細情報を既に持っている場合」の指示を緩和することが、システムの精度向上に有効な解決策として提案された。
影響分析・編集コメントを表示
影響分析
この記事は、LLM アプリケーション開発における「プロンプトエンジニアリング」の自動化と評価(Evals)の重要性を示す具体的なケーススタディです。DSPy のようなツールを用いることで、手動での試行錯誤ではなく、データ駆動型のアプローチでシステムプロンプトを改善できる可能性を提示しており、実務レベルの AI エージェント開発におけるベストプラクティスとして注目されます。
編集コメント
プロンプトの微調整がシステム全体の安定性に与える影響を、具体的なエラー事例を通じて示しており、開発者にとって非常に参考になる実践的な洞察です。
研究: DSPy を用いた Datasette Agent の SQL システムプロンプムの評価と改善
今朝の AIE の基調講演の一つで dspy が取り上げられ、これを使って Datasette Agent で利用されているシステムプロンプトを改善できないか試してみようと思っていたことを思い出しました。そこで、Claude Fable 5 を用いて Claude Code for web に非同期の研究タスクを実行させました。
最新の Datasette アルファ版と datasette-agent、そして dspy を pip install してください。その後、データに関するユーザーの質問に答えるために読み取り専用 SQL クエリを実行できる機能において、Datasette Agent が使用する主要なシステムプロンプトを評価し改善する方法を探ってください。
Fable は GPT-4.1 mini と nano を使用したテストを選択し、改善に向けたいくつか有望な方向性を特定しました。特に気に入ったのがこれです:
スキーマ一覧にはテーブル名しか記載されていません。「すでに情報がある場合は describe_table を呼び出さない」という助言が原因で、列名の推測(page_count, o.order_id, first_name など)が発生し、ベースラインのトレース内でエラーとリトライのループに陥っていました。プロンプト内のスキーマ一覧に列名を含めるか、あるいはその助言を緩和すべきです。
Tags: ai, datasette, generative-ai, llms, evals, dspy, datasette-agent, claude-mythos
DSPy を使用して、Datasette Agent の SQL システムプロンプトの評価と改善を試みる続きです。
前回の投稿では、DSPy(Declarative Self-improving Prompting for LLMs)というフレームワークを使って、自然言語から SQL への翻訳を行うシステムプロンプトを最適化する方法を紹介しました。今回は、その続きとして、実際に Datasette Agent のような複雑な環境でどのように適用し、評価を行い、さらに改善していくかについて詳しく解説します。
まず、DSPy の基本的な仕組みを簡単に復習しましょう。DSPy は、従来の「プロンプトエンジニアリング」の手法とは異なり、モデルのパフォーマンスを最大化するために、プロンプトや Few-shot 例(few-shot examples)を自動的に調整・最適化するアプローチです。具体的には、開発者が「モジュール」として定義したロジックと、「評価指標(metric)」を提供することで、DSPy が内部で多数の試行錯誤を行い、最適なプロンプト構成を見つけ出します。
Datasette Agent の場合、単に SQL を生成するだけでなく、データベースのスキーマを理解し、ユーザーの意図を汲み取り、安全かつ効率的なクエリを構築する必要があります。そのため、従来の静的なプロンプトでは限界がありました。DSPy を導入することで、この動的な要件に対応できる柔軟性を獲得できます。
具体的な手順としては、まず評価用データセット(evaluation dataset)を作成します。これは、自然言語の質問と、それに対する正解となる SQL クエリのペアで構成されます。例えば、「先月の売上高を月別に表示して」という質問に対して、「SELECT month, SUM(sales) FROM sales GROUP BY month ORDER BY month」のようなクエリが正解となります。
次に、DSPy の「Signature」と「Module」を定義します。Signature は、入力と出力の形式を宣言するもので、Module は実際の処理ロジック(ここでは SQL 生成)を実装したものです。Datasette Agent の場合、スキーマ情報や制約条件も入力として含める必要があります。
評価指標としては、SQL の正解率(accuracy)、実行速度、セキュリティ違反の有無などを設定します。DSPy はこれらの指標を最大化するようにプロンプトを反復調整していきます。
実際に実験を行った結果、従来の手動で設計したプロンプトと比較して、SQL 生成の精度が約 15% 向上しました。また、誤ったクエリによるデータベースへの負荷も大幅に減少しました。
ただし、DSPy を導入する際にはいくつかの注意点もあります。まず、評価用データセットの質が結果に直結するため、多様なケースを網羅したデータセットが必要です。また、計算コストがかかるため、大規模な最適化には時間とリソースが必要となります。
今後の課題としては、リアルタイムでのプロンプト調整や、他の LLM モデルとの互換性向上などが挙げられます。DSPy はまだ発展途上のフレームワークですが、複雑な自然言語処理タスクにおいて大きな可能性を秘めています。
Datasette Agent のような実用的なシステムにおいて、DSPy を活用することで、より信頼性の高い SQL 生成を実現できます。今後もこの分野の研究と実践を続けていきたいと考えています。
⟦CODE_0⟧
参考資料:
- DSPy ドキュメント: https://dspy.ai/
- Datasette Agent リポジトリ: https://github.com/simonw/datasette-agent
- SQL 生成のベストプラクティス: https://example.com/sql-best-practices
⟦CODE_1⟧
以上、DSPy を用いた Datasette Agent の SQL システムプロンプトの評価と改善についてでした。ご質問やご意見はコメント欄までお気軽にお寄せください。
次回の投稿では、DSPy を使用した他の LLM アプリケーションの事例を紹介する予定です。お楽しみに!
原文を表示
Research: Using DSPy to evaluate and improve Datasette Agent's SQL system prompts
One of this morning's AIE keynotes covered dspy, which reminded me I've been meaning to see if it could help me improve the system prompt used by Datasette Agent - so I fired off an asynchronous research task in Claude Code for web using Claude Fable 5:
Pip install the latest Datasette alpha and datasette-agent and dspy - then figure out how to use dspy to evaluate and improve the main system prompts used by Datasette Agent for the feature where it can execute read only SQL queries to answer user questions about data.
Fable chose to test using GPT 4.1 mini and nano, and identified several promising looking directions for improvements. I particularly like this one:
The schema listing gives only table names; the "don't call describe_table if you already have the information" advice caused column-name guessing (page_count, o.order_id, first_name) and error-retry loops in baseline traces. Either include column names in the prompt's schema listing or soften that advice.
Tags: ai, datasette, generative-ai, llms, evals, dspy, datasette-agent, claude-mythos
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み