Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Simutrans-RAG

Simutransのアドオンを自然言語で検索するためのスキルとツールのセット。

pakファイルをSQLiteのインデックスに変換し、AIエージェントがそれを自律的に検索します。「旅客を100人以上積載できて電化不要な車両のうち最も安いもの」のように、自然言語によって必要なアドオンを検索することができます。

必要環境

  • Python 3.10 以降(標準ライブラリのみ。追加パッケージのインストールは不要です)
  • Claude Code

Python 同梱の SQLite が 3.34 以降だと、全文検索インデックスが作られます。それより古い場合でも LIKE による検索は問題なく動きます。

検索内容にもよりますが、LLMモデルはhaikuでも問題なく動作するようです。

Claude Code 以外のAIエージェントでも動作するはずです(未検証)。

使い方

  1. targetディレクトリに、検索対象となる*.pakファイルを配置する。

  2. target/textディレクトリに、日本語化ファイルを配置する。(任意)

  3. インデックスを構築する。

    python tools/index_pak.py

    pakファイルを差し替えたら --force を付けて再構築してください。

  4. Claude Code に日本語で質問する。

    旅客を100人以上積載可能で、100km/h以上出せて、電化を必要としない車両の中で
    最もコストが低い車両を探して
    

    skillが自動で起動し、SQLを組み立てて回答します。

    ※動作未検証ですが、 .claude ディレクトリの名称を .agents に変更すれば、Claude Code 以外でも動作するはずです。

インデックスに直接SQLを投げることもできます。

python tools/query.py "SELECT name, name_ja, topspeed FROM v_vehicles
                       WHERE is_current=1 AND waytype_name='track'
                       ORDER BY topspeed DESC LIMIT 10"
python tools/query.py --schema     # スキーマを表示
python tools/query.py --catalog    # 貨物・産業などの一覧を表示

SELECTWITH のみ受け付け、データベースは読み取り専用で開きます。

検索できること

  • 車両 — 積載量、最高速度、出力、重量、コスト、運行費、ギア比、登場/引退年、 動力方式、走行路線、積載貨物、連結制限
  • 産業 — 入出力貨物の連鎖、生産量、電力供給の有無、立地条件
  • 貨物 — カテゴリ、価値、重量、速度ボーナス、互換性(同じ貨車で運べるか)
  • 軌道・架線・橋・トンネル・信号・踏切 — 速度制限、建設費、維持費、軸重
  • 建物 — 種別、レベル、サイズ、旅客/郵便/貨物の取扱、気候条件、駅の路線種別

構成

パス 内容
.claude/skills/simutrans-pak-search/ スキル本体。SKILL.md と reference/ の4文書
tools/pakfmt/ pakバイナリのパーサ
tools/index_pak.py インデックス構築
tools/query.py 読み取り専用SQL実行
target/ 検索対象のpakと日本語化ファイル
index/ 生成物(SQLiteとカタログ)。gitignore対象

留意事項

日本語名は日本語化ファイルがないと出ません

日本語化ファイルを置かない場合、name_ja は空になり、Passagiere のような内部名だけで検索することになります。

対応しているpak形式

Simutrans標準系(OTRPフォークを含む)のpakを想定しています。 車両はフォーマットバージョン0〜13に対応しました。

Simutrans Extended のpakは検出してフラグを立てますが、スペックは読みません。同じバージョン番号でもフィールドの配置が異なるため、標準系のレイアウトで読むと誤った数値を出してしまうためです。

「箱積み駅舎」

Simutransでは、慣習的に運河(water)を装飾用の枠として使うことがあります。運河は床や歩道、運河架線は壁や窓、運河信号が街灯や樹木、運河港は1x1のブロックとして扱われ、これらを積み上げて建物を作る手法が「箱積み駅舎」と呼ばれています。

そのため、建物の装飾パーツを探すときに buildings テーブルだけを見ると大半を取りこぼします。逆に「運河」で検索すると屋上やフェンスが返ります。

この慣習と検索方法は reference/pak128japan-conventions.md にまとめてあります。

画像は解析していません

「黄色い駅舎」のような、見た目での検索には対応していません。今後の課題とします。

数値の単位に癖があります

金額はセント(1/100クレジット)、日付は 年*12 + (月-1) の月数、 ギア比は64倍、車両長は1/16タイル単位です。 車両重量はフォーマットバージョンによって元データがトンとkgに分かれるため、 インデックス側でkgに統一しています。 詳細は reference/units.md を参照してください。

ライセンス

MIT License — 詳細は LICENSE を参照してください。

pakフォーマットのデコード処理は、Simutransのソースコード(descriptor/reader/*.cc、Artistic License)を読んで書き起こしたものです。

本リポジトリにSimutransのコードそのものは含んでいません。

お問い合わせ

About

Simutransのアドオンを自然言語で検索するためのスキルとツールのセット。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages