Skip to content

We-IOT/WeiSenseBot

Repository files navigation

weisensebot

weisensebot: 超轻量级个人AI助手

PyPI 下载量 Python 许可证 飞书 微信 Discord

🐈 weisensebot 是一款超轻量级的个人AI助手,类似OpenClaw,基于港大团队(HKUDS)开源的nanobot开发。

⚡️ 用比OpenClaw少**99%**的代码实现核心智能体功能。

📏 实时代码行数:运行 bash core_agent_lines.sh 随时验证。

weisensebot核心特性:

🪶 超轻量级:核心智能体代码仅约4,000行 — 比Clawdbot小99%。

🔬 研究就绪:代码清晰、易读,易于理解、修改和扩展研究。

⚡️ 闪电般快速:最小占用意味着更快的启动、更低的资源使用和更快的迭代。

💎 易于使用:一键部署,立即可用。

🏗️ 架构

weisensebot架构

✨ 功能

📈 7×24小时实时市场分析

🚀 全栈软件工程师

📅 智能日常管理助手

📚 个人知识助手

发现 • 洞察 • 趋势 开发 • 部署 • 扩展 调度 • 自动化 • 组织 学习 • 记忆 • 推理

📦 安装

从源码安装(最新功能,推荐用于开发)

git clone https://github.com/We-IOT/weisensebot.git
cd weisensebot
pip install -e .

🚀 快速开始

Tip

~/.weisensebot/config.json 中设置您的API密钥。 获取API密钥:OpenRouter(全球)· Brave Search(可选,用于网络搜索)

1. 初始化

weisensebot onboard

2. 配置~/.weisensebot/config.json

将这两部分添加或合并到您的配置中(其他选项有默认值)。

设置您的API密钥(例如OpenRouter,推荐全球用户使用):

{
  "providers": {
    "openrouter": {
      "apiKey": "sk-or-v1-xxx"
    }
  }
}

设置您的模型(可选:固定提供商 — 默认自动检测):

{
  "agents": {
    "defaults": {
      "model": "anthropic/claude-opus-4-5",
      "provider": "openrouter"
    }
  }
}

3. 聊天

weisensebot agent

就这么简单!您在2分钟内就有了一个可用的AI助手。

💬 聊天应用

将weisensebot连接到您喜欢的聊天平台。

频道 所需信息
Telegram 来自@BotFather的Bot令牌
Discord Bot令牌 + 消息内容意图
Feishu(飞书) App ID + App Secret
DingTalk(钉钉) App Key + App Secret
Slack Bot令牌 + 应用级令牌
Email(电子邮件) IMAP/SMTP凭据
QQ App ID + App Secret
Wecom App ID + App Secret
Weixin QRScan 扫码登录
Telegram(推荐)

1. 创建bot

  • 打开Telegram,搜索@BotFather
  • 发送/newbot,按照提示操作
  • 复制令牌

2. 配置

{
  "channels": {
    "telegram": {
      "enabled": true,
      "token": "YOUR_BOT_TOKEN",
      "allowFrom": ["YOUR_USER_ID"]
    }
  }
}

您可以在Telegram设置中找到您的用户ID。它显示为@yourUserId。 复制此值不带@符号并将其粘贴到配置文件中。

3. 运行

weisensebot gateway
Mochat (Claw IM)

默认使用Socket.IO WebSocket,支持HTTP轮询回退。

1. 让weisensebot为您设置Mochat

只需向weisensebot发送此消息(将xxx@xxx替换为您的真实邮箱):

Read https://raw.githubusercontent.com/HKUDS/MoChat/refs/heads/main/skills/weisensebot/skill.md and register on MoChat. My Email account is xxx@xxx Bind me as your owner and DM me on MoChat.

weisensebot将自动注册、配置~/.weisensebot/config.json并连接到Mochat。

2. 重启网关

weisensebot gateway

就这样 — weisensebot会处理其余的工作!


手动配置(高级)

如果您更喜欢手动配置,请将以下内容添加到~/.weisensebot/config.json

保持claw_token私密。它应该仅在X-Claw-Token头中发送到您的Mochat API端点。

{
  "channels": {
    "mochat": {
      "enabled": true,
      "base_url": "https://mochat.io",
      "socket_url": "https://mochat.io",
      "socket_path": "/socket.io",
      "claw_token": "claw_xxx",
      "agent_user_id": "6982abcdef",
      "sessions": ["*"],
      "panels": ["*"],
      "reply_delay_mode": "non-mention",
      "reply_delay_ms": 120000
    }
  }
}
Discord

1. 创建bot

2. 启用意图

  • 在Bot设置中,启用消息内容意图(MESSAGE CONTENT INTENT)
  • (可选)如果计划基于成员数据使用允许列表,启用服务器成员意图(SERVER MEMBERS INTENT)

3. 获取您的用户ID

  • Discord设置 → 高级 → 启用开发者模式
  • 右键点击您的头像 → 复制用户ID

4. 配置

{
  "channels": {
    "discord": {
      "enabled": true,
      "token": "YOUR_BOT_TOKEN",
      "allowFrom": ["YOUR_USER_ID"],
      "groupPolicy": "mention"
    }
  }
}

groupPolicy控制bot在群组频道中的响应方式:

  • "mention"(默认) — 仅在@提及时响应
  • "open" — 响应所有消息 当发送者在allowFrom中时,DM(私信)始终响应。

5. 邀请bot

  • OAuth2 → URL生成器
  • 范围:bot
  • Bot权限:发送消息读取消息历史
  • 打开生成的邀请URL并将bot添加到您的服务器

6. 运行

weisensebot gateway
Feishu(飞书)

使用WebSocket长连接 — 不需要公网IP。

1. 创建飞书bot

  • 访问飞书开放平台
  • 创建新应用 → 启用Bot能力
  • 权限:添加im:message(发送消息)和im:message.p2p_msg:readonly(接收消息)
  • 事件:添加im.message.receive_v1(接收消息)
    • 选择长连接模式(需要先运行weisensebot以建立连接)
  • 从"凭证与基础信息"获取App IDApp Secret
  • 发布应用

2. 配置

{
  "channels": {
    "feishu": {
      "enabled": true,
      "appId": "cli_xxx",
      "appSecret": "xxx",
      "encryptKey": "",
      "verificationToken": "",
      "allowFrom": ["ou_YOUR_OPEN_ID"]
    }
  }
}

encryptKeyverificationToken在长连接模式下是可选的。 allowFrom:添加您的open_id(向bot发送消息时可在weisensebot日志中找到)。使用["*"]允许所有用户。

3. 运行

weisensebot gateway

[!TIP] 飞书使用WebSocket接收消息 — 不需要webhook或公网IP!

QQ(QQ单聊)

使用带有WebSocket的botpy SDK — 不需要公网IP。目前仅支持私聊

1. 注册并创建bot

  • 访问QQ开放平台 → 注册为开发者(个人或企业)
  • 创建新的bot应用
  • 转到开发设置 → 复制AppIDAppSecret

2. 设置沙箱进行测试

  • 在bot管理控制台中,找到沙箱配置
  • 在消息列表配置下,点击添加成员并添加您自己的QQ号码
  • 添加后,使用手机QQ扫描bot的二维码 → 打开bot个人资料 → 点击"发消息"开始聊天

3. 配置

  • allowFrom:添加您的openid(向bot发送消息时可在weisensebot日志中找到)。使用["*"]进行公开访问。
  • 对于生产环境:在bot控制台中提交审核并发布。完整的发布流程请参阅QQ Bot文档
{
  "channels": {
    "qq": {
      "enabled": true,
      "appId": "YOUR_APP_ID",
      "secret": "YOUR_APP_SECRET",
      "allowFrom": ["YOUR_OPENID"]
    }
  }
}

4. 运行

weisensebot gateway

现在从QQ向bot发送消息 — 它应该会响应!

DingTalk(钉钉)

使用流模式(Stream Mode) — 不需要公网IP。

1. 创建钉钉bot

  • 访问钉钉开放平台
  • 创建新应用 → 添加机器人能力
  • 配置
    • 打开流模式(Stream Mode)
  • 权限:添加发送消息所需的权限
  • 从"凭证"获取AppKey(客户端ID)和AppSecret(客户端密钥)
  • 发布应用

2. 配置

{
  "channels": {
    "dingtalk": {
      "enabled": true,
      "clientId": "YOUR_APP_KEY",
      "clientSecret": "YOUR_APP_SECRET",
      "allowFrom": ["YOUR_STAFF_ID"]
    }
  }
}

allowFrom:添加您的员工ID。使用["*"]允许所有用户。

3. 运行

weisensebot gateway
Wecom (企业微信)

Here we use wecom-aibot-sdk-python (community Python version of the official @wecom/aibot-node-sdk).

Uses WebSocket long connection — no public IP required.

1. Install the optional dependency

2. Create a WeCom AI Bot

Go to the WeCom admin console → Intelligent Robot → Create Robot → select API mode with long connection. Copy the Bot ID and Secret.

3. Configure

{
  "channels": {
    "wecom": {
      "enabled": true,
      "botId": "your_bot_id",
      "secret": "your_bot_secret",
      "allowFrom": ["your_id"]
    }
  }
}

4. Run

weisensebot gateway
Weixin (微信)

微信升级最新版,安装微信clawer插件,获取微信的登录二维码,扫码登录,获取登录信息,配置到配置> 文件中。

3. Configure

{
  "channels": {
    "weixin": {
      "enabled": true,
      "allowFrom": ["*"]
    }
  }
}

4. Run

weisensebot gateway

微信扫一扫,就可以使用微信机器人了

Slack

使用Socket模式(Socket Mode) — 不需要公网URL。

1. 创建Slack应用

  • 访问Slack API创建新应用 → "从零开始"
  • 选择名称并选择您的工作区

2. 配置应用

  • Socket模式:打开 → 生成具有connections:write范围的应用级令牌 → 复制它(xapp-...
  • OAuth与权限:添加bot作用域:chat:writereactions:writeapp_mentions:read
  • 事件订阅:打开 → 订阅bot事件:message.immessage.channelsapp_mention → 保存更改
  • 应用首页:滚动到显示标签页 → 启用消息标签页 → 勾选**"允许用户从消息标签页发送斜杠命令和消息"**
  • 安装应用:点击安装到工作区 → 授权 → 复制Bot令牌xoxb-...

3. 配置weisensebot

{
  "channels": {
    "slack": {
      "enabled": true,
      "botToken": "xoxb-...",
      "appToken": "xapp-...",
      "allowFrom": ["YOUR_SLACK_USER_ID"],
      "groupPolicy": "mention"
    }
  }
}

4. 运行

weisensebot gateway

直接向bot发送DM或在频道中@提及它 — 它应该会响应!

[!TIP]

  • groupPolicy"mention"(默认 — 仅在@提及时响应)、"open"(响应所有频道消息)或"allowlist"(限制到特定频道)。
  • DM策略默认为打开。设置"dm": {"enabled": false}以禁用DM。
Email(电子邮件)

为weisensebot创建自己的电子邮件账户。它通过IMAP轮询接收邮件并通过SMTP回复 — 就像个人电子邮件助手。

1. 获取凭据(Gmail示例)

  • 为您的bot创建一个专用的Gmail账户(例如my-weisensebot@gmail.com
  • 启用两步验证 → 创建应用密码
  • 将此应用密码同时用于IMAP和SMTP

2. 配置

  • consentGranted必须为true以允许邮箱访问。这是一个安全闸门 — 设置为false以完全禁用。
  • allowFrom:添加您的电子邮件地址。使用["*"]接受来自任何人的电子邮件。
  • smtpUseTlssmtpUseSsl默认为true/false,这对于Gmail(端口587 + STARTTLS)是正确的。无需显式设置它们。
  • 如果您只想读取/分析电子邮件而不发送自动回复,请设置"autoReplyEnabled": false
{
  "channels": {
    "email": {
      "enabled": true,
      "consentGranted": true,
      "imapHost": "imap.gmail.com",
      "imapPort": 993,
      "imapUsername": "my-weisensebot@gmail.com",
      "imapPassword": "your-app-password",
      "smtpHost": "smtp.gmail.com",
      "smtpPort": 587,
      "smtpUsername": "my-weisensebot@gmail.com",
      "smtpPassword": "your-app-password",
      "fromAddress": "my-weisensebot@gmail.com",
      "allowFrom": ["your-real-email@gmail.com"]
    }
  }
}

config.json的例子

{
  "agents": {
    "defaults": {
      "workspace": "~/.weisensebot/workspace",
      "model": "anthropic/claude-opus-4-5",
      "maxTokens": 8192,
      "temperature": 0.7,
      "maxToolIterations": 20
    }
  },
  "channels": {
    "whatsapp": {
      "enabled": false,
      "bridgeUrl": "ws://localhost:3001",
      "allowFrom": []
    },
    "telegram": {
      "enabled": false,
      "token": "",
      "allowFrom": [],
      "proxy": null
    },
    "discord": {
      "enabled": false,
      "token": "",
      "allowFrom": [],
      "gatewayUrl": "wss://gateway.discord.gg/?v=10&encoding=json",
      "intents": 37377
    },
    "feishu": {
      "enabled": false,
      "appId": "",
      "appSecret": "",
      "encryptKey": "",
      "verificationToken": "",
      "allowFrom": []
    },
    "mochat": {
      "enabled": false,
      "baseUrl": "https://mochat.io",
      "socketUrl": "",
      "socketPath": "/socket.io",
      "socketDisableMsgpack": false,
      "socketReconnectDelayMs": 1000,
      "socketMaxReconnectDelayMs": 10000,
      "socketConnectTimeoutMs": 10000,
      "refreshIntervalMs": 30000,
      "watchTimeoutMs": 25000,
      "watchLimit": 100,
      "retryDelayMs": 500,
      "maxRetryAttempts": 0,
      "clawToken": "",
      "agentUserId": "",
      "sessions": [],
      "panels": [],
      "allowFrom": [],
      "mention": {
        "requireInGroups": false
      },
      "groups": {},
      "replyDelayMode": "non-mention",
      "replyDelayMs": 120000
    },
    "dingtalk": {
      "enabled": true,
      "clientId": "dingoz5hiecx5ttstxdi",
      "clientSecret": "aTGdQnUSW7V-oSW-CewdRXWbw62q-9XwA2JEQLk_4-UQxGp3eUzBB7JfwxFyepyv",
      "allowFrom": ["*"]
    },
    "email": {
      "enabled": true,
      "consentGranted": true,
      "imapHost": "imap.qq.com",
      "imapPort": 993,
      "imapUsername": "gaoshine2008@qq.com",
      "imapPassword": "jovuwrdmozmdbfij",
      "imapMailbox": "INBOX",
      "imapUseSsl": true,
      "smtpHost": "smtp.qq.com",
      "smtpPort": 465,
      "smtpUsername": "gaoshine2008@qq.com",
      "smtpPassword": "jovuwrdmozmdbfij",
      "smtpUseTls": false,
      "smtpUseSsl": true,
      "fromAddress": "gaoshine2008@qq.com",
      "autoReplyEnabled": true,
      "pollIntervalSeconds": 30,
      "markSeen": true,
      "maxBodyChars": 12000,
      "subjectPrefix": "Re: ",
      "allowFrom": ["*"]
    },
    "slack": {
      "enabled": false,
      "mode": "socket",
      "webhookPath": "/slack/events",
      "botToken": "",
      "appToken": "",
      "userTokenReadOnly": true,
      "groupPolicy": "mention",
      "groupAllowFrom": [],
      "dm": {
        "enabled": true,
        "policy": "open",
        "allowFrom": []
      }
    },
    "qq": {
      "enabled": false,
      "appId": "",
      "secret": "",
      "allowFrom": []
    },
    "wechat": {
      "enabled": false,
      "listenChats": [],
      "allowFrom": []
    },

    "wecom": {
      "enabled": true,
      "bot_id": "aibNE6Uga0k6vJZjJ_XbxpqY_LtJK2JIBc4",
      "secret": "N4y69aYPlM2astwQAWqEpQveG2BRKL1xSXDDwVEZnkR",
      "welcome_message": "Welcome to the WeCom bot!",
      "allowFrom": ["*"]

    }
  },
 
  "providers": {
    "anthropic": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "openai": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "openrouter": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "deepseek": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "groq": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "zhipu": {
      "apiKey": "",
      "apiBase": "https://open.bigmodel.cn/api/coding/paas/v4",
      "extraHeaders": null
    },
    "dashscope": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "vllm": {
      "apiKey": "",
      "apiBase": "",
      "extraHeaders": null
    },
    "gemini": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "moonshot": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "minimax": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
    "aihubmix": {
      "apiKey": "",
      "apiBase": null,
      "extraHeaders": null
    },
      "ollama": {
      "apiKey": "ollama",
      "apiBase": "http://butest.weiot.site:11434/v1",
      "extraHeaders": null
    },
  },
    "agents": {
    "defaults": {
      "model": "qwen3.5:35b-a3b-q4_K_M"
    }
  },

  "gateway": {
    "host": "0.0.0.0",
    "port": 18790
  },
  "tools": {
    "web": {
      "search": {
        "apiKey": "",
        "maxResults": 5
      }
    },
    "exec": {
      "timeout": 60
    },
    "restrictToWorkspace": false
  }
}

3. 运行

weisensebot gateway

🌐 智能体社交网络

🐈 weisensebot能够连接到智能体社交网络(智能体社区)。只需发送一条消息,您的weisensebot就会自动加入!

平台 如何加入(向您的bot发送此消息)
Moltbook Read https://moltbook.com/skill.md and follow the instructions to join Moltbook
ClawdChat Read https://clawdchat.ai/skill.md and follow the instructions to join ClawdChat

只需将上述命令发送给您的weisensebot(通过CLI或任何聊天频道),它将处理其余的工作。

⚙️ 配置

配置文件:~/.weisensebot/config.json

提供商

Tip

  • Groq通过Whisper提供免费的语音转录。如果配置,Telegram语音消息将自动转录。
  • 智谱编码计划:如果您使用的是智谱的编码计划,请在zhipu提供商配置中设置"apiBase": "https://open.bigmodel.cn/api/coding/paas/v4"
  • MiniMax(中国大陆):如果您的API密钥来自MiniMax的中国大陆平台(minimaxi.com),请在minimax提供商配置中设置"apiBase": "https://api.minimaxi.com/v1"
  • 火山引擎编码计划:如果您使用的是火山引擎的编码计划,请在volcengine提供商配置中设置"apiBase": "https://ark.cn-beijing.volces.com/api/coding/v3"
  • 阿里云编码计划:如果您使用的是阿里云编码计划(百炼),请在dashscope提供商配置中设置"apiBase": "https://coding.dashscope.aliyuncs.com/v1"
提供商 用途 获取API密钥
custom 任何OpenAI兼容的端点(直接,无需LiteLLM)
openrouter LLM(推荐,访问所有模型) openrouter.ai
anthropic LLM(Claude直接) console.anthropic.com
azure_openai LLM(Azure OpenAI) portal.azure.com
openai LLM(GPT直接) platform.openai.com
deepseek LLM(DeepSeek直接) platform.deepseek.com
groq LLM + 语音转录(Whisper) console.groq.com
gemini LLM(Gemini直接) aistudio.google.com
minimax LLM(MiniMax直接) platform.minimaxi.com
aihubmix LLM(API网关,访问所有模型) aihubmix.com
siliconflow LLM(SiliconFlow/硅基流动) siliconflow.cn
volcengine LLM(VolcEngine/火山引擎) volcengine.com
dashscope LLM(Qwen) dashscope.console.aliyun.com
moonshot LLM(Moonshot/Kimi) platform.moonshot.cn
zhipu LLM(Zhipu GLM) open.bigmodel.cn
vllm LLM(本地,任何OpenAI兼容服务器)
openai_codex LLM(Codex,OAuth) weisensebot provider login openai-codex
github_copilot LLM(GitHub Copilot,OAuth) weisensebot provider login github-copilot
OpenAI Codex (OAuth)

Codex使用OAuth而不是API密钥。需要ChatGPT Plus或Pro账户。

1. 登录:

weisensebot provider login openai-codex

2. 设置模型(合并到~/.weisensebot/config.json):

{
  "agents": {
    "defaults": {
      "model": "openai-codex/gpt-5.1-codex"
    }
  }
}

3. 聊天:

weisensebot agent -m "Hello!"

Docker用户:使用docker run -it进行交互式OAuth登录。

自定义提供商(任何OpenAI兼容的API)

直接连接到任何OpenAI兼容的端点 — LM Studio、llama.cpp、Together AI、Fireworks、Azure OpenAI或任何自托管服务器。绕过LiteLLM;模型名称按原样传递。

{
  "providers": {
    "custom": {
      "apiKey": "your-api-key",
      "apiBase": "https://api.your-provider.com/v1"
    }
  },
  "agents": {
    "defaults": {
      "model": "your-model-name"
    }
  }
}

对于不需要密钥的本地服务器,将apiKey设置为任何非空字符串(例如"no-key")。

vLLM(本地 / OpenAI兼容)

使用vLLM或任何OpenAI兼容服务器运行您自己的模型,然后添加到配置中:

1. 启动服务器(示例):

vllm serve meta-llama/Llama-3.1-8B-Instruct --port 8000

2. 添加到配置中(部分 — 合并到~/.weisensebot/config.json):

提供商(密钥可以是本地任何非空字符串):

{
  "providers": {
    "vllm": {
      "apiKey": "dummy",
      "apiBase": "http://localhost:8000/v1"
    }
  }
}

模型:

{
  "agents": {
    "defaults": {
      "model": "meta-llama/Llama-3.1-8B-Instruct"
    }
  }
}
添加新提供商(开发者指南)

weisensebot使用提供商注册表weisensebot/providers/registry.py)作为单一事实来源。 添加新提供商只需2步 — 无需触及if-elif链。

步骤1.ProviderSpec条目添加到weisensebot/providers/registry.py中的PROVIDERS

ProviderSpec(
    name="myprovider",                   # 配置字段名
    keywords=("myprovider", "mymodel"),  # 模型名称关键字用于自动匹配
    env_key="MYPROVIDER_API_KEY",        # LiteLLM的环境变量
    display_name="My Provider",          # 在`weisensebot status`中显示
    litellm_prefix="myprovider",         # 自动前缀:model → myprovider/model
    skip_prefixes=("myprovider/",),      # 不要双重前缀
)

步骤2. 将字段添加到weisensebot/config/schema.py中的ProvidersConfig

class ProvidersConfig(BaseModel):
    ...
    myprovider: ProviderConfig = ProviderConfig()

就这样!环境变量、模型前缀、配置匹配和weisensebot status显示都将自动工作。

常用ProviderSpec选项:

字段 描述 示例
litellm_prefix 为LiteLLM自动添加模型名称前缀 "dashscope"dashscope/qwen-max
skip_prefixes 如果模型已经以这些开头,则不要添加前缀 ("dashscope/", "openrouter/")
env_extras 要设置的其他环境变量 (("ZHIPUAI_API_KEY", "{api_key}"),)
model_overrides 每模型参数覆盖 (("kimi-k2.5", {"temperature": 1.0}),)
is_gateway 可以路由任何模型(如OpenRouter) True
detect_by_key_prefix 通过API密钥前缀检测网关 "sk-or-"
detect_by_base_keyword 通过API基础URL检测网关 "openrouter"
strip_model_prefix 在重新添加前缀之前剥离现有前缀 True(用于AiHubMix)

MCP(模型上下文协议)

Tip

配置格式与Claude Desktop / Cursor兼容。您可以直接从任何MCP服务器的README复制MCP服务器配置。

weisensebot支持MCP — 连接外部工具服务器并将它们用作原生智能体工具。

将MCP服务器添加到您的config.json

{
  "tools": {
    "mcpServers": {
      "filesystem": {
        "command": "npx",
        "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"]
      },
      "my-remote-mcp": {
        "url": "https://example.com/mcp/",
        "headers": {
          "Authorization": "Bearer xxxxx"
        }
      }
    }
  }
}

支持两种传输模式:

模式 配置 示例
Stdio command + args 通过npx/uvx的本地进程
HTTP url + headers(可选) 远程端点(https://mcp.example.com/sse

使用toolTimeout覆盖慢速服务器的默认每次调用30秒超时:

{
  "tools": {
    "mcpServers": {
      "my-slow-server": {
        "url": "https://example.com/mcp/",
        "toolTimeout": 120
      }
    }
  }
}

MCP工具在启动时自动发现和注册。LLM可以将它们与内置工具一起使用 — 无需额外配置。

安全

Tip

对于生产部署,在配置中设置"restrictToWorkspace": true以沙箱化智能体。 源码中/v0.1.4.post3之后的变更:在v0.1.4.post3及更早版本中,空的allowFrom表示"允许所有发送者"。在较新版本(包括从源码构建)中,allowFrom默认拒绝所有访问。要允许所有发送者,请设置"allowFrom": ["*"]

选项 默认值 描述
tools.restrictToWorkspace false 当为true时,将所有智能体工具(shell、文件读/写/编辑、列表)限制到工作区目录。防止路径遍历和范围外访问。
tools.exec.pathAppend "" 运行shell命令时要附加到PATH的额外目录(例如/usr/sbin用于ufw)。
channels.*.allowFrom [](允许所有) 用户ID白名单。空 = 允许所有人;非空 = 只有列出的用户可以交互。

多实例

同时运行多个weisensebot实例,每个都有自己的工作区和配置。

# 实例A - Telegram bot
weisensebot gateway -w ~/.weisensebot/botA -p 18791

# 实例B - Discord bot
weisensebot gateway -w ~/.weisensebot/botB -p 18792

# 实例C - 使用自定义配置文件
weisensebot gateway -w ~/.weisensebot/botC -c ~/.weisensebot/botC/config.json -p 18793
选项 短选项 描述
--workspace -w 工作区目录(默认:~/.weisensebot/workspace
--config -c 配置文件路径(默认:~/.weisensebot/config.json
--port -p 网关端口(默认:18790

每个实例都有自己的:

  • 工作区目录(MEMORY.md、HEARTBEAT.md、会话文件)
  • Cron作业存储(workspace/cron/jobs.json
  • 配置(如果使用--config

CLI参考

命令 描述
weisensebot onboard 初始化配置和工作区
weisensebot agent -m "..." 与智能体聊天
weisensebot agent 交互式聊天模式
weisensebot agent --no-markdown 显示纯文本回复
weisensebot agent --logs 聊天期间显示运行时日志
weisensebot gateway 启动网关
weisensebot status 显示状态
weisensebot provider login openai-codex 提供商OAuth登录
weisensebot channels login 链接WhatsApp(扫描二维码)
weisensebot channels status 显示频道状态

交互式模式退出:exitquit/exit/quit:qCtrl+D

心跳(周期性任务)

网关每30分钟唤醒一次,并检查您的工作区中的HEARTBEAT.md~/.weisensebot/workspace/HEARTBEAT.md)。如果文件有任务,智能体将执行它们并将结果传递给您最近活动的聊天频道。

**设置:**编辑~/.weisensebot/workspace/HEARTBEAT.md(由weisensebot onboard自动创建):

## 周期性任务

- [ ] 检查天气预报并发送摘要
- [ ] 扫描收件箱查找紧急邮件

智能体也可以自己管理此文件 — 要求它"添加周期性任务",它将为您更新HEARTBEAT.md

**注意:**网关必须运行(weisensebot gateway),并且您必须至少与机器人聊天一次,以便它知道要传递到哪个频道。

🐳 Docker

Tip

-v ~/.weisensebot:/root/.weisensebot标志将您的本地配置目录挂载到容器中,因此您的配置和工作区在容器重启之间持久存在。

Docker Compose

docker compose run --rm weisensebot-cli onboard   # 首次设置
vim ~/.weisensebot/config.json                     # 添加API密钥
docker compose up -d weisensebot-gateway           # 启动网关
docker compose run --rm weisensebot-cli agent -m "Hello!"   # 运行CLI
docker compose logs -f weisensebot-gateway                   # 查看日志
docker compose down                                      # 停止

Docker

# 构建镜像
docker build -t weisensebot .

# 初始化配置(仅首次)
docker run -v ~/.weisensebot:/root/.weisensebot --rm weisensebot onboard

# 在主机上编辑配置以添加API密钥
vim ~/.weisensebot/config.json

# 运行网关(连接到启用的频道,例如Telegram/Discord/Mochat)
docker run -v ~/.weisensebot:/root/.weisensebot -p 18790:18790 weisensebot gateway

# 或运行单个命令
docker run -v ~/.weisensebot:/root/.weisensebot --rm weisensebot agent -m "Hello!"
docker run -v ~/.weisensebot:/root/.weisensebot --rm weisensebot status

🐧 Linux服务

将网关作为systemd用户服务运行,以便它自动启动并在失败时重启。

1. 查找weisensebot二进制路径:

which weisensebot   # 例如 /home/user/.local/bin/weisensebot

2. 创建服务文件~/.config/systemd/user/weisensebot-gateway.service(如需要,替换ExecStart路径):

[Unit]
Description=Nanobot Gateway
After=network.target

[Service]
Type=simple
ExecStart=%h/.local/bin/weisensebot gateway
Restart=always
RestartSec=10
NoNewPrivileges=yes
ProtectSystem=strict
ReadWritePaths=%h

[Install]
WantedBy=default.target

3. 启用并启动:

systemctl --user daemon-reload
systemctl --user enable --now weisensebot-gateway

常用操作:

systemctl --user status weisensebot-gateway        # 检查状态
systemctl --user restart weisensebot-gateway       # 配置更改后重启
journalctl --user -u weisensebot-gateway -f        # 跟踪日志

如果您编辑.service文件本身,请在重启之前运行systemctl --user daemon-reload

**注意:**用户服务仅在您登录时运行。要在退出后保持网关运行,启用lingering:

loginctl enable-linger $USER

📦 打包

pyinstaller --onefile --collect-all litellm --name=weisenbotapp run.py

📁 项目结构

weisensebot/
├── agent/          # 🧠 核心智能体逻辑
│   ├── loop.py     #    智能体循环(LLM ↔ 工具执行)
│   ├── context.py  #    提示构建器
│   ├── memory.py   #    持久化内存
│   ├── skills.py   #    技能加载器
│   ├── subagent.py #    后台任务执行
│   └── tools/      #    内置工具(包括spawn)
├── skills/         # 🎯 捆绑技能(github、weather、tmux...)
├── channels/       # 📱 聊天频道集成
├── bus/            # 🚌 消息路由
├── cron/           # ⏰ 定时任务
├── heartbeat/      # 💓 主动唤醒
├── providers/      # 🤖 LLM提供商(OpenRouter等)
├── session/        # 💬 对话会话
├── config/         # ⚙️ 配置
└── cli/            # 🖥️ 命令

🤝 贡献与路线图

欢迎PR!代码库故意设计得小巧易读。🤗

路线图 — 选择一个项目并打开PR

  • 多模态 — 看见和听到(图像、语音、视频)
  • 长期记忆 — 永不忘记重要上下文
  • 更好的推理 — 多步规划和反思
  • 更多集成 — 日历等
  • 自我改进 — 从反馈和错误中学习

贡献者

贡献者

⭐ Star历史

感谢访问 ✨ weisensebot!

浏览量

weisensebot仅用于教育、研究和技术交流目的

About

weisensebot 是一款超轻量级的个人AI助手,类似OpenClaw,基于港大团队HKUDS开源的nanobot开发。

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors