<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>AI on Clarence｜Backend・AI・DevOps・Infrastructure</title>
    <link>https://clarence.tw/ja/tags/ai/</link>
    <description>Recent content in AI on Clarence｜Backend・AI・DevOps・Infrastructure</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja</language>
    <lastBuildDate>Mon, 26 Oct 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://clarence.tw/ja/tags/ai/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>LLM テキスト要約パイプラインの設計とトレードオフ：OpenAI API、Ollama、ローカルモデル</title>
      <link>https://clarence.tw/ja/posts/llm-text-summarization-platform/</link>
      <pubDate>Mon, 26 Oct 2026 00:00:00 +0800</pubDate>
      
      <guid>https://clarence.tw/ja/posts/llm-text-summarization-platform/</guid>
      <description>&lt;p&gt;2022 年から、私は LLM を実際のプロダクトのワークフローに組み込んできました。その一部が社内向けのテキスト要約・AI application プラットフォームで、OpenAI API、Ollama、ローカルモデル、batch processing を統合し、制御しやすく運用しやすい model usage を重視しています。&lt;/p&gt;
&lt;p&gt;社内システムの詳細は公開に適さないため、この記事は詳細なケーススタディではありません。要約パイプラインを設計・運用するときに私が使っている原則とトレードオフをまとめたものです。記事中の API の挙動は執筆時点（2026 年 10 月）の公式ドキュメントで確認していますが、実際に使う前には最新のドキュメントを確認してください。&lt;/p&gt;
&lt;h2 id=&#34;要約は-api-を呼ぶだけでは終わらない&#34;&gt;要約は API を呼ぶだけでは終わらない&lt;/h2&gt;
&lt;p&gt;要約のデモはすぐに作れます。テキストをプロンプトに入れて「要約して」と頼めば、数分で結果が出ます。本当の仕事はデモの後から始まります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;入力の長さは一定ではなく、モデルの context length を超えるテキストもある。&lt;/li&gt;
&lt;li&gt;一度に大量の件数を処理すると、rate limit、タイムアウト、部分的な失敗に直面する。&lt;/li&gt;
&lt;li&gt;下流のシステムは固定フォーマットを必要とするが、モデルの出力は毎回同じ形とは限らない。&lt;/li&gt;
&lt;li&gt;コスト、レイテンシ、データの機密性によって、どのモデルに送るべきかが変わる。&lt;/li&gt;
&lt;li&gt;モデルやプロンプトを変えた後、品質が上がったのか下がったのかを把握する必要がある。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そのため私は、要約を 1 回の API 呼び出しではなく、データ処理のパイプラインとして設計しています。&lt;/p&gt;
&lt;h2 id=&#34;パイプラインの分解&#34;&gt;パイプラインの分解&lt;/h2&gt;
&lt;p&gt;処理は、それぞれ観測でき、個別に再実行できるステージに分けています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;前処理&lt;/strong&gt;：書式のノイズ、重複した内容、モデルに送る必要のないフィールドを取り除きます。環境の外に出すべきでないデータもこの段階で扱います。入力がきれいなほど、トークン使用量も出力品質も管理しやすくなります。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分割&lt;/strong&gt;：まずトークン数を見積もり、モデルが扱える長さを超える場合は段落や意味の区切りで分割します。重要な箇所が途中で切れないよう、必要に応じて少し重複させます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;モデル呼び出し&lt;/strong&gt;：短いテキストはそのまま要約します。長いテキストは map-reduce 方式で、各チャンクを要約してから、それらをまとめて最終的な要約にします。各呼び出しの入力が管理できる範囲に収まり、失敗しても該当チャンクだけを再実行すれば済みます。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;検証&lt;/strong&gt;：出力フォーマット、必須フィールド、長さ、明らかな誤りを確認し、通らないものは失敗として記録するかリトライに回します。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;出力&lt;/strong&gt;：使用したモデル、プロンプトのバージョン、処理状態と一緒に結果を保存し、後から追跡・比較できるようにします。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;ローカルモデルでは context length に特に注意が必要です。Ollama のデフォルトの context length は VRAM の容量によって決まり、&lt;code&gt;OLLAMA_CONTEXT_LENGTH&lt;/code&gt; で変更でき、実際の割り当ては &lt;code&gt;ollama ps&lt;/code&gt; の CONTEXT 列で確認できます（&lt;a href=&#34;https://docs.ollama.com/context-length&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Context length 公式ドキュメント&lt;/a&gt;）。この設定を確認しないと、長いテキストがモデルに最後まで読まれない可能性があります。Ollama のインストール、コマンド、環境変数は &lt;a href=&#34;https://clarence.tw/ja/notes/llm/ollama-setup/&#34;&gt;Ollama コマンドと設定&lt;/a&gt; にまとめています。&lt;/p&gt;
&lt;h3 id=&#34;下流につなぐための-structured-output&#34;&gt;下流につなぐための structured output&lt;/h3&gt;
&lt;p&gt;要約を他のシステムで使う場合は、モデルに JSON で出力させ、schema でフィールドを制約します。&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
