このページのすべての内容をコピーして AI アシスタントに貼り付けてください。そうすれば、LangBot の全体アーキテクチャ、各コンポーネントの構成方法、実行時の接続関係、開発環境の設定方法を、あなたが逐一説明しなくても把握できます。
AGENTS.md(CLAUDE.md はそのシンボリックリンク)と内容を一致させており、LangBot プロジェクトの開発者および AI アシスタント向け「1 ページ入門」です。
プロジェクト概要
LangBot はオープンソースの LLM ネイティブなインスタントメッセージングボット開発プラットフォームです。すぐに使える IM ボット開発体験を提供し、Agent、RAG、MCP などの LLM アプリケーション機能を内蔵し、世界の主要 IM プラットフォームに対応し、カスタム開発のための豊富な API を提供します。 LangBot は充実した Web フロントエンドを備えており、ほぼすべての操作をフロントエンドから行えます。- バックエンド:Python(
>=3.11,<4.0)、依存関係はuvで管理。Web フレームワークは Quart(Flask の非同期版)。HTTP API とビルド済みフロントエンドはいずれもバックエンドがhttp://127.0.0.1:5300で提供します。 - フロントエンド:
web/は Vite + React Router 7 + shadcn/ui + Tailwind CSS の SPA で、pnpmで管理します(注意:Next.js ではありません。devスクリプトはviteです)。 - プラグインシステム:プラグイン SDK、CLI(
lbp)、プラグインランタイム、Box(サンドボックス)ランタイム、および LangBot とプラグインで共有されるエンティティ/API 定義は、すべて別リポジトリlangbot-plugin-sdkにあります。LangBot はpyproject.tomlでバージョン固定したlangbot-pluginパッケージを通じて依存します。
リポジトリ構成
コンポーネントの構成方法
コアバックエンドパッケージsrc/langbot/pkg/ は責務ごとに疎結合なサブモジュールに分割されています:
プラグイン側のコンポーネント(
langbot-plugin-sdk で定義、lbp comp で生成)は 1 つの BasePlugin を中心に構成されます。現在 6 種類のコンポーネントに対応しています:
- Command:ユーザーが能動的に起動するコマンド(例:
!weather tokyo)。 - Tool:LLM が Agent 実行中に呼び出す関数(例:天気取得、データベース照会)。
- EventListener:メッセージパイプライン中のイベントを監視するハンドラ(例:自動返信、コンテンツフィルタ)。
- KnowledgeEngine:RAG が利用する、カスタムナレッジベースの検索/接続実装。
- Parser:メッセージ/コンテンツのカスタム解析処理。
- Page:プラグインが提供するカスタム Web ページ。LangBot 管理パネルに組み込めます。
実行時の接続関係
- フロントエンド ↔ バックエンド:開発時はフロントエンドが
:3000で単独動作し、web/.envのVITE_API_BASE_URLを通じてバックエンド:5300にアクセス。本番ではフロントエンドが静的ファイルにビルドされ、バックエンドが同一オリジンで提供します。 - バックエンド ↔ プラグインランタイム:
- LangBot を直接起動した場合(コンテナ外)、バックエンドが自らランタイムを起動し、stdio で通信します(軽量/個人向け)。stdio は自動再接続できません——切断後は LangBot の再起動が必要です。よくある障害は、前のバックエンドが残した孤児ランタイムプロセスが
5400/5401を占有しているケースで、それを kill して再起動します。 - LangBot をコンテナで実行する場合、WebSocket で独立したランタイムに接続します(本番向け)。制御ポートは既定
5400、デバッグポートは5401。設定:data/config.yamlのplugin.runtime_ws_url(例:ws://langbot_plugin_runtime:5400/control/ws)。
- LangBot を直接起動した場合(コンテナ外)、バックエンドが自らランタイムを起動し、stdio で通信します(軽量/個人向け)。stdio は自動再接続できません——切断後は LangBot の再起動が必要です。よくある障害は、前のバックエンドが残した孤児ランタイムプロセスが
- バックエンド ↔ Box ランタイム:Box サブシステムは制御チャネル(既定ポート
5410)で Box ランタイムに接続し、ランタイムが Docker / nsjail / E2B でサンドボックスコードを実行します。設定(data/config.yamlのbox:セクション):box.enabled(マスタースイッチ)、box.backend('local'/'docker'/'nsjail'/'e2b')、box.runtime.endpoint(外部 Box ランタイムの URL、例:ws://127.0.0.1:5410、空なら ローカル自動管理)。プラグインランタイムと同様、このエンドポイントを設定し--standalone-boxで起動すると外部 Box ランタイムに接続できます。 - ランタイム・CLI・SDK のデバッグ方法の詳細は「プラグインランタイム、CLI、SDK のデバッグ」を参照。詳細なフラグとアーキテクチャは
langbot-plugin-sdkリポジトリのAGENTS.mdにあります。
開発環境のセットアップ
詳細は「開発設定」を参照。要点:バックエンド
data/config.yaml に生成されます。既定は SQLite(設定不要)で、PostgreSQL にも対応。マイグレーションは起動時に自動実行されます。
フロントエンド
Node.js と pnpm が必要です。pnpm dev は web/.env の VITE_API_BASE_URL を読み込み、開発時のフロントエンドがバックエンド :5300 にアクセスできるようにします。
コードフォーマット
CI で lint + format チェックが走ります。pre-commit フックをインストールして、同じチェックを各コミット前にローカルで実行してください:データベースマイグレーション
ORM モデルを変更したらマイグレーションを生成します:autogenerate はスキーマ変更(列・テーブルの追加/削除、型変更)を検出しますが、データマイグレーション(JSON フィールドの内容変更など)は生成スクリプトに手書きする必要があります。env.py で render_as_batch=True が設定されており、SQLite の ALTER TABLE 制限が自動処理されるため、データベース種別ごとの分岐は不要です。マイグレーションは起動時に自動実行されます。
開発規約
- LangBot はグローバルなプロジェクトです:すべてのコードコメントと docstring は英語で、ユーザー向けの文字列はすべて i18n に対応する必要があります(最低限
en_US+zh_Hans、リポジトリに日本語がある箇所はja_JPも)。 - LangBot は toC・toB の両シナリオで採用されているため、常に互換性とセキュリティを考慮してください。
- コミットメッセージ形式:
<type>(<scope>): <subject>type:feat、fix、docs、style、refactor、perf、test、choreなど。scope:影響を受けるパッケージ/モジュール/ファイル/クラス。subject:変更内容の簡潔な説明。
Agent 向けの機能(MCP + スキル)
LangBot は設計上AI エージェントに優しく、HTTP API と厳密に整合した 3 つの Agent 向けサーフェスを提供します:- MCP サーバー:
src/langbot/pkg/api/mcp/が/mcpで API の厳選サブセットを MCP ツールとして公開します(API キー認証、config.yaml のapi.global_api_keyを含む)。server.pyがツールを定義し(service 層を直接呼び出す)、mount.pyが ASGI ディスパッチャです。 - リポジトリ内スキル:
skills/ディレクトリは LangBot の全 Agent スキル (プラグイン開発、コア開発、デプロイ、e2e、MCP 操作など)の唯一の信頼できる 情報源です。ドキュメントとランディングページは内容を複製せず、ここへリンク します。 - API キー認証:
api.global_api_key(config.yaml)はログインセッションなしで API と MCP を認証します。docs/API_KEY_AUTH.mdを参照してください。
メンテナンスルール(重要): Agent からアクセス可能であるべき HTTP API エンドポイントを追加・削除・変更する際は、src/langbot/pkg/api/mcp/server.pyの対応する MCP ツールとskills/配下の関連スキル(特にskills/skills/langbot-mcp-ops)の両方を必ず更新してください。API・MCP ツール群・スキルは一つのシステムであり、ずれはバグです。
いくつかの原則
- Keep it simple, stupid.
- 必要がなければエンティティを増やさない。
- 八荣八耻(八つの栄誉と八つの恥): 以瞎猜接口为耻,以认真查询为荣。 以模糊执行为耻,以寻求确认为荣。 以臆想业务为耻,以人类确认为荣。 以创造接口为耻,以复用现有为荣。 以跳过验证为耻,以主动测试为荣。 以破坏架构为耻,以遵循规范为荣。 以假装理解为耻,以诚实无知为荣。 以盲目修改为耻,以谨慎重构为荣。
