diff --git a/README.ja.md b/README.ja.md index e4245cf96..70f9fca45 100644 --- a/README.ja.md +++ b/README.ja.md @@ -1,769 +1,525 @@ -
+# ClawDroid
-
-
-
-
-
|
-
- |
-
-
- |
-
-
-
-## 🦾 デモンストレーション
-### 🛠️ スタンダードアシスタントワークフロー
-🧩 フルスタックエンジニア |
- 🗂️ ログ&計画管理 |
- 🔎 Web 検索&学習 |
-
|---|---|---|
|
-
|
-
|
-
| 開発 · デプロイ · スケール | -スケジュール · 自動化 · メモリ | -発見 · インサイト · トレンド | -
+すべての設定は `CLAWDROID_` プレフィックスの環境変数で上書きできます(例: `CLAWDROID_LLM_API_KEY`)。環境変数名は JSON パスを大文字・`_` 区切りにしたものです。
+### LLM (`llm`)
-## 🐛 トラブルシューティング
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `model` | `zhipu/glm-4.7` | `CLAWDROID_LLM_MODEL` | `プロバイダー/モデル名` 形式で指定 |
+| `api_key` | *(空)* | `CLAWDROID_LLM_API_KEY` | LLM プロバイダーの API キー |
+| `base_url` | *(空)* | `CLAWDROID_LLM_BASE_URL` | カスタム API エンドポイント(OpenAI 互換) |
-### Web 検索で「API 配置问题」と表示される
+### エージェント (`agents.defaults`)
-検索 API キーをまだ設定していない場合、これは正常です。ClawDroid は手動検索用の便利なリンクを提供します。
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `workspace` | `~/.clawdroid/workspace` | `CLAWDROID_AGENTS_DEFAULTS_WORKSPACE` | ワークスペースのパス |
+| `data_dir` | `~/.clawdroid/data` | `CLAWDROID_AGENTS_DEFAULTS_DATA_DIR` | データディレクトリ(メモリ、スキル、cron 等) |
+| `restrict_to_workspace` | `true` | `CLAWDROID_AGENTS_DEFAULTS_RESTRICT_TO_WORKSPACE` | ファイル操作をワークスペース内に制限 |
+| `max_tokens` | `8192` | `CLAWDROID_AGENTS_DEFAULTS_MAX_TOKENS` | LLM 呼び出しあたりの最大出力トークン数 |
+| `context_window` | `128000` | `CLAWDROID_AGENTS_DEFAULTS_CONTEXT_WINDOW` | コンテキストウィンドウサイズ(トークン) |
+| `temperature` | `0` | `CLAWDROID_AGENTS_DEFAULTS_TEMPERATURE` | LLM のサンプリング温度 |
+| `max_tool_iterations` | `20` | `CLAWDROID_AGENTS_DEFAULTS_MAX_TOOL_ITERATIONS` | 1リクエストあたりのツール呼び出し最大ループ数 |
-Web 検索を有効にするには:
-1. [https://brave.com/search/api](https://brave.com/search/api) で無料の API キーを取得(月 2000 クエリ無料)
-2. `~/.clawdroid/config.json` に追加:
- ```json
- {
- "tools": {
- "web": {
- "search": {
- "api_key": "YOUR_BRAVE_API_KEY",
- "max_results": 5
- }
- }
- }
- }
- ```
+### ゲートウェイ (`gateway`)
-### コンテンツフィルタリングエラーが出る
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `host` | `127.0.0.1` | `CLAWDROID_GATEWAY_HOST` | HTTP ゲートウェイのバインドアドレス |
+| `port` | `18790` | `CLAWDROID_GATEWAY_PORT` | HTTP ゲートウェイのポート |
-一部のプロバイダー(Zhipu など)にはコンテンツフィルタリングがあります。クエリを言い換えるか、別のモデルを使用してください。
+### チャンネル (`channels`)
-### Telegram Bot で「Conflict: terminated by other getUpdates」と表示される
+#### WebSocket (`channels.websocket`)
-別のインスタンスが実行中の場合に発生します。`clawdroid gateway` が 1 つだけ実行されていることを確認してください。
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `enabled` | `true` | `CLAWDROID_CHANNELS_WEBSOCKET_ENABLED` | WebSocket チャンネルを有効化(Android アプリ接続用) |
+| `host` | `127.0.0.1` | `CLAWDROID_CHANNELS_WEBSOCKET_HOST` | バインドアドレス |
+| `port` | `18793` | `CLAWDROID_CHANNELS_WEBSOCKET_PORT` | ポート |
+| `path` | `/ws` | `CLAWDROID_CHANNELS_WEBSOCKET_PATH` | WebSocket パス |
+| `allow_from` | `[]` | `CLAWDROID_CHANNELS_WEBSOCKET_ALLOW_FROM` | 許可するユーザー ID(空 = 全員許可) |
----
+#### Telegram (`channels.telegram`)
-## 📝 API キー比較
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `enabled` | `false` | `CLAWDROID_CHANNELS_TELEGRAM_ENABLED` | Telegram ボットを有効化 |
+| `token` | *(空)* | `CLAWDROID_CHANNELS_TELEGRAM_TOKEN` | BotFather から取得したボットトークン |
+| `proxy` | *(空)* | `CLAWDROID_CHANNELS_TELEGRAM_PROXY` | SOCKS5/HTTP プロキシ URL |
+| `allow_from` | `[]` | `CLAWDROID_CHANNELS_TELEGRAM_ALLOW_FROM` | 許可するユーザー/チャット ID |
-| サービス | 無料枠 | ユースケース |
-|---------|--------|------------|
-| **OpenRouter** | 月 200K トークン | 複数モデル(Claude, GPT-4 など) |
-| **Zhipu** | 月 200K トークン | 中国ユーザー向け最適 |
-| **Brave Search** | 月 2000 クエリ | Web 検索機能 |
-| **Groq** | 無料枠あり | 高速推論(Llama, Mixtral) |
+#### Discord (`channels.discord`)
+
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `enabled` | `false` | `CLAWDROID_CHANNELS_DISCORD_ENABLED` | Discord ボットを有効化 |
+| `token` | *(空)* | `CLAWDROID_CHANNELS_DISCORD_TOKEN` | ボットトークン |
+| `allow_from` | `[]` | `CLAWDROID_CHANNELS_DISCORD_ALLOW_FROM` | 許可するユーザー ID |
+
+#### Slack (`channels.slack`)
+
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `enabled` | `false` | `CLAWDROID_CHANNELS_SLACK_ENABLED` | Slack ボットを有効化 |
+| `bot_token` | *(空)* | `CLAWDROID_CHANNELS_SLACK_BOT_TOKEN` | ボットトークン(`xoxb-...`) |
+| `app_token` | *(空)* | `CLAWDROID_CHANNELS_SLACK_APP_TOKEN` | Socket Mode 用アプリレベルトークン(`xapp-...`) |
+| `allow_from` | `[]` | `CLAWDROID_CHANNELS_SLACK_ALLOW_FROM` | 許可するユーザー ID |
+
+#### WhatsApp (`channels.whatsapp`)
+
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `enabled` | `false` | `CLAWDROID_CHANNELS_WHATSAPP_ENABLED` | WhatsApp ブリッジを有効化 |
+| `bridge_url` | `ws://localhost:3001` | `CLAWDROID_CHANNELS_WHATSAPP_BRIDGE_URL` | ブリッジの WebSocket URL |
+| `allow_from` | `[]` | `CLAWDROID_CHANNELS_WHATSAPP_ALLOW_FROM` | 許可する電話番号/ID |
+
+#### LINE (`channels.line`)
+
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `enabled` | `false` | `CLAWDROID_CHANNELS_LINE_ENABLED` | LINE ボットを有効化 |
+| `channel_secret` | *(空)* | `CLAWDROID_CHANNELS_LINE_CHANNEL_SECRET` | チャンネルシークレット |
+| `channel_access_token` | *(空)* | `CLAWDROID_CHANNELS_LINE_CHANNEL_ACCESS_TOKEN` | チャンネルアクセストークン |
+| `webhook_host` | `127.0.0.1` | `CLAWDROID_CHANNELS_LINE_WEBHOOK_HOST` | Webhook サーバーのバインドアドレス |
+| `webhook_port` | `18791` | `CLAWDROID_CHANNELS_LINE_WEBHOOK_PORT` | Webhook サーバーのポート |
+| `webhook_path` | `/webhook/line` | `CLAWDROID_CHANNELS_LINE_WEBHOOK_PATH` | Webhook パス |
+| `allow_from` | `[]` | `CLAWDROID_CHANNELS_LINE_ALLOW_FROM` | 許可するユーザー ID |
+
+### ツール (`tools`)
+
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `exec.enabled` | `false` | `CLAWDROID_TOOLS_EXEC_ENABLED` | シェルコマンド実行(安全のためデフォルト無効) |
+| `android.enabled` | `true` | `CLAWDROID_TOOLS_ANDROID_ENABLED` | Android デバイス自動操作 |
+| `memory.enabled` | `true` | `CLAWDROID_TOOLS_MEMORY_ENABLED` | 長期メモリとデイリーノート |
+
+#### Web 検索 (`tools.web`)
+
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `brave.enabled` | `false` | `CLAWDROID_TOOLS_WEB_BRAVE_ENABLED` | Brave Search API を有効化 |
+| `brave.api_key` | *(空)* | `CLAWDROID_TOOLS_WEB_BRAVE_API_KEY` | Brave API キー |
+| `brave.max_results` | `5` | `CLAWDROID_TOOLS_WEB_BRAVE_MAX_RESULTS` | 検索結果の最大件数 |
+| `duckduckgo.enabled` | `true` | `CLAWDROID_TOOLS_WEB_DUCKDUCKGO_ENABLED` | DuckDuckGo 検索を有効化(API キー不要) |
+| `duckduckgo.max_results` | `5` | `CLAWDROID_TOOLS_WEB_DUCKDUCKGO_MAX_RESULTS` | 検索結果の最大件数 |
+
+#### MCP サーバー (`tools.mcp`)
+
+サーバー名をキーとしたエントリで定義。Stdio と HTTP の 2 種類のトランスポートに対応。
+
+**Stdio トランスポート:**
+
+| キー | 説明 |
+|-----|------|
+| `command` | サーバーの起動コマンド |
+| `args` | コマンド引数 |
+| `env` | プロセスの環境変数 |
+
+**HTTP トランスポート:**
+
+| キー | 説明 |
+|-----|------|
+| `url` | サーバー URL |
+| `headers` | HTTP ヘッダー(例: Authorization) |
+
+**共通:**
+
+| キー | デフォルト | 説明 |
+|-----|----------|------|
+| `description` | *(空)* | 人間が読める説明 |
+| `enabled` | `false` | このサーバーを有効化 |
+| `idle_timeout` | `300` | アイドル時に停止するまでの秒数 |
+
+### ハートビート (`heartbeat`)
+
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `enabled` | `true` | `CLAWDROID_HEARTBEAT_ENABLED` | 定期ハートビートを有効化 |
+| `interval` | `30` | `CLAWDROID_HEARTBEAT_INTERVAL` | 間隔(分、最小 5) |
+
+### レート制限 (`rate_limits`)
+
+| キー | デフォルト | 環境変数 | 説明 |
+|-----|----------|---------|------|
+| `max_tool_calls_per_minute` | `60` | `CLAWDROID_RATE_LIMITS_MAX_TOOL_CALLS_PER_MINUTE` | 1分あたりのツール呼び出し上限(0 = 無制限) |
+| `max_requests_per_minute` | `30` | `CLAWDROID_RATE_LIMITS_MAX_REQUESTS_PER_MINUTE` | 1分あたりの LLM リクエスト上限(0 = 無制限) |
+
+## 対応 LLM プロバイダー
+
+[any-llm-go](https://github.com/mozilla-ai/any-llm-go) を統一アダプターとして使用。
+
+| プロバイダー | モデル指定形式 | 例 |
+|------------|-------------|---|
+| OpenAI | `openai/model` | `openai/gpt-4o` |
+| Anthropic | `anthropic/model` または `claude/model` | `anthropic/claude-3-5-sonnet` |
+| Google Gemini | `gemini/model` または `google/model` | `gemini/gemini-2.0-flash` |
+| DeepSeek | `deepseek/model` | `deepseek/deepseek-chat` |
+| Groq | `groq/model` | `groq/llama-3.3-70b` |
+| Mistral | `mistral/model` | `mistral/mistral-large-latest` |
+| Ollama | `ollama/model` | `ollama/llama3` |
+| LlamaCpp | `llamacpp/model` | `llamacpp/local` |
+| Llamafile | `llamafile/model` | `llamafile/local` |
+| ZhiPu | `zhipu/model` | `zhipu/glm-4.7` |
+
+`base_url` で任意の OpenAI 互換エンドポイント(OpenRouter、ローカルプロキシ等)を指定できます。
+
+## ツール
+
+ClawDroid は 16 以上の組み込みツールを提供し、AI エージェントが自律的に使用します。
+
+### ファイル操作
+
+| ツール | 説明 |
+|-------|------|
+| `read_file` | ファイル内容の読み取り |
+| `write_file` | ファイルへの書き込み |
+| `edit_file` | 検索置換による編集 |
+| `append_file` | ファイルへの追記 |
+| `copy_file` | ファイルのコピー |
+| `list_dir` | ディレクトリ内容の一覧 |
+
+`restrict_to_workspace` 有効時はワークスペース内のみに制限されます。
+
+### Android デバイス自動操作
+
+| アクション | 説明 |
+|-----------|------|
+| `screenshot` | 画面キャプチャ(JPEG) |
+| `get_ui_tree` | アクセシビリティツリーの取得 |
+| `tap` | 座標をタップ |
+| `swipe` | スワイプ操作 |
+| `text` | テキスト入力 |
+| `keyevent` | キーイベント送信(戻る、ホーム等) |
+| `search_apps` | インストール済みアプリの検索 |
+| `launch_app` | パッケージ名でアプリを起動 |
+| `app_info` | アプリ情報の取得 |
+| `broadcast` | Android ブロードキャストの送信 |
+| `intent` | Android インテントの送信 |
+
+UI 自動操作(`screenshot`、`tap`、`swipe` 等)はアシスタントオーバーレイからのみ利用可能です。メインのチャット UI からは使用できません。
+
+### Web
+
+| ツール | 説明 |
+|-------|------|
+| `web_search` | Web 検索(Brave API または DuckDuckGo) |
+| `web_fetch` | URL からテキストを取得・抽出 |
+
+### エージェント・タスク管理
+
+| ツール | 説明 |
+|-------|------|
+| `subagent` | 同期的なサブタスク委譲 |
+| `spawn` | 非同期的なサブタスク委譲 |
+| `cron` | タスクのスケジュール(単発、繰り返し、cron 式) |
+| `memory` | 長期メモリとデイリーノート |
+| `message` | クロスチャンネルメッセージング |
+| `skill` | スキルの一覧表示・読み込み |
+| `exec` | シェルコマンド実行(デフォルト無効) |
+| `exit` | アシスタント/音声セッションの終了 |
+
+### MCP(Model Context Protocol)
+
+外部 MCP サーバーをツールプロバイダーとして接続できます。
+
+```json
+{
+ "tools": {
+ "mcp": {
+ "my-local-server": {
+ "command": "npx",
+ "args": ["-y", "@example/mcp-server"],
+ "description": "ローカル MCP サーバー",
+ "enabled": true
+ },
+ "my-remote-server": {
+ "url": "https://mcp.example.com/mcp",
+ "headers": { "Authorization": "Bearer token" },
+ "description": "リモート MCP サーバー",
+ "enabled": true,
+ "idle_timeout": 300
+ }
+ }
+ }
+}
+```
+
+**stdio**(ローカルプロセス)と **HTTP/Streamable**(リモート)の両方のトランスポートに対応。アイドル状態のサーバーは 5 分後に自動停止します(`idle_timeout` で変更可能)。
+
+## Android アプリ
+
+### 機能
+
+- **チャット UI** - Jetpack Compose で構築されたフルチャットインターフェース
+- **フローティングアシスタントオーバーレイ** - 常時アクセス可能なピルバー型オーバーレイ(`SYSTEM_ALERT_WINDOW`)
+- **音声モード** - 継続的な音声会話ループ(聞く → 送信 → 思考 → 話す)
+- **Google アシスタントの代替** - `android.intent.action.ASSIST` として登録。ホームボタン長押しで起動
+- **デバイス自動操作** - AccessibilityService ベースのタップ、スワイプ、テキスト入力、スクリーンショット
+- **カメラ撮影** - 音声モード中に写真を撮影し視覚的コンテキストとして利用
+- **メッセージ永続化** - Room データベースによるチャット履歴の保存
+
+### パーミッション
+
+| パーミッション | 用途 |
+|-------------|------|
+| `INTERNET` | LLM API 呼び出し、Web ツール |
+| `SYSTEM_ALERT_WINDOW` | フローティングアシスタントオーバーレイ |
+| `RECORD_AUDIO` | 音声モード(音声認識) |
+| `CAMERA` | 写真撮影 |
+| `QUERY_ALL_PACKAGES` | アプリ検索・起動 |
+| `POST_NOTIFICATIONS` | フォアグラウンドサービスの通知 |
+
+### 音声モード
+
+音声モードは継続的な会話ループで動作します:
+
+1. **聞き取り** - Android SpeechRecognizer が音声をキャプチャ
+2. **送信** - 文字起こしされたテキストを Go バックエンドに送信
+3. **思考** - エージェントが処理しツールを呼び出す
+4. **読み上げ** - TextToSpeech でレスポンスを読み上げ
+
+レスポンスは短く(1〜3 文)、自然な話し言葉で返されます。30 秒間無音が続くと自動的にタイムアウトします。
+
+## メッセージングチャンネル
+
+複数のメッセージングプラットフォームから同時にアクセスできます。
+
+| チャンネル | トランスポート | 設定 |
+|-----------|-------------|------|
+| WebSocket | ローカル WebSocket | デフォルト有効、`127.0.0.1:18793` |
+| Telegram | Bot API | Bot トークンが必要 |
+| Discord | Bot API | Bot トークンが必要 |
+| Slack | Socket Mode | Bot トークン + App トークンが必要 |
+| WhatsApp | Bridge WebSocket | ブリッジ URL が必要 |
+| LINE | Webhook | チャンネルシークレット + アクセストークンが必要 |
+
+各チャンネルは `allow_from` でアクセスを許可するユーザーを制限できます。
+
+## メモリシステム
+
+- **長期メモリ** (`memory/MEMORY.md`) - 永続的なナレッジベース。エージェントが重要な情報を保存します。
+- **デイリーノート** (`memory/YYYYMM/YYYYMMDD.md`) - 日ごとのジャーナル。直近 3 日分がシステムプロンプトに含まれます。
+
+## ハートビート
+
+有効時、ワークスペースの `HEARTBEAT.md` に基づいてエージェントが定期的にチェックインします。デフォルト間隔: 30 分。リマインダーやバックグラウンドタスクなどのプロアクティブなアクションをトリガーできます。
+
+## スキル
+
+スキルは `SKILL.md` ファイルとして定義され、3 つのディレクトリから読み込まれます:
+
+1. ワークスペーススキル (`~/.clawdroid/data/skills/`)
+2. グローバルスキル (`~/.clawdroid/skills/`)
+3. ビルトインスキル
+
+```bash
+clawdroid skills list # インストール済みスキルの一覧
+clawdroid skills show
+# ClawDroid
- |
-
- |
-
-
- |
-
-
-## 🦾 Demonstration
-
-### 🛠️ Standard Assistant Workflows
-
-🧩 Full-Stack Engineer |
- 🗂️ Logging & Planning Management |
- 🔎 Web Search & Learning |
-
|---|---|---|
|
-
|
-
|
-
| Develop • Deploy • Scale | -Schedule • Automate • Memory | -Discovery • Insights • Trends | -
-
-## 🐛 Troubleshooting
-
-### Web search says "API 配置问题"
-
-This is normal if you haven't configured a search API key yet. ClawDroid will provide helpful links for manual searching.
-
-To enable web search:
-
-1. **Option 1 (Recommended)**: Get a free API key at [https://brave.com/search/api](https://brave.com/search/api) (2000 free queries/month) for the best results.
-2. **Option 2 (No Credit Card)**: If you don't have a key, we automatically fall back to **DuckDuckGo** (no key required).
-
-Add the key to `~/.clawdroid/config.json` if using Brave:
-
-```json
-{
- "tools": {
- "web": {
- "brave": {
- "enabled": false,
- "api_key": "YOUR_BRAVE_API_KEY",
- "max_results": 5
- },
- "duckduckgo": {
- "enabled": true,
- "max_results": 5
- }
- }
- }
-}
+```bash
+cd android
+./gradlew assembleDebug
```
-### Getting content filtering errors
+Package name: `io.clawdroid`
-Some providers (like Zhipu) have content filtering. Try rephrasing your query or use a different model.
+## Project Structure
-### Telegram bot says "Conflict: terminated by other getUpdates"
+```
+clawdroid/
+├── cmd/clawdroid/ # Go CLI entry point
+├── pkg/
+│ ├── agent/ # Agent loop, context builder, memory, sessions, voice prompt
+│ ├── bus/ # Message bus (inbound/outbound channels)
+│ ├── channels/ # Messaging channel adapters
+│ ├── config/ # Configuration loading and structs
+│ ├── cron/ # Scheduled task service
+│ ├── gateway/ # HTTP gateway server
+│ ├── heartbeat/ # Periodic heartbeat service
+│ ├── logger/ # Structured logging
+│ ├── mcp/ # MCP client manager
+│ ├── providers/ # LLM provider adapter (any-llm-go)
+│ ├── skills/ # Skills loader (SKILL.md)
+│ ├── state/ # State persistence
+│ └── tools/ # All tool implementations
+├── android/
+│ ├── app/ # Main app (AssistantService, AccessibilityService, DeviceController)
+│ ├── core/ # Shared core (data, domain, model, ui)
+│ └── feature/ # Feature modules (chat, settings)
+├── workspace/ # Template files (IDENTITY.md, SOUL.md, etc.)
+├── config/ # config.example.json
+├── Makefile
+├── go.mod
+└── .goreleaser.yaml
+```
-This happens when another instance of the bot is running. Make sure only one `clawdroid gateway` is running at a time.
+## License
----
+MIT License. Copyright (c) 2026 PicoClaw contributors.
-## 📝 API Key Comparison
-
-| Service | Free Tier | Use Case |
-| ---------------- | ------------------- | ------------------------------------- |
-| **OpenRouter** | 200K tokens/month | Multiple models (Claude, GPT-4, etc.) |
-| **Zhipu** | 200K tokens/month | Best for Chinese users |
-| **Brave Search** | 2000 queries/month | Web search functionality |
-| **Groq** | Free tier available | Fast inference (Llama, Mixtral) |
+Forked from [PicoClaw](https://github.com/pico-claw/picoclaw).
diff --git a/README.zh.md b/README.zh.md
deleted file mode 100644
index 62e27d417..000000000
--- a/README.zh.md
+++ /dev/null
@@ -1,721 +0,0 @@
-
-
-|
-
- |
-
-
- |
-
-
-## 🦾 演示
-
-### 🛠️ 标准助手工作流
-
-🧩 全栈工程师模式 |
-🗂️ 日志与规划管理 |
-🔎 网络搜索与学习 |
-
|---|---|---|
|
-
|
-
|
-
| 开发 • 部署 • 扩展 | -日程 • 自动化 • 记忆 | -发现 • 洞察 • 趋势 | -
-
-## 🐛 疑难解答 (Troubleshooting)
-
-### 网络搜索提示 "API 配置问题"
-
-如果您尚未配置搜索 API Key,这是正常的。ClawDroid 会提供手动搜索的帮助链接。
-
-启用网络搜索:
-
-1. 在 [https://brave.com/search/api](https://brave.com/search/api) 获取免费 API Key (每月 2000 次免费查询)
-2. 添加到 `~/.clawdroid/config.json`:
-```json
-{
- "tools": {
- "web": {
- "search": {
- "api_key": "YOUR_BRAVE_API_KEY",
- "max_results": 5
- }
- }
- }
-}
-
-```
-
-
-
-### 遇到内容过滤错误 (Content Filtering Errors)
-
-某些提供商(如智谱)有严格的内容过滤。尝试改写您的问题或使用其他模型。
-
-### Telegram bot 提示 "Conflict: terminated by other getUpdates"
-
-这表示有另一个机器人实例正在运行。请确保同一时间只有一个 `clawdroid gateway` 进程在运行。
-
----
-
-## 📝 API Key 对比
-
-| 服务 | 免费层级 | 适用场景 |
-| --- | --- | --- |
-| **OpenRouter** | 200K tokens/月 | 多模型聚合 (Claude, GPT-4 等) |
-| **智谱 (Zhipu)** | 200K tokens/月 | 最适合中国用户 |
-| **Brave Search** | 2000 次查询/月 | 网络搜索功能 |
-| **Groq** | 提供免费层级 | 极速推理 (Llama, Mixtral) |
\ No newline at end of file