Guidoが作成したStructured RAG実装「typeagent_py」のテンプレートとユーティリティ集
このリポジトリには、typeagent_pyを使ったStructured RAGの実装例とユーティリティが含まれています。
- クラッシックRAGの課題(検索精度の低さ)を解決
- グラフ構造・テーブル・JSONスキーマなど構造化された情報を検索対象とする
- 意味的検索 + 構造的照合により安定した結果を実現
- Microsoftが提案した技術
- Guidoによる実験的プロトタイプ
- Pydanticモデルを検索対象とする
- 教育目的でコードが読みやすい
- Agent的な技術の実装例
.
├── README.md # このファイル
├── typeagent_template.py # 基本テンプレート(Python)
├── typeagent_template.ipynb # Google Colab用ノートブック
└── typeagent_utils.py # 実用的なユーティリティ
pip install typeagent==0.3.0export OPENAI_API_KEY="your-api-key-here"
export OPENAI_MODEL="gpt-4o-mini"import asyncio
from typeagent_template import sample_basic
# 基本サンプルの実行
asyncio.run(sample_basic())基本的な使用例を含むテンプレートスクリプト
含まれるサンプル:
- サンプル1: 基本的な使用例
- サンプル2: 会議議事録の管理
- サンプル3: プロジェクト管理
- サンプル4: カスタマーサポート履歴
実行方法:
python typeagent_template.pyGoogle Colaboratory用のノートブック形式テンプレート
特徴:
- セルごとに実行可能
- 段階的に学習できる構成
- カスタムデータで試せるセル付き
使い方:
- Google Colabにアップロード
- 左側の鍵アイコンから
OPENAI_API_KEYを設定 - 各セルを順番に実行
実用的なユーティリティクラスとヘルパー関数
主要クラス:
様々な形式から会話データをインポート
from typeagent_utils import ConversationImporter
# JSONから
dialog = ConversationImporter.from_json("data.json")
# CSVから
dialog = ConversationImporter.from_csv("data.csv")
# テキストファイルから
dialog = ConversationImporter.from_text("data.txt")会話データを各種形式にエクスポート
from typeagent_utils import ConversationExporter
dialog = [("Alice", "こんにちは"), ("Bob", "やあ")]
# JSONへ
ConversationExporter.to_json(dialog, "output.json")
# CSVへ
ConversationExporter.to_csv(dialog, "output.csv")
# テキストへ
ConversationExporter.to_text(dialog, "output.txt")拡張機能付きRAGマネージャー
機能:
- クエリログの自動記録
- 統計情報の取得
- バッチ処理
- ファイルからの直接インポート
import asyncio
from typeagent_utils import EnhancedRAGManager
async def main():
# 初期化
rag = EnhancedRAGManager("mydb.db", log_queries=True)
await rag.initialize()
# ファイルから追加
await rag.add_dialog_from_file("data.json")
# バッチクエリ
questions = ["質問1", "質問2", "質問3"]
results = await rag.batch_query(questions)
# 統計表示
rag.print_statistics()
# ログ保存
rag.save_query_log("log.json")
asyncio.run(main())対話型セッション
from typeagent_utils import InteractiveRAGSession, EnhancedRAGManager
import asyncio
async def main():
rag = EnhancedRAGManager("mydb.db")
await rag.initialize()
# データ追加...
# 対話セッション開始
session = InteractiveRAGSession(rag)
await session.start()
asyncio.run(main())対話セッションのコマンド:
- 質問を入力: 通常の質問を入力
stats: 統計情報を表示save: クエリログを保存exit,quit,q: セッション終了
テスト用サンプルデータ生成
from typeagent_utils import SampleDataGenerator
# 会議議事録のサンプル
meeting_data = SampleDataGenerator.generate_meeting_minutes(5)
# カスタマーサポート履歴のサンプル
support_data = SampleDataGenerator.generate_customer_support(5)import asyncio
from typeagent_utils import EnhancedRAGManager
async def example1():
# 準備
rag = EnhancedRAGManager("example1.db")
await rag.initialize()
# JSONファイルからインポート
await rag.add_dialog_from_file("meeting_log.json")
# 質問
answer = await rag.query("今月の売上目標は?")
print(answer)
asyncio.run(example1())import asyncio
from typeagent_utils import EnhancedRAGManager, InteractiveRAGSession
async def example2():
rag = EnhancedRAGManager("example2.db")
await rag.initialize()
# データ追加
dialog = [
("Alice", "プロジェクトは順調です"),
("Bob", "来週リリース予定です")
]
await rag.add_dialog(dialog)
# 対話セッション
session = InteractiveRAGSession(rag)
await session.start()
asyncio.run(example2())import asyncio
from typeagent_utils import EnhancedRAGManager, SampleDataGenerator
async def example3():
rag = EnhancedRAGManager("example3.db", log_queries=True)
await rag.initialize()
# サンプルデータ生成
data = SampleDataGenerator.generate_meeting_minutes(10)
await rag.add_dialog(data)
# バッチクエリ
questions = [
"売上目標について誰が報告した?",
"マーケティング施策は?",
"次回ミーティングの予定は?"
]
results = await rag.batch_query(questions, verbose=True)
# 統計表示
rag.print_statistics()
# ログ保存
rag.save_query_log("query_log.json")
asyncio.run(example3())[
{
"speaker": "Alice",
"text": "こんにちは"
},
{
"speaker": "Bob",
"text": "やあ、元気?"
}
]speaker,text
Alice,こんにちは
Bob,やあ、元気?Alice: こんにちは
Bob: やあ、元気?
- 会議議事録の管理: 会議内容を検索可能な形で保存
- プロジェクト情報の整理: タスク、期限、担当者の管理
- カスタマーサポート: 問い合わせ履歴の検索
- 社内ナレッジベース: FAQ、手順書の構造化
- チャットログ分析: Slackなどのログから情報抽出
- OpenAI APIキーが必要です
- 実験的プロトタイプのため、本番環境での使用は慎重に
- 機密情報は外部サービスに流れるため注意
- データベースファイル(.db)はローカルに保存されます
このテンプレート集は教育目的で作成されています。 typeagent_py本体のライセンスに従ってください。
改善案やバグ報告は歓迎します。
作成日: 2025年10月24日
対応バージョン: typeagent==0.3.0