家studyをつづって

IT技術やセキュリティで勉強したことをつづっています。

ローカルLLMで書類を要約してみた(Ollama)

概要

年度が変わり新生活がスタートしました。それに伴い、次々と手紙や書類が届きます。
ひとつひとつを読むのは大変なので、生成AIを使って必要な情報だけを抽出・整理できないかと考えました。

とはいえ、書類を外部サービスにアップロードすることはできません。
そこで、ローカル環境で動作するLLMを調べたところ、Ollama という仕組みにたどり着きました。

この記事では、Ollamaの環境構築から、実際に書類を要約させた結果までをまとめています。

 

Ollamaとは

Ollamaはローカル環境でLLMを簡単に動かすためのランタイムです。

  • モデルのダウンロード・管理が非常に簡単
  • CPU でも動作可能(GPU があれば高速)
  • Open-WebUI と組み合わせると ChatGPT のようなUIで使える
  • モデルの切り替えが1コマンドで完了
  • 完全ローカルで動作するためデータが外部に漏れない

 

Ollama環境構築

今回は以下の構成で環境を構築しました。

  • ホストOS:Windows 11
  • コンテナ管理:Docker Desktop
  • LLMランタイム:Ollama
  • UI:Open-WebUI

 

また、Ollamaを実行するためにPCを少しだけ増強しました。

www.iestudy.work

 

Ollamaの公式ドキュメントでGPU 推論に必要な条件が公開されています。

  • NVIDIA GPUのCompute Capabilityが5.0以上
  • NVIDIA Driver 531以上
  • CUDA backendが利用可能であること

NVIDIAでCompute Capability 5.0以上のGPUとしてGTX 750 Tiがあり、現在のGeForce GTX650 Ti 1GBからGTX750 Tiに交換しました。

docs.ollama.com

 

1.docker-compose.yml を作成

「docker‑compose.yml」はDockerコンテナをまとめて起動・管理するための設定ファイルです。
以下の内容で「docker-compose.yml」を作成します。

version: "3.8"

services:
  ollama:
    image: ollama/ollama:0.9.0
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped

    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "3000:8080"
    volumes:
      - open_webui_data:/app/backend/data
    extra_hosts:
      - "host.docker.internal:host-gateway"
    depends_on:
      - ollama
    restart: always

volumes:
  ollama_data:
  open_webui_data:

 

2.Ollamaコンテナ起動

起動するときは上記のymlファイルがあるディレクトリで以下のコマンドで起動します。

docker-compose up -d

コンテナが起動するとhttp://localhost:3000でアクセスすることが可能です。

 

3.LLMの取得と実行

コンテナを起動してからLLMを取得します。以下のコマンドでLLMを取得できます。

docker exec -it ollama ollama pull phi3.5:3.8b

 

今回はMicrosoftが開発した軽量で性能が良いとされるPhi-3.5系列のLLMを使用しました。
上記モデルはGTX 750 Ti / 2GB VRAMでもGPUオフロードが成功しました。

33層の内、7層をGPU上で処理
load_tensors: offloading 7 repeating layers to GPU
load_tensors: offloaded 7/33 layers to GPU

4.ナレッジベースの作成とモデルへの適用

ナレッジベースは、AIが参照できる専用のデータベースです。  
OllamaではPDF等の要約したいファイルをナレッジベースに置くことで要約することがきます。

ナレッジベースは「ワークスペース」-「ナレッジベース」より作成できます。

ナレッジベース作成


ナレッジベースを作成後、モデルに適用します。

モデルへの適用

ここまでで「ナレッジベースにあるファイルの内容を要約して」といったようなプロンプトを実行できるようになります。

 

要約させてみた結果

今回は表や写真等を含んだお便り(PDFファイル2つ、4ページ程度)を要約させてみました。処理は1~2分程度かかりました。

出力結果は、おおむねファイルに記載されている内容が含まれていましたが、ところどころ内容が間違っているものや、日本語として不自然な部分がありました。

また、やり取りを続けていると、突然関係のない内容(いきなりスターウォーズの話)が始まる「コンテキスト腐敗」が見られました。

「書類を要約する」という目的に対してはまだまだ課題が残っているので、今後改善していきたいと思います。