LLM や VLM の認識は、本質的に“あいまい”です。「たぶん人が映っている(確率0.91)」のように、確信度つきでしか世界を捉えられません。このあいまいな出力を、そのままロボットの行動に直結させると危険です。しかも「なぜその行動をとったのか」を後から説明できません。
Symbolica は、この問題に正面から答える当社オリジナルの基盤です。あいまいな認識を《確率つきの事実》として受け取り、固定した論理ルールでゴール判定・行動選択・安全条件を決めて実行します。ひとことで言えば、「LLM時代のProlog(確率つき)」を Python だけで一貫して扱える形にしたものです。
デモ映像
なぜ「確率つきの論理」なのか
いまのAIエージェントは、認識(LLM/VLM)と行動を直接つなぐ構成になりがちです。しかしこの作り方には、現場で効いてくる弱点があります。
- 危険 ― 「たぶん人(0.7)」で止まるべき場面も、モデルの気分次第で通過してしまう。
- 説明できない ― なぜ止まったのか/なぜ動いたのかが、確率のブラックボックスに埋もれる。
Symbolica の立場は明快です。認識はモデルに任せる。しかし“判断”は、あいまいなモデルにさせない。 モデルには『認識と仮説』だけを出させ、ゴール達成・行動可否・安全条件の判断は、人が書いた固定の論理ルールが握ります。
全体像 ― 2階建ての構造
Symbolica は、「言語」と「エンジン」の2階建てで構成され、その上に上位のAIエージェントが乗ります。すべて当社オリジナルです。
- 1階:Symbolica(言語) ― 型つきの確率論理DSL。確率つきの「事実」と、固定した「ルール」を1本のソースに書きます。真偽ではなく確率で知識を持つ考え方(確率論理プログラミングで知られる distribution semantics)に沿っています。
- 2階:SESE(エンジン) ― Symbolica Expert System Engine。確率つきの PDDL 風プランニングを、
Sense → Plan → Act → Verifyのループで実行します。 - 上位:AIエージェント ― LUQUA などが MCP(Model Context Protocol)でゴールと観測を与えます。個々の行動は直接叩かせず、必ず受入判定・安全条件を Symbolica 側で通します。
言語の実際の書き味は、こんな具合です(人が危険区域に入ったか、を確率で判定する例)。
0.91::detected(person_1). % VLM/LLM 由来の確率つき事実
0.82::near(person_1, restricted_area).
restricted(P) :- detected(P), near(P, restricted_area). % 人が書く固定ルール
@query(probability) restricted(person_1). % 「危険」の確率を問う
事実には確率がつき、ルールは固定。この一枚で「認識のあいまいさ」と「判断の確かさ」を同居させられます。
「確率」はどこに効いているか
Symbolica では、確率が一部ではなく全面的に効いています。
- 世界の持ち方 ― 世界状態(belief)は、真偽ではなく確率つきの事実の集まり。
- しきい値ゲート ― 行動の受入・タスクの終了・ゴール達成は、すべて
確率 ≥ しきい値で判定。 - 矛盾の構造的排除 ― 「人か、ロボットか」のように排他な認識は、相関を保ったまま矛盾(人かつロボット)や二重計上を防ぎます。
- 確率的な計画 ― 各手の重みを
コスト ÷ 成功確率で測り、失敗しやすい手は自然に選ばれにくくなります。 - 説明可能性 ― 「なぜこの行動か」を、使った規則と確率の出どころとともに提示できます。
あいまいさを消すのではなく、あいまいさを確率として持ったまま、確かな論理で判断する ― ここが要です。
考える(THINK)と動く(ACT)を分ける
Symbolica の安全設計の核心が、THINK と ACT の分離です。
- THINK(熟考・副作用ゼロ) ― 仮の観測・仮の行動で先読みします。このとき世界は1bitも変わりません。順に最適な複数の計画(k-best)を仮想実行し、実行前に成功確率とリスクが分かります。
- ACT(実行・並行監視) ― 実際にプラグインを呼んで動かします。このとき複数の緊急停止(E-Stop)を並行監視し、危険を検知したら0.1秒台で中断して、必ず理由つきで制御を返します(HOLD)。
おまけ:状態空間は「図示」できる
Symbolica のスキル(=状態遷移の断片)で世界を記述すると、変化しうる記号は有限になります。つまり、到達可能な状態遷移グラフを、ドメインを定義した時点で丸ごと列挙・図示できます。
「動かしてみないと分からない」ではなく、動かす前に、到達可能性を数学的に確かめられる ― 安全が問われる現場では、これが効きます。
どう動かすか
エンジン本体は Python だけで独立して動き、ROS2 の有無に関係なく同一コードで回ります。用途に応じて、大きく4通りの動かし方があります。
- ワンショット ― 1回だけゴールまで実行する。
- 連続デーモン ― 常にセンシングし、ゴール違反を見つけたら自動で再計画する。
- クエリ ― 走行中のエンジンに、Prolog 風の問い合わせをその場で投げる。
- 統合 ― ROS2 ノードとして、あるいは MCP 経由で上位AIエージェント(LUQUA)から制御する。
外部連携も、Python から直接/他言語からは TCP の JSON-RPC/上位AIからは MCP、と揃っています。地味ですが、こうした動作形態の広さが現場導入では効きます(動作は多数の自動テストで継続的に検証しています)。
ロボットへの応用
Symbolica がロボットに効く理由は、「考えてから動く。危険なら即戻る」を、あいまいなモデル任せにせず、確率つきの論理として保証できる点にあります。
現場で動くロボットは、カメラの認識が多少ぶれても、危険側では慎重に、安全条件は必ず固定ルールで確認してほしい。そして事故やヒヤリの後には、「なぜその判断をしたか」を説明できてほしい。Symbolica は、この「認識はモデル・判断は固定ルール」という分担で、物理AIエージェントの安全な意思決定の土台を担います。
まとめ
- 課題 ― LLM/VLM の認識はあいまい。行動に直結すると危険で、説明もできない。
- 解 ― あいまいさを確率つきの事実として受け、固定した論理ルールでゴール・行動・安全を判断する。
- 2階建て ― 言語 Symbolica に知識と推論を、エンジン SESE に確率PDDLの実行を。上位のAIエージェント(LUQUA)とは MCP で連携。ともに当社オリジナル。
- 安全 ― THINK/ACT の分離と並行E-Stopで、「まず考え、危険なら即戻る」を実装で保証。状態空間は動かす前に図示・検証できる。
Symbolica は、あいまいなAIを安全に「考えさせて動かす」ための、当社の中核基盤です。デモやご相談を承っています。