功能特性 ✨
- 多平台接入:支持接入多种即时通讯(IM)平台,如 QQ、微信、飞书、Discord 等,一处开发,多平台运行。
- Agentic AI 核心:不仅仅是聊天,内置 Agent 能力,能够进行任务规划、调用工具、分解复杂指令,实现自动化辅助。
- 强大的插件系统:拥有丰富的内置插件(如联网搜索、会话管理、管理员工具),并允许开发者通过简单的 Python 代码创建自己的插件,无限扩展功能。
- 可视化 WebUI:提供现代化的仪表板界面,方便用户进行可视化的配置管理、插件安装、对话查看和系统监控,开箱即用。
- 智能会话管理:支持多轮对话、会话隔离、人格设定(Persona)、上下文管理,让 AI 更懂你和你的群聊。
- 工具调用(Function Calling):AI 可以自主调用外部工具,如进行联网搜索、获取实时信息、执行计算等,突破模型自身的知识局限。
- 内置实用命令:提供
/help、/plugin、/provider、/reset等一系列开箱即用的管理命令,方便用户与机器人交互。 - 安全健康模式:内置内容安全机制,引导 AI 输出健康、友善的内容,并可选择开启或关闭“健康模式”(默认开启)。
安装指南 🛠️
系统要求
- Python 3.10 或更高版本
- (可选) Node.js 和 pnpm,用于开发或运行 WebUI 仪表板
分步安装
-
克隆仓库
git clone https://github.com/AstrBotDevs/AstrBot.git cd AstrBot -
安装核心后端 我们推荐使用
uv进行快速的 Python 依赖管理。# 安装 uv (如果尚未安装) pip install uv # 同步依赖并运行 uv sync uv run main.py首次运行后,AstrBot 默认会在
http://localhost:6185启动一个 API 服务。 -
启动管理面板 (WebUI) 为了方便管理,建议启动可视化仪表板。
cd dashboard # 安装 pnpm (如果尚未安装: npm install -g pnpm) pnpm install pnpm dev管理面板默认运行在
http://localhost:3000。你可以在面板中完成后续的 LLM 提供商配置、插件管理等操作。
使用说明 📖
基础使用
启动 AstrBot 后,你可以向机器人发送 /help 命令来查看所有可用指令。
典型使用场景
- 多轮对话与角色扮演:通过
/persona命令切换 AI 的人设,让其以不同风格与你对话。 - 群聊管理:管理员可以使用
/op、/deop命令授权或撤销管理员,使用/plugin off <插件名>来禁用特定插件。 - 联网搜索:在对话中提及需要实时信息的问题,配置好搜索插件后,AI 会自动调用联网搜索工具来获取最新资讯。
- 切换 AI 模型:如果你配置了多个 LLM 提供商(如 OpenAI、Azure、Gemini 等),可以使用
/provider命令在它们之间快速切换。 - 重置对话上下文:当对话偏离主题或想开始新话题时,可以使用
/reset命令清空当前会话的上下文。
API 概览 (面向开发者)
AstrBot 提供了丰富的 Python API,方便开发者进行插件开发。
核心概念:
Star: 插件的基础类,所有插件都需要继承它。AstrMessageEvent: 消息事件对象,包含了消息内容、发送者、会话等所有上下文信息。Context: 插件上下文,用于获取配置、管理器实例等核心组件。filter: 装饰器,用于定义插件如何处理不同类型的消息(如命令、正则匹配、事件监听)。
插件示例片段:
from astrbot.api import star
from astrbot.api.event import AstrMessageEvent, filter
from astrbot.api.message_components import Plain
class MyPlugin(star.Star):
def __init__(self, context: star.Context) -> None:
self.context = context
@filter.command("hello")
async def hello_world(self, event: AstrMessageEvent):
'''当用户发送 /hello 时触发'''
yield event.plain_result("Hello, AstrBot!") # 简单回复文本
核心代码 💡
以下为核心启动流程与插件系统实现的几个关键片段。
1. 主程序入口 (main.py)
# ... (导入模块)
if __name__ == "__main__":
# 解析命令行参数,如指定 WebUI 目录
parser = argparse.ArgumentParser(description="AstrBot")
parser.add_argument("--webui-dir", type=str, help="指定 WebUI 静态文件目录路径", default=None)
args = parser.parse_args()
# 检查 Python 版本、创建必要的目录
check_env()
# 初始化日志代理和数据库
log_broker = LogBroker()
LogManager.set_queue_handler(logger, log_broker)
db = db_helper
# 打印 Logo
logger.info(logo_tmpl)
# 检查或下载管理面板文件
webui_dir = asyncio.run(check_dashboard_files(args.webui_dir))
# 创建并启动核心生命周期管理器
core_lifecycle = InitialLoader(db, log_broker)
core_lifecycle.webui_dir = webui_dir
asyncio.run(core_lifecycle.start())
代码注释:这是 AstrBot 的启动入口。它负责初始化运行环境(检查 Python 版本、建立目录)、设置日志系统、连接数据库,并确保 WebUI 管理面板的资源就绪。最后,它会创建 InitialLoader 实例并启动整个核心生命周期。
2. 核心生命周期管理器 (core/core_lifecycle.py)
class AstrBotCoreLifecycle:
"""AstrBot 核心生命周期管理类"""
def __init__(self, log_broker: LogBroker, db: BaseDatabase) -> None:
# ... 初始化配置管理器、Provider管理器、平台管理器、插件管理器、事件总线等
async def initialize(self) -> None:
"""初始化所有组件"""
# 1. 加载配置
# 2. 初始化数据库和各个管理器
# 3. 加载所有插件
# 4. 启动平台适配器(连接到 IM 平台)
pass
async def start(self) -> None:
"""启动事件循环"""
# 启动事件总线,开始分发消息事件
asyncio.create_task(self.event_bus.dispatch())
# ... 其他后台任务
async def stop(self) -> None:
"""优雅地停止所有组件"""
# 停止平台适配器、关闭数据库连接、停止插件等
pass
代码注释:AstrBotCoreLifecycle 是 AstrBot 的心脏。它负责组装和管理所有核心组件,从配置文件、数据库、AI 提供商到各个即时通讯平台的连接。initialize 方法按顺序加载所有部分,而 start 方法则启动事件循环,等待并处理来自各个平台的消息。
3. 插件定义 (api/star/star.py)
class Star:
'''所有插件必须继承的基类'''
def __init__(self, context: Context) -> None:
self.context = context
@property
def name(self) -> str:
'''插件名称,默认返回类名,建议重写'''
return self.__class__.__name__
@property
def desc(self) -> str:
'''插件描述'''
return ""
@property
def author(self) -> str:
'''插件作者'''
return ""
async def terminate(self):
'''当插件被卸载或 AstrBot 关闭时调用,用于清理资源'''
pass
代码注释:Star 类是 AstrBot 插件体系的基础。任何 Python 模块想要成为 AstrBot 的一个功能单元,都必须定义一个继承自 Star 的类。这个基类为插件提供了访问核心系统 (context) 的入口,并定义了名称、描述等元数据。插件开发者可以通过实现 terminate 方法来确保资源的正确释放。
4. 消息事件装饰器 (api/event/filter.py)
def command(name: str, alias: Optional[list[str]] = None, **kwargs):
"""
用于将插件方法标记为一个命令处理器。
当用户发送以 "/<name>" 开头的消息时,该方法会被调用。
"""
def decorator(func):
# 将函数元数据注册到全局处理器注册表中
star_handlers_registry.register_handler(
handler=func,
event_type=EventType.EventMessageType, # 表示这是一个普通消息事件
filters=[CommandFilter(name, alias)], # 添加命令过滤器
**kwargs
)
return func
return decorator
代码注释:这个装饰器(以及 @filter.regex、@filter.on_llm_request 等)是 AstrBot 插件灵活性的关键。通过声明式地将函数与特定的过滤器(如命令名称、正则表达式、事件类型)绑定,AstrBot 的事件系统能够准确地将消息路由到正确的插件处理函数上,大大简化了插件开发者的逻辑判断。FINISHED
coYqvf9hN1C/b63wfHSKMiC+dSuDrPhHcORwv/E1qE4=