Vexa 是一个开源自托管的会议机器人与转录 API,通过自动加入会议的机器人实时生成带说话人标识的转录文本,并借助沙箱化 Agent 将会议知识编译为可管理的 Markdown 仓库。

# Vexa
**开源自托管会议机器人与转录 API。**
一个机器人会加入你的 Google Meet、Microsoft Teams 和 Zoom 通话,并通过由*你*托管的 API 实时流式传输带有说话人标识的
转录文本——然后将其提供给沙箱化的 agent,以构建归你的团队所有的
Markdown 知识库。支持自托管,采用 Apache-2.0 协议,且支持物理隔离。
[](LICENSE)
[](#-status--roadmap)
[](#-quickstart)
[](https://discord.gg/Ga9duGkVz9)
**[vexa.ai](https://vexa.ai)** 目前仍在运行 0.10.6.13 系列版本 —— 它后续将托管 **0.12** 版本。
## 为什么选择 Vexa
你能买到的每一个会议 AI 工具都会将你的对话发送到*他们的*云中,然后再把访问权限租回给你。
Vexa 颠覆了这一点:由你自己运行这套技术栈,将其指向你自己的模型,真正掌握你的会议
所产生的价值。
没有其他任何工具能同时具备以下这三点:
1. **Vexa *身处*会议之中。** 一个真正的机器人会加入 Meet、Teams 和 Zoom,并实时
流式传输带有说话人标识的转录文本。这个机器人集群才是真正困难的部分——
每一个“与你的文档聊天”的工具都是在转录文本存在*之后*才开始工作。而 Vexa 负责生成它。
2. **你的知识是归你所有的文件。** 会议内容会被编译成 git 仓库中的 Markdown 文件——
便携、可 diff、可 grep。知识即代码。
3. **Agent 安全地处理它。** 沙箱化的编码 agent 可以像
开发者一样读写该仓库——在隔离的临时容器中运行,无需外部网络访问,可并行处理数千个任务,支持在 Docker
或你的 Kubernetes 上运行。
## 目录
- [快速开始](#-quickstart)
- [工作原理](#-how-it-works)
- [Agentic 运行时](#-the-agentic-runtime)
- [Agent 与你的工作区](#-agents--your-workspace)
- [Terminal:AI 增强的会议](#️-the-terminal-ai-augmented-meetings)
- [实用指南](#-how-to-recipes)
- [部署选项](#-deployment-options)
- [部署与配置](#-deploy--configure)
- [Vexa 的不同之处](#-how-vexa-is-different)
- [面向受监管的企业](#-for-regulated-enterprises)
- [API 参考](#-api-reference)
- [状态与路线图](#-status--roadmap)
- [社区与贡献](#-community--contributing)
- [许可证](#-license)
## ⚡ 快速开始
在单台主机上自托管整个技术栈,然后在 Terminal 中进行探索,或通过 API 驱动它。
Linux (Ubuntu 24.04) 是生产环境的目标平台;配备 Docker Desktop 的 Mac 完全可以
用于本地评估——无论哪种方式,一切都在容器中运行。
**前置条件** — Docker engine ≥ v26(`make all` 会进行检查),以及转录服务:在
[vexa.ai/account](https://vexa.ai/account) 获取免费的 token,或者自托管 (GPU) 转录单元以实现完全
物理隔离的设置。如果没有转录服务,机器人仍会加入并录制会议——它们只是不会产生文本
(当 `.env` 中的凭证块为空时,`make all` 会发出警告)。
```
git clone https://github.com/Vexa-ai/vexa.git && cd vexa
make all # full Docker Compose stack — seeds .env, builds, prints your API key + URLs
make bot # build the meeting bot from source (required before a bot can join)
```
当 `make all` 完成时,它会打印你的密钥和 URL:
```
Terminal UI : http://localhost:13000 # the web workbench
API gateway : http://localhost:18056 # the API
API key : vxa_…
```
### 在 Terminal 中探索(快捷路径)
**Terminal 是了解 Vexa 能做什么的最佳方式。** 打开 **`http://localhost:13000`** —— 你
已经登录到了一个自托管账户。在
工作台中,你无需使用 curl 即可:
- **发送机器人** — 粘贴 Meet / Zoom / Teams 的 URL;一个机器人将作为参与者加入。
- **观看转录文本** 实时流式传输,带有说话人标识,支持先草拟后确认。
- **与你的工作区聊天** — 向一个以每次捕获的会议为上下文的 agent 提问,并观看它
提交你做出的决定。
### 或者通过 API 驱动它
```
export API_KEY=vxa_...
export API_BASE=http://localhost:18056
# WIN 1 — 发送一个 bot 进入实时通话,然后在其 stream 时读取 transcript
curl -X POST "$API_BASE/bots" \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{"platform":"google_meet","native_meeting_id":"abc-defg-hij","bot_name":"Vexa"}'
curl -H "X-API-Key: $API_KEY" "$API_BASE/transcripts/google_meet/abc-defg-hij"
# WIN 2 — 询问一个以你的整个 workspace 作为 context 的 agent(答案以 SSE 的形式 stream 回来)
curl -N -X POST "$API_BASE/agent/chat" \
-H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{"prompt":"What did we decide in my last meeting?"}'
```
`platform` 为 `google_meet` · `teams` · `zoom`;`native_meeting_id` 是加入 URL 中的代码。
agent 的回复以 Server-Sent Events 的形式流式传输 —— `message-delta` 帧携带文本,`commit` 帧标记
它记录到你的工作区中的任何内容。
## 🧩 工作原理
一个网关,两个领域 —— **Meetings**(会议捕获)和 **Agents**(处理知识)—— 两者都运行在
相同的 **runtime**(运行时)上:这是一个在其独立的沙箱容器中生成每个机器人和每个 agent 的引擎。
机器人和 agent 是**相同的 `runtime.v1` 工作负载** —— 隔离、临时、在闲置时回收 —— 因此
已被数千个会议机器人证明可靠的机制,正是运行你的 agent 的机制。每个箭头都保留在
你的网络内部。
## ⚙️ Agentic 运行时
CLI 编码 agent 只是 Linux 上的一个进程。**runtime**(运行时)使其成为一个多租户、
沙箱化的执行层,可以安全地指向真实的业务数据 —— 这与已经在
生产环境中生成 Vexa 会议机器人的引擎相同。
- **隔离的。** 每次调度都会获得自己的容器:除代理工具外无任何网络流出,并且
其文件系统中仅存在被授权的工作区 —— 由底层基础设施强制执行,而非由
agent 执行。Agent 永远不会在控制平面中运行。
- **临时的。** 容器在工作时存活,在闲置时被回收;连续性是
工作区中的一个会话文件。亚秒级启动,可并行处理数千个。
- **编排无关的。** 一个 `runtime.v1` 生命周期,可插拔的底层基础设施 —— 相同的
调度运行起来完全一样,适用于:
| Backend (`RUNTIME_BACKEND`) | 工作负载是… | 状态 |
|---|---|---|
| **`docker`** (默认) | 通过 Docker socket 实现的独立容器 —— 由 `make all` 启动 | ✅ 已发布(开放核心) |
| **`process`** | 一个子进程,不需要 Docker socket | ✅ 可用 |
| **`k8s`** | 一个裸 **Pod** (`kubectl run --restart=Never`),跨集群调度 | ✅ 生命周期 + 每挂载工作区隔离;Helm chart 在 `deploy/helm` 中 |
相同的控制平面,相同的 worker —— 只有容器的创建方式发生了变化。从一台笔记本电脑到
Kubernetes/OpenShift 集群,一切都在你的内部网络中。
## 🧠 Agent 与你的工作区
捕获是前门;**agents** 让知识不断沉淀。每次会议都会编译到你的
**workspace**(工作区)中 —— 这是一个 Markdown 的 git 仓库(一个 [Open Knowledge Format](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf)
`kg/` 包),agent(Claude Code、Codex、……)可以像开发者处理代码库一样对其进行读写。
Agent 可以处理*任何*工作区;会议只是四个触发器之一 —— **chat**(聊天)、**schedule**
(定时任务/cron)、**event**(事件,例如收到邮件)、**finished meeting**(会议结束)。会议本身也是
计划好的工作:连接你的日历 (ICS),计划的会议连同参与者一起显示 —— 机器人
**自动加入**,agent 在通话前进行准备,并在通话后进行处理。
- **多人协作。** 团队共享、带归属标识的工作区 —— 而不是某个人的私人笔记。
- **自动化的。** 机器人捕获通话内容;转录文本会自动编译进去。
- **设计上安全。** Agent 是不受信任的,它们自己不执行任何强制操作。你,在聊天中,直接
编写(git 是撤销机制);不受信任的输入 —— 如电子邮件、网页 —— 以 **propose-only**(仅建议)模式运行:
agent 提出建议,由人工批准,再由受信任的代码应用。不可逆的操作始终受到门控限制。
## 🖥️ Terminal:AI 增强的会议
0.12 版本发布了一个**全新的 Terminal UI**,旨在将后端的规模 —— 数千个机器人和
agent —— 应用到你的实际日程中。它从你的会议开始:即将开始的、正在进行中的、待回顾的。
- **在你的会议中,拥有你知识的 agent。** 打开一场实时通话:转录文本
带有说话人标识进行流式传输,并且 agent 的上下文中包含实时对话*和*你的工作区。
在通话中提问“上次我们答应了他们什么?” —— 或者在刚提到某人、公司或
合同时立即进行研究,并以你的 wiki 为基础。
- **基于会议 —— 以及会议之间 —— 构建的知识。** 每次计划好的会议都有一个 agent,
在**之前准备简报**(谁会来、历史记录、未解决的问题 —— 对于它无法知晓的信息,它会向*你*询问),并在
**之后处理转录文本**。准备好入场,离开时 wiki 已更新。
- **共享。** 邀请同事进入工作区 —— 相同的 wiki,带归属标识。与会议参与者共享会议 —— 他们会获得
**实时流**,而不是事后的录像链接。
- **协作的、AI 增强的会议。** 共同准备共享的工作区;在通话期间,
人类编辑简报,同时 agent 流式传输转录文本并处理知识 —— 同一个房间内,
人类和 AI 参与者操作相同的文件。
## 📖 实用指南
每一个都是通过 [Agent API](#-api-reference) 实现特定结果的完整路径。完整指南位于
[docs.vexa.ai](https://docs.vexa.ai)。
**💬 与你的工作区聊天** — 向一个以每次会议、电子邮件和笔记为上下文的 agent 提问;受信任的
聊天也可以记录决策(一次 git commit)。
```
curl -N -X POST "$API_BASE/agent/chat" -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{"prompt":"Brief me on the Acme account: every meeting, the open decisions, and the next step."}'
```
**🌅 每天早上为我准备简报** — 一个在 cron 计划上运行的无人值守 agent,它会提交到你的工作区。
```
curl -X POST "$API_BASE/agent/routines" -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{"name":"Morning brief","cron":"0 8 * * 1-5",
"prompt":"Brief me from overnight activity — new meetings, decisions, follow-ups due. Write brief/today.md.",
"run_now":true}'
```
**📝 每次会议后生成报告** — 在通话结束时调度一个一次性 agent(或者执行一个扫描
近期会议的例程)。
```
curl -X POST "$API_BASE/agent/invocations" -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{"runner":"claude-code","workspaces":[{"id":"u_jane","mode":"rw"}],"trigger":"scheduled",
"start":{"entrypoint":{"inline":"Write a report for the meeting that just ended: summary, decisions, action items with owners."}}}'
```
**📧 对收到的邮件进行分类(安全地)** — 一个由事件触发的 agent,它以 **只读** 方式访问邮箱,并且只能
将操作*作为卡片提议*;在任何内容被写入或发送之前,必须由人工批准。
```
curl -X POST "$API_BASE/agent/events" -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
-d '{"name":"email.received","source":{"uri":"mailbox://u_jane/INBOX/AB12CD"},
"plan":{"prompt":"Triage this email into tasks; propose a record for each action item and a draft reply."}}'
```
## 🚀 部署选项
运行 Vexa 有两种方式,同一个代码库:
**1. 个人 / 开发 —— 在你的 Mac、Linux 或 Windows 机器上使用 Docker。**
单容器(`make lite` —— 多合一的 Vexa Lite 镜像)或完整的 Compose 技术栈
(`make all`)。**复用你的 Claude 订阅**:worker 使用官方的 `claude` CLI 对你的
Pro/Max 凭证进行操作,根据 Anthropic 的条款,这对于个人部署来说属于受保障的、受额度计量限制的
用途 —— 你的订阅、你的次数、你的机器。有关确切的
条款映射,请参见[模型凭证与许可](https://docs.vexa.ai/model-credentials-licensing)([Anthropic 的 Agent SDK 计划使用文章](https://support.claude.com/en/articles/15036540-use-the-claude-agent-sdk-with-your-claude-plan)
是主要来源)。你将获得完整的服务 —— 机器人、转录文本、agent、Terminal —— 基于你
已经付费的订阅。
**2. 云端 —— 在 Kubernetes / OpenShift 上使用 Helm,可扩展至数千名用户。**
[`deploy/helm`](https://github.com/Vexa-ai/vexa/tree/main/deploy/helm) 中的 chart 部署了相同的控制平面,使用
`RUNTIME_BACKEND=k8s`:**每个机器人和每个 agent 都是其独立的 Kubernetes 工作负载**(每次调度对应一个
裸 Pod),因此容量上限是你集群的调度器,而不是一台更大的机器 —— 从一开始就是
为多租户和多用户而构建的。当你转向多用户时,有一条合规规则:其他用户的调用必须在
**API key**(商业条款)上运行,绝不能使用个人订阅凭证 ——
[许可页面](https://docs.vexa.ai/model-credentials-licensing) 详细说明了边界,并且
Settings → Models 强制执行按用户/全局的凭证解析。K8s 后端的状态在
[状态](#-status--roadmap) 中有如实追踪。
## 🏠 部署与配置
`make all` 会通过 Docker Compose 在一台 Linux 主机上启动完整的技术栈 —— 每个服务都在各自的
容器中,绑定到回环接口:
| Service | Role |
|---|---|
| **gateway** `:18056 | 唯一的前门 —— 身份验证、权限范围、路由 |
| **terminal** `:13000` | Web 工作台(将 `/ws` 代理到 gateway) |
| **meeting-api** | 机器人、转录文本、录像 |
| **agent-api** | agent 控制平面 —— 调度、聊天、例程、事件 |
| **runtime** | 按需生成机器人 + agent 容器 |
| **admin-api** · redis · postgres · **minio** | 密钥 · 总线 + 调度器 · 元数据 · 对象存储(录像 + 工作区) |
- **运行时后端** — `RUNTIME_BACKEND=docker`(默认)或 `k8s`(每次调度对应一个 Pod)。
- **转录是一个独立的 GPU 单元** — `make all` 在 **无 GPU** 下运行;从 `deploy/transcription` 在
任何 GPU 机器上启动 STT 服务(faster-whisper,兼容 OpenAI),并让 `.env` 指向它。
或者在测试时使用 [vexa.ai/account](https://vexa.ai/account) 上的免费托管 token。
- **自带推理能力** — 将 agent 指向你自己的 LLM endpoint;不会有任何推理数据离开网络。
- **物理隔离** — 一切都在 VPC 内,**零网络流出** —— 这是受监管行业所要求的姿态。
- **目标** — `make all` · `make bot`(从源代码构建机器人镜像 —— 必需的,非拉取获取) ·
`make lite` · `make up` / `make down` · `make help`。在生产环境中通过 TLS 反向代理
公开 Terminal;完整指南在[文档](https://docs.vexa.ai)中。
## 🆚 Vexa 的不同之处
拥挤的“AI 第二大脑 / 自托管知识库”领域充满了优秀的工具,用于
对你*已经拥有*的文档进行推理。它们没有一个会加入实时会议 —— 它们只消费
其他工具生成的转录文本。这正是关键所在:**捕获是护城河,它位于
文档 RAG 工具架构甚至尚未开始的地方的上游。**
与开发者在评估会议捕获时实际会权衡的工具相比:
| Capability | **Vexa** | 托管 API(例如 Recall.ai) | DIY (Whisper + 你自己的机器人) |
|---|:---:|:---:|:---:|
| 自托管 / 数据归自己所有 | ✅ | ❌ 他们的云端 | ✅ |
| 实时转录 API | ✅ | ✅ | 🟡 需自行构建 |
| 加入 **Meet + Teams + Zoom** | ✅ | 🟡 各异 | ❌ 工作量巨大 |
| 说话人标识 | ✅ | ✅ | 🟡 需自行构建 |
| 知识作为归你所有的文件 | ✅ | ❌ | 🟡 需自行构建 |
| 工作区上的 Agent | ✅ | ❌ | ❌ |
| 开源 | ✅ Apache-2.0 | ❌ | ✅ |
Vexa 是其他工具不具备的唯一组合:一个**许可宽松(Apache-2.0)的
会议机器人 API 服务器**,它是 **自托管 × 实时 × 多平台 × 知识归你自己所有** 的。
并且它是对文档 RAG 和“第二大脑”工具的*补充* —— 将 Vexa 干净的、
带有说话人标识的转录文本提供给它们,让它们做它们擅长的事情。
整个领域 —— 包括 [Attendee](https://github.com/attendee-labs/attendee)(另一种
开源会议机器人 API)和本地笔记工具 —— 包括权衡在内,都已在
[Vexa 如何对比](https://docs.vexa.ai/comparison) 中如实映射。
## 🏦 面向受监管的企业
对于银行、医疗保健、政府以及任何处于受监管行业的人来说,会议 AI 的问题
不在于“选择哪个云” —— 而在于“我们如何在**没有**云的情况下实现这一点。” Vexa 是**物理隔离的会议
智能** —— 是 Microsoft Copilot 的主权替代方案 —— 专门为这类买家打造。
在这里,你不需要与笔记应用竞争 —— 你可以在它们结构性无法变通的
维度上替代 **Microsoft 365 Copilot** 和 **Zoom AI Companion**:
| | **Microsoft 365 Copilot / Zoom AI Companion** | **Vexa** |
|---|---|---|
| 部署 | 仅限供应商云 | 你的云、你的 VPC,或者**完全物理隔离** |
| 模型 | 供应商托管,固定的 | **自带模型** —— 本地或托管 LLMs |
| 商业模式 | 租赁的,按席位订阅 | **自有** —— Apache-2.0,无按席位征税 |
| 可适应性 | 通用的;无自定义词汇;受供应商路线图队列限制 | **你的工程师直接扩展它** —— 领域词汇、服务不足的语言、自定义工作流 |
| 会议平台 | 仅限 Teams / 仅限 Zoom | **Meet + Teams + Zoom** |
| 数据控制 | 通过供应商的云传输 | **绝不离开你的边界** |
| 可扩展性 | 封闭的黑盒 | 开源,API 优先 |
这在实践中的意义:
- **物理隔离** — 完全离线,你的基础设施,你的模型。没有任何数据回传。
- **自适应** — 你的工程师直接实现需求:领域词汇、服务不足的
语言、自定义工作流。没有供应商的功能队列。
- **自有,非租赁** — 部署一次,无需许可即可扩展。无按席位征税。
- **在你的内部网络中扩展** — 在 Docker 或你的
Kubernetes/OpenShift 集群上并行运行数千个隔离的 agent。
**为你的组织进行评估** — 安全审查要求的工件,就在这个仓库中:
| Artifact | 它解答了什么 |
|---|---|
| [`architecture.calm.json`](architecture.calm.json) | 机器可读的架构 (FINOS **CALM**) —— 每个服务和数据流,在 CI 中进行漂移门控 |
| [`SECURITY.md`](SECURITY.md) | 如何报告漏洞 |
| [`security-insights.yml`](security-insights.yml) | OpenSSF Security Insights 清单 |
| [`license-exceptions.json`](license-exceptions.json) | 许可证门控:Category-A 宽松依赖项,明确的例外情况 |
| [`LICENSE`](LICENSE) | Apache-2.0 |
完整的审查页面:文档中的[安全与合规](https://docs.vexa.ai/security-compliance)。
## 📡 API 参考
网关背后有两个 API,使用 `X-API-Key` 进行身份验证。Base URL:`http://localhost:18056`
(自托管)或 `https://api.cloud.vexa.ai`(托管)。
**Meetings API** — 捕获;可独立使用:
| Method | Endpoint | Description |
|---|---|---|
| `POST` | `/bots` | 将机器人发送到会议中 (`platform`, `native_meeting_id`, `bot_name`, `language`, `task`) |
| `GET` | `/transcripts/{platform}/{native_meeting_id}` | 获取实时转录文本(在直播时轮询) |
| `GET` | `/bots/status` | 列出运行中的机器人 |
| `DELETE` | `/bots/{platform}/{native_meeting_id}` | 停止 / 移除机器人 |
| `GET` | `/meetings` · `/recordings` | 列出会议;列出录像(音频在你自己的存储中) |
**Agent API** — 控制平面,位于 `/agent/*` 前缀下(身份在服务器端从你的密钥中派生):
| Method | Endpoint | Description |
|---|---|---|
| `POST` | `/agent/chat` | 在你的工作区上进行聊天 —— 流式传输 SSE (`message-delta`, `tool-call`, `commit`, `done`, `error`) |
| `POST` | `/agent/invocations` | 调度一次性 agent(例如会后报告) |
| `POST` | `/agent/routines` | 创建定时 (cron) agent 例程 |
| `POST` | `/agent/events` | 触发调度 agent 的集成事件(例如邮件分类) |
| `GET` | `/agent/workspace/tree` · `/agent/workspace/file` | 浏览并读取你的 Markdown 工作区 |
`platform` ∈ `google_meet` · `teams` · `zoom`。完整参考:**[docs.vexa.ai](https://docs.vexa.ai)**。
## 🗺️ 状态与路线图
**0.12** 系列的真实状态(与[状态页面](https://docs.vexa.ai)保持一致 —— 绝非空想):
| Capability | State |
|---|---|
| 机器人加入 **Meet / Teams / Zoom** | ✅ 生产可用 |
| 实时转录 (Whisper) + 说话人标识 | ✅ 生产可用 |
| Redis 转录文本流式传输 | ✅ 生产可用 |
| 录像存储到你自己的对象存储 (MinIO) 中 | ✅ 可用 |
| **Runtime — Docker 后端**(每个工作负载对应一个容器) | ✅ 生产可用 |
| **在工作区上进行 Agent 聊天 / 例程 / 事件** | ✅ 已构建并在直播中验证 |
| 工作区 — git Markdown / OKF `kg/` 包 | 🟡 核心已验证;bucket 支持的存储即将上线 |
| **Runtime — Kubernetes 后端**(每次调度对应一个 Pod) | ✅ 生命周期 + 每挂载隔离;Helm 在 `deploy/helm` 中 |
| 会议中实时 Copilot(在通话进行时显示卡片) | 🔵 下一步计划 |
| 日历同步 (ICS) · 计划的会议 · 定时的自动加入 | ✅ 生产可用 |
| 共享工作区与共享会议(邀请、实时流) | ✅ 已构建并在直播中验证 |
| 在实时会议期间进行 Agent 聊天(上下文中包含实时转录文本 + 工作区) | ✅ 已构建并在直播中验证 |
| WebSocket 转录文本多路复用 | 🔵 计划中(目前使用轮询) |
| 静态加密(工作区 · 转录文本 · token) | 🔵 计划中 |
| 通话中途进行机器人配置 / 说话 | 🔵 在开放核心中返回 404 |
✅ 生产可用 · 🟡 进行中 · 🔵 计划中
## 🤝 社区与贡献
- **文档** — [docs.vexa.ai](https://docs.vexa.ai)
- **Discord** — [discord.gg/Ga9duGkVz9](https://discord.gg/Ga9duGkVz9)
- **路线图** — [看板](https://github.com/orgs/Vexa-ai/projects/2),按贡献者
分组,以[里程碑](https://github.com/Vexa-ai/vexa/milestones)作为版本门控。
- **贡献** — [交付如何运作](docs/docs/governance/delivery.mdx):准备了
带有验收表格、*保证*合并的问题,并且将人工验证作为一项
一流的贡献(一页纸,包含规范与操作指南)。
- **Issues 与 PRs** — 欢迎。请参阅 [`SECURITY.md`](SECURITY.md) 来报告漏洞。
Vexa 是完全开放构建的。如果你自托管它,扩展它,或者在某个有趣的地方以物理隔离方式运行它,
我们很乐意听到你的反馈。
## 📄 许可证
[Apache-2.0](LICENSE)。拥有它,运行它,fork 它,发布它。这是一项投资,而不是租赁。