Files
blog/docs/tech/AstrBot.md
T
cattom 097400f18c
Deploy / deploy (push) Successful in 59s
Add AstrBot.md
2026-04-24 23:13:00 +08:00

317 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AstrBot 部署与配置
## 部署环境
- AstrBot v4.23.5
- Mac mini 2024 M4 (macOS Tahoe 26.4.1)
- OrbStack (Docker & Docker Compose)
## 部署
``` bash
mkdir ~/astrbot && cd ~/astrbot
touch docker-compose.yml && nano docker-compose.yml
```
请按照实际情况修改 `docker-compose.yml` 中的相关部分。
``` yaml title="docker-compose.yml"
name: AstrBot
services:
# shipyard-neo 沙盒环境
bay:
image: ghcr.io/astrbotdevs/shipyard-neo-bay:latest
container_name: bay
ports:
- "8114:8114"
networks:
- astrbot-network
volumes:
# Docker socket — Bay creates sandbox containers dynamically
- /var/run/docker.sock:/var/run/docker.sock
# Config file
- ~/astrbot/bay-config.yml:/app/config.yml:ro
# SQLite database persistence
- bay-data:/app/data
# Cargo storage persistence
- bay-cargos:/var/lib/bay/cargos
environment:
- BAY_CONFIG_FILE=/app/config.yml
- BAY_DATA_DIR=/app/data
healthcheck:
test: [ "CMD", "curl", "-f", "http://localhost:8114/health" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 15s
logging:
driver: json-file
options:
max-size: "50m"
max-file: "5"
restart: unless-stopped
astrbot:
image: soulter/astrbot:latest
container_name: astrbot
volumes:
- ~/astrbot/data:/AstrBot/data
- /etc/localtime:/etc/localtime:ro
ports:
- "6185:6185"
networks:
- astrbot-network
environment:
TZ: Asia/Shanghai
depends_on:
bay:
condition: service_healthy
logging:
driver: json-file
options:
max-size: "50m"
max-file: "3"
restart: unless-stopped
# 本地语音转文字服务(可选)
whisper-local:
image: onerahmet/openai-whisper-asr-webservice:latest
container_name: whisper-local
networks:
- astrbot-network
environment:
ASR_MODEL: base
restart: unless-stopped
networks:
astrbot-network:
name: astrbot-network
driver: bridge
volumes:
bay-data:
name: bay-data
bay-cargos:
name: bay-cargos
```
以下是 `shipyard-neo` 的配置文件,请按照实际情况修改,详细内容请参考[官方文档](https://docs.astrbot.app/use/astrbot-agent-sandbox.html)。
``` yaml title="bay-config.yml"
server:
host: "0.0.0.0"
port: 8114
database:
# SQLite for single-instance deployment.
# For HA / multi-instance, switch to PostgreSQL:
# url: "postgresql+asyncpg://user:pass@db-host:5432/bay"
url: "sqlite+aiosqlite:///./data/bay.db"
echo: false
driver:
type: docker
# Pull latest images when creating new sandboxes.
# Production recommendation: "always" ensures you always get the latest image.
image_pull_policy: always
docker:
socket: "unix:///var/run/docker.sock"
# Bay in container, Ship/Gull in container — use container network direct connect
connect_mode: container_network
# Shared network name (must match docker-compose.yaml network)
network: "astrbot-network"
# Disable host port mapping — sandbox containers don't need to be reachable
# from outside the Docker network, reducing attack surface.
publish_ports: false
host_port: null
cargo:
root_path: "/var/lib/bay/cargos"
default_size_limit_mb: 1024
mount_path: "/workspace"
security:
# CHANGE-ME: 设置一个强随机密钥 (e.g. `openssl rand -hex 32`)
api_key: "CHANGE ME"
allow_anonymous: false
# Container proxy environment injection.
# When enabled, Bay injects HTTP(S)_PROXY and NO_PROXY into sandbox containers.
proxy:
enabled: false
# http_proxy: "http://proxy.example.com:7890"
# https_proxy: "http://proxy.example.com:7890"
# Optional extra entries to append to default NO_PROXY list
# no_proxy: "my-internal.service"
# Warm Pool — pre-start standby sandbox instances to reduce cold-start latency.
# When a user creates a sandbox, Bay will first try to claim an available warm instance,
# delivering near-instant startup instead of waiting for container boot.
warm_pool:
enabled: true
warmup_queue_workers: 2 # Concurrent warmup workers
warmup_queue_max_size: 256 # Maximum queue depth
warmup_queue_drop_policy: "drop_newest"
warmup_queue_drop_alert_threshold: 50
interval_seconds: 30 # Pool maintenance scan interval
run_on_startup: true
profiles:
# ── Standard Python sandbox ────────────────────────
- id: python-default
description: "Standard Python sandbox with filesystem and shell access"
image: "ghcr.io/astrbotdevs/shipyard-neo-ship:latest"
runtime_type: ship
runtime_port: 8123
resources:
cpus: 1.0
memory: "1g"
capabilities:
- filesystem # includes upload/download
- shell
- python
idle_timeout: 1800 # 30 minutes
warm_pool_size: 1 # Keep 1 pre-warmed instance ready
# Environment variables injected into the runtime container (available in Python and Shell)
# Example: env: { TZ: "Asia/Shanghai", LANG: "en_US.UTF-8", CUSTOM_VAR: "value" }
env: {}
# Optional profile-level proxy override
# proxy:
# enabled: false
# ── Data Science sandbox (more resources) ──────────
- id: python-data
description: "Data science sandbox with extra CPU and memory"
image: "ghcr.io/astrbotdevs/shipyard-neo-ship:latest"
runtime_type: ship
runtime_port: 8123
resources:
cpus: 2.0
memory: "4g"
capabilities:
- filesystem # includes upload/download
- shell
- python
idle_timeout: 1800
warm_pool_size: 1
env: {}
# ── Browser + Python multi-container sandbox ───────
- id: browser-python
description: "Browser automation with Python backend"
containers:
- name: ship
image: "ghcr.io/astrbotdevs/shipyard-neo-ship:latest"
runtime_type: ship
runtime_port: 8123
resources:
cpus: 1.0
memory: "1g"
capabilities:
- python
- shell
- filesystem # includes upload/download
primary_for:
- filesystem
- python
- shell
env: {}
- name: browser
image: "ghcr.io/astrbotdevs/shipyard-neo-gull:latest"
runtime_type: gull
runtime_port: 8115
resources:
cpus: 1.0
memory: "2g"
capabilities:
- browser
env: {}
idle_timeout: 1800
warm_pool_size: 1
gc:
# Enable automatic GC for production
enabled: true
run_on_startup: true
interval_seconds: 300 # 5 minutes
# Instance identifier — MUST be unique in multi-instance deployments
instance_id: "bay-prod"
idle_session:
enabled: true
expired_sandbox:
enabled: true
orphan_cargo:
enabled: true
orphan_container:
# Enable in production to clean up leaked containers.
# Safe as long as instance_id is unique per Bay instance.
enabled: true
```
最后,拉取镜像,启动服务。
``` bash
sudo docker compose pull
sudo docker compose up -d
```
## 配置
服务启动成功后,浏览器访问 `<ip>:6185` 进入 AstrBot 仪表盘。
### 添加模型提供商
点击“新增”,找到希望添加的模型提供商,然后按照模型提供商的 API 文档填写 `API Key` 和 `API Base URL`。
阿里云百炼可选择 `OpenAI Compatible`。
语音转文字模型提供商选择 `Whisper(API)`API Base URL 填写 `http://whisper-local:9000/v1`,模型 ID 填写 `base`。
### 修改默认配置文件
**模型**
- **启用语音转文本(可选)**: True
- **默认语音转文本模型**: (选择刚刚添加的语音转文字模型)
**网页搜索**
使用网页搜索功能需要注册 [Tavily](https://app.tavily.com/home)。
- **启用网页搜索**: True
- **网页搜索提供商**: Tavily
- **Tavily API Key**: (填写你的 Tavily API Key)
**使用电脑能力**
- **运行环境**: sandbox
- **需要 AstrBot 管理员权限**: (按实际情况)
- **沙箱环境驱动器**: shipyard_neo
- **Shipyard Neo API Endpoint**: http://bay:8114
- **Shipyard Neo 访问令牌**: (bay-config.yml - security - api_key)
- **Shipyard Neo Profile**: python-default / python-data / browser-python
- **Shipyard Neo Sandbox 存活时间(秒)**: 3600
**其他配置**
- **流式输出**: True
- **不支持流式回复的平台**: 实时分段回复
- **现实世界时间感知**: True
- **工具调用轮数上限**: 50
- **工具调用超时时间(秒)**: 600
- **工具调用模式**: full
### 人格设定(可选)
- 填写完备的系统提示词
- 选择可用的函数工具和 Skills
### 接入即时聊天软件
推荐接入个人微信,参考[官方文档](https://docs.astrbot.app/platform/weixin_oc.html)进行配置。