Ollama + PowerShellでAI連携タスク管理アプリを作る

AI

はじめに

以前の記事で Windows への Ollama のインストール方法 と、PowerShell で Windows Forms を使った GUI の作り方 を紹介しました。

今回はこの2つを組み合わせて、ローカル LLM によるタスク分解機能付きのタスク管理アプリを PowerShell で作ります。

完成したアプリのソースコードは以下のリポジトリに置いています。

アプリの概要

作成するアプリの主な機能は次のとおりです。

  • タスクの追加・削除・完了切替
  • タスクデータを JSON ファイルに保存・読み込み
  • Ollama の REST API を呼び出し、自由記述メモからタスクを自動抽出してインポート
アプリ全体像
アプリ全体像

Ollama API 連携

モデル一覧の取得

Ollama は /api/tags エンドポイントでインストール済みモデルの一覧を返します。

function Get-OllamaModels {
    param([string]$Endpoint = 'http://localhost:11434')

    $uri = "$($Endpoint.TrimEnd('/'))/api/tags"
    $response = Invoke-RestMethod -Method Get -Uri $uri
    return @($response.models | ForEach-Object { $_.name })
}

「一覧取得」ボタンを押すと取得したモデル名をコンボボックスに登録します。

モデル一覧取得
モデル一覧取得

テキストからのタスク抽出

メモ欄に会議の議事録やアイデアメモを貼り付けて「タスク抽出」ボタンを押すと、Ollama の /api/generate にプロンプトを投げてタスクを箇条書きで返させます。

$body = @{
    model  = $Model.Trim()
    stream = $false
    prompt = "あなたはタスク管理アシスタントです。次のテキストから、実行すべきタスクをすべて抽出し、1行に1つずつ「-」で始まる箇条書きで列挙してください。各タスクは40文字以内の日本語で、動作が明確な短文にしてください。タスク以外の説明文は一切不要です。テキスト:`n$($PromptText.Trim())"
} | ConvertTo-Json -Depth 4

$uri = "$($Endpoint.TrimEnd('/'))/api/generate"
$response = Invoke-RestMethod -Method Post -Uri $uri -ContentType 'application/json; charset=utf-8' -Body $body

stream = $false を指定することで、ストリーミングではなく完全なレスポンスを一括で受け取ります。

返ってきたテキストを行に分割し、- などの箇条書き記号で始まる行のみ抽出してタスク候補とします。

$tasks = $text -split "`r?`n" |
    ForEach-Object { $_.Trim() } |
    Where-Object { $_ -match '^[-・\*\d]' } |
    ForEach-Object { $_ -replace '^[-・\*]\s*', '' -replace '^\d+[.\)]\s*', '' } |
    Where-Object { -not [string]::IsNullOrWhiteSpace($_) } |
    ForEach-Object { $_.Trim('"').Trim() }

インポートダイアログ

抽出されたタスク候補は CheckedListBox で一覧表示され、登録する項目を選択できます。全選択・全解除のトグルボタンも付けています。

インポートダイアログ
インポートダイアログ

チェックを入れたタスクのみ $script:Tasks に追加され、JSON に保存されます。

使い方

以下のリポジトリにソースコードを置いています。READMEに使用方法を記載しているので、そちらを参照してください。

まとめ

Ollama の REST APIを使うと、ローカルで使用するアプリに簡単にLLMの機能を組み込むことができます。 アイデア次第で様々な応用が考えられるので、ぜひ試してみてください。

コメント

タイトルとURLをコピーしました