うちのタダ働きをしてくれるアシスタント「あかせくん」を自慢させてください（労基案件）

# 「ねー、うちにもしらせくん欲しい！ちゃんとお世話するからー」「わかりました、でもお給料は払いませんからね」

https://qiita.com/hirokidaichi/items/ff638d2574955f7c6787

しらせくん、すごいですね。

ということで、しらせくんの同僚を我が家でも雇うことにしました。ただし**無賃金**で。赤字労働あかせくん。
まずはメールの要約をしてもらいます。

本家しらせくんはクラウド上のLLMサービスが中の人ですが、self-hosted教なので自宅内に既にいるollamaさんが中の人です。
n8nを利用してもいいのですが、我が家の既存メッセージ配信基盤に相乗りします。

|     | 本家しらせくん | 弊社あかせくん |
| --- | --- | --- |
| 中の人  | Google Gemini | ollama Swallow 8B |
| 職場  | クラウド | 在宅勤務 |
| 上司  | n8n | anythingllmと謎プログラム  |
| 業務範囲 | 広範 | メールなど少数のみ |
| メール仕入れ先 | gmail | getmail経由imap |
| 納品先 | slack | mattermost (self-hosted), ESP32接続LCD |
| 給与  | 月数千円 | **なし**（電力・機材は現物支給） |
| 性格  | 社交的 | ひきこもり・守秘義務遵守 |
| 仕事の質 | 高速・丁寧  | 職場による |

そんなあかせ君の最大の長所は、無賃労働というより口の固さです。私たちはGoogleやOpenAIなどの事業者が顧客との契約に基づいて真面目に情報を扱っていると信じてはいますが、それを検証する手段を持ちません。
他方、あかせ君は自宅(およびVPN内)からデータを外に持ち出すことはありません[^1]。しらせくんより仕事が遅かったり今ひとつだったとしても、取り扱うデータがもともと外から来たものだとしても、間違いなくこのひきこもり具合はあかせくんの長所です。

[^1]: anythingllmやollamaにそのようなバックドアがない場合。その有無は原理的には検証可能。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/16ab08cc-5ae8-7348-01b9-69243c14a552.jpeg)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204320/202aad75-1c4a-2bef-122f-e1f64446e16c.jpeg)

メール出典: [ウェザーニュース](https://weathernews.jp/)
使用フォント: [JK丸ゴシック](https://font.cutegirl.jp/jkmarugo.html)

# 概要

我が家にjsonのPOSTを受け取ると、内容に応じてLCD, LED, mattermostなどに通知してくれるhttpdがいます。
これを使って、「CO2濃度が高いので換気扇つけました」「vpnを経由しないsshログインありましたけどご自身ですよね？」「logwatch実行しました、結果確認してね」「新着メールが来ました」など様々な通知を処理しています。

```mermaid
stateDiagram-v2
direction LR

    prometheus --> alertmanager
    alertmanager --> 配信api
    alertmanager --> mattermost

    新着メール --> 配信api

    センサー監視 --> 配信api
    IMAP未読数監視 --> 配信api
    その他いろいろ --> 配信api

    各種機材 --> snmptrapd : snmptrap
    各種機材 --> sec : syslog
    sshd --> sec : syslog
    strongswan --> 配信api : updownスクリプト
    sec --> 配信api
    snmptrapd --> 配信api
    snmptrapd --> pushover : 緊急用

    配信api --> mattermost
    配信api --> pushover
    配信api --> メール

    配信api --> mqtt管理 : mongodb経由

    mqtt管理 --> EINK
    mqtt管理 --> LED
    mqtt管理 --> LCD

```

ここに相乗りしてollamaを実行します。
長文のメールも来ますし履歴の確認もしたいので、ollama 11434に直接ではなくanythingllmを経由します。

```mermaid
stateDiagram-v2


    新着メール --> getmail : imap

    state メール受信 {
       getmail
       procmail
       json化送信
    }
    getmail --> procmail
    procmail --> json化送信
    json化送信 --> あかせくん付き配信api : json POST

    あかせくん付き配信api --> anythingllm : 要約依頼
    anythingllm --> ollama
    ollama --> anythingllm
    anythingllm --> あかせくん付き配信api : 要約結果
    
    あかせくん付き配信api --> mattermost : 本文と要約
    あかせくん付き配信api --> mqtt管理　: 短文要約
    mqtt管理 --> ESP32接続液晶ディスプレイ : mqtt

```

# レシピ

## getmail

imapをpollして、メールを取り込んでくれるgetmailです。

https://pyropus.ca./software/getmail/

一つ注意点があります。getmail6と名乗るものがありますが、元のgetmailとは別物でバグもあります。お勧めできません。

https://marc.info/?l=getmail&m=163572177031123

## procmail

もうかなりの歴史のprocmail

https://github.com/BuGlessRB/procmail

いまならもっとモダンなものもあるでしょうが、大昔からずっと使ってきたフィルタの山もあるのでそのまま使います。

## json化 (自作プログラム)

procmailからパイプとして起動。

```
:0 c : $LOCKFILE
| json-forwarder
```

stdinを読んでMIMEなど処理してjsonでpostします。

## 配信api (自作プログラム)

webアプリフレームワークで適当に作ります。
要約処理にはそこそこ時間がかかりますので、anythingllmの呼び出しは非同期のworkerに「このプロンプトを処理して、結果をmattermostのhogeチャネルに投稿とmongodbへ書き込みしてね。あとは任せた！」と投げて早々に200を返します。

```text:
以下のメールを要約してください。

subject: $subject  
from: $from
$body
```

`jsonで出力してください` 等と依頼した場合でも、jsonの前後に自然言語がつくことがあります。json decodeの前に正規表現で`{}`の外を消しましょう。

## mqtt管理 (自作プログラム)

mqttでESP32達にお知らせを出すプログラム。

queueとして使うmongodb collectionをwatchし、通知を出します。
夜中は些細な通知を表示すると安眠妨害で怒られるので検閲をします。
人間が不在の時は通知を無視します。
処理し終わったらdequeueします。

## anythingllm

直接ollamaを扱うにはRAGなど色々面倒なので、anythingllmを使います。
api keyを出すと、REST APIで操作できます。

https://qiita.com/tags/anythingllm

## ollama

お馴染みollama

https://qiita.com/tags/ollama

東工大+産総研のswallow 8bを使っております。

https://qiita.com/tags/swallow

## mattermost

お馴染みmattermost

https://qiita.com/tags/mattermost

## ESP32接続液晶ディスプレイ

https://qiita.com/curtain6935/items/e3b14da04bf95aacc18b

MQTTで文字列を受け取ったら、しばらく液晶に表示するようにします。

# あかせくん労働強化

あかせくんにはスキャンしてOCRされたPDFからの金額抽出などもしてもらっています。
しかしOCRも宅内完結で正直、品質があまり良くなく、結果としてあかせくんも誤認識しがちです。とはいえ、自分で全部やるよりは遥かに楽です。

他、RSSやlogwatchなども要約もしております。

あかせくんがんばれ！ お仕事案はたくさんあるんだ！ お給料は払わないけどね！

# 謝辞

元ネタとなったしらせくんの筆者、ollamaやswallowなどの作者のみなさまに謝意を表します。

全国の姓が「あかせ」のみなさま、ごめんなさい。