from [2025-02-23]
- [LLM]でチャットのログをWikiにする
  - フロー情報のストック情報化

# 手順まとめ
- dadamore-get.py でファイルを作る
  - 現状IDのファイルがたくさん作られるが、結局最後のファイルに全部入っている形式
  - 今実行するとrate limitで止まった
    - 一番大きなjsonは messages1345240136631451689.json
- python dadamore-convert.py out/messages1345240136631451689.json > txt/messages20250418.txt
- 目で前回の位置以降を残す
>> code
$ wc -l txt/messages20250418.txt
536 txt/messages20250418.txt
<<
- 500行くらいある
- メインマシンからこのデータを取得
- 手動でDBをコピー(バックアップ)
- python flow2stock.py sources/messages20250418.txt
  - スライドしながら読んでくれる
  - sourceに対象行番号を入れたほうが良いかも
    - 500行くらいならcontextに入るかな?
- rewrite_small_pages.sh で内容の少ないページを膨らませる
  - edit_pageでタイトルが変わったときに過去のページが消えない?
  - 書き直しても内容が少ないページは依然として残っている。ここでは気にしなくてよいかな
- $ python marge_dups_by_title.py
  - 似たタイトル(シーケンスマッチ)のものを統合
- $ python marge_dups_by_body.py
  - 似た内容(シーケンスマッチ)のものを統合
- $ python marge_dups.py
  - ベクトル距離と内容のシーケンスマッチの複合判定
  - 今回は動かさない
- 投稿部分
  - [inajob川の様子をWikiにしたもの]
  - まだうまくできない

## 課題
- Sourceに行番号を入れたい
  - 範囲が100行程度に収まるようにしたい
  - 範囲をORで結合したい
- inlineに自動投稿したい
- 挿入された日付を入れておきたい

# これをどう使うか?
- 今話している話題を分析して近い話題を提示する?
  - 今ある173程度のトピックの中で近い話題はあまりなさそう
- 話題がないときのフリに使える?

# 内容の少ないページを拡充する
- 3行以内のページは加筆ロジックを動かす
  - いい感じ!
    - たまに一般的な知識を詰め込んでくることがある
      - ソースから書き足せない場合はページをあえて追加しなくてよいという指示は通るかな?
        - 抑制しすぎて行数が伸びない
        - 書き直しても3行超えないなら消すというのもアリか?
      - まぁまぁ
  - あー、editして名前が変わるパターンがあるのか・・
- その後マージを動かす
  - 155までページが減った

# とりこみ 2025-03-20
この辺マージされてほしい
- PDトリガーの逆みたいなアダプタが怖すぎるけど逆に買いたい
- PDトリガーケーブルの逆

- チャットのログみたいな記事が作られるのを防ぎたい
- 3行くらいのページは扱いづらい
  - 話題を広げるスクリプトはある
  - 広げたうえでマージできた
- タイトルにブラケティングが入るのを防ぎたい
  - 後処理で消すことは出来る
- コロンで副題みたいなのをつけるのを防ぎたい

# 0.8, 0.3
- 0.9, 0.3との差分
- ありかも

- Milk-V Duoの可能性と課題 ('Milk-V Duoを使ったキーボード製作の可能性', np.float64(0.8957941296697549), 0.41208791208791207)
- Milk-V Duoを使ったキーボード製作の可能性 ('Milk-V Duoの可能性と課題', np.float64(0.8957941296697549), 0.41208791208791207)
- ramさえあれば動くならチープなマイコンにSRAM増設して動かすこともできる ('低スペック環境での[uxn]OSとメモリ増設の検討: [Varvara]、SRAM、malloc', np.float64(0.881526405176026), 0.39399293286219084)
- チープなマイコンにSRAM増設して[uxn]を動かす ('ramさえあれば動くならチープなマイコンにSRAM増設して動かすこともできる', np.float64(0.8246284345122522), 0.32525252525252524)
- 低スペック環境での[uxn]OSとメモリ増設の検討: [Varvara]、SRAM、malloc ('ramさえあれば動くならチープなマイコンにSRAM増設して動かすこともできる', np.float64(0.881526405176026), 0.36837455830388693)
# 0.9, 0.2
下との差分
- やや違うところがあるが、許容かな・・

- AIによるテキスト要約と議事録作成の使い分け ('AIによるテキストまとめの課題', np.float64(0.932060550360227), 0.2052980132450331)
- Notionを下書きにすると、はてなブログでテンプレートと[AI]活用ができる ('はてなブログにはテンプレートなんて機能はないけど、Notionを下書きページに使えばこっちのテ ンプレート機能が使える', np.float64(0.9621725084386845), 0.2006079027355623)
- uBlock Originの代替としてのAdGuard: ブラウザ拡張機能の選択 ('uBlock Originの代替にはAdGuardが有力', np.float64(0.9856864632271157), 0.2546816479400749)
- はてなブログにはテンプレートなんて機能はないけど、Notionを下書きページに使えばこっちのテンプレート機能が使える ('Notionを下書きにすると、はてなブログでテンプレ ートと[AI]活用ができる', np.float64(0.9621725084386845), 0.2006079027355623)
- スマートフォンでのメモ ('Notionに対するロックイン感', np.float64(0.9072892001931826), 0.21548821548821548)
  - これは微妙かな
- ソフトウェアとハードウェアの難しさの違い [ソフトウェア] [ハードウェア] [論理] [3次元] ('ソフトに適合性がないからハードをやりたがる [ソフトウェア] [ハードウェア] [理解]', np.float64(0.9663316574033904), 0.24615384615384617)
- ドーパミン枯渇による[報酬系]機能不全と[感情]への影響 ('孤独死対策としての[人感センサー]を用いた見守りシステム', np.float64(0.9957924510788682), 0.24354243542435425)
  - これもやや違う
- モニターの選択と活用:PC環境と配信環境 ('PC環境', np.float64(0.9187628730896912), 0.2369146005509642)
- 体力は計画的に使えないという感情 ('体調悪いときにお互いをリカバリーできるシェアハウスおすすめ', np.float64(1.0), 0.25)
  - やや違う
- 孤独死対策としての[人感センサー]を用いた見守りシステム ('ドーパミン枯渇による[報酬系]機能不全と[感情]への影響', np.float64(0.9957924510788682), 0.24354243542435425)
- 横浜市役所アトリウム ('横浜市役所アトリウムのイベント情報取得', np.float64(0.9110374819844745), 0.24704336399474375)
- 横浜市役所アトリウムのイベント情報取得 ('横浜市役所アトリウム', np.float64(0.9110374819844745), 0.2628120893561104)
- 自動車産業における[トヨタ生産方式]の特殊性と進化 ('自動車産業はトヨタ・デンソーあたりが提唱するノウハウが一般教養みたいになる', np.float64(0.9311222033678214), 0.2112676056338028)
  - やや違う
- 超整理法 ('体力は計画的に使えないという感情', np.float64(1.0), 0.22413793103448276)
  - 違う
- 遊ぶ時間ないおもちゃ ('体力は計画的に使えないという感情', np.float64(1.0), 0.23655913978494625)
- 長期間電源を入れていないとラズパイが壊れる? ('時間がないおもちゃ: Raspberry Pi', np.float64(0.9236244207376093), 0.2619047619047619)
- 食事の最適化と悩み ('食事は食欲が満たせればなんでもOK', np.float64(0.940557434128613), 0.2659380692167577)
- 食事は食欲が満たせればなんでもOK ('食事の最適化と悩み', np.float64(0.940557434128613), 0.2331511839708561)

# 0.9, 0.3
- Geminiのお気持ち表明 ('Geminiの不適切な応答: 風来のシレン6の壺に関する誤答と感情的な反応', np.float64(0.9333802098075556), 0.315)
- Geminiの不適切な応答: 風来のシレン6の壺に関する誤答と感情的な反応 ('Geminiのお気持ち表明', np.float64(0.9333802098075556), 0.32)
- Raspberry PiにおけるSDカードの信頼性と代替手段 ('Raspberry PiにおけるSDカード起因の問題とUSBブートによる対策', np.float64(0.977353025207242), 0.33399602385685884)
- Raspberry PiにおけるSDカード起因の問題とUSBブートによる対策 ('Raspberry PiにおけるSDカードの信頼性と代替手段', np.float64(0.977353025207242), 0.3101391650099404)
- [ikeji]氏による[picon]への[uxn]移植計画と日本語対応 ('週末に実装できる程度の仕様', np.float64(0.9650989204813398), 0.3553113553113553)
- uBlock Originの代替にはAdGuardが有力 ('uBlock Originの代替としてのAdGuard: ブラウザ拡張機能の選択', np.float64(0.9856864632271157), 0.3146067415730337)
- アウトプット効率の定量化と世の中のスピード感 ('アウトプット効率を定量化する', np.float64(0.9478990456417395), 0.3762962962962963)
- アウトプット効率を定量化する ('アウトプット効率の定量化と世の中のスピード感', np.float64(0.9478990456417395), 0.3674074074074074)
- アタマに一定量ROM欲しい ('プログラミングの記憶ができない問題', np.float64(0.9589740205455694), 0.35772357723577236)
- スキマ時間ものづくり ('スキマ時間ものづくり: 通勤時間を活用した手待ち時間対策', np.float64(0.9790119224373106), 0.3663157894736842)
- スキマ時間ものづくり: 通勤時間を活用した手待ち時間対策 ('スキマ時間ものづくり', np.float64(0.9790119224373106), 0.3452631578947368)
- プログラミングの記憶ができない問題 ('アタマに一定量ROM欲しい', np.float64(0.9589740205455694), 0.35772357723577236)
- 会議録画からの議事録作成の効率化 ('AIによるテキスト要約と議事録作成の使い分け', np.float64(0.9093582459440821), 0.4029126213592233)
- 時間がないおもちゃ: Raspberry Pi ('長期間電源を入れていないとラズパイが壊れる?', np.float64(0.9236244207376093), 0.32142857142857145)
- 社会貢献とは自分のやりたいことを追求し付加価値を生み出すこと ('社会貢献は無給のボランティアではなく、付加価値を生み出す活動', np.float64(0.9948811543216449), 0.45454545454545453)
- 社会貢献は無給のボランティアではなく、付加価値を生み出す活動 ('社会貢献とは自分のやりたいことを追求し付加価値を生み出すこと', np.float64(0.9948811543216449), 0.3986013986013986)
- 週末に実装できる程度の仕様 ('[ikeji]氏による[picon]への[uxn]移植計画と日本語対応', np.float64(0.9650989204813398), 0.3516483516483517)

問題なさそう(逆も表示されているが・・)

# どのくらい安定しているか
- 実行前: 142
- 実行後: 171
- ボディ類似度で結合: 158
- タイトル類似度で結合: 155
- 結果として13ページ増えた
- まだ似ているページはあるが、そこまで爆発しないかも
  - 閾値をもう少し調整すればさらに落ち着きそう
    - ベクトル検索が0.8以上
    - 内容距離 0.2以上
    - 一旦0.9, 0.3でやってみよう
  - 複数の指標で高めになってると消してよいとかできそう
    - {x} showにタイトル類似度、Body類似度も表示する
# チャットのログからいい感じにページを作る
- 今は100行でぶった切っているが、切り取られたところに話題があると分断されてしまう
- A,B,C,Dと分割された場合 A,Bで読み込み、B,Cで読み込み、C,Dで読み込む みたいなのをするとよさそう
  - 重複した内容のページの消し方はあとでかんがえる
- 一旦できた
# ベクトル検索でマージするページを探す
- ここまではタイトルの編集距離みたいなもので類似ページを探していた
- 本文のベクトル検索でやるとどうか?
  - 0.999以上とかでも結構全然関係ないページがヒットする
- 案外タイトルのSequenceMatchでも良い仕事をしている
- まずはタイトルのSequenceMatchでくっつけて、そのあと内容のSequenceMatchでくっつける?
  - よさそう

- 質の低い生地を削除したい
- 同じチャットログを何度か読み込ませてページを作った後に、マージや削除したい
# 気づき
- ページのマージの時にうまいことマージできていない
  - 一般的な知識が注入されて、個性的な記述が消えがち
  - バグでした
  - それはそれとしてマージの際に情報が欠落することがある
- ページタイトルが安定しない
  - タグみたいなのが混入するときがある
  - 1つのプロンプトで混入するとその中は全部そうなる
  - 単純パターンなのでリテイク指示を出せそう
- ブラケティング不足がある
  - ベクトル検索メインにするならブラケティングはそこまで頑張らなくて良い
- できたとて「で、?」となる問題
  - 参加していない人がこれに参加できるのでは?
    - 完全な共同編集だと双方向のやり取りが難しそう
    - コメントにするのはどう?
      - コメントは吸い込まれて反映される
        - 反映されるかどうかはLLM次第
          - 人間はそれに耐えられるか?
    - みたいだけの人がいる?
  - 別のCMSからページを参照する?
    - ページをマージしたりタイトルを変更する際にリンクが切れないように注意が必要
    - inlineで補完候補にするとかは良いかも
- 最近のLLMはコンテキストが大きいのでリクエスト数は少なめ
  - 2度舐めさせるとしたらもう少しリクエストが必要
  - 今は100行単位で実行している
- 何か処理する前と後で、行ったり来たりしたい気持ちがある
  - 全リビジョンを保持しておくとかが良さそうだが、、

# ベクトル検索
- embeddingをどうしよう
  - https://ai.google.dev/api/embeddings?hl=ja
# ページの公開
- 公開許可は取っているので[GitHub Pages]で公開したい
- 生データをどこに格納するか
  - GitにJSONを含める
  - inlineにJSONか、全データを配置してfetchする
    - まぁできるが、巨大な1ページができるのが気になる
    - 楽だからこれで行こうかな
    - [inajob川の様子]と同じやり方
      - というかここのサブコンテンツにするのが良さそうだね
- {x} Sqlite3のデータを1枚のMarkdownにする
  - タイトルを見出しレベル1にする
  - 本文はそのまま
  - [inajob川の様子をWikiにしたもの]
- {x} 上を取得してタイトル、ページの配列として保持する
- {x} 雑にビューアを作る
- {z} キーワードリンク
  - ブラケティングが適切でない問題あり
- { } 2hop link
- { } ベクトル類似検索
# 整理
- リファクタリング
- ソースを残す
# 実験
- [inajob川]のデータで試してみたい
  - まぁトピック単位でページを作ることは可能
  - 何度かチャットログを食わせると詳細化することもできる
    - やりすぎるとほかページの内容がページ内に埋め込まれ始める
      - 回数を決めるか、何らかの基準に達するまで繰り返すのがよさそう
      - 緩やかに重複するのは、この仕組みでは仕方ないと思う
  - あとやりたいこと
  - {x} マージ
    - 2回チャットを食わせるとよく似た別ページができる(tempが高めになっているからだと思う)
    - 一旦タイトルで類似度を測るようにして重複を削除した
    - 微妙に違うタイトルになり、結果ページが増える事がある
  - { } 複数ページから抽象的な概念に昇華
    - 対象をどのように取得するかが問題
      - タイトルから?
      - ベクトルから?
  - {x} ほかのページ情報の削除
    - 2つのページから重複している情報を片方に寄せる
    - よく似たページを探してきて、マージして、その後長い場合は分割を試みる、がよさそう
  - {x} ソースを残す
    - どのログから作ったページか、わかる必要がある
    - マージするときには複数ソースを対象とするため複数になりうる
    - 一旦カンマ区切りとかで何個か入れておけばよさそう(逆引きはしない)