第8章 · Practice Projects

ドキュメント要約ツール

Document Summarizer
→ で次のスライド · F でフルスクリーン · N で講師ノート · Esc で終了

重要キーワード

Map-Reduce
マップリデュース
分割→部分処理→集約 の汎用パターン
Chunk
チャンク
長文を分割した単位
Long Context
ロングコンテキスト
1M トークンなど巨大な入力を直接渡す方式

ドキュメント要約ツール

PDF / Markdown / テキストを要約するツール。

設計

  1. ユーザーがファイルアップロード。
  2. テキスト抽出 (pdfplumber / python-docx)。
  3. 長すぎれば チャンク分割 → 個別要約 → メタ要約
  4. 結果を 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)
  • 統合要約
  • 全体トークン消費を表示
▶ Playground を開いて実行

理解度チェック

4 問のクイズで理解度を確認しましょう。

クイズを開く
🎉

まとめ

お疲れ様でした!