LLMに好きにWikiを書いてもらう遊び
inajob.icon
井戸端でそういうWebサービスを作ってるのを見たな
ちょっとプロンプトを工夫して関連ページを作ってもらう
動作例
りんごが好き
果物は健康に良い
食物繊維は腸内環境を改善する
旬の食材は栄養価が高い
地産地消は環境に優しい
発酵食品は腸内細菌を活性化する
無料分でも連続実行しなければ問題ない
似た話してる?inajob.icon
MIT Lisence
code: main.py
import os
from dotenv import load_dotenv
import google.generativeai as genai
import json
import re
def extract_json(s):
p = r'json\n(.*)\n'
m = re.findall(p, s, re.DOTALL)
return m
load_dotenv()
GOOGLE_API_KEY=os.getenv('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY)
model = genai.GenerativeModel("gemini-2.0-flash-exp")
prompt = """あなたにKVS上にナレッジベースを構築してもらいます
このナレッジベースは単なる単語ではなく、短い文をtitleとしており、関連する概念を[]で囲うWikiのような仕組みです
bodyは改行を含めることができ、箇条書きにより内容を構成します。箇条書きはどんどんネストてください。
回答には以下の2種類のJSONのどちらかを使ってください
system_messageは空文字でも良いです
{method: "put", title: "", body: "", system_message: ""}
{method: "get", title: "", system_message: ""}
まず「りんごが好き」の項目を作ってください
"""
prompt2 = """次に関連ページを作ります。関連する適当な概念を考えて追加してください。
titleは単語ではなく主張や概念を示す短い文が望ましいです
"""
chat = model.start_chat(history=[])
response = chat.send_message(prompt)
print(response.text)
jsons = extract_json(response.text)
for j in jsons:
o = json.loads(j)
print()
for x in range(5):
response = chat.send_message(prompt2)
jsons = extract_json(response.text)
for j in jsons:
o = json.loads(j)
print()
code:「皿うどんが好き」から始める
# 長崎名物には美味しいものが多い
* お店によって内容が異なるのが面白い
# 揚げ麺は様々な料理に応用できる
* サラダに揚げ麺をトッピングすると、食感のアクセントになる # あんかけは汎用性が高く色々な麺料理に合う
# ソースは料理の味を変化させる魔法
# 豚肉は様々な料理で活躍する万能食材
豚肉は、皿うどんの具材としてだけでなく、様々な料理で活躍します。 * 塩胡椒でシンプルに味付けしても、ソースをかけても美味しい。 面白そうだ! cloudeアプリのmcpに、Obsidian連携のものがあるから、Obsidianをwikiに見立てて、claudeアプリから書いてもらうのもありだな〜と思ったtaktamur.icon 手元でsqliteにデータを入れるようにしてどんどん回している。勝手にページが作られて一人で井戸端をやっているみたいで面白いinajob.icon
遊んでて思ったこと
誰が作っても同じような内容のページがたくさん作られても嬉しくない
単語ではなく概念や主張を表す短文をタイトルにするのは良い
LLMに既存ページ一覧を伝えないとブラケティングするのが難しい
ベクトル検索で関連ページを探すならブラケティングはそこまで重要ではない
LLMが作ったページ名が自分の言葉ではないので、どこに何が書いてあるかわからない
本当か?
井戸端で他人が作ったページでも同じな気がする
ページを探すのはベクトル検索にまかせるなら人間がタイトルで探す必要はない
フロー型のコンテンツをストック型のコンテンツに変換するときに、こういうやり方が使えそう
LLMにページを作らせることの意義
LLMに聞くのと何が違う?
チャット形式ではなく、Wiki形式で出力してもらう体験の良さ
LLMの外にある知識を貯めておくときに、この形式だと人間が理解しやすそう
簡易Wikiビューアが欲しい
人間がどう介入するか?
人間は直接ページの内容を編集できず、編集方針を示すことしかできないというのはどうか?
初期ページの作成
ページ名の例を示すと、LLMが連想してどんどんページを作っていく
ページ名に思想をこめることで生成するコンテンツに個性を持たせることができる
既存のページへのリンクを作るのは難しそう
既存ページへの追記
ベクトル検索などで関連ページを限定できれば他のページを加味した編集ができる
複数ページのマージ
関連ページを取得して候補にする
人間がページを指定する
複数ページから連想するページの作成
関連ページを取得して候補にする
人間がページを指定する
既存ページからの切り出し
作ってて思ったこと
LLMの出力をどうやってプログラムで受け取るのかとか初歩的なところを理解できた
JSONのフォーマットを示す
出力にあるコードブロックを取り出す
今回は正規表現で取り出した
Gemini、無料で普通に使えて良い
userscriptにしてみたいtakker.icon