第8章 · Practice Projects
ドキュメント要約ツール
Document Summarizer
→ で次のスライド · F でフルスクリーン · N で講師ノート · Esc で終了
重要キーワード
Map-Reduce
マップリデュース
分割→部分処理→集約 の汎用パターン
Chunk
チャンク
長文を分割した単位
Long Context
ロングコンテキスト
1M トークンなど巨大な入力を直接渡す方式
ドキュメント要約ツール
PDF / Markdown / テキストを要約するツール。
設計
- ユーザーがファイルアップロード。
- テキスト抽出 (pdfplumber / python-docx)。
- 長すぎれば チャンク分割 → 個別要約 → メタ要約。
- 結果を Markdown で返す。
簡易実装
def summarize(text: str, style: str = "bullet") -> str:
prompt = f'''
次の文書を {style} 形式で日本語要約してください。
<doc>
{text}
</doc>
出力フォーマット:
<summary>
{{...}}
</summary>
'''
res = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}],
)
return res.content[0].text
長文対策: Map-Reduce
def chunk_text(text: str, max_chars: int = 4000) -> list[str]:
paragraphs = text.split("\n\n")
chunks, current = [], ""
for p in paragraphs:
if len(current) + len(p) > max_chars:
chunks.append(current)
current = p
else:
current += "\n\n" + p
if current:
chunks.append(current)
return chunks
def map_reduce_summary(chunks: list[str]) -> str:
partials = [summarize(c, style="bullet") for c in chunks]
combined = "\n\n".join(f"## チャンク{i}\n{p}" for i, p in enumerate(partials))
return summarize(combined, style="overview")
Long Context で一発
Claude 4 系は 200K〜1M トークンなので、チャンク分割せず一発で渡す のも有効。 コスト・精度のトレードオフで選びます:
| Map-Reduce | Long Context | |
|---|---|---|
| 精度 | やや低下 (情報落ちあり) | 高い (全体把握) |
| コスト | 並列分散しやすい | 入力トークンが大きい |
| Cache | 効きにくい | system に置けば効く |
Cache を効かせる
社内ガイドライン的な system prompt は固定して cache_control を付ける。
ファイル本体は user メッセージで送る。
長文をテンプレ化して system に置くなら 24h TTL も検討。
スタイル別プロンプト
- bullet: 箇条書き
- executive: 経営者向け 5 行
- technical: 技術詳細を保つ 200 字
- abstract: 学術抄録風
system に切り替え可能なテンプレを集約しておくと UI 実装が楽。
引用付き要約
第 4 章で扱った Citations を組み合わせると、要約に出典付きで返せます。 法務・医療・コンプラ系では必須。
試す
要約スタイルの違いを観察。
▶ 同じ文書を 3 スタイルで
次の文書を「経営者向け 3 行」「技術者向け 5 行 bullet」「学術抄録風 100 字」の 3 スタイルで要約してください。
文書: 大規模言語モデル (LLM) は近年、自然言語処理の幅広いタスクで目覚ましい成果を上げている。とくに数百億〜数兆パラメータ規模のモデルは、文脈理解・推論・コード生成などにおいて専門家レベルに迫る性能を示し、教育・医療・ソフトウェア工学・科学研究などで導入が進んでいる。一方で、ハルシネーション・公平性・電力消費・安全性といった課題も存在し、評価指標の整備や規制動向に注目が集まっている。Hands-on Exercise
演習: Map-Reduce 要約スクリプト
ローカルの長い Markdown ファイル (5000 字以上) を Map-Reduce で要約するスクリプトを書いてください。
- 4000 字ずつチャンク分割
- 各チャンクを並列に要約 (concurrent.futures)
- 統合要約
- 全体トークン消費を表示
🎉
まとめ
お疲れ様でした!