Site cover image

Site icon imageshow tech >> log

ネットワークエンジニアというものをやりながらガジェットや新しいツール的なものが大好きでとりあえず試してみることが多い.そんなものなどを残していこうかなと >> log .ただそれだけのoutput置き場.

Post title iconnotion ai [Q&A] にn8nでデータを突っ込んで見る

ネットワークを勉強するなら マスタリングTCP/IP がおすすめです

#show run


notion ai Q&A凄い…

まぁ,生成AIにも慣れてきてnotionのAIも素晴らしいがやっぱり用途が限られてなかなか完全には活用出来ていないなぁという感じでした.

そんな中,Q&Aというのがあるということで調べてみると,いやこれでいいのよ.

Q&Aとは

notionのワークスペース内を参照して回答してくれるAIさんです.

これを待っていました.今までいくつかのチャットボットを触って見ましたが,やはり自分のデータを参照してくれるものは少し敷居が高かったのですが,なんとnotionに書くだけという衝撃です.

これって,自分のデータぶっ込んだらいいんじゃない?

自分のnotionデータから回答を探してくれるってことは,どんどんデータを入れたら凄いんじゃないか?

ということで,n8n(こちらの記事を)でメールデータやSlackのデータをぶっ込んで見ました.

メールデータを連携する

現在Microsoft365のExchangeを利用しているのでそれを元にした手順となります.

Image in a image block

こんな感じで,受診フォルダとアーカイブフォルダにあるメールを1時間間隔でチェックを行い,それ以降に受信したメールのみNotionに登録する感じです.

IFノードでは時間チェックや不要なメールを排除してもらえればいいかと思います.

条件式 [#is greater than ]

{{ new Date($json.createdDateTime).getTime() }}
{{ new Date(Date.now()- (60 * 60 * 1000)).getTime() }}

また,Notion APIの制限として2000文字というのがあるので,Editノードで文字数を適度に短くしています.

{{ $json.body.content.substring(0, 1950); }}

メールデータを連携する

次にSlackです.

Image in a image block

Slackノードで,チャンネルのメッセージを取得する方法がわからなかったので,HTTPノードでクエリを投げています.

https://slack.com/api/conversations.history
Image in a image block

チャンネルIDは,slackノードで検索するとすぐ分かるので便利です.

取得データは,JSONデータで返されるのでItem Listノードでそれぞれのデータに分割しておきます.

そして,codeノードで以下のように投稿者を分かりやすい名前に,時間もLinux時間から変換して必要なデタに変換しています.

プログラム出来ない人なのでAIさんに教えてもらった内容で作っているのでいろいろとツッコミどころあるかもですが参考で…

const formattedData = [];

const conversionTable = {
  "AAAAAAAAA": "Aさん",
  "BBBBBBBBB": "Bさん"
};

for (let i = 0; i < 20; i++) {
  const itemDate = $item(i).$node["分割"].json["ts"];
  const itemText = $item(i).$node["分割"].json["text"].replace(/(AAAAAAAAA|BBBBBBBBB)/g, match => {return conversionTable[match] || match;});
  const itemUser = $item(i).$node["分割"].json["user"].replace(/(AAAAAAAAA|BBBBBBBBB)/g, match => {return conversionTable[match] || match;});
  const data = {    
    item_channel: "001_general",
    item_date: itemDate,
    item_title: itemText.replace(/(\n|undefined)/g, ""),
    item_user: itemUser,
  };
  formattedData.push(data);
}

あとは,メールと同じように60分前以降の投稿に限定してNotionに投げています.

これで,検索対象にはなったので少しづつ自分専用のQ&Aになっていくはずです.

Icon in a callout block
show tech(config)#end
show tech#

ネットワークをAIさんと解説する