Inception ICORE Server について
Inception ICORE Serverは、エージェントシステム開発者向けのRust製マイクロサービスで、メモリとチャット機能を提供します。揮発性・永続キー値メモリ、ChromaDBのベクトル検索、BaseAgent、任意のSentience DSLを組み合わせており、現在開発中です。
主な機能
- 01インメモリの短期キー値ストレージ
- 02SQLiteによる永続的な長期メモリ
- 03ChromaDBのベクトル保存と類似検索
- 04記憶・想起ロジックを備えたBaseAgent
- 05実行時に読み込めるSentience DSLとチャットエンドポイント
活用シーン
- 01セッション中の一時的なエージェントコンテキストの保持
- 02再起動後も残るキー値メモリの保存
- 03関連するベクトルレコードの検索
- 04DSL、BaseAgent、LLMフォールバックの順にチャットを処理
MCP 対応
入力にはHTTP APIの説明がありますが、MCP向け機能は記載されていません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Inception ICORE サーバー
Inception core(ICORE)サーバー
短期・長期・潜在メモリーサービス、BaseAgent + Sentience DSL を備えたチャットエンドポイント、ChromaDB および LLM サービスとの連携を提供する、モジュール式で拡張可能な Rust ベースのサーバーです。
⚠️ 開発中:このプロジェクトは現在活発に開発されています。インターフェース、API、内部構造は頻繁に変更される可能性があります。
目次
- 概要
- 機能
- アーキテクチャとコンポーネント
- はじめに
- 設定と環境変数
- API リファレンス
- エージェント DSL(「Sentience」)の詳細
- ディレクトリー構成
- ロギングとモニタリング
- 開発ワークフロー
- コントリビューション
- ライセンス
概要
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を用意しています。
- ChromaDB、ローカル LLM サービス、ICORE Server を連携させるための、事前設定済みの
-
非同期
- Rust の Tokio ランタイムを基盤とし、高い並行性とパフォーマンスを実現しています。
-
拡張性と設定可能性
- 環境変数を使って、ChromaDB の URL、LLM の URL、データベースのパス、DSL スクリプトを簡単に切り替えられます。
アーキテクチャとコンポーネント
脳としてのアーキテクチャ
inception-ICORE-server は人工知能システムの脳幹として機能し、調整、メモリのルーティング、プロトコルレベルの反射を担います。
その構造は生物の脳から着想を得ています。
-
Inception(このサーバー) — 脳幹 メモリアクセス、エージェントの実行、DSL の処理を管理します。「思考」するのではなく、制御を行います。
-
Cortex(メモリレイヤー) — 大脳皮質
長期的な知識(SQLite)、短期の作業メモリ(インメモリ)、潜在的な意味空間(ChromaDB)を保存します。 -
エージェント — 器官
構造化されたメモリと埋め込みロジックを使って、知覚、行動、内省を行う入出力エンティティです。 -
ICORE Protocol — 神経信号
メモリ、エージェント、ロジック評価器の間で標準化された通信フローです。
この分離により、モジュール式の開発、自律的な動作、意味に基づく内省を、一度に1つのレイヤーずつ実現できます。
以下に、高レベルのアーキテクチャ図と、各中核コンポーネントおよびそれらの連携方法を示します。

BaseAgent と Sentience DSL
-
BaseAgent (
agents/agent.rs):- シンプルな「記憶する/想起する/コンテキストに含まれている場合」のロジック用に、プロセス内コンテキスト(
Context)を保持します。 sentienceクレートを使って、Sentience DSL コードを直接読み込み、実行します。handleの実行中、DSL のメモリにはグローバルストアからシードされ、実行後にフラッシュして書き戻されます。
- シンプルな「記憶する/想起する/コンテキストに含まれている場合」のロジック用に、プロセス内コンテキスト(
メモリレイヤー
-
短期メモリ (
memory/short_term.rs):- インメモリの
HashMap<String, String>。 - 一時的なキーと値のペアを高速に読み書きします。
- 揮発性であり(サーバーの再起動時に失われます)。
- インメモリの
-
長期メモリ (
memory/long_term.rs):- SQLite を使用したキーと値のストア(
sqlx経由)。 - ディスク上に永続化されます(
memory.db)。 - 非同期の
get、set、all操作に対応します。
- SQLite を使用したキーと値のストア(
-
潜在メモリ (
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によって変換されます)。
はじめに
前提条件
-
Rust ツールチェーン
-
rustup をインストールし、最新の安定版ツールチェーンを使用していることを確認します。
rustup update stable rustup default stable
-
-
Docker と Docker Compose(開発環境全体を構築する場合)
- Docker Desktop または Docker Engine v20+
- Docker Compose v1.29+(または Docker CLI に統合された v2)
-
ポート
- ChromaDB:
8000 - LLM Server:
11434 - ICORE Server:
8080
- ChromaDB:
クローンとビルド
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 アプリケーション)
-
有効な
CHROMA_COLLECTION_IDがあることを確認します。ない場合は、まず ChromaDB の HTTP API または UI からコレクションを作成してください。 -
プロジェクトのルート(
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を公開します。
-
すべてのサービスが正常に動作していることを確認します。
docker-compose -f docker-compose.dev.yml ps -
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 を使わずにローカルで実行する
すべてをネイティブ環境で実行する場合は、次の手順に従います。
-
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 を控えておきます。
-
-
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
-
-
.envを設定する(プロジェクトのルートに配置)CHROMADB_URL=http://localhost:8000 CHROMA_COLLECTION_ID=<your-collection-uuid> LLM_URL=http://localhost:11434 ICORE_ENV=development RUST_LOG=info -
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_URL | ChromaDB HTTP API の URL(例:http://localhost:8000)。 | http://localhost:8000 |
CHROMA_COLLECTION_ID | 埋め込みの保存・クエリに使用する ChromaDB コレクションの UUID。事前に存在している必要があります。 | 1414cedf-3081-4235-ab29-656549bdff1a |
LLM_URL | LLM サービスのベース URL(フォールバックのテキスト生成に使用)。 | http://localhost:11434 |
ICORE_ENV | 環境モード(development または production)。ログ出力、フィルタリング、最適化を制御します。 | development |
RUST_LOG | tracing_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(文字列)– ユーザーのチャット入力です。
-
動作
-
Sentience DSL が読み込まれている場合、DSL コードスニペットを構築します。
on input(<message>) { … }– エージェントは組み込みの DSL エンジンを使ってこのスニペットを実行します。 – 実行後、DSL が内部の短期メモリに
"response"キーを書き込んだかどうかを確認します。書き込まれている場合は、その値を応答として返します。 -
DSL が応答を生成しなかった場合(または DSL が読み込まれていない場合):
- BaseAgent のロジックで
remember、recall、またはif context includesコマンドを確認します。 - それ以外の場合は LLM にフォールバックし、
model::generate(message).awaitを呼び出して生成されたテキストを返します。
- BaseAgent のロジックで
-
-
応答
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 コードが返した値(ある場合)を返します。何も返されなかった場合は空文字列を返します。
- エージェントは内部の DSL エンジンを使って、指定された
-
応答
-
200 OK+ JSON:{ "output": "<string>" }- DSL スクリプトが明示的に値を設定しなかった場合、
outputは空("")になることがあります。
- DSL スクリプトが明示的に値を設定しなかった場合、
-
-
例
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 を使うと、シンプルな内部スクリプト言語でイベント駆動型のロジックを定義できます。一般的なパターンは次のとおりです。
-
起動時の 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"); }
-
-
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!"; } -
DSL でのメモリへのアクセス
mem.short[<key>] = <value>は短期メモリの読み取りと書き込みを行います。mem.long[<key>] = <value>は長期メモリ(SQLite)の読み取りと書き込みを行います。- エージェントはコードの処理時に両方のメモリに値を設定し、実行後に更新内容を書き出します。
-
応答の送信
- DSL を介してチャット応答を返すには、
mem.short["response"] = "<some text>"を設定します。 - DSL の実行後、ハンドラーは
guard.inner.get_short("response")を確認し、値が空でなければ返します。
- DSL を介してチャット応答を返すには、
-
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 に適しています)。
開発ワークフロー
-
コードのフォーマットとリンティング
rustup component add rustfmt clippy cargo fmt --all cargo clippy --all -- -D warnings -
テストの実行 単体テスト/統合テストを追加する場合:
cargo test -
新しいエンドポイントの追加
src/api/routes.rsでルートを定義します。src/api/handlers.rsでハンドラーを実装します。- 関連するメモリ/エージェントのロジックを更新します。
- ドキュメント用に README に curl の例を追加します。
-
メモリレイヤーの拡張
- 短期:インメモリストレージを変更するには、
memory/short_term.rsを修正します。 - 長期:SQLite のスキーマを変更するか、
LongTermMemoryとDATABASE_URLを更新して Postgres に切り替えます。 - 潜在:
memory/latent.rsを更新して、ダミーの代わりに実際の埋め込みサービスを呼び出します。
- 短期:インメモリストレージを変更するには、
-
DSL スクリプトの更新
- プロジェクトルートの
agent.sentを編集します。 - サーバーを再読み込みするか、直接
POST /api/sentience/runを送信して新しいロジックをテストします。
- プロジェクトルートの
貢献
貢献を歓迎します!以下のガイドラインに従ってください。
-
リポジトリをフォークします。
-
機能ブランチを作成します。
git checkout -b feature/my-new-feature -
変更内容が明確に伝わる説明的なメッセージを付けてコミットします。
-
フォーマットとリントを実行します。
cargo fmt --all cargo clippy --all -- -D warnings -
該当する場合は、テストを追加または更新します。
-
フォークにプッシュし、GitHub でプルリクエストを作成します。
レビューを依頼する前に、すべての CI チェック(フォーマット、リント、テスト)が通過していることを確認してください。
ライセンス
⚠️ 注記:このプロジェクトはまだ実験段階にあり、安定性や本番環境での使用は保証されません。
このプロジェクトは、独自の非商用ライセンスのもとでライセンスされています。
研究、教育、実験目的であれば無料で使用できますが、書面による許可がない限り、商用利用は固く禁止されています。
詳細な条件については、LICENSE をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。