mcpField
I
Inception ICORE Server

Inception ICORE Server

ローカル
github.com/nbursaAI・エージェント367 週間前に更新

Inception ICORE Server について

Inception ICORE Serverは、エージェントシステム開発者向けのRust製マイクロサービスで、メモリとチャット機能を提供します。揮発性・永続キー値メモリ、ChromaDBのベクトル検索、BaseAgent、任意のSentience DSLを組み合わせており、現在開発中です。

主な機能

  1. 01インメモリの短期キー値ストレージ
  2. 02SQLiteによる永続的な長期メモリ
  3. 03ChromaDBのベクトル保存と類似検索
  4. 04記憶・想起ロジックを備えたBaseAgent
  5. 05実行時に読み込めるSentience DSLとチャットエンドポイント

活用シーン

  1. 01セッション中の一時的なエージェントコンテキストの保持
  2. 02再起動後も残るキー値メモリの保存
  3. 03関連するベクトルレコードの検索
  4. 04DSL、BaseAgent、LLMフォールバックの順にチャットを処理

MCP 対応

入力にはHTTP APIの説明がありますが、MCP向け機能は記載されていません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"inception-core-server": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"\\"
]
}
}
}
起動コマンドdocker run -i --rm '\'

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
oci\

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Inception ICORE サーバー

Status: WIP License: Non-Commercial Language: Rust Dockerized Build

Inception core(ICORE)サーバー
短期・長期・潜在メモリーサービス、BaseAgent + Sentience DSL を備えたチャットエンドポイント、ChromaDB および LLM サービスとの連携を提供する、モジュール式で拡張可能な Rust ベースのサーバーです。

⚠️ 開発中:このプロジェクトは現在活発に開発されています。インターフェース、API、内部構造は頻繁に変更される可能性があります。


目次

  1. 概要
  2. 機能
  3. アーキテクチャとコンポーネント
    1. BaseAgent と Sentience DSL
    2. メモリーレイヤー
    3. LLM 連携
    4. HTTP API(Axum)
  4. はじめに
    1. 前提条件
    2. クローンとビルド
    3. 環境変数
    4. Docker Compose での実行
    5. Docker を使わずにローカルで実行
    6. サーバーのテスト
  5. 設定と環境変数
  6. API リファレンス
    1. ヘルスチェック
    2. 短期メモリーエンドポイント
    3. 長期メモリーエンドポイント
    4. 潜在メモリー(ChromaDB)エンドポイント
    5. チャットエンドポイント
    6. Sentience DSL エンドポイント
  7. エージェント DSL(「Sentience」)の詳細
  8. ディレクトリー構成
  9. ロギングとモニタリング
  10. 開発ワークフロー
  11. コントリビューション
  12. ライセンス

概要

Inception ICORE Server は、以下を実現する、柔軟性の高いマイクロサービスとして設計されています。

  • 一時的なキーと値のストレージ(インメモリー)を提供する 短期メモリー。
  • 永続的なキーと値のストレージ(SQLite)を提供する 長期メモリー。
  • ChromaDB をバックエンドとする 潜在メモリー(ベクトル埋め込み + 類似性検索)。
  • 「remember/recall/if context」操作に対応し、実行時に読み込めるオプションの Sentience DSL レイヤーを備えた BaseAgent。
  • 受信メッセージを最初に Sentience DSL(読み込み済みの場合)にルーティングし、次に標準の BaseAgent にフォールバックし、最後にフォールバック用 LLM に渡す チャットエンドポイント。
  • すべてのメモリーレイヤーとエージェント機能を操作するための、シンプルで詳しく文書化された HTTP API(Axum を基盤としています)。

この README では、アーキテクチャの詳細、セットアップ手順、環境設定、API の使用方法、開発ワークフローについて説明します。

このプロジェクトの哲学的な動機と長期的な意図については、VISION.md を参照してください。


機能

  • モジュール式メモリレイヤー

    • 短期:高速なインメモリのキーと値のストア(揮発性)。
    • 長期:SQLite を使用した永続的なキーと値のストア。
    • 潜在メモリ:ChromaDB によるベクトル埋め込みと最近傍クエリ。
  • エージェントロジック

    • BaseAgent:「記憶する」、「想起する」、「コンテキストに含まれている場合」のシンプルなロジック。
    • Sentience DSL:カスタム応答ロジックをスクリプト化するための読み込み可能な DSL。メモリレイヤーへのシームレスなシードとフラッシュに対応しています。
  • LLM フォールバック

    • あらゆる HTTP ベースの LLM(ローカルの Llama サーバーなど)とすぐに連携し、フォールバック生成を行います。
  • HTTP API

    • メモリの管理、ベクトルの埋め込みとクエリ、チャット、DSL コードの直接実行を行うエンドポイントを公開します。
    • JSON ベースのリクエスト/レスポンス形式です。
  • Docker Compose セットアップ

    • ChromaDB、ローカル LLM サービス、ICORE Server を連携させるための、事前設定済みの docker-compose.dev.yml を用意しています。
  • 非同期

    • Rust の Tokio ランタイムを基盤とし、高い並行性とパフォーマンスを実現しています。
  • 拡張性と設定可能性

    • 環境変数を使って、ChromaDB の URL、LLM の URL、データベースのパス、DSL スクリプトを簡単に切り替えられます。

アーキテクチャとコンポーネント

脳としてのアーキテクチャ

inception-ICORE-server は人工知能システムの脳幹として機能し、調整、メモリのルーティング、プロトコルレベルの反射を担います。

その構造は生物の脳から着想を得ています。

  • Inception(このサーバー) — 脳幹 メモリアクセス、エージェントの実行、DSL の処理を管理します。「思考」するのではなく、制御を行います。

  • Cortex(メモリレイヤー) — 大脳皮質
    長期的な知識(SQLite)、短期の作業メモリ(インメモリ)、潜在的な意味空間(ChromaDB)を保存します。

  • エージェント — 器官
    構造化されたメモリと埋め込みロジックを使って、知覚、行動、内省を行う入出力エンティティです。

  • ICORE Protocol — 神経信号
    メモリ、エージェント、ロジック評価器の間で標準化された通信フローです。

この分離により、モジュール式の開発、自律的な動作、意味に基づく内省を、一度に1つのレイヤーずつ実現できます。

以下に、高レベルのアーキテクチャ図と、各中核コンポーネントおよびそれらの連携方法を示します。

Inception ICORE アーキテクチャ

BaseAgent と Sentience DSL
  • BaseAgent (agents/agent.rs):

    • シンプルな「記憶する/想起する/コンテキストに含まれている場合」のロジック用に、プロセス内コンテキスト(Context)を保持します。
    • sentience クレートを使って、Sentience DSL コードを直接読み込み、実行します。
    • handle の実行中、DSL のメモリにはグローバルストアからシードされ、実行後にフラッシュして書き戻されます。
メモリレイヤー
  1. 短期メモリ (memory/short_term.rs):

    • インメモリの HashMap<String, String>。
    • 一時的なキーと値のペアを高速に読み書きします。
    • 揮発性であり(サーバーの再起動時に失われます)。
  2. 長期メモリ (memory/long_term.rs):

    • SQLite を使用したキーと値のストア(sqlx 経由)。
    • ディスク上に永続化されます(memory.db)。
    • 非同期の get、set、all 操作に対応します。
  3. 潜在メモリ (memory/latent.rs):

    • ベクトル埋め込みと類似度検索のために、ChromaDB REST API と連携します。
    • 次のメソッドを提供します。
      • embed(id: &str, vector: Vec<f32>) → ダミーまたは計算済みの埋め込みを id の下に保存します。
      • query(vector: Vec<f32>) → (id, score) のペアのリストを返します。
    • このプロトタイプでは、埋め込みはダミーのゼロベクトル(vec![0.0; 1536])ですが、実際の LLM エンコーダーの出力に置き換えられます。
LLM との連携
  • サーバーは、ローカルの LLM HTTP サーバー(llama.cpp server など)を指す環境変数 LLM_URL を想定しています。
  • チャットのフォールバックロジック(handlers/chat 内)では、次を呼び出します。
    model::generate(&payload.message).await
    

これは JSON { "prompt": "..."} を指定して LLM_URL に HTTP リクエストを送信し、生成されたテキストを返します。

HTTP API(Axum)
  • Tokio ランタイムで Axum v0.7 を使用します。
  • ルートは api/routes.rs、ハンドラーは api/handlers.rs で定義されています。
  • すべてのエンドポイントは、JSON または (StatusCode, String) の組み合わせで応答します(impl IntoResponse によって変換されます)。

はじめに

前提条件
  1. Rust ツールチェーン

    • rustup をインストールし、最新の安定版ツールチェーンを使用していることを確認します。

      rustup update stable
      rustup default stable
      
  2. Docker と Docker Compose(開発環境全体を構築する場合)

    • Docker Desktop または Docker Engine v20+
    • Docker Compose v1.29+(または Docker CLI に統合された v2)
  3. ポート

    • ChromaDB:8000
    • LLM Server:11434
    • ICORE Server:8080

クローンとビルド
git clone https://github.com/your-org/inception-ICORE-server.git
cd inception-ICORE-server

プロジェクトをローカルでビルドできることを確認できます。

cargo build
Sentience の依存関係をクローンする

このプロジェクトは、sentience という名前のローカル Rust クレートに依存しています。

このプロジェクトと同じ親ディレクトリにクローンします。

git clone https://github.com/nbursa/sentience.git

環境変数

プロジェクトのルートに .env ファイルを作成するか、シェルで次の環境変数をエクスポートします。

# .env (for Docker Compose or local development)
CHROMADB_URL=http://localhost:8000
CHROMA_COLLECTION_ID=<your-collection-uuid>
LLM_URL=http://localhost:11434
ICORE_ENV=development         # or "production"
RUST_LOG=info               # e.g. "debug", "info", "warn", etc.

# For Docker Compose (network aliases):
# CHROMADB_URL=http://chromadb:8000
# LLM_URL=http://llm:11434
  • CHROMADB_URL
    ChromaDB に接続できる URL(例:http://localhost:8000)。

  • CHROMA_COLLECTION_ID
    ベクトルストレージに使用する ChromaDB コレクションの UUID です。事前に作成しておく必要があります。

  • LLM_URL
    LLM サービスのベース URL(例::11434 で動作するローカルの llama.cpp サーバー)。

  • ICORE_ENV
    環境モード(development または production)を設定します。ログレベルなどに影響します。

  • RUST_LOG
    標準の tracing_subscriber フィルター(例:info、debug)。


Docker Compose で実行する

用意されている docker-compose.dev.yml で、次のサービスをまとめて起動できます。

  • chromadb サービス
  • llm(ローカルの Llama サーバー)
  • ICORE-server(この Rust アプリケーション)
  1. 有効な CHROMA_COLLECTION_ID があることを確認します。ない場合は、まず ChromaDB の HTTP API または UI からコレクションを作成してください。

  2. プロジェクトのルート(docker-compose.dev.yml がある場所)で、次を実行します。

    docker-compose -f docker-compose.dev.yml up -d --build
    

    これにより、次の処理が行われます。

    • chromadb/chroma:0.6.3 イメージを取得またはビルドし、ポート 8000 を公開します。
    • ローカル LLM コンテナー(llama.cpp/ 内の Dockerfile.server)をビルドし、ポート 11434 を公開します。
    • ICORE Server コンテナー(プロジェクトルートの Dockerfile)をビルドし、ポート 8080 を公開します。
  3. すべてのサービスが正常に動作していることを確認します。

    docker-compose -f docker-compose.dev.yml ps
    
  4. ICORE サーバーをテストします。

    curl -i http://localhost:8080/api/ping
    # Expected: HTTP/1.1 200 OK, Body: "pong"
    

すべてのコンテナーを停止して削除するには、次を実行します。

docker-compose -f docker-compose.dev.yml down

Docker を使わずにローカルで実行する

すべてをネイティブ環境で実行する場合は、次の手順に従います。

  1. ChromaDB を起動する

    • ChromaDB をダウンロードして実行します。

      docker run -d --name chroma-local \
        -p 8000:8000 \
        -e IS_PERSISTENT=FALSE \
        -e ANONYMIZED_TELEMETRY=FALSE \
        chromadb/chroma:0.6.3
      
    • コレクションを作成し(Postman、cURL、または ChromaDB UI を使用)、その UUID を控えておきます。

  2. LLM Server を起動する(例:llama.cpp)

    • ./llama.cpp/ に移動します(Dockerfile.server が設定されていることを確認してください)。

    • ビルドして実行します。

      docker build -t llama-server -f Dockerfile.server .
      docker run -d --name llama-server -p 11434:11434 llama-server \
        --model /models/mistral-7b-q4.gguf \
        --port 11434 --ctx-size 256 --threads 1
      
  3. .env を設定する(プロジェクトのルートに配置)

    CHROMADB_URL=http://localhost:8000
    CHROMA_COLLECTION_ID=<your-collection-uuid>
    LLM_URL=http://localhost:11434
    ICORE_ENV=development
    RUST_LOG=info
    
  4. ICORE Server を実行する

    cargo run
    

    サーバーは次の処理を行います。

    • ShortTermMemory(インメモリ)を初期化します。
    • LongTermMemory(SQLite ファイル memory.db)を初期化します。
    • LatentMemory(指定された URL の ChromaDB クライアント)を初期化します。
    • プロジェクトのルートに agent.sent がある場合、読み込みを試みます。
    • 0.0.0.0:8080 でリッスンを開始します。

サーバーをテストする

ヘルスチェック

curl -i http://localhost:8080/health
# 200 OK
# Body: ICORE server is healthy.

Ping

curl -i http://localhost:8080/api/ping
# 200 OK
# Body: pong

短期メモリ

# Set a value
curl -i -X POST http://localhost:8080/api/mem/short/my_key \
  -H "Content-Type: application/json" \
  -d '{"value":"hello"}'
# 200 OK, Body: stored

# Get the value
curl -i http://localhost:8080/api/mem/short/my_key
# 200 OK, Body: hello

長期メモリ

# Set (async behind scenes)
curl -i -X POST http://localhost:8080/api/mem/long/user123 \
  -H "Content-Type: application/json" \
  -d '{"value":"persistent data"}'

# Get value
curl -i http://localhost:8080/api/mem/long/user123
# 200 OK, Body: persistent data

潜在メモリ(ChromaDB)

# Embed dummy vector under “doc1”
curl -i -X POST http://localhost:8080/api/mem/latent/embed \
  -H "Content-Type: application/json" \
  -d '{"id":"doc1","content":"some text to embed"}'
# 200 OK, Body: embedded

# Query with dummy vector
curl -i -X POST http://localhost:8080/api/mem/latent/query \
  -H "Content-Type: application/json" \
  -d '{"content":"any text"}'
# 200 OK, Body: ["doc1", ...]  (list of nearest IDs)

チャットと Sentience

# Chat endpoint (JSON)
curl -i -X POST http://localhost:8080/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message":"remember color = blue"}'
# 200 OK, Body: "Okay, remembered color = blue"

curl -i -X POST http://localhost:8080/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message":"recall color"}'
# 200 OK, Body: "color = blue"

curl -i -X POST http://localhost:8080/api/chat \
  -H "Content-Type: application/json" \
  -d '{"message":"What is the meaning of life?"}'
# 200 OK, Body: <LLM‐generated text> (fallback if no DSL match)

# Direct Sentience DSL execution (execute code snippet immediately)
curl -i -X POST http://localhost:8080/api/sentience/run \
  -H "Content-Type: application/json" \
  -d '{"code":"on input(hi) { mem.short[\\"response\\"] = \\"Hello from DSL!\\" }"}'
# 200 OK, Body: {"output":""}  (empty unless DSL code sets a return)

設定と環境変数

変数説明デフォルト / 例
CHROMADB_URLChromaDB HTTP API の URL(例:http://localhost:8000)。http://localhost:8000
CHROMA_COLLECTION_ID埋め込みの保存・クエリに使用する ChromaDB コレクションの UUID。事前に存在している必要があります。1414cedf-3081-4235-ab29-656549bdff1a
LLM_URLLLM サービスのベース URL(フォールバックのテキスト生成に使用)。http://localhost:11434
ICORE_ENV環境モード(development または production)。ログ出力、フィルタリング、最適化を制御します。development
RUST_LOGtracing_subscriber のログフィルター。(例:info)info
DATABASE_URL(任意)長期記憶用の SQLite ファイルパス(sqlx で使用)。デフォルトは memory.db です。memory.db
AGENT_SENT_FILE(任意)Sentience DSL スクリプトのパス(プロジェクトルートの agent.sent がデフォルトです)。./agent.sent

注記:

  • 環境変数が設定されていない場合、サーバーは起動時にパニックを起こします。
  • CHROMA_COLLECTION_ID が既存の ChromaDB コレクション ID と一致していることを必ず確認してください。

API リファレンス

すべてのエンドポイントは /api プレフィックス配下にあります(/health を除く)。

1. ヘルスチェック
GET /health
  • レスポンス

    • 200 OK
    • 本文:プレーンテキスト "ICORE server is healthy."
2. 短期記憶エンドポイント
2.1. 短期値の取得
GET /api/mem/short/:key
  • パスパラメーター

    • :key(文字列)– 取得するキー。
  • レスポンス

    • 200 OK + 保存された文字列値を含む本文。
    • キーが見つからない場合は 404 Not Found + 本文 "key not found"。
  • 例

    curl -i http://localhost:8080/api/mem/short/foo
    
2.2. 短期値の設定
POST /api/mem/short/:key
Content-Type: application/json

{
  "value": "<string>"
}
  • パスパラメーター

    • :key(文字列)– 設定するキー。
  • リクエスト本文

    {
      "value": "some text"
    }
    
  • レスポンス

    • 200 OK + 本文 "stored"(常に)。
  • 例

    curl -i -X POST http://localhost:8080/api/mem/short/foo \
      -H "Content-Type: application/json" \
      -d '{"value":"bar"}'
    
3. 長期記憶エンドポイント
3.1. 長期値の取得
GET /api/mem/long/:key
  • パスパラメーター

    • :key(文字列)– 取得するキー。
  • レスポンス

    • 200 OK + 保存された文字列値を含む本文。
    • キーが見つからない場合は 404 Not Found + 本文 "key not found"。
  • 例

    curl -i http://localhost:8080/api/mem/long/user123
    
3.2. 長期値の設定
POST /api/mem/long/:key
Content-Type: application/json

{
  "value": "<string>"
}
  • パスパラメーター

    • :key(文字列)– 設定するキー。
  • リクエスト本文

    {
      "value": "persistent data"
    }
    
  • レスポンス

    • 200 OK + 本文 "stored"(常に)。
  • 例

    curl -i -X POST http://localhost:8080/api/mem/long/user123 \
      -H "Content-Type: application/json" \
      -d '{"value":"persistent data"}'
    
4. 潜在記憶(ChromaDB)エンドポイント
4.1. ベクトルの埋め込み
POST /api/mem/latent/embed
Content-Type: application/json

{
  "id": "<string>",
  "content": "<string>"
}
  • リクエスト本文

    • id(文字列)– ドキュメント/埋め込みの一意な識別子。
    • content(文字列)– 埋め込みを保存する元のテキスト。
    • 注記:現在のプロトタイプでは、ハンドラーが長さ 1536 のダミーゼロベクトルを作成します。実際の埋め込みサービスを呼び出すように embed_latent を変更できます。
  • レスポンス

    • 成功した場合は 200 OK + 本文 "embedded"。
    • 失敗した場合は 500 Internal Server Error + 本文 "error"。
  • 例

    curl -i -X POST http://localhost:8080/api/mem/latent/embed \
      -H "Content-Type: application/json" \
      -d '{"id":"doc1","content":"something to embed"}'
    
4.2. 最近傍 ID のクエリ
POST /api/mem/latent/query
Content-Type: application/json

{
  "content": "<string>"
}
  • リクエスト本文

    • content(文字列)– 類似検索に使用する埋め込みの元テキスト(現在はダミーゼロベクトルに変換されます)。
  • レスポンス

    • 200 OK + 類似度の降順(スコアの高い順)に並んだ、一致する ID の JSON 配列(Vec<String>)。
    • ChromaDB のクエリに失敗した場合は 500 Internal Server Error + プレーンテキストのエラーメッセージ。
  • 例

    curl -i -X POST http://localhost:8080/api/mem/latent/query \
      -H "Content-Type: application/json" \
      -d '{"content":"search terms"}'
    
5. チャットエンドポイント
POST /api/chat
Content-Type: application/json

{
  "message": "<string>"
}
  • リクエストボディ

    • message(文字列)– ユーザーのチャット入力です。
  • 動作

    1. Sentience DSL が読み込まれている場合、DSL コードスニペットを構築します。

      on input(<message>) { … }
      

      – エージェントは組み込みの DSL エンジンを使ってこのスニペットを実行します。 – 実行後、DSL が内部の短期メモリに "response" キーを書き込んだかどうかを確認します。書き込まれている場合は、その値を応答として返します。

    2. DSL が応答を生成しなかった場合(または DSL が読み込まれていない場合):

      • BaseAgent のロジックで remember 、recall 、または if context includes コマンドを確認します。
      • それ以外の場合は LLM にフォールバックし、model::generate(message).await を呼び出して生成されたテキストを返します。
  • 応答

    • 200 OK + エージェントの返信を含む JSON 文字列。
  • 例

    # Remember example
    curl -i -X POST http://localhost:8080/api/chat \
      -H "Content-Type: application/json" \
      -d '{"message":"remember mood = happy"}'
    
    # Recall example
    curl -i -X POST http://localhost:8080/api/chat \
      -H "Content-Type: application/json" \
      -d '{"message":"recall mood"}'
    
    # Generic question (LLM fallback)
    curl -i -X POST http://localhost:8080/api/chat \
      -H "Content-Type: application/json" \
      -d '{"message":"Tell me a joke."}'
    
6. Sentience DSL エンドポイント
POST /api/sentience/run
Content-Type: application/json

{
  "code": "<Sentience DSL code>"
}
  • リクエストボディ

    • code(文字列)– すぐに実行する生の Sentience DSL スニペット(on input(...) は不要です)。
  • 動作

    • エージェントは内部の DSL エンジンを使って、指定された code スニペットを実行します。
    • DSL コードが返した値(ある場合)を返します。何も返されなかった場合は空文字列を返します。
  • 応答

    • 200 OK + JSON:

      {
        "output": "<string>"
      }
      
      • DSL スクリプトが明示的に値を設定しなかった場合、output は空("")になることがあります。
  • 例

    curl -i -X POST http://localhost:8080/api/sentience/run \
      -H "Content-Type: application/json" \
      -d '{"code":"on startup() { mem.short[\\"greeting\\"] = \\"Hello from DSL!\\" }"}'
    

エージェント DSL(「Sentience」)の詳細

Sentience DSL を使うと、シンプルな内部スクリプト言語でイベント駆動型のロジックを定義できます。一般的なパターンは次のとおりです。

  1. 起動時の DSL 読み込み

    • DSL ファイルをプロジェクトのルートに agent.sent として配置するか、環境変数で指定します。

    • サーバーの起動時に、main.rs は次の処理を行います。

      if let Ok(sent_code) = fs::read_to_string("agent.sent") {
          base_agent.load_sentience(&sent_code)?;
          println!("Loaded Sentience DSL from agent.sent");
      }
      
  2. DSL 文法(例)

    // Defines behavior on input event
    on input(user_msg) {
        if user_msg == "ping" {
            mem.short["response"] = "pong from DSL";
        } else if user_msg startswith "set " {
            // parse "set key=value"
            let kv = split(user_msg[4..], "=");
            mem.short[kv[0]] = kv[1];
        }
    }
    
    // Defines behavior on startup
    on startup() {
        mem.short["welcome"] = "Welcome, dear user!";
    }
    
  3. DSL でのメモリへのアクセス

    • mem.short[<key>] = <value> は短期メモリの読み取りと書き込みを行います。
    • mem.long[<key>] = <value> は長期メモリ(SQLite)の読み取りと書き込みを行います。
    • エージェントはコードの処理時に両方のメモリに値を設定し、実行後に更新内容を書き出します。
  4. 応答の送信

    • DSL を介してチャット応答を返すには、mem.short["response"] = "<some text>" を設定します。
    • DSL の実行後、ハンドラーは guard.inner.get_short("response") を確認し、値が空でなければ返します。
  5. DSL ファイルの作成

    • プロジェクトのルートに agent.sent を作成します。
    • DSL の文法に従います(正確な構文については sentience クレートのドキュメントを参照してください)。

ディレクトリ構成

inception-ICORE-server/
├── Cargo.toml
├── Dockerfile
├── docker-compose.dev.yml
├── docker-compose.prod.yml
├── README.md
├── agent.sent            # (optional) Sentience DSL script
├── memory.db             # SQLite database (auto-created on first run)
├── src/
│   ├── main.rs           # Entry point: initializes mem, agent, starts Axum server
│   ├── config/           # Configuration loading (env, Settings struct)
│   │   └── settings.rs
│   ├── agents/
│   │   ├── agent.rs      # BaseAgent implementation & DSL integration
│   │   └── mod.rs        # Re-exports AGENT, BaseAgent, SentienceAgent
│   ├── api/
│   │   ├── routes.rs     # Defines Axum router & endpoints
│   │   ├── handlers.rs   # Endpoint handlers (ping, memory, chat, etc.)
│   │   └── mod.rs
│   ├── memory/
│   │   ├── short_term.rs # In-memory key-value store
│   │   ├── long_term.rs  # SQLite-backed key-value store
│   │   ├── latent.rs     # ChromaDB client for embeddings & queries
│   │   └── mod.rs
│   ├── ICORE/
│   │   ├── model.rs      # LLM HTTP client & `generate(prompt)` function
│   │   └── context.rs    # Context for BaseAgent (“remember/recall/if context includes”)
│   │   └── protocol.rs   # ICORE protocol definitions (errors, etc.)
│   │   └── mod.rs
│   ├── config.rs?        # top-level config module for env/settings
│   └── ...               # other modules (utilities, etc.)
└── llama.cpp/            # (submodule) Llama.cpp code & Dockerfile for local LLM server
    ├── Dockerfile.server
    └── ...

ログ記録とモニタリング

  • 構造化ログには tracing と tracing_subscriber を使用します。
  • ログレベルは RUST_LOG 環境変数で制御します(例:info、debug、warn)。
  • 開発時に RUST_LOG=debug を設定すると、リクエスト/レスポンスと SQL クエリの詳細を確認できます。
  • デフォルトでは、ログは標準出力に出力されます(Docker に適しています)。

開発ワークフロー

  1. コードのフォーマットとリンティング

    rustup component add rustfmt clippy
    cargo fmt --all
    cargo clippy --all -- -D warnings
    
  2. テストの実行 単体テスト/統合テストを追加する場合:

    cargo test
    
  3. 新しいエンドポイントの追加

    1. src/api/routes.rs でルートを定義します。
    2. src/api/handlers.rs でハンドラーを実装します。
    3. 関連するメモリ/エージェントのロジックを更新します。
    4. ドキュメント用に README に curl の例を追加します。
  4. メモリレイヤーの拡張

    • 短期:インメモリストレージを変更するには、memory/short_term.rs を修正します。
    • 長期:SQLite のスキーマを変更するか、LongTermMemory と DATABASE_URL を更新して Postgres に切り替えます。
    • 潜在:memory/latent.rs を更新して、ダミーの代わりに実際の埋め込みサービスを呼び出します。
  5. DSL スクリプトの更新

    • プロジェクトルートの agent.sent を編集します。
    • サーバーを再読み込みするか、直接 POST /api/sentience/run を送信して新しいロジックをテストします。

貢献

貢献を歓迎します!以下のガイドラインに従ってください。

  1. リポジトリをフォークします。

  2. 機能ブランチを作成します。

    git checkout -b feature/my-new-feature
    
  3. 変更内容が明確に伝わる説明的なメッセージを付けてコミットします。

  4. フォーマットとリントを実行します。

    cargo fmt --all
    cargo clippy --all -- -D warnings
    
  5. 該当する場合は、テストを追加または更新します。

  6. フォークにプッシュし、GitHub でプルリクエストを作成します。

レビューを依頼する前に、すべての CI チェック(フォーマット、リント、テスト)が通過していることを確認してください。


ライセンス

⚠️ 注記:このプロジェクトはまだ実験段階にあり、安定性や本番環境での使用は保証されません。

このプロジェクトは、独自の非商用ライセンスのもとでライセンスされています。
研究、教育、実験目的であれば無料で使用できますが、書面による許可がない限り、商用利用は固く禁止されています。
詳細な条件については、LICENSE をご覧ください。


コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。