开源群聊平台Buzz:自部署、可定制的Slack替代方案
在实际团队协作和远程办公场景中稳定高效的群聊平台已经成为基础设施。无论是创业团队、开源社区还是企业内部沟通对消息实时性、文件共享、频道管理和集成能力都有明确需求。市场上已有 Slack、Microsoft Teams 等成熟产品但商业方案的许可费用、数据合规性和定制化限制也让不少技术团队开始关注开源替代方案。最近出现的开源群聊平台 Buzz由开发者 Jack 发布目标正是为需要自部署、可定制和控制数据的团队提供一个功能完备的选项。与 Slack 相比Buzz 的核心优势在于完全开源、可私有化部署并且允许团队根据自身业务流程深度定制功能。本文将基于公开的项目信息和常见的自建群聊平台技术栈带你从零理解 Buzz 的架构思路完成本地环境搭建、基础功能配置、集成扩展演示并深入分析生产环境部署的关键要点和常见问题排查路径。1. 理解自建群聊平台的技术选型与 Buzz 的定位1.1 为什么团队需要考虑自建群聊平台商业群聊平台虽然开箱即用但在以下场景中会显现出局限性数据合规与隐私要求金融、医疗、政务等行业对聊天记录、文件等数据的存储位置和访问权限有严格规定需要完全可控的私有化部署。定制化集成需求团队内部使用的 CI/CD、监控告警、工单系统等工具需要与聊天平台深度打通商业产品往往无法提供足够灵活的接口或需要高昂的集成费用。成本控制随着团队规模扩大按席位收费的商业方案成本会快速上升自建方案可以显著降低长期使用成本。网络与访问限制在某些网络环境下访问境外商业服务可能存在稳定性或合规问题自建服务可以部署在本地或国内云环境。Buzz 作为开源方案正是针对这些痛点设计让团队能够在自己的基础设施上拥有一个功能接近 Slack 的协作平台。1.2 Buzz 的核心架构组件分析从同类开源项目如 Mattermost、Rocket.Chat的技术路线推断Buzz likely 采用以下架构前端基于现代 Web 框架如 React、Vue.js实现实时聊天界面支持 WebSocket 长连接保持消息实时推送。后端 API 服务提供用户管理、频道管理、消息持久化、文件上传等 RESTful API可能基于 Node.js、Python 或 Go 构建。实时通信层使用 WebSocket 或 Socket.IO 实现客户端与服务器的双向通信确保消息、状态更新的低延迟。数据存储用户信息、频道配置、消息历史等结构化数据使用 PostgreSQL 或 MySQL文件存储可能支持本地磁盘、AWS S3 或兼容的对象存储。缓存与会话管理使用 Redis 存储在线状态、会话令牌和临时数据提升系统响应速度。这种分层架构保证了系统的可扩展性和可维护性每个组件都可以根据团队规模独立部署和扩容。2. 搭建 Buzz 本地开发与测试环境2.1 环境准备与依赖检查在开始部署 Buzz 之前需要确保本地或服务器环境满足以下要求组件最低版本推荐版本验证命令Node.js16.x18.x LTSnode --versionnpm8.x9.xnpm --versionPostgreSQL12.x15.xpsql --versionRedis6.x7.xredis-cli --version如果使用 Docker 部署还需要 Docker 20.x 和 Docker Compose 2.x。生产环境建议使用 Linux 发行版Ubuntu 22.04 LTS 或 CentOS Stream 9。2.2 获取 Buzz 源代码与项目结构分析从官方仓库克隆代码是第一步git clone https://github.com/jack/buzz.git cd buzz典型的项目结构应包含buzz/ ├── client/ # 前端代码 │ ├── src/ │ ├── package.json │ └── vite.config.js # 或 webpack.config.js ├── server/ # 后端 API 服务 │ ├── src/ │ ├── package.json │ └── config/ ├── shared/ # 前后端共享代码 ├── docker-compose.yml # 容器化部署配置 ├── dockerfile # 各组件 Dockerfile └── README.md # 项目说明文档关键配置文件通常包括数据库连接配置server/config/database.jsRedis 连接配置server/config/redis.js文件上传配置server/config/upload.jsJWT 密钥配置server/config/auth.js2.3 依赖安装与数据库初始化进入项目目录分别安装前后端依赖# 安装后端依赖 cd server npm install # 安装前端依赖 cd ../client npm install创建 PostgreSQL 数据库并运行迁移脚本-- 使用 psql 连接后执行 CREATE DATABASE buzz_dev; CREATE USER buzz_user WITH PASSWORD secure_password; GRANT ALL PRIVILEGES ON DATABASE buzz_dev TO buzz_user;在 server 目录下配置数据库连接后运行迁移// server/config/database.js 示例 module.exports { development: { username: buzz_user, password: secure_password, database: buzz_dev, host: localhost, dialect: postgres, port: 5432 } };# 运行数据库迁移 cd server npx sequelize-cli db:migrate # 可选填充初始数据如默认频道、管理员账号 npx sequelize-cli db:seed:all3. 配置与启动 Buzz 核心服务3.1 后端 API 服务配置详解Buzz 的后端服务需要正确配置环境变量和关键参数// server/.env 示例 NODE_ENVdevelopment PORT3001 DATABASE_URLpostgresql://buzz_user:secure_passwordlocalhost:5432/buzz_dev REDIS_URLredis://localhost:6379 JWT_SECRETyour_super_secure_jwt_secret_here FILE_STORAGE_PATH./uploads MAX_FILE_SIZE10485760 CORS_ORIGINhttp://localhost:3000重要参数说明JWT_SECRET用于签名用户认证令牌生产环境必须使用强随机字符串。FILE_STORAGE_PATH文件上传存储路径生产环境应指向持久化卷。MAX_FILE_SIZE限制上传文件大小默认 10MB。CORS_ORIGIN前端应用地址用于跨域请求控制。启动后端服务cd server npm run dev验证服务健康状态curl http://localhost:3001/api/health预期返回{status:ok,timestamp:2024-01-15T10:30:00.000Z}3.2 前端应用构建与配置前端需要配置 API 端点地址和 WebSocket 连接// client/.env.development VITE_API_BASE_URLhttp://localhost:3001/api VITE_WS_URLws://localhost:3001 VITE_APP_NAMEBuzz Dev开发环境启动前端cd client npm run dev前端服务通常会在http://localhost:3000启动访问该地址应看到登录界面。3.3 初始管理员账号创建与登录首次使用需要创建管理员账号通常通过命令行工具或初始访问自动注册# 如果项目提供 CLI 工具 cd server node scripts/create-admin.js --email adminexample.com --password admin123或者直接访问注册页面创建第一个账号系统自动授予管理员权限。登录后应能看到默认的公共频道如 general、random用户管理界面管理员可见频道创建和邀请功能4. Buzz 核心功能实战与集成示例4.1 频道管理与消息收发创建团队频道是基础操作点击界面上的 Create Channel 按钮输入频道名称如tech-discussion选择频道类型公开/私有添加初始成员发送和接收消息的底层流程用户输入消息后前端通过 WebSocket 发送到后端后端验证权限后存储到数据库通过 WebSocket 广播给频道内所有在线用户离线用户再次上线时通过 REST API 拉取历史消息消息表结构通常包含CREATE TABLE messages ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), channel_id UUID REFERENCES channels(id), user_id UUID REFERENCES users(id), content TEXT NOT NULL, attachments JSONB, created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW() );4.2 文件上传与共享配置Buzz 的文件上传功能需要正确配置存储后端// server/config/upload.js module.exports { local: { provider: local, path: process.env.FILE_STORAGE_PATH || ./uploads, baseUrl: /api/files }, s3: { provider: s3, accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, region: process.env.AWS_REGION, bucket: process.env.S3_BUCKET_NAME } };生产环境推荐使用 S3 兼容存储配置示例# .env.production FILE_STORAGE_PROVIDERs3 AWS_ACCESS_KEY_IDyour_access_key AWS_SECRET_ACCESS_KEYyour_secret_key AWS_REGIONus-east-1 S3_BUCKET_NAMEyour-buzz-files4.3 第三方服务集成Webhook 与机器人Buzz 可以通过 Webhook 接收外部系统通知配置示例在频道设置中生成 Webhook URL在外部系统如 GitHub、GitLab中配置该 URL测试消息推送# 测试 Webhook 的 curl 示例 curl -X POST \ -H Content-Type: application/json \ -d {text:部署完成v1.2.3 已上线生产环境} \ https://your-buzz-instance.com/api/webhooks/channel_abc123机器人集成可以通过 Buzz 的 API 实现自动化交互// 简单的通知机器人示例 const axios require(axios); class BuzzBot { constructor(apiBase, token) { this.apiBase apiBase; this.token token; } async sendMessage(channelId, text) { const response await axios.post( ${this.apiBase}/channels/${channelId}/messages, { content: text }, { headers: { Authorization: Bearer ${this.token} } } ); return response.data; } } // 使用示例 const bot new BuzzBot(https://your-buzz-instance.com/api, your-bot-token); bot.sendMessage(general, 系统监控CPU 使用率超过 80%);5. 生产环境部署与高可用配置5.1 容器化部署与编排配置使用 Docker Compose 可以简化多组件部署# docker-compose.prod.yml version: 3.8 services: postgres: image: postgres:15 environment: POSTGRES_DB: buzz POSTGRES_USER: buzz_user POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data networks: - buzz_network redis: image: redis:7-alpine volumes: - redis_data:/data networks: - buzz_network app: build: context: ./server dockerfile: Dockerfile.prod environment: NODE_ENV: production DATABASE_URL: postgresql://buzz_user:${DB_PASSWORD}postgres:5432/buzz REDIS_URL: redis://redis:6379 JWT_SECRET: ${JWT_SECRET} depends_on: - postgres - redis networks: - buzz_network ports: - 3001:3001 frontend: build: context: ./client dockerfile: Dockerfile.prod environment: VITE_API_BASE_URL: https://api.your-domain.com/api VITE_WS_URL: wss://api.your-domain.com networks: - buzz_network ports: - 3000:80 volumes: postgres_data: redis_data: networks: buzz_network: driver: bridge启动命令DB_PASSWORDsecure_pass JWT_SECRETyour_secret docker-compose -f docker-compose.prod.yml up -d5.2 反向代理与 SSL 配置生产环境必须使用 HTTPSNginx 配置示例# /etc/nginx/sites-available/buzz upstream buzz_backend { server localhost:3001; } upstream buzz_frontend { server localhost:3000; } server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your-domain.com; ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; # 前端静态文件 location / { proxy_pass http://buzz_frontend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # API 接口 location /api/ { proxy_pass http://buzz_backend/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # WebSocket 连接 location /socket.io/ { proxy_pass http://buzz_backend/socket.io/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }5.3 监控、日志与备份策略生产环境需要建立完整的可观测性体系日志配置// server/config/logger.js const winston require(winston); module.exports winston.createLogger({ level: info, format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.File({ filename: logs/error.log, level: error }), new winston.transports.File({ filename: logs/combined.log }), new winston.transports.Console({ format: winston.format.simple() }) ] });健康检查端点// server/src/routes/health.js router.get(/health, async (req, res) { try { // 检查数据库连接 await sequelize.authenticate(); // 检查 Redis 连接 await redis.ping(); res.json({ status: ok, timestamp: new Date().toISOString(), uptime: process.uptime(), database: connected, redis: connected }); } catch (error) { res.status(503).json({ status: error, error: error.message }); } });数据库备份脚本#!/bin/bash # backup_buzz.sh BACKUP_DIR/opt/buzz/backups DATE$(date %Y%m%d_%H%M%S) PGPASSWORD$DB_PASSWORD pg_dump -U buzz_user -h localhost buzz $BACKUP_DIR/buzz_$DATE.sql # 保留最近7天的备份 find $BACKUP_DIR -name buzz_*.sql -mtime 7 -delete6. 常见问题排查与性能优化6.1 部署阶段典型问题分析问题现象可能原因检查方式解决方案前端无法连接后端 APICORS 配置错误、网络策略限制浏览器开发者工具查看网络请求检查后端 CORS 配置确保包含前端域名WebSocket 连接失败反向代理配置不正确、防火墙阻挡检查浏览器 Console 错误信息配置 Nginx WebSocket 代理开放相应端口文件上传失败存储路径权限不足、空间不足查看服务端日志文件权限错误确保上传目录存在且进程有写权限检查磁盘空间数据库连接超时数据库服务未启动、连接参数错误检查数据库服务状态和连接字符串验证数据库服务运行检查连接参数格式6.2 运行时性能问题优化数据库查询优化-- 为消息表添加频道和时间的复合索引 CREATE INDEX idx_messages_channel_created ON messages(channel_id, created_at DESC); -- 监控慢查询 SELECT query, calls, total_time, rows FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;Redis 缓存策略// 缓存用户会话和频繁访问的数据 const getUserProfile async (userId) { const cacheKey user:${userId}:profile; let profile await redis.get(cacheKey); if (!profile) { profile await User.findByPk(userId); // 缓存5分钟 await redis.setex(cacheKey, 300, JSON.stringify(profile)); } return JSON.parse(profile); };WebSocket 连接管理实施心跳机制检测断开连接使用连接池避免资源泄漏对大规模部署考虑使用 Redis 适配器实现多节点间消息广播6.3 安全加固检查清单生产环境部署前必须完成的安全检查[ ] 更改所有默认密码数据库、Redis、管理员账号[ ] 使用强 JWT 密钥并定期轮换[ ] 配置 HTTPS 并启用 HSTS[ ] 设置文件上传类型和大小限制[ ] 实施速率限制防止 API 滥用[ ] 定期更新依赖包修复安全漏洞[ ] 配置防火墙规则限制不必要的端口访问[ ] 设置日志审计和异常监控告警[ ] 定期进行数据备份并测试恢复流程7. 扩展开发与定制化方向7.1 插件系统开发指南如果 Buzz 支持插件架构可以按以下模式扩展功能// 示例消息处理插件 class MessageFilterPlugin { constructor(options) { this.name Message Filter; this.version 1.0.0; this.options options; } async onMessageSend(message, context) { // 检查敏感词 if (this.containsSensitiveWords(message.content)) { throw new Error(消息包含敏感内容); } // 添加消息标签 message.tags this.analyzeMessageType(message.content); return message; } containsSensitiveWords(content) { const sensitiveWords this.options.sensitiveWords || []; return sensitiveWords.some(word content.includes(word)); } }7.2 主题定制与界面调整前端定制通常通过修改样式变量实现// client/src/styles/variables.scss $primary-color: #2c5aa0; $secondary-color: #7e57c2; $background-color: #f5f5f5; $text-color: #333333; // 暗色主题变量 [data-themedark] { $primary-color: #4a7bc8; $background-color: #1a1a1a; $text-color: #ffffff; }7.3 与其他系统的深度集成与企业现有系统集成可以考虑以下方向单点登录SSO集成通过 OAuth 2.0 或 SAML 连接企业身份提供商CI/CD 流水线通知接收构建状态、部署结果等自动化通知监控告警聚合将多个监控系统的告警统一推送到指定频道知识库联动与 Confluence、GitBook 等知识库系统双向同步内容自建群聊平台的价值不仅在于替代商业产品更在于能够根据团队工作流深度定制。Buzz 作为开源方案为技术团队提供了基础能力框架实际落地时需要根据具体需求在用户管理、消息路由、文件处理和集成扩展等方面进行针对性开发。从测试环境验证到生产环境平稳运行每个环节都需要扎实的基础设施知识和细致的运维实践。

相关新闻

18-聚类概述

18-聚类概述

根据样本间的相似性,将样本划分到不同的类别中;不同的相似度计算方法,会得到不同的聚类结果,常用的相似度计算方法:欧氏距离。聚类是一种无监督学习算法,目的是没有先验知识的情况下, 自动发现数…

2026/10/12 11:48:21 阅读更多 →
AO3镜像站终极指南:3分钟解锁全球最大同人创作平台的完整访问方案

AO3镜像站终极指南:3分钟解锁全球最大同人创作平台的完整访问方案

AO3镜像站终极指南:3分钟解锁全球最大同人创作平台的完整访问方案 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 还在为无法访问Archive of Our Own(AO3)而烦恼吗?AO3镜…

2026/10/12 13:24:44 阅读更多 →
Python跨平台远程管理工具Stitch RAT:从架构解析到实战部署

Python跨平台远程管理工具Stitch RAT:从架构解析到实战部署

1. 项目概述:为什么我们需要一个跨平台的远程管理工具?在运维、渗透测试、甚至是日常的IT资产管理中,远程管理工具(RAT)是一个绕不开的话题。传统的解决方案,比如Windows上的RDP、VNC,或者Linux…

2026/10/12 14:29:15 阅读更多 →

最新新闻

Windows下Claude Code安装配置与避坑全攻略

Windows下Claude Code安装配置与避坑全攻略

“Claude Code 在 Windows 上到底能不能用?”——这恐怕是过去一个月我在各种技术群里被问最多的问题。一方面,这个命令行形态的 AI 编程代理确实很香,直接在终端里让它读仓库、改代码、跑测试、提 PR,整个工作流都在一个地方流转…

2026/10/13 12:59:11 阅读更多 →
ArcGIS实战:南京shp数据从加载到空间分析全流程

ArcGIS实战:南京shp数据从加载到空间分析全流程

简介:这份资源是面向ArcGIS用户的南京市矢量地理数据集,适合从事城市规划、交通分析、环境评估等工作的GIS学习者与从业者使用。数据以Shapefile格式组织,涵盖建筑、道路网、水系、绿地、地铁、铁路、各级公路及行政边界等要素,可…

2026/10/13 12:59:11 阅读更多 →
网页配色不再失控:色彩规范与搭配方法全解析

网页配色不再失控:色彩规范与搭配方法全解析

去年年中我接手链环科技的一个网页改版项目,设计要求是“保持品牌感,但又不能太老气”。听起来很常规,真正落到页面时才发现色彩层面完全是失控的:四个主页面用了十几种蓝色,每个按钮的深浅都不一样,就连同…

2026/10/13 12:59:11 阅读更多 →
Vibe Coding实战:从AI辅助编程到全栈开发效率革命

Vibe Coding实战:从AI辅助编程到全栈开发效率革命

1. 先聊聊“Vibe Coding”这阵风是怎么吹起来的Vibe Coding,如果你最近刷技术社区或者朋友圈,很难不被这个词反复刷屏。它说的是那种“凭感觉写代码”的状态:你不再逐行敲语法、抠括号,而是用自然语言把需求讲清楚,让A…

2026/10/13 12:59:11 阅读更多 →
AI编程教程爆火背后:本地化协作者设计与场景流实践

AI编程教程爆火背后:本地化协作者设计与场景流实践

1. 项目概述:一个被“豆包”推荐的AI编程教程,到底做对了什么?“2 万 Star,我的 AI 编程教程被豆包推荐了!”——这句话乍看像社交媒体上的爆款标题,但背后藏着一个非常具体、可复现、且极具现实参考价值的…

2026/10/13 12:59:11 阅读更多 →
从零搭建ELK日志分析平台:架构设计、组件选型与实战调优

从零搭建ELK日志分析平台:架构设计、组件选型与实战调优

说实话,我在接手公司日志平台之前,排查故障靠的是“三件套”组合拳:登录服务器、grep关键字、tail -f盯屏幕。最开始那几年业务量不大,这招勉强够用,可一旦服务器数量超过两位数、日志格式五花八门,这套土办…

2026/10/13 12:58:10 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →