charlm-agent
5000 万パラメータ(52.6M)の文字単位の小さな言語モデルです。2 つのことができます。
- 役になりきった会話:短い人物設定(カード)を渡すと、その人物として雑談や簡単な案内に答えます。
- ゲームの行動選び:ゲームが「目標・状態・使える操作」を送ると、目標に近づく操作をタグで返します。
CPU だけで動きます。4bit 版は 33MB です。
どれを使えばいいか
| フォルダ | 中身 | 使いどころ |
|---|---|---|
agent6/ |
会話 + 行動選び(最新) | まずはこれ。ゲームに組み込むなら model_4bit.pt |
npc4/ |
会話だけに絞った版 | 行動選びが要らず、会話の質を優先したいとき |
base/ |
事前学習だけの土台 | 自分で追加学習したいとき |
各フォルダの model_final.pt は通常版(210MB)、model_4bit.pt は 4bit 量子化版(33MB)です。
使い方
charlm_run.py と charlm_fold.py を同じ場所に置いて使います(PyTorch のみ必要)。
from charlm_run import Model
m = Model("agent6/model_4bit.pt") # GPU があれば GPU、なければ CPU
# 会話: 最初のユーザー発話の前にカードを置き、空行で区切る
card = "You are Mira, a farmer in the village of Elm. You are cheerful and practical."
print(m.reply([card + "\n\nHi! What do you grow here?"], temp=0.7))
# 行動選び: GOAL / OPS / STATE を毎ターン送る。答えは {考えの筋道}<操作>
turn = ("GOAL: life >= 1\n"
"OPS: <a> life+1 gold-3 | <b> gold+2 (needs gold>=1) | <c> life-1\n"
"STATE: life=0 gold=7")
print(m.reply([turn], n=260)) # -> {life 0 >=1 up. up: a+1. a ok}<a>
reply(turns) の turns は、ユーザー → モデル → ユーザー … の順に並べた文字列のリストです。
行動選びの形式
GOAL: 変数 比較 数:達成すべき条件(>=<=><==、andで 2 つまで)OPS: <名前> 変数+数 変数-数 (needs 変数>=数) | ...:使える操作。名前は自由(学習で見ていない名前でも読めます)STATE: 変数=数 ...:今の状態。目標の変数を先頭に置いてください- 答えの最後の
<名前>を実行し、新しい STATE を送る。目標を満たすと<none>が返ります
ゲームに組み込むときのコツ
- 目標は 1 つずつ渡す。「道具を作ってから売る」のような段取りはゲーム側で小目標に分けると、ほぼ確実に動きます。
- 使えない操作は一覧から外す。返ってきたタグがおかしければ、その操作を外して聞き直す。
- 例:
village.py(3 人の村人が市場を共有して暮らすシミュレーション)。小目標に分けた形で、4 日間・48 回の判断でゲームに弾かれた回数は 0、全員が所持金を増やしました。
成績(agent6)
行動選び:学習で一度も見ていない作り物の名前(zorb, kesh など)で、ゲームとやり取りしながら目標に届いた割合。
| レベル | 内容 | 通常版(200 問) | 4bit(100 問) |
|---|---|---|---|
| 1 | 目標 1 つ | 98.5% | 97% |
| 2 | 関係ない操作・前提条件が混ざる | 94.5% | 97% |
| 3 | 先に前提を満たしてから使う(2 段) | 86.0% | 78% |
| 4 | 目標 2 つ、片方を壊さない | 77.0% | 72% |
会話(1 文字あたりの予測誤差、小さいほど良い):SODA 雑談 0.812 / 案内 0.907 / NPC 0.732。行動選びを覚えさせる前とほぼ同じで、会話の力は保たれています。
作り方
base/:WikiText-103 と FineWeb-Edu を 63 億文字学習(16 層、幅 512、文脈 4096 文字、文字の種類 100)。- 会話:SmolTalk、SODA(人物設定つきの会話)、Qwen3.5/3.6 で作った NPC 会話と案内データで追加学習(
npc4/)。 - 行動選び:ルールで作った目標達成の会話(考えの筋道つき)を雑談と半々に混ぜて追加学習(
agent6/)。
学習データの出典と利用条件:WikiText-103(CC BY-SA)、FineWeb-Edu(ODC-By)、SmolTalk(Apache 2.0)、SODA(CC BY 4.0)、Qwen3.5/3.6(Apache 2.0)の生成データ。
限界
小さなモデルなので、会話は自然に続きますが、中身は薄く事実の正確さもあまりありません。行動選びでは、3 段以上の段取りや、操作がどの値に効くかの読み違い、数の大小の判断ミスが残っています。
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support