双轨终端监视系统部署手册

tmux + ttyd 实时 SSH 操作可视化方案

适用场景:AI 远程操控服务器时,用户通过浏览器实时观察所有终端操作,零延迟、零信任成本。

适用系统:OpenCloudOS 9 / CentOS 9 Stream / RHEL 9 系列(x86_64)

文档版本:v2.1(修正版)
最后更新:2026-05-29


目录

  1. 方案概述
  2. 架构设计
  3. 前置条件与依赖矩阵
  4. 完整安装流程
  5. 双轨工作流
  6. 故障排查
  7. 安全加固
  8. 一键安装脚本
  9. 运维速查表
  10. 踩坑记录总表
  11. 变更记录

1. 方案概述

1.1 什么是双轨监视

双轨 = 轨道 A(AI 执行)+ 轨道 B(用户观察)

轨道 角色 入口 可见性
轨道 A AI / 自动化脚本 SSH (paramiko / OpenSSH) 执行命令、上传文件、部署服务
轨道 B 用户 / 审计员 浏览器 (http://<IP>:7681) 实时观看 tmux 会话中的所有输出

两者完全同步:AI 每输入一条命令,浏览器端即时滚动显示命令及其回显,无需事后查日志。

1.2 为什么需要双轨

痛点 传统 SSH 方案 双轨监视方案
操作不可见 只能看最终状态,中间过程黑盒 实时看到每一条命令与回显
误操作难发现 等出问题了才回头排查 用户可立即叫停或反馈
信任成本高 “AI 到底在服务器上干了什么?” 浏览器即监控台,完全透明
日志延迟 需要事后登录查日志 命令输出实时滚动,零延迟

1.3 核心组件

组件 版本 职责 监听端口
tmux 3.4 终端复用器,保持会话不中断,作为命令实际执行环境 无(本地 UNIX socket)
ttyd 1.7.7 将 tmux 会话转为 Web 页面,通过 WebSocket 推送终端内容 7681/TCP
libwebsockets 4.3.2 ttyd 的 WebSocket 底层依赖库
tmux 会话 ai-work AI 命令实际执行的终端会话,所有输出被 ttyd 镜像

2. 架构设计

2.1 数据流图

┌─────────────┐      SSH (轨道 A)       ┌─────────────┐
│   AI 本地   │ ───────────────────────► │   服务器    │
│  (paramiko) │   执行命令 / 上传文件    │ (OpenCloudOS)│
└─────────────┘                          └──────┬──────┘
                                                │
                                                │ tmux send-keys
                                                ▼
                                          ┌─────────────┐
                                          │ tmux ai-work│
                                          │   会话      │
                                          │ (命令执行)   │
                                          └──────┬──────┘
                                                 │
                                                 │ 终端输出
                                                 │ (stdout/stderr)
                                                 ▼
                                          ┌─────────────┐
                                          │    ttyd     │
                                          │  (WebSocket)│
                                          │   :7681     │
                                          └──────┬──────┘
                                                 │
                                                 │ HTTP/WebSocket
                                                 ▼
                                          ┌─────────────┐
                                          │   浏览器    │
                                          │ 用户观察端  │
                                          │  (轨道 B)   │
                                          └─────────────┘

2.2 时序关系

时间轴 ──────────────────────────────────────────────►

AI (SSH)          [send-keys 'cmd']                [send-keys 'cmd2']
                      │                                  │
                      ▼                                  ▼
tmux ai-work      执行 cmd ──► 输出回显            执行 cmd2 ──► 输出回显
                      │            │                     │            │
                      └────────────┘                     └────────────┘
                                   │                                  │
                                   ▼                                  ▼
ttyd :7681                    转发输出                          转发输出
                                   │                                  │
                                   ▼                                  ▼
浏览器用户                    实时看到 cmd                       实时看到 cmd2
                              执行过程及结果                     执行过程及结果

关键约束:ttyd 仅做被动镜像,不干预命令执行;tmux 会话是唯一的共享状态点。


3. 前置条件与依赖矩阵

3.1 系统要求

项目 要求 验证命令
操作系统 OpenCloudOS 9 / CentOS 9 Stream / RHEL 9 (x86_64) cat /etc/os-release
内核版本 >= 5.14 uname -r
内存 >= 512 MB(编译阶段需要) free -h
磁盘 >= 2 GB 可用空间 df -h /tmp
网络 可访问 GitHub(或自备镜像) curl -I https://github.com
权限 root 或 sudo whoami

3.2 依赖包清单

包名 用途 安装来源
tmux 终端复用 yum
json-c-devel JSON 解析(ttyd 依赖) yum
libuv-devel 事件循环(libwebsockets 需要) yum
zlib-devel 压缩支持 yum
openssl-devel TLS/SSL 支持 yum
cmake 构建系统 yum
gcc C 编译器 yum
make 构建工具 yum
git 源码获取 yum
wget 文件下载 yum

⚠️ 注意libwebsockets-devel 可安装,但不要依赖它编译 ttyd(详见 坑1)。


4. 完整安装流程

4.1 安装系统依赖

yum install -y tmux json-c-devel libuv-devel zlib-devel openssl-devel cmake gcc make git vim wget unzip

验证关键工具:

cmake --version   # >= 3.20
gcc --version     # >= 11.0
tmux -V           # 3.x

4.2 编译安装 libwebsockets(从源码)

必须源码编译,系统包缺少 CMake 配置文件。

cd /tmp
wget --timeout=120 --tries=3 \
    https://github.com/warmcat/libwebsockets/archive/refs/tags/v4.3.2.tar.gz \
    -O libwebsockets-4.3.2.tar.gz

tar xzf libwebsockets-4.3.2.tar.gz
cd libwebsockets-4.3.2
mkdir -p build && cd build

cmake -DLWS_WITHOUT_TESTAPPS=ON \
      -DLWS_WITHOUT_EXTENSIONS=OFF \
      -DLWS_WITH_SSL=ON \
      -DLWS_WITH_LIBUV=ON \
      ..

make -j$(nproc)
make install
ldconfig

关键参数说明

参数 作用 缺失后果
-DLWS_WITH_LIBUV=ON 启用 libuv 事件循环支持 ttyd 编译报错:“libwebsockets was not build with libuv support”
-DLWS_WITH_SSL=ON 启用 TLS(ttyd 后续可配 HTTPS) 仅影响后续 HTTPS 选项,不影响基础功能
-DLWS_WITHOUT_TESTAPPS=ON 不编译测试程序 减少编译时间

验证安装:

ls /usr/local/lib/cmake/libwebsockets/
# 应存在 LibwebsocketsConfig.cmake

4.3 编译安装 ttyd

cd /tmp
wget --timeout=60 --tries=3 \
    https://github.com/tsl0922/ttyd/archive/refs/heads/master.tar.gz \
    -O ttyd-master.tar.gz

tar xzf ttyd-master.tar.gz
cd ttyd-main
mkdir -p build && cd build

cmake -DCMAKE_PREFIX_PATH=/usr/local ..
make -j$(nproc)
cp ttyd /usr/local/bin/
chmod +x /usr/local/bin/ttyd

关键参数说明

参数 作用 缺失后果
-DCMAKE_PREFIX_PATH=/usr/local 告诉 CMake 去 /usr/local 找 libwebsockets 报错:“Could not find a package configuration file provided by Libwebsockets”

验证安装:

ttyd --version
# 输出:ttyd version 1.7.7-unknown(从源码编译无 git tag 时显示 unknown,属正常)

4.4 创建 tmux 会话

# 创建名为 ai-work 的 tmux 会话(后台运行,不附加终端)
tmux new-session -d -s ai-work

# 验证会话存在
tmux list-sessions
# 输出:ai-work: 1 windows (created ...)

4.5 启动 ttyd 服务

首次验证(手动前台启动,确认无报错后按 Ctrl+C 停止):

ttyd -p 7681 tmux attach -t ai-work

ttyd 默认行为即为只读:浏览器端只能观察,无法输入。这是双轨监视的安全基线。

如需允许浏览器端交互(不推荐用于生产监视场景),可添加 -W(writable)参数。

确认前台运行正常后,停止并按 4.6 节配置 systemd 持久化。

验证进程:

ps aux | grep ttyd
ss -tlnp | grep 7681

4.6 配置 systemd 持久化

创建服务文件 /etc/systemd/system/ttyd.service

[Unit]
Description=ttyd Web Terminal Monitor
After=network.target

[Service]
Type=simple
ExecStartPre=/bin/bash -c 'tmux has-session -t ai-work 2>/dev/null || tmux new-session -d -s ai-work'
ExecStart=/usr/local/bin/ttyd -p 7681 tmux attach -t ai-work
Restart=always
RestartSec=5
User=root

[Install]
WantedBy=multi-user.target

启用并启动:

systemctl daemon-reload
systemctl enable ttyd
systemctl start ttyd
systemctl status ttyd --no-pager

4.7 防火墙配置

两层防火墙都需要放行

A. 系统防火墙(firewalld)
firewall-cmd --permanent --add-port=7681/tcp
firewall-cmd --reload
firewall-cmd --list-ports
B. 云平台安全组(以腾讯云为例)
方向 协议 端口 来源 策略
入站 TCP 7681 0.0.0.0/0(或限制为办公 IP) 允许

如使用阿里云、AWS、GCP,请在对应控制台的安全组 / 防火墙规则中添加相同规则。

4.8 浏览器验证

访问:http://<服务器公网IP>:7681/

应看到 tmux ai-work 会话的终端界面(可能当前为空,等待命令输入后会有输出)。


5. 双轨工作流

5.1 轨道 A:AI 执行命令(写入端)

原则:AI 不直接通过 SSH 执行命令,而是通过 tmux send-keys 将命令注入 ai-work 会话。

# 正确方式(用户可见)
tmux send-keys -t ai-work 'cd /opt/project && docker compose ps' Enter

# 错误方式(用户不可见,绕过监视)
ssh user@server "cd /opt/project && docker compose ps"

批量命令序列示例

# AI 通过 SSH 执行以下命令序列
tmux send-keys -t ai-work 'clear' Enter
tmux send-keys -t ai-work 'echo "[$(date +%H:%M:%S)] 开始部署..."' Enter
tmux send-keys -t ai-work 'cd /opt/iot-platform && git pull origin main' Enter
tmux send-keys -t ai-work 'docker compose up -d --build' Enter

5.2 轨道 B:用户观察(读取端)

  1. 打开浏览器
  2. 访问:http://<服务器IP>:7681/
  3. 实时观看 tmux ai-work 会话中的命令执行和输出滚动

5.3 交互反馈闭环

┌─────────────┐     发现问题      ┌─────────────┐
│   浏览器    │ ────────────────► │   用户      │
│  (轨道 B)   │                   │             │
└─────────────┘                   └──────┬──────┘
                                         │
                    聊天反馈 / SSH干预    │
                                         ▼
                                  ┌─────────────┐
                                  │    AI       │
                                  │ (调整指令)   │
                                  └──────┬──────┘
                                         │
                                         │ tmux send-keys
                                         ▼
                                  ┌─────────────┐
                                  │ tmux ai-work│
                                  │  (轨道 A)   │
                                  └─────────────┘

如果用户在观察中发现问题,可以:

  • 在聊天中直接告诉 AI:“刚才 docker compose 报错了,端口冲突”
  • 通过独立 SSH 会话自行干预(不影响 tmux 会话)

6. 故障排查

6.1 ttyd 页面无法访问

排查层级 检查项 命令 / 方法
进程层 ttyd 是否在运行 ps aux | grep ttyd
端口层 7681 是否监听 ss -tlnp | grep 7681
系统防火墙 firewalld 是否放行 firewall-cmd --list-ports
云平台 安全组是否放行 登录控制台检查入站规则
网络层 本地能否访问 curl http://127.0.0.1:7681
日志层 ttyd 报错信息 journalctl -u ttyd -n 50

6.2 页面打开但黑屏 / 无输出

排查项 命令
tmux 会话是否存在 tmux list-sessions
会话中是否有活动 tmux capture-pane -t ai-work -p
手动附加查看 tmux attach -t ai-work(按 Ctrl+B 再按 D 分离,不要关闭窗口)
ttyd 是否附加正确会话 检查 systemd 服务文件中的会话名拼写

6.3 tmux 会话丢失或崩溃

# 如果 ai-work 会话不存在,重新创建
tmux new-session -d -s ai-work

# 重启 ttyd 服务
systemctl restart ttyd

6.4 中文乱码

# 检查 locale
echo $LANG
# 应为:en_US.UTF-8 或 zh_CN.UTF-8

# 如不正确,临时设置
export LANG=en_US.UTF-8

# 永久设置
echo 'export LANG=en_US.UTF-8' >> /etc/profile

浏览器端确保使用 UTF-8 编码(现代浏览器默认如此)。

6.5 编译阶段错误速查

错误现象 根因 解决
Could not find LibwebsocketsConfig.cmake 系统包缺少 CMake 配置 源码编译 libwebsockets
libwebsockets was not build with libuv support 编译 libwebsockets 时未开 -DLWS_WITH_LIBUV=ON 重新编译 libwebsockets 并加该参数
json.h: No such file or directory 头文件路径问题 使用 CMake 编译 ttyd,不要手动 gcc
CMake 找不到 libwebsockets 安装路径不在默认搜索路径 -DCMAKE_PREFIX_PATH=/usr/local

7. 安全加固

7.1 当前部署的安全基线

风险点 当前防护措施 风险等级
ttyd 暴露公网 ttyd 默认只读,浏览器端无法输入
敏感命令泄露 所有命令对用户透明(设计如此)
会话被劫持 tmux 会话仅在本地,不暴露网络端口
端口扫描 7681 可被扫描发现
无身份验证 任何人知道 IP+端口即可访问

7.2 推荐加固措施(按优先级)

措施 1:限制来源 IP(最高优先级)
# firewalld 限制特定 IP
firewall-cmd --permanent --remove-port=7681/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="YOUR_OFFICE_IP/32" port protocol="tcp" port="7681" accept'
firewall-cmd --reload
措施 2:启用 ttyd 基础认证
# 修改 /etc/systemd/system/ttyd.service 的 ExecStart 行:
ExecStart=/usr/local/bin/ttyd -p 7681 -c admin:StrongPassword123 tmux attach -t ai-work

# 重载并重启
systemctl daemon-reload
systemctl restart ttyd

-c 参数为 ttyd 原生基础认证(username:password)。注意:ttyd 默认仍为只读,即使通过认证也只能观察。
如需允许认证后的浏览器端输入,需额外添加 -W 参数(不推荐用于监视场景)。

措施 3:Nginx 反向代理 + Basic Auth(生产推荐)
server {
    listen 80;
    server_name ttyd.yourdomain.com;

    location / {
        auth_basic "ttyd monitor";
        auth_basic_user_file /etc/nginx/.htpasswd;
        proxy_pass http://127.0.0.1:7681;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}
措施 4:启用 HTTPS
# ttyd 原生 HTTPS(需证书)
# 修改 systemd 服务文件中的 ExecStart:
ExecStart=/usr/local/bin/ttyd -p 7681 -S -C /path/to/cert.pem -K /path/to/key.pem tmux attach -t ai-work
措施 5:避免在监视会话中输入密码
# 错误:密码会显示在浏览器中
tmux send-keys -t ai-work 'mysql -u root -pMySecretPassword' Enter

# 正确:使用环境变量或配置文件
tmux send-keys -t ai-work 'mysql -u root -p' Enter
# 然后由 AI 通过独立安全通道提供密码,或预先配置 .my.cnf

7.3 安全加固决策树

部署环境 ──► 内网 / 跳板机访问 ──► 仅限制来源 IP 即可
    │
    └────► 公网直接访问 ──► 必须叠加以下至少两项:
                              ├─ 来源 IP 白名单
                              ├─ ttyd -c 基础认证
                              ├─ Nginx 反向代理 + Basic Auth
                              └─ HTTPS (防止中间人窥视终端内容)

8. 一键安装脚本

适用于全新 OpenCloudOS 9 系统,网络可达 GitHub 的情况。

#!/bin/bash
set -euo pipefail

# ─────────────────────────────────────────────
# 双轨终端监视系统 - 一键安装脚本
# 适用:OpenCloudOS 9 / CentOS 9 Stream / RHEL 9
# ─────────────────────────────────────────────

TMUX_SESSION="ai-work"
TTYD_PORT=7681

# 1. 安装系统依赖
echo "[1/6] 安装系统依赖..."
yum install -y tmux json-c-devel libuv-devel zlib-devel openssl-devel cmake gcc make wget

# 2. 编译安装 libwebsockets
echo "[2/6] 编译安装 libwebsockets..."
cd /tmp
rm -f libwebsockets-4.3.2.tar.gz
wget --timeout=120 --tries=3 \
    https://github.com/warmcat/libwebsockets/archive/refs/tags/v4.3.2.tar.gz \
    -O libwebsockets-4.3.2.tar.gz

tar xzf libwebsockets-4.3.2.tar.gz
cd libwebsockets-4.3.2
mkdir -p build && cd build

cmake -DLWS_WITHOUT_TESTAPPS=ON \
      -DLWS_WITHOUT_EXTENSIONS=OFF \
      -DLWS_WITH_SSL=ON \
      -DLWS_WITH_LIBUV=ON \
      ..
make -j$(nproc)
make install
ldconfig

# 3. 编译安装 ttyd
echo "[3/6] 编译安装 ttyd..."
cd /tmp
rm -f ttyd-master.tar.gz
wget --timeout=60 --tries=3 \
    https://github.com/tsl0922/ttyd/archive/refs/heads/master.tar.gz \
    -O ttyd-master.tar.gz

tar xzf ttyd-master.tar.gz
cd ttyd-main
mkdir -p build && cd build

cmake -DCMAKE_PREFIX_PATH=/usr/local ..
make -j$(nproc)
cp ttyd /usr/local/bin/
chmod +x /usr/local/bin/ttyd

# 4. 创建 tmux 会话
echo "[4/6] 创建 tmux 会话 '${TMUX_SESSION}'..."
tmux new-session -d -s "${TMUX_SESSION}" 2>/dev/null || true

# 5. 配置防火墙
echo "[5/6] 配置系统防火墙..."
firewall-cmd --permanent --add-port=${TTYD_PORT}/tcp 2>/dev/null || true
firewall-cmd --reload 2>/dev/null || true

# 6. 配置 systemd 并启动
echo "[6/6] 配置 systemd 服务..."
cat > /etc/systemd/system/ttyd.service <<EOF
[Unit]
Description=ttyd Web Terminal Monitor
After=network.target

[Service]
Type=simple
ExecStartPre=/bin/bash -c 'tmux has-session -t ${TMUX_SESSION} 2>/dev/null || tmux new-session -d -s ${TMUX_SESSION}'
ExecStart=/usr/local/bin/ttyd -p ${TTYD_PORT} tmux attach -t ${TMUX_SESSION}
Restart=always
RestartSec=5
User=root

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable ttyd
systemctl start ttyd

# 输出访问信息
IP_ADDR=$(hostname -I | awk '{print $1}')
echo ""
echo "========================================"
echo "  双轨监视系统安装完成!"
echo ""
echo "  轨道 B (浏览器观察): http://${IP_ADDR}:${TTYD_PORT}/"
echo "  tmux 会话名: ${TMUX_SESSION}"
echo ""
echo "  轨道 A (AI 执行命令):"
echo "    tmux send-keys -t ${TMUX_SESSION} 'your-command' Enter"
echo ""
echo "  安全提示:"
echo "    - ttyd 默认只读,浏览器端无法输入"
echo "    - 建议限制来源 IP 或添加认证"
echo "    - 生产环境请配置 Nginx 反向代理 + HTTPS"
echo "========================================"

9. 运维速查表

9.1 进程与会话管理

操作 命令
查看 tmux 会话 tmux list-sessions
创建新会话 tmux new-session -d -s ai-work
发送命令到会话 tmux send-keys -t ai-work '命令' Enter
查看会话内容(不附加) tmux capture-pane -t ai-work -p
手动附加到会话 tmux attach -t ai-workCtrl+B 然后 D 分离)
杀掉 tmux 会话 tmux kill-session -t ai-work

9.2 ttyd 管理

操作 命令
查看 ttyd 进程 ps aux | grep ttyd
查看端口监听 ss -tlnp | grep 7681
查看 ttyd 日志 journalctl -u ttyd -n 50
停止 ttyd systemctl stop ttyd
重启 ttyd systemctl restart ttyd
查看 ttyd 版本 ttyd --version

9.3 systemd 服务管理

# 查看状态
systemctl status ttyd --no-pager

# 启动 / 停止 / 重启
systemctl start ttyd
systemctl stop ttyd
systemctl restart ttyd

# 开机自启
systemctl enable ttyd

# 查看日志
journalctl -u ttyd -f

10. 踩坑记录总表

以下所有坑均来自 OpenCloudOS 9 / CentOS 9 Stream 实际踩坑经验。

10.1 坑1:系统 libwebsockets-devel 不含 CMake 配置文件

项目 内容
现象 CMake Error: Could not find a package configuration file provided by "Libwebsockets"
根因 OpenCloudOS 9 的 libwebsockets-devel 包只安装了头文件和 .so未安装 LibwebsocketsConfig.cmake,CMake 的 find_package 无法定位
解决 必须从源码编译 libwebsockets,编译后会自动生成并安装 CMake 配置文件到 /usr/local/lib/cmake/libwebsockets/
预防 安装流程中直接跳过系统包,始终源码编译 libwebsockets

10.2 坑2:libwebsockets 未启用 libuv 支持

项目 内容
现象 CMake Error: libwebsockets was not build with libuv support (-DLWS_WITH_LIBUV=ON)
根因 ttyd 依赖 libwebsockets 的 libuv 事件循环支持,但默认编译 libwebsockets 时不会启用
解决 编译 libwebsockets 时必须添加 -DLWS_WITH_LIBUV=ON
预防 见 4.2 节 cmake 命令,该参数为强制项

10.3 坑3:json-c 头文件路径不在默认搜索路径

项目 内容
现象 fatal error: json.h: No such file or directory
根因 json-c 的头文件安装在 /usr/include/json-c/ 子目录下,直接 gcc 编译时找不到
解决 使用 CMake 编译 ttyd,CMake 会自动处理头文件路径;不要尝试手动 gcc 编译 ttyd
预防 严格按文档使用 cmake + make 流程

10.4 坑4:GitHub 下载超时 / zip 文件损坏

项目 内容
现象 wget 超时;unzip 报错 End-of-central-directory signature not found
根因 国内服务器访问 GitHub 不稳定,下载中断导致文件损坏;zip 格式对断点续传容错性差
解决 ① 使用 --timeout=120 --tries=3 增加超时和重试;② 优先使用 .tar.gz 而非 .zip;③ 下载失败删除后重试;④ 验证文件大小
预防 脚本中使用 rm -f 先删旧文件再下载;使用 tar.gz 格式

10.5 坑5:CMAKE_PREFIX_PATH 未设置

项目 内容
现象 CMake 找不到源码安装的 libwebsockets
根因 源码安装到 /usr/local,但 CMake 默认搜索路径可能不包含该位置(取决于发行版)
解决 编译 ttyd 时显式指定 -DCMAKE_PREFIX_PATH=/usr/local
预防 见 4.3 节 cmake 命令,该参数为强制项

11. 变更记录

日期 版本 变更内容 作者
2026-05-29 v1.0 初始安装指南(OpenCloudOS 9),含踩坑记录与一键脚本 原始文档 A
2026-05-29 v1.0 双轨观察方案架构设计、日常使用流程、故障排查 原始文档 B
2026-05-29 v2.0 融合两份文档,统一架构视图,补充安全加固决策树、systemd 自启、运维速查表 融合版
2026-05-29 v2.1 修正 -W 参数含义(ttyd 默认只读,-W 为开启可写);统一 systemd 服务文件名为 ttyd.service;4.5 节启动方式改为 systemd 持久化 验证修正

附录:快速验证清单

部署完成后,按以下顺序验证:

  1. tmux list-sessions 能看到 ai-work
  2. ttyd --version 输出 1.7.7
  3. ss -tlnp \| grep 7681 显示 ttyd 在监听
  4. firewall-cmd --list-ports 包含 7681/tcp
  5. 浏览器访问 http://<IP>:7681/ 能看到终端界面
  6. 执行 tmux send-keys -t ai-work 'echo hello' Enter 后浏览器能看到 hello
  7. 云平台安全组已放行 7681
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐