Skip to content

feat: 変換ペルソナ(persona をモデル左コンテキストに前置) - #92

Open
togatoga wants to merge 8 commits into
mainfrom
feat/conversion-profile
Open

feat: 変換ペルソナ(persona をモデル左コンテキストに前置)#92
togatoga wants to merge 8 commits into
mainfrom
feat/conversion-profile

Conversation

@togatoga

@togatoga togatoga commented Aug 8, 2026

Copy link
Copy Markdown
Owner

概要

azooKey-Desktop の「変換プロフィール」に相当する機能(karukan では persona)を追加します。config.toml に自分についての短いテキストを設定すると、それがモデルへ渡す左コンテキストの先頭に毎回付与され、プロフィールに合わせた変換(自分の名前の読みなど)が出やすくなります。

[conversion]
persona = "プログラミング"

azooKey の実装調査(要約)

  • zenz-v3 では専用特殊トークン U+EE03 を持つ独立フィールドとして左文脈タグより前に注入。zenz-v2 では平文で プロフィール:{p}・発言:{左文脈} と文脈に混ぜる方式
  • 共通仕様: 末尾25文字に切詰め(推奨10〜20文字)、空なら条件ごと省略
  • プロンプト最前部に置くことで KV キャッシュの共通接頭辞として乗り続け、実質初回の1度しかデコードされない

jinen モデルは専用トークンを学習しておらず、また「プロフィール:」「発言:」のような擬似構造化ラベルを理解できる規模でもないため、本PRは ラベルなしの単純前置(キーワードが直前の文章として見えるだけ)を採用しています。

実装

  • [conversion] persona(既定 "" = 無効)を追加
  • 注入は run_kana_kanji_conversion 内の単一の入口(persona_lctx)で行う:
    • {persona}{ctx}(ラベルも区切り文字もなしの純粋な連結。persona は trim 後の末尾25文字)
    • ライブ変換の各チャンクと Space 変換の両方に自動で効く
    • 変換キャッシュのキーは lctx を含むため、プロフィール込みの結果が正しくキャッシュされ、プロフィール変更(再起動)で自然に無効化される
    • 呼び出し側の max_context_length 切詰めの後に前置するため、プロフィールが切詰めで消えることはない
  • aux のモード表示にペルソナの実効値をそのまま表示(例: ⚡[あ]P:プログラミング)。表示とモデル入力は effective_persona を共有するので常に一致。lctx: 行はチャンク文脈のまま

テスト

  • プロフィール設定時に各チャンクの lctx が プロフィール:…・発言:{先行チャンクの変換} になること(キャッシュキー経由で検証)
  • 空プロフィールで lctx が不変であること
  • 25文字超は末尾が使われること
  • cargo test -p karukan-im / -p karukan-fcitx5 全通過、clippy / fmt クリーン

備考

jinen モデルはこの注入形式で学習していないため効果は実験的です(azooKey も「実験的な機能のため、精度が不十分な場合があります」と案内)。本命は将来のモデル学習での専用トークン化(zenz-v3 方式)です。

命名について

設定キーは profile ではなく persona です。profile はモデル・学習履歴・ユーザー辞書・ペルソナをプロフィール単位(プライベート/仕事など)で切り替える将来機能の名前として予約しています。

🤖 Generated with Claude Code

togatoga and others added 2 commits August 8, 2026 16:42
config.toml の [conversion] profile に自由なテキスト(例:
"田中太郎/エンジニア")を設定すると、run_kana_kanji_conversion で
モデルへ渡す左コンテキストの先頭に
「プロフィール:{p}・発言:{ctx}」の形で毎回付与される。
末尾25文字まで使用、空で無効。単一の入口で注入するため
ライブ変換のチャンクと Space 変換の両方に効き、変換キャッシュの
キー(lctx)にも自然に含まれる。azooKey の zenz-v2 方式に倣った
平文注入(jinen モデルは専用トークン未学習のため)。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
profile はモデル・学習履歴・ユーザー辞書・ペルソナをプロフィール単位で
切り替える将来機能の名前として空けておく。モデルへ注入するラベルは
自然な日本語の「プロフィール:」のまま。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@togatoga togatoga changed the title feat: 変換プロフィール(profileをモデル左コンテキストに前置) feat: 変換ペルソナ(persona をモデル左コンテキストに前置) Aug 8, 2026
togatoga and others added 6 commits August 8, 2026 17:34
ペルソナは意図的に lctx 表示へ出していないため、効いているかが
画面から分からなかった。モード表示(例: ⚡[あ]P)で一目で分かる
ようにする。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
P の印だけでは何が効いているか分からないため、モデルが受け取る
実効値(trim後の末尾25文字)をそのまま表示する。表示とモデル入力は
effective_persona で共有し、常に一致する。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
このサイズのかな漢字モデルは「プロフィール:」「発言:」のような
擬似構造化プロンプトを理解しないため、キーワード(建築、programming
など)が直前の文章として見えるだけの単純な形にする。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- キャッシュキー構築後は key.lctx を借用し、余分な clone を削除
- 却下した設計(ラベル方式)への言及をコメント・ドキュメントから削除
- mode_indicator の二重 format を整理
- effective_persona 経由で重複していた末尾切詰めテストを1本に統合

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant