Cosense上にAI召喚させて会話できる仕組みを作ってみた
from 2026/03/03
Cosense上にAI召喚させて会話できる仕組みを作ってみたmrsekut.icon
https://gyazo.com/cf249c36a1b8bd01b87b10005453a639
/mrsekut-p/cosense-ai
Cosense上に任意の人格、任意の人数のAIを召喚できる
Cosense上のボタンで起動・停止できる
必要に応じて関連ページ先も見てくれる
cosense-mcp-serverもそうだが、Cosenseにどう書き込むかのところで行き詰っているのでどう実装しているか知りたいtakker.icon
会話方法は/mrsekut-p/cosense-conversation skillを与えるだけで実現できるのか
去年はStructured Outputsで何とか表現できないか試してた覚えがあるが、そんなことせずAgent Skillsを与えるだけでいけるんだ
なんかすごい
書き込みはfunction callingみたいな仕組みかな
書き込み方式はinsert?patchで丸ごと書き換え?
@cosense/std使って書き込んでるで!!誰が作ったんやろこれめっちゃ便利mrsekut.icon
すごい、一体誰が作ったんだろ~takker.icon
すごいyosider.iconmtane0412.iconHiro Aki.iconnomadoor.icon基素.iconcaki.icon
人間みたいに1文字ずつ書かせたいyosider.icon
ChatGPTの回答生成はStream派?
が、複数の書き込みが並列に起こる場合は面倒なのかな
あんまり関係ないけれど、ChatGPTに答えてもらうときに、スッと答えずに少し迷ってる素振りを見せて欲しいと思ったことがあるnomadoor.icon
Cosense上にAI召喚させて会話できる仕組みを作ってみた#69a7b0f500000000008ee991
この点について詳しく知りたいですtakker.icon
自分もcosense-mcp-serverの書き込み機能の改良を検討する上でpatch()を使った方法を考えていたのですが、うまく設計できず難航していた状態でした
こんな感じですねmrsekut.icon
patch関数の中でコンフリクト処理を閉じ込めています
なのでpatch自体のリトライは起こり得るが、それのために往復するような処理は不要にできる
返答を書き込む先を、行テキストで特定させているんですねtakker.icon
ここを、「行IDで特定→失敗したら行テキストで特定」というロジックにすると、対応できるケースが増えそう
行削除を除いた任意の編集が返答中に生じた場合
全く同じ文字列の行が複数行あった場合
複数のresponseをまとめて書き込んでいるんですね。batch処理だtakker.icon
scrapboxでリアルタイム編集が盛り上がっていない状態なら確かにこれで十分だ
検討していた手法
patch()は、呼び出し時点のページ内容を受け取り、あたらしいページ内容を返す関数
conflictが起きるとリトライする
これを以下のようなフローでmcpに組み込む
1. tool呼び出し
2. 現在の内容を返す
3. 別のtoolに起点となるcommit idとあたらしい内容を渡す
4. conflictしなければ成功、conflictしたら現在の内容を返して再実行を要求
たださすがに複雑すぎるような
LLMがミスする余地が増えそうmrsekut.icon
単純に、patchファイルを受け取って書き換えるほうがいいのか
そもそも、ページ全体の差分を作らせるのはコンテキストを圧縮する、insert方式のほうがいい?
さらにそもそも、scrapboxに書き込ませるなら、インデントをぶら下げて書き込むとか、ブロックの入れ替えとか、scrapboxでよく使われる操作をmcp toolにしたほうがいい?
これはいったん後回しでも良さそうmrsekut.icon
ありがとうございますtakker.icon
ひとまず、LLMがページを読み取って返答を返す間にほとんど編集されないという仮定で書き込みツールを設計してみます
学会発表概要提出したらやります(やらないフラグ)