Xu123-Bob/Baize has 642 GitHub stars and 5 forks. GitHot measured +9 stars in 24 hours and +47 in 7 days. Last checked 2026-11-09 06:44 UTC. Last push 2026-11-05.
An ancient Chinese divine beast, now reincarnated as an enterprise-grade VibeCoding assistant.
できること
- Multi-backend support: DeepSeek, any OpenAI-compatible endpoint (GLM / Qwen / Kimi / OpenAI), and local Ollama. Switch with one configuration change.
- Zero-configuration startup: Configuration files are generated automatically on first run. Users only need to enter their API key once.
- Multilingual interaction: Freely switch among nine languages: Chinese, English, Japanese, Korean, Spanish, French, German, Russian, and Arabic. Say English or use /lang ja, and the AI will think and reply in the corresponding language throughout the session.
- Complete toolchain: bash execution, file read/write/edit, glob/grep search, web search and fetch, background tasks, and task/todo management.
計測したスター増加
- 24時間
- +9
- 7日間
- +47
- 15日間
- 更新が遅れています
- 1か月
- 更新が遅れています
期間ごとの純増数です。期間は重複しており、日別の値ではありません。未計測の値は空欄です。スター数は注目度の指標であり、品質の保証ではありません。
README.ja.md
オリジナル中国の神獣をモチーフにした、Vibe Coding とデータ分析のためのセキュリティアシスタント。
オープンソースの Coding Agent CLI。強力なプライバシー保護と多言語インタラクションを備え、複数バックエンド(DeepSeek / OpenAI 互換 / 智譜 / 通義 / Kimi / ローカル Ollama)をサポートします。ツール呼び出し、スキル読み込み、サブエージェント委任、コンテキスト圧縮、セキュアサンドボックスなどの完全な機能を提供します。
コア優位性
プライバシー保護
- 双方向可逆プライバシー保護:機密情報は LLM に送信される前にプレースホルダーへ置換され、応答を受け取った後に自動で復元されます。この処理はユーザーに意識させません。ユーザーが見る履歴、ツール引数、最終回答は常に原文であり、LLM が見るのは
«PZ_PHONE_a3f8b2c1d4e5f6a7»のようなランダムで推測不可能なプレースホルダーです。 - ディスク書き込み時の全面脱敏:セッションファイル、圧縮トランスクリプト、監査ログは書き込み前に自動で脱敏されます(デフォルト有効)。ディスク上に平文 PII は残りません。
- インジェクション耐性:プレースホルダーには 64 ビット暗号学的ランダムトークンを使用し、列挙・偽造・リプレイができません。セッション切り替え後、古いプレースホルダーは即座に無効になります。
- 複数のプライバシー保護有効化方法:CLI で自然言語入力により有効化できるほか、より正確な
/privacyコマンドも使用できます。 - ローカルファーストの agent:本製品はリモートデータベースを持たず、完全にローカルで動作します。ユーザー情報を収集しません。
機能
マルチバックエンド対応:DeepSeek、任意の OpenAI 互換インターフェース(GLM / Qwen / Kimi / OpenAI)、ローカル Ollama。設定一つで切り替え可能。
ゼロ設定起動:初回実行時に設定ファイルを自動生成。ユーザーは一度だけ API キーを入力すればよい。
プライバシー脱敏:LLM に送信する前に 30+ 種類の機密情報(電話番号、メール、身分証、パスポート、銀行カード、国際番号、API Key、JWT、データベース接続文字列、MAC アドレスなど)を自動識別して脱敏し、応答後に自動復元します。ディスク書き込み時にも同様に脱敏し、ディスクに平文を残しません。標準 / 厳格の 2 モードをサポートし、自然言語または
/privacyコマンドで切り替えられます。多言語インタラクション:中国語 / 英語 / 日本語 / 韓国語 / スペイン語 / フランス語 / ドイツ語 / ロシア語 / アラビア語の 9 言語を自由に切り替え可能。
Englishと言うか/lang jaを使えば、AI はセッション全体で対応言語で思考し応答します。完全なツールチェーン:bash 実行、ファイル読み書き編集、glob/grep 検索、Web 検索・取得、バックグラウンドタスク、タスク・ToDo 管理。
スキルシステム(Skills):必要に応じてドメイン知識(
SKILL.md)を読み込み、特定シーンで AI をより専門的にします。サブエージェント(Subagents):複雑なタスクを独立コンテキストのサブエージェントに委任し、メインセッションの汚染を防ぎます。
フック(Hooks):Python または Shell フック。ツール呼び出し前後のインターセプト、監査ログ、自動フォーマット、テストゲートをサポート。
MCP プロトコル:Model Context Protocol を通じて外部ツールサーバー(GitHub、Filesystem など)に接続。
コンテキスト圧縮:2 段階圧縮(ツール結果の切り詰め + LLM 要約)により、超長い会話をサポート。
セキュアサンドボックス:コマンド許可リスト、パス脱出検出、危険コマンド遮断、機密ファイル保護、スクリプトインジェクション遮断。
黒金テーマ CLI:中国語幅の自動調整、コードハイライト、Diff 着色、思考の折りたたみ。
白澤 CLI 画面
インストール
前提条件
- Python 3.10+(
tomllibが必要。3.11+ では標準搭載、3.10 ではtomliをインストール) - pip
ソースからインストール
ダウンロード方法は 2 つ
pip install https://github.com/Xu123-Bob/Baize.gitbash -- Win+R を押して
cmdを入力し、次を実行:baize
リポジトリページで
<> Code-->Download ZIPをクリック。
(1) 解凍後、ディレクトリに移動:
bash -- Win+R を押して cmd を入力
cd 解凍後のディレクトリ
pip install -r requirements.txt
python -m Baize
インストール後、Win+R を押して cmd を入力し、CLI を開いて baize と入力すれば実行できます。
(2) ZIP をダウンロードしてローカルインストールする場合、解凍後にディレクトリへ移動して実行:
bash -- Win+R を押して cmd を入力
pip install .
インストール後、Win+R を押して cmd を入力し、CLI を開いて baize と入力すれば実行できます。
オプション:データ接続依存関係をインストール(データ分析に重要)
白澤に SPSS や SQL データベースを操作させたい場合は、追加依存関係をインストールします:
pip install -r requirements-data.txt
requirements-data.txt には以下が含まれます:
spss-studio-mcp:SPSS 統計分析 MCP server(ローカルに IBM SPSS Statistics がインストール済みである必要あり)atengk-mcp-server-rdbms:汎用リレーショナルデータベース MCP server(PostgreSQL / MySQL / SQL Server / Oracle / 達夢など)pyodbc:SQL Server に必要な ODBC Python バインディング
または、プロジェクトを pyproject.toml でインストールしている場合、extras も使用できます:
pip install -e ".[data]" # データ接続依存関係をすべてインストール
pip install -e ".[spss]" # SPSS のみ
pip install -e ".[sql]" # 汎用 SQL のみ
pip install -e ".[sql-mssql]" # SQL Server 専用(pyodbc を含む)
- ⚠️ SQL Server ユーザー注意:
pyodbcは Python バインディングのみです。システム側に Microsoft ODBC Driver 18 for SQL Server もインストールする必要があります。 - ⚠️ SPSS ユーザー注意:
spss-studio-mcpは MCP ブリッジ層のみです。ローカルに IBM SPSS Statistics(バージョン 20–31)がインストールされ、ライセンス認証済みである必要があり、環境変数SPSS_INSTALL_PATHを SPSS インストールディレクトリに設定する必要があります。SPSS エンジンによる完全な分析機能は主に Windows でサポートされます。Linux/macOS では「ファイルモード」に降格できます(.savファイルの読み取り、メタデータ確認、データプレビューは可能ですが、統計分析はできません)。
クイックスタート
LLM API に接続して実行
- 初回実行
baize
初回実行時、白澤は 2 つの設定ファイルを自動生成します:
~/.baize/config.toml # バックエンド設定(DeepSeek / OpenAI / Ollama を選択)
~/.baize/.env # キーファイル
Windows のパスは C:\Users\ユーザー名\.baize\ です。
2. バックエンドを選択
~/.baize/config.toml を開き、active_provider を変更します(必ず変更):
# 白澤設定ファイル
# active_provider を変更してバックエンドを切り替え
# 選択可能値:"deepseek" / "qwen" / "kimi" / "glm" / "openai" / "ollama"
active_provider = "deepseek"
[model_providers.deepseek]
name = "DeepSeek"
base_url = "https://api.deepseek.com"
env_key = "DEEPSEEK_API_KEY"
model = "deepseek-flash"
[model_providers.qwen]
name = "Qwen"
base_url = "https://dashscope.aliyuncs.com/compatible-mode/v1"
env_key = "DASHSCOPE_API_KEY"
model = "qwen-plus"
[model_providers.kimi]
name = "Kimi"
base_url = "https://api.moonshot.cn/v1"
env_key = "MOONSHOT_API_KEY"
model = "kimi-k2.7-code"
[model_providers.glm]
name = "GLM"
base_url = "https://open.bigmodel.cn/api/paas/v4"
env_key = "ZHIPUAI_API_KEY"
model = "glm-4-plus"
[model_providers.openai]
name = "OpenAI"
base_url = "https://api.openai.com/v1"
env_key = "OPENAI_API_KEY"
model = "gpt-4o"
[model_providers.ollama]
name = "Ollama (ローカル)"
base_url = "http://localhost:11434/v1"
env_key = ""
model = "qwen2.5:7b"
3. キーを入力
~/.baize/.env を編集します。使用する LLM がある場合、その行の先頭の # を削除し、他の LLM の先頭に # を追加して他の LLM API 出力をロックします。API Key を入力したら必ず保存してください。保存後にのみ有効になります:
# ============================================================
# 白澤キーファイル
# ============================================================
# 使用するバックエンドのキーだけを入力し、他はコメントのままにします。
# 変数名は config.toml の env_key フィールドと一致させる必要があります。
#
# 場所:
# Linux / macOS: ~/.baize/.env
# Windows: C:\Users\ユーザー名\.baize\.env
# ============================================================
# ---------- DeepSeek(デフォルトバックエンド) ----------
# 取得先:https://platform.deepseek.com/api_keys
DEEPSEEK_API_KEY=
# ---------- OpenAI または任意の OpenAI 互換インターフェース(オプション) ----------
# Groq、通義、Moonshot、智譜、OpenAI などに適用
# 注意:base_url は config.toml の [model_providers.xxx] で設定し、ここでは設定しません
# OPENAI_API_KEY=
# ---------- 通義千問(オプション) ----------
# 取得先:https://dashscope.console.aliyun.com/
# DASHSCOPE_API_KEY=
# ---------- Kimi / Moonshot(オプション) ----------
# 取得先:https://platform.moonshot.cn/console/api-keys
# MOONSHOT_API_KEY=
# ---------- 智譜 GLM(オプション) ----------
# 取得先:https://open.bigmodel.cn/usercenter/apikeys
# ZHIPUAI_API_KEY=
# ---------- カスタムゲートウェイ(オプション) ----------
# CUSTOM_API_KEY=
# ---------- Ollama(ローカルモデル、キー不要) ----------
# Ollama が localhost:11434 で動作していれば、ここでの設定は不要です
- 再起動
baize
黒金のロゴとウェルカムメッセージが表示されれば起動成功です。
Ollama ローカルモデル(ゼロコスト)
クラウド API を使いたくない場合は、ローカル Ollama を使用します:
bash
# 1. Ollama をインストール:https://ollama.com/download
# 2. モデルを取得
ollama pull qwen2.5:7b
# 3. Ollama サービスを起動
ollama serve
# 4. ~/.baize/config.toml を変更
active_provider = "ollama"
# 5. 白澤を起動
baize
推奨モデル:qwen2.5:7b(中国語に強い)、llama3.1:8b、deepseek-r1:7b。
使用例
起動後、>>> 降旨: プロンプトで自然言語により要件を記述します:
>>> 降旨:Python で Douban Top250 をスクレイピングするスクリプトを書き、CSV として保存してください
>>> 降旨:src/ 以下のすべての Python ファイルの型エラーを確認してください
>>> 降旨:このリポジトリ内で requests を使っている箇所をすべて探し、httpx に変更してください
多言語インタラクション
白澤は 9 言語をサポートします:中国語、English、日本語、한국어、Español、Français、deutsch、русский、العربية。
切り替え方法は 2 つあります:
方法 1:直接話す(自動検出)
白澤は入力言語を自動認識して切り替えます:
>>> 降旨:Hello, help me write a Python script
[システム] 入力言語を English と検出しました。白澤は English インタラクションに切り替えました。
(白澤は英語で応答)
>>> 降旨:日本語で答えてください
[システム] 入力言語を 日本語 と検出しました。白澤は 日本語 インタラクションに切り替えました。
(白澤は日本語で応答)
方法 2:手動コマンド
>>> 降旨:/lang # 現在の言語と利用可能リストを表示
[システム] 現在の言語:中文 (zh)
[システム] 利用可能な言語:
zh 中文 ←
en English
ja 日本語
ko 한국어
es Español
fr Français
>>> 降旨:/lang English # 言語名で切り替え
>>> 降旨:/lang ja # 言語コードで切り替え
>>> 降旨:/lang 西班牙语 # 中国語名でも可能
言語名 / 言語コード / 中国語名 / 原語名の 4 種類をサポートします。たとえば英語に切り替える場合、English、en、英语、英文 のいずれでも可能です。
内蔵コマンド
/exit、/quit--> 白澤を終了/clear--> 会話履歴、ToDo、思考記録、ツール記録をクリア/compact--> 手動でコンテキストを圧縮(会話が長すぎる場合に使用)/commit--> 現在のセッションを保存し Git にコミット(Git リポジトリ内の場合)/lang--> 現在の言語を表示;/lang enで英語に切り替え(言語コードまたは言語名をサポート)/skills--> 利用可能なすべてのスキルを一覧表示/skills reload--> ユーザースキルディレクトリを再読み込み/unload--> 現在アクティブなスキルをアンロード/show thought--> 完全な思考記録を表示/show tool--> ツール呼び出し記録を表示/show all--> すべてのセッション履歴を表示/スキル名--> 指定スキルを読み込み(曖昧一致をサポート)/privacy--> プライバシー脱敏制御(on / off / strict / status / rules / test / clear)/privacy rule-off <name>--> 特定の脱敏ルールを無効化(例:/privacy rule-off phone_intl)/privacy rule-on <name>--> ルールを再度有効化
データ接続使用例
SPSS / SQL を設定した後、自然言語で直接操作できます:
>>> 降旨:SPSS で data.sav を開き、変数リストとサンプルサイズを教えてください
>>> 降旨:data.sav に対して記述統計を実行し、その後線形回帰を実行してください
>>> 降旨:sales テーブルで先月の売上が 10 万を超える注文を検索し、顧客ごとにグループ化してください
>>> 降旨:SPSS の分析結果を CSV にエクスポートし、SQL で顧客マスタデータと結合してください
拡張機構
白澤は 4 種類の拡張方法をサポートします。現在の作業ディレクトリに配置すれば有効になります。
スキル(Skills)
./skills/スキル名/SKILL.md にドメイン知識を記述します。AI は複雑なタスクに遭遇したとき自発的に読み込みます。
markdown
---
name: pandas-eda
description: pandas による探索的データ分析のベストプラクティス
tags: data,python
---
# Pandas EDA ガイド
## コア手順
1. df.info() でフィールド型と欠損を確認
2. df.describe() で統計記述
...
会話中に /pandas-eda で手動読み込みすることもできます。
サブエージェント(Subagents)
./subagent/ロール名/AGENT.md に専用サブエージェントを定義します。メインエージェントは agent ツールでタスクを委任できます。
markdown
---
name: code-reviewer
description: 厳格なコードレビュアー
---
あなたはシニアコードレビュアーです。レビュー時は以下を優先してください:
1. 境界条件と例外処理
2. リソースリーク
3. 並行安全性
...
フック(Hooks)
./hooks/ の下に PreToolUse-*.sh、PostToolUse-*.sh、Stop-*.sh を配置します。JSON 入力を受け取り、判断を返します:
#!/bin/bash
# PreToolUse-guard.sh
read -r input
if echo "$input" | grep -q "rm -rf"; then
echo '{"hookSpecificOutput":{"permissionDecision":"block","permissionDecisionReason":"Deletion prohibited"}}'
fi
Python フックは内蔵 API を直接呼び出せます(Baize.py の hook_* 関数を参照)。
MCP サーバー
./MCP/mcp_config.json で外部ツールサーバーを設定します:
{
"mcpServers": [
{
"name": "filesystem",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."],
"env": {},
"enabled": true
}
]
}
セキュリティ設計(コア)
白澤はデフォルトで以下のセキュリティ機構を有効にします:
- コマンド許可リスト:
ls、cat、grep、git、python3などの一般的なコマンドのみ許可。 - パス脱出検出:すべてのファイル操作を現在の作業ディレクトリと
/tmp内に制限。 - 危険コマンド遮断:
rm -rf /、fork bomb、curl | sh、git push --forceなどのパターンを遮断。 - 機密ファイル保護:
.env、.ssh/、id_rsa、*.pemなどの変更を禁止。 - スクリプトインジェクション遮断:
python -c "os.system(...)"のようなバイパスを検出。 - プロセスリソース制限:Linux/macOS で CPU、メモリ、プロセス数を制限。
- プライバシー脱敏(双方向可逆):送信時に PII をランダムプレースホルダーへ置換し、受信時に復元。ディスク書き込み時は独立して脱敏。
- プレースホルダーインジェクション耐性:64 ビット暗号学的ランダムトークン + 入力側中和 + セッション分離。
- 監査ログ脱敏:
hook_audit_logは書き込み前に脱敏し、切り詰め、失敗時は書き込みを拒否。
信頼済みプロジェクトで制限を緩和する必要がある場合、Baize.py の ALLOWED_COMMANDS と FORBIDDEN_PATH_PATTERNS を変更できます。
プライバシー脱敏(コア)
白澤には 双方向可逆 + ディスク脱敏 のプライバシー保護機構が内蔵され、入力からディスクまでの全経路をカバーします:
- 送信時:LLM に送信する前に PII を推測不可能なプレースホルダーへ置換。
- 受信時:LLM 応答内のプレースホルダーを原文へ復元。
- ディスク書き込み時:セッションファイル、圧縮トランスクリプト、監査ログを書き込み前に独立して脱敏。ディスクに平文を残さない。
デフォルトでは無効です。必要時に有効化します。
有効化方法は 2 つ
方法 1:自然言語
会話中で直接言います:
>>> 降旨:プライバシー脱敏を有効化
[システム] プライバシー脱敏を有効化しました(標準モード)。
>>> 降旨:厳格脱敏を有効化
[システム] プライバシー脱敏を有効化しました(厳格モード)。
>>> 降旨:プライバシー保護を無効化
[システム] プライバシー脱敏を無効化しました。
方法 2:スラッシュコマンド
/privacy on標準モードを有効化/privacy strict厳格モードを有効化/privacy off無効化/privacy status状態、セッション ID、ルール数、LRU/TTL 統計を表示/privacy rulesすべてのルール(有効状態を含む)を一覧表示/privacy rule-off <name>特定ルールを無効化/privacy rule-on <name>ルールを再度有効化/privacy test <テキスト>脱敏効果をテスト/privacy clearプレースホルダーマッピングをクリアし、セッション ID をローテーション
2 つのモード
標準:中国大陸の携帯番号、身分証番号、銀行カード番号(Luhn チェック)、メール、IPv4/IPv6、OpenAI/Anthropic/GitHub/AWS API Key、Bearer Token、秘密鍵ブロック、パスワードフィールド、URL 認証情報。
厳格:標準モードのすべて + 中国語氏名、QQ 番号、WeChat ID、中国大陸のナンバープレート番号。
仕組み
ユーザー入力(実際の PII を含む)→ messages は原文を保存
↓ sanitize_messages()
LLM に送信されるのは [[PHONE_1]]、[[EMAIL_1]]
↓ LLM 応答
返されたプレースホルダー → restore_message()
原文へ復元 → ディスク書き込み / 表示 / ツール実行
- プライバシー脱敏(双方向可逆):送信時に PII をランダムプレースホルダーへ置換し、受信時に復元。ディスク書き込み時は独立して脱敏。
- プレースホルダーインジェクション耐性:64 ビット暗号学的ランダムトークン + 入力側中和 + セッション分離。
- 監査ログ脱敏:
hook_audit_logは書き込み前に脱敏し、切り詰め、失敗時は書き込みを拒否。
ツール引数のインテリジェント分级
脱敏される(純テキスト引数で、実際の実行には参加しない):
todo、ask_user_question、task_create、task_update
脱敏されない(パス/コマンド/URL が実際に使用される):
run_read/run_write/run_edit/run_glob/run_grep(パスは IO に使用)run_bash/background_run(コマンドは実行される)run_webfetch/web_search(URL は実際にネットワークへ送信される)set_workspace(パスはchdirに使用)load_skills(スキル名は列挙)agent(サブエージェントコンテキストは独立して脱敏)mcp_*(意味が未知のため保守的に処理)
ディスク書き込み時はすべて脱敏(ディスク内容は再実行されないため、安全性を優先)。
ディスク脱敏
デフォルト有効で、メモリ内脱敏とは独立しています。/privacy off(メモリ内脱敏なし)でも、ディスク書き込み時は少なくとも標準ルールを通します。
主な特徴:
- ディスク脱敏は独立した一回限りのマッピングテーブルを使用します。ディスクに書き込まれたプレースホルダーは復元できません。マッピングテーブルは破棄されるためです。
- ディスク脱敏が失敗した場合、平文の書き込みを拒否します(降格なし、サイレントスキップなし)。
- 旧バージョンのセッションファイルに平文が含まれる場合、初回保存時に自動で脱敏して書き換えます。
無効化方法(非推奨):Baize.py の PERSIST_REDACT_ENABLED = False を変更します。
例
>>> 降旨:/privacy test 私の電話番号は 13812345678、メールは [email protected]
原文:私の電話番号は 13812345678、メールは [email protected]
脱敏:私の電話番号は [[PHONE_1]]、メールは [[EMAIL_1]]
復元:私の電話番号は 13812345678、メールは [email protected]
>>> 降旨:/privacy status
[プライバシー脱敏]
現在のモード : 標準モード (standard)
セッション ID : 7d2f5e91
有効ルール数 : 34 / 41
アクティブプレースホルダー : 2
マッピング容量 : 2 / 2000
TTL : 86400 秒
LRU 淘汰 : 0
TTL 淘汰 : 0
脱敏呼び出し回数: 3
復元呼び出し回数: 3
>>> 降旨:/privacy rules
[プライバシー脱敏ルール一覧] 全 41 件
【標準+厳格】
[✓] phone_cn 中国大陸携帯番号 (standard,strict)
[✓] id_card_cn 中国大陸身分証番号 (standard,strict)
[✓] jwt JWT Token (standard,strict)
...
【厳格のみ】
[✓] name_cn 中国語氏名 (strict)
[✓] address_cn 中国語詳細住所 (strict)
...
使い方:
/privacy rule-off <name> ルールを無効化
/privacy rule-on <name> ルールを再度有効化
テスト画面
データ接続(コア)
白澤は MCP(Model Context Protocol) を通じて企業データ分析ソフトウェアと接続します。メインプログラムの変更は不要で、MCP/mcp_config.json に server を登録するだけです。
SPSS 接続
前提条件
- ローカルに IBM SPSS Statistics がインストール済み(バージョン 20–31、Windows 推奨)
- SPSS がライセンス認証済みで正常起動できること
設定手順
SPSS インストールディレクトリを確認:デフォルトパスは通常
C:\Program Files\IBM\SPSS Statistics\の後にバージョン番号(例:31)が付きます。環境変数を設定(
.envまたはシステム環境変数):
SPSS_INSTALL_PATH=C:\Program Files\IBM\SPSS Statistics\31
- 状態を確認:
spss-studio-mcp status
期待される出力:
=== SPSS MCP Capability Status ===
pyreadstat : OK v1.3.6
pandas : OK v3.0.2
SPSS batch : OK
MCP/mcp_config.jsonに登録:
{
"mcpServers": [
{
"name": "spss",
"command": "spss-studio-mcp",
"args": ["serve", "--transport", "stdio"],
"env": {
"SPSS_INSTALL_PATH": "C:\\Program Files\\IBM\\SPSS Statistics\\31"
},
"enabled": true
}
]
}
SPSS batch: NOT FOUND の場合
spss-studio-mcp が SPSS エンジンを見つけられなかったが、pyreadstat + pandas は正常という意味です。この場合 ファイルモード になります:
.savの読み取り、メタデータ確認、データプレビュー、CSV ↔ SAV 変換が可能- 統計分析(t 検定、回帰、ANOVA など)は実行不可
解決方法:MCP/mcp_config.json の SPSS_INSTALL_PATH を正しく設定するか、ファイルモードへの降格を受け入れます。
SQL 接続
対応データベース
PostgreSQL、MySQL、MariaDB、SQL Server、Oracle、達夢、人大金倉、TiDB、OceanBase など(SQLAlchemy 2.0 ドライバーベース)。
設定手順
- 読み取り専用データベースアカウントを準備(強く推奨):
CREATE USER baize_ro WITH PASSWORD 'xxx';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO baize_ro;
- 接続文字列を準備:
- PostgreSQL -->
postgresql+psycopg://user:pwd@host:5432/db - MySQL -->
mysql+pymysql://user:pwd@host:3306/db - SQL Server -->
mssql+pyodbc://user:pwd@host:1433/db?driver=ODBC+Driver+18+for+SQL+Server - Oracle -->
oracle+oracledb://user:pwd@host:1521/?service_name=ORCL
MCP/mcp_config.jsonに登録:
{
"mcpServers": [
{
"name": "sql",
"command": "atengk-mcp-server-rdbms",
"args": ["--transport", "stdio"],
"env": {
"DATABASE_URL": "postgresql+psycopg://baize_ro:pwd@localhost:5432/prod"
},
"enabled": true
}
]
}
内蔵セキュリティガードレール
atengk-mcp-server-rdbms は多層保護を提供します:
- AST レベル SELECT ガード:
sqlglotで構文木を解析し、DELETE/UPDATE/DROP/TRUNCATEなどの書き込み操作を物理的に遮断。 - 自動 LIMIT 注入:行数未指定のクエリには強制的に
LIMIT 100を追加し、全表取得によるメモリ枯渇を防止。 - デフォルト読み取り専用:書き込み操作は
--allow-dml/--allow-ddlで明示的に許可する必要あり。 - SQL インジェクション遮断:AST 層で文字列連結により構築された悪意ある文を拒否。
複数データベースを一度に設定
複数のデータベースに同時接続したい場合、複数の server を登録できます:
{
"mcpServers": [
{
"name": "sql_prod",
"command": "atengk-mcp-server-rdbms",
"args": ["--transport", "stdio"],
"env": { "DATABASE_URL": "postgresql+psycopg://ro:pwd@prod:5432/db" },
"enabled": true
},
{
"name": "sql_warehouse",
"command": "atengk-mcp-server-rdbms",
"args": ["--transport", "stdio"],
"env": { "DATABASE_URL": "mysql+pymysql://ro:pwd@dw:3306/analytics" },
"enabled": true
}
]
}
白澤はそれらのすべてのツールを MATERTOOLS に自動統合し、LLM がタスクに応じて自動選択します。
ディレクトリ構造
baize-agent/
├── pyproject.toml # パッケージ設定
├── requirements-data.txt # データ接続依存関係(オプション)
├── requirements-data # 接続依存関係
├── README.md
├── tests/ # テスト(パッケージには含まれない)
| ├── __init__.py
| ├── test_history.py
| └── test_skill_loader.py
├── .env.example # 環境変数例
├── .gitignore
└── agent/ # メインパッケージ
├── logo_* # ログイン画面ロゴ
├── LOGO和启动交互界面 # ログイン画面ロゴ画像
├── __init__.py # バージョン
├── Baize.py # メインプログラムと Agent Loop
├── config.py # マルチバックエンド設定読み込み
├── ui_theme.py # CLI レンダリングテーマ
├── utils.py # 汎用ユーティリティ
├── logo.txt
├── skills/ # 内蔵スキル
├── subagent/ # 内蔵サブエージェント
├── core/ # コアロジック(副作用なし、単体テスト可能)
| ├── __init__.py
| ├── history.py # セッション履歴クリーニング / token 見積り / 圧縮
| └── privacy.py # プライバシー脱敏:PII 識別 / プレースホルダー置換 / 可逆復元
├── hooks/ # 内蔵フック
└── MCP/ # MCP クライアントと設定
├── __init__.py
├── mcp_client.py # MCP クライアント
└── mcp_config.json # MCP 設定
環境変数リファレンス
- 変数:
DEEPSEEK_API_KEY— 説明:DeepSeek API キー — デフォルト:—(秘密) - 変数:
DEEPSEEK_BASE_URL— 説明:DeepSeek エンドポイント URL — デフォルト:https://api.deepseek.com - 変数:
OPENAI_API_KEY— 説明:OpenAI 互換 API キー — デフォルト:—(秘密) - 変数:
OPENAI_BASE_URL— 説明:OpenAI 互換エンドポイント URL — デフォルト:https://api.openai.com/v1 - 変数:
OLLAMA_BASE_URL— 説明:Ollama サービス URL — デフォルト:http://localhost:11434
上記変数は ~/.baize/.env に書き込めばよく、shell 設定ファイルの変更は不要です。
- データ分析変数:
SPSS_INSTALL_PATH— 説明:IBM SPSS Statistics インストールディレクトリ — デフォルト:—(未設定の場合はファイルモードへ降格) - データ分析変数:
DATABASE_URL— 説明:SQL MCP のデータベース接続文字列 — デフォルト:—(MCP server が読み取る)
上記変数は MCP/mcp_config.json に書き込みます。
開発
テスト実行
本プロジェクトは pytest を使用します。開発前にパッケージと開発依存関係を編集可能モードでインストールしてください:
pip install -e ".[dev]"
すべてのテストを実行:
python -m pytest tests/ -v
単一ファイルのみ:
python -m pytest tests/test_history.py -v
コード構造規約
agent/:パッケージとして配布されるメインパッケージ。すべての実行時ロジックとリソース(skills、subagent、hooks、MCP)はここにあります。agent/core/:外部副作用のない純粋ロジックモジュール。単独でテスト可能でなければなりません。 新しいこの種のロジックはここに置き、テストを添付してください。tests/:agent/下のソースファイルと 1 対 1 対応し、test_<モジュール名>.pyと命名します。- 外部依存(ネットワーク、ディスク、グローバル状態)を持つ関数は、テストで置換できるよう引数を通じて依存性を注入してください。
❓ FAQ
- Q:API キーはどこに記入しますか?
A:~/.baize/.env です。プロジェクトルートの .env ではありません。
- Q:バックエンドを変更したら再インストールが必要ですか?
A:不要です。~/.baize/config.toml の active_provider を変更するだけです。
- Q:ローカル Ollama にキーは必要ですか?
A:不要です。active_provider = "ollama" を選択し、env_key を空にしてください。
- Q:作業ディレクトリを切り替えるには?
A:会話中で「/path/to/project に切り替えて」と言うと、白澤が set_workspace ツールを呼び出します。
- Q:コンテキストが長すぎるとどうなりますか?
A:白澤は自動で 2 段階圧縮します。まず古いツール結果を切り詰め、次に LLM に要約を依頼します。手動で /compact も使用できます。
- Q:誤ってファイルを削除しませんか?
A:デフォルトのコマンド許可リストが rm -rf / などの危険操作を遮断します。ファイル書き込み前には Diff を表示し確認を求めます。
- Q:白澤を SPSS に接続するには?
A:1. pip install -r requirements-data.txt をインストール;2. 環境変数 SPSS_INSTALL_PATH を SPSS インストールディレクトリに設定;3. MCP/mcp_config.json で spss server を有効化。詳細は「データ接続(SPSS / SQL)」章を参照。
- Q:
SPSS batch: NOT FOUNDの場合は?
A:SPSS エンジンが見つからないことを意味します。SPSS_INSTALL_PATH が stats.exe を含むディレクトリを正しく指しているか確認してください。.sav ファイルのみを扱う場合はこの警告を無視できます(ファイルモードへ降格)。
- Q:SQL データベースに接続するには何を追加インストールしますか?
A:Python 層では atengk-mcp-server-rdbms をインストールします(pip install で自動完了)。SQL Server ユーザーはシステム層に Microsoft ODBC Driver 18 もインストールする必要があり、これは pip ではインストールできません。
- Q:白澤がデータベースデータを誤って削除しませんか?
A:しません。SQL MCP はデフォルトで SELECT のみ許可し、AST 構文木レベルですべての書き込み操作を遮断します。さらに、白澤専用の読み取り専用データベースアカウントを作成することを強く推奨します。
- Q:SPSS 分析結果のデータが LLM に漏れませんか?
A:プライバシー脱敏が有効(/privacy on)の場合、ツール返却結果は LLM に送信される前に電話番号、メール、身分証などの PII が自動脱敏されます。ただし、読み取り専用データベースアカウント + データサンプリング(必要なフィールドのみクエリ)も併用してリスクを下げることを推奨します。
- Q:SPSS/SQL を追加すると、白澤の毎回の会話が遅くなり token も増えるのはなぜですか?
A:MCP server が公開するツール定義が毎ターン LLM に送信されるためです。SPSS には 60+ のツールがあり、約 6,000–12,000 token の固定オーバーヘッドが増えます。よく使うワークフローに SPSS が含まれない場合、その enabled を false にし、必要時に有効化できます。
🤝 貢献
Issue と PR を歓迎します。PR を提出する前に CONTRIBUTOR.md を読むことをおすすめします。
PR を提出してくださるすべての Contributor に感謝します。
- GitHub Contributor: @anupamme @wangyipeng0724
ライセンス
MIT License
謝辞
- 本プロジェクトは中国の AtomGit でホストされています:https://atomgit.com/Com_Xu/Baize
- AtomGit が本プロジェクトを G-star 孵化プロジェクトに採用してくださったことに感謝します。
- PR 貢献者、Douyin フォロワー、私をフォローしてくれる学生の皆さんに感謝します。
- Claude Code、Codex などの優れた AI Coding ツールからインスピレーションを得ています。
- DeepSeek、OpenAI SDK、MCP を基盤に構築されています。
- Vibe Coding の道を共に歩むすべての開発者に感謝します。
☕ スポンサー
白澤が役に立つ場合、スポンサー・投げ銭を歓迎します。個人開発には多くの時間がかかります。スポンサーは製品アップデートのスケジュールを変更しません。ご支援ありがとうございます!
連絡先
- 白澤に興味がある、またはオープンソース協力に参加したい場合は、以下の方法で連絡できます。
- 現在、求職中です。市場調査とユーザーリサーチの経験があり、Agent についてもある程度理解しています。私の能力が貴社のニーズに合う場合、一緒に働けることを願っています(希望職種:AI プロダクト運営 / ユーザーリサーチ / マーケットリサーチ)。
WeChat QR コードをスキャンし、「Baize オープンソース協力」または「企業採用」と明記してください。
Douyin QR コードをスキャンしてフォローしてください。
