> 原始 Markdown 孪生体（构建期从源 Markdown 生成）。渲染页：https://docs.gatellm.io/zh-CN/usecases/office-m365-addin · 文档索引：https://docs.gatellm.io/zh-CN/llms.txt


# Office / Microsoft 365 加载项

GateLLM 的 Office / Microsoft 365 加载项（包代号 `gatellm-for-msft-365-localhost`）是一个独立、自包含的包：把官方默认从 `https://pivot.gatellm.io` 加载的 Office 加载项 SPA，预打包成本地 HTTPS 静态服务器托管，manifest 指向**你自己的 origin**，再配合**你自己的模型网关**运行。

::: info 包怎么获取
部署包由 GateLLM 向签约客户提供，**不公开下载**。尚未获取时，先经[官网产品页](https://www.gatellm.io/office-addin)接洽。
:::

## 目标

让企业用户在 Excel / Word / PowerPoint / Outlook 里直接用自己的模型网关调用模型：

- **数据不出内网**：自托管 SPA 的请求直达你自己的网关，不经过任何第三方服务端。
- **对 pivot 零依赖**：SPA 已随包提交并 scrub 干净，运行期不再接触 `pivot.gatellm.io` —— 包括首次启动也不抓取。
- **加载项不内置模型**：它连的是你自己的 gateway / 云，不是离线本地推理。

## 架构

```
Office (WebView)  ──<SourceLocation>──▶  本地 HTTPS 静态服务器   ──gateway_url──▶  你的 LLM gateway
                                          (预打包 SPA，79 文件，已 scrub)
```

- 加载项在 Office WebView 里加载，指向你的本地（或 CDN 上）的 HTTPS 静态服务器。
- 该服务器托管一份**预打包的 scrubbed SPA**：Sentry / GrowthBook 默认值已关闭。
- 所有模型请求由加载项直接发往你的网关地址 `gateway_url`。

## 四个宿主各能干什么

严格说这是**两个独立的加载项**，而不是一个加载项的四个宿主：

- **Office 版**（Excel / Word / PowerPoint）：一份 `manifest-office.xml`，TaskPaneApp 模式；
- **Outlook 版**：独立的 `manifest-outlook-3p.xml`，MailApp 模式。

之所以拆成两个：manifest 模式不同，**权限模型也不同**——Outlook 经 Microsoft Graph 读取邮箱 / 日历，需要单独的租户级管理员同意。两者在 M365 管理中心各自上传、各自管理版本；只部署其中一个完全可以。

两个加载项共内置 33 个技能，按宿主分组：

| 宿主 | 内置技能 |
|------|---------|
| **Excel**（金融建模） | `audit-xls`（公式准确性 / 资产负债表配平 / 现金流勾稽核查）、`lbo-model`（LBO 模板与公式）、`dcf-model`（从 SEC 申报做 DCF / WACC / 敏感性）、`3-statement-model`（三表联动补全）、`clean-data-xls`（修剪 / 大小写 / 日期 / 去重）、`comps-analysis`（可比公司倍数与统计基准） |
| **PowerPoint**（幻灯片 / IB） | `competitive-analysis`（竞争格局 deck 框架）、`deck-refresh`（季报 / 财报 / comp-roll 更新）、`ib-check-deck`（IB 演示材料数字一致性 QC）、`competitive-landscape`（竞品格局段落）、`industry-overview`（IC memo / CIM 行业前言） |
| **Word**（法律 / 合同） | `check-doc`（定义术语 / 交叉引用 / 编号 / 签署栏）、`copy-edit`（机械校对）、`summarize-contract`（合同执行摘要）、`flag-issues`（按 playbook 分级 Critical/High/Med/Low）、`fallback`（拉取已批准条款）、`compare-versions`（redline / 双版本 diff）、`plain-language`（转写为非律师可读）、`clean-for-send`（Company Draft / Clean copy）、`insert-clause` / `silent-on` / `draft-from-template`（插条款 / 静默处理 / 从模板起草） |
| **Outlook**（邮件 / 日历） | `storylining`（叙事结构化）、`triage`（收件箱分级）、`summarize-thread`（线程摘要）、`find` / `schedule` / `meeting-prep` / `commitments`（查找 / 排程 / 会前准备 / 承诺事项）、`open-attachment` / `morning-claude` / `prep-meeting`（打开附件 / 晨间简报 / 会前准备） |
| **Meta** | `skillify`（从一段对话生成新技能） |

## 接入模型的四条路

加载项支持四条接入路径，`gateway` 为推荐：

| 路径 | 说明 |
|------|------|
| **gateway**（推荐） | 加载项只认你的网关地址，`gateway_url` + `gateway_token`。网关就是本套文档讲的 GateLLM 网关。 |
| **vertex** | 直连 Google Vertex AI，需要 `gcp_project_id` / `gcp_region` / `google_client_id` / `google_client_secret`。 |
| **bedrock** | 直连 AWS Bedrock，需要 `aws_role_arn` / `aws_region`。 |
| **foundry** | 直连 Azure Foundry，需要 `azure_resource_name` / `azure_api_key`。 |

::: warning 直连 Bedrock 暂不支持 Outlook
Amazon Bedrock 直连模式**不支持** Outlook 宿主（`build-manifest.mjs` 对 `outlook` 传 `aws_*` 会直接报错）。Outlook 走 `gateway` 模式不受限。
:::

Outlook 通过 Microsoft Graph 读取邮箱与日历，无论模型走哪条路，都需要一次性的租户级管理员同意；详见 [部署 Office 加载项](/zh-CN/howto/deploy-office-addin.md)。

## 身份与治理

- **Entra SSO**：`entra_sso=1` 让加载项启动时获取 Entra ID token。可自带 Entra app（`graph_client_id` / `entra_scope`），否则默认用多租户 app。
- **Entra token 直接当网关 Bearer**：`gateway_auth_source=entra` 时，加载项把 Entra access token 直接作为 `Authorization: Bearer` 发到网关，由网关侧按真实用户鉴权 / 计费 —— 无需单独的 `gateway_token` 或 bootstrap 中转。（「无需」指加载项侧不内置凭据；网关侧仍需按 [配置 SSO 企业登录](/zh-CN/howto/configure-sso.md) 预建同名访问密钥——网关不凭空造身份，`name_expr` 把 Entra 身份映射到同名密钥后才放行。）
- **access_policies（IAM 式 allow/deny）**：按条件门控加载项能力。已落地两条标签条件控制：
  - `addin.access` —— 某敏感度标签的文档上加载项直接不许运行；
  - `file.upload` —— 带某标签的文件不许作附件上传。
  两者按 **Microsoft Purview 敏感度标签 GUID**（`mip_label_guid`）匹配，GUID 跨改名 / 多语言稳定。
- **disabled_features（平铺开关）**：`skills.authoring` / `thumbs` / `addin.access` / `file.upload`，简单全局开关；需要按文档 / 文件条件控制时改用 `access_policies`。
- **bootstrap_url（per-user 配置端点）**：下发 provider key / `mcpservers` / `skills` / `disabledfeatures`，响应覆盖 manifest 值。
- **mcpservers**：可挂自建 MCP；不显式配置时，`build-manifest.mjs` 自动接入网关自带的 `/mcp` 端点。
- **otlp_endpoint**（含 headers / resource attributes）：把 OpenTelemetry 追踪打到你自己 collector。

## 数据面

- 聊天历史 / 上传的 skill / MCP 注册 / memory / 设置**全部存在用户本机浏览器存储**，无服务端副本。
- `export-addin-data.sh` / `.ps1` 是**只读导出**：只读 Office 存储、写到指定目录，不改不删 Office 内任何东西。
- 存储按加载项的**加载 origin** 索引，而非 add-in ID —— 换 manifest、重装、sideload ↔ 商店版切换都保留数据。

## 剩余外部依赖（如实）

自托管 SPA 去掉了 `pivot.gatellm.io`，但**不是「零外部依赖」**。剩下的都是预期内的：

1. **你自己的网关** —— 这就是目的本身。
2. **Microsoft Entra / Graph** —— Office 加载项的鉴权与邮箱 / 日历，不可去除。
3. **你自己 host 的 bootstrap 端点**（若用）—— 本来就不走 pivot。

## 常见问题

**Q：加载项会不会把数据发给 Anthropic / pivot？**

不会。自托管 SPA 运行期对 `pivot.gatellm.io` 的依赖为 0（首次启动也不抓取），模型请求直达你自己的网关；bundle 里的 Sentry / GrowthBook 默认值已 scrub 关闭，要遥测就设 `otlp_endpoint` 指向自己的 collector。

**Q：怎么让某类敏感文档上禁用加载项？**

用 `access_policies` 的 `addin.access` 规则按 **Purview 标签 GUID**（`mip_label_guid`）做 deny。标签 GUID 跨改名 / 多语言稳定。最小示例——打开带某标签的文档时加载项直接不运行：

```json
[
  {
    "effect": "deny",
    "action": "addin.access",
    "resource": {
      "type": "open_file",
      "identifiers": [{ "type": "mip_label_guid", "equals": "<标签-guid>" }]
    }
  }
]
```

要禁止带该标签的文件作附件上传，写第二条语句，且 **`action` 与 `resource.type` 要一起换**：`action` 用 `file.upload`、`resource.type` 用 `uploaded_file`（按被附件自身的标签匹配）——只换 resource 不换 action 不生效。两类规则互相独立，要「一切形式都禁」得两条都写：

```json
[
  {
    "effect": "deny",
    "action": "file.upload",
    "resource": {
      "type": "uploaded_file",
      "identifiers": [{ "type": "mip_label_guid", "equals": "<标签-guid>" }]
    }
  }
]
```

标签 GUID 怎么拿、allowlist 怎么写、`action` 数组一次覆盖多动作的写法，见包内 `commands/access-policies.md`。

**Q：Outlook 和 Excel / Word / PowerPoint 有什么区别？**

它们是两个独立的加载项：Outlook 用独立的 MailApp manifest（`manifest-outlook-3p.xml`），并通过 Microsoft Graph 读取邮箱与日历，需要租户级管理员同意；Excel / Word / PowerPoint 共用一份 TaskPaneApp manifest（`manifest-office.xml`）。此外，直连 Bedrock 模式暂不支持 Outlook（走 gateway 模式不受限）。

**Q：本地起的网关（localhost）能先拿来测加载项吗？**

不能。实测 Office WebView 连不上 localhost 起的网关（即使走 HTTPS、证书本地受信也不行）；网关需要部署在有公网域名 + 受信 CA 证书的地址上，staging 环境即可。详见 [部署 Office 加载项](/zh-CN/howto/deploy-office-addin.md) 的踩坑清单。

## 下一步

- [部署 Office 加载项](/zh-CN/howto/deploy-office-addin.md) 看生产部署与六条实测踩坑清单。
- 先跑通网关：[Docker 单机](/zh-CN/quickstart/docker-single-node.md)。
- 网关侧按真实用户鉴权 / 计费，配合 [配置 SSO 企业登录](/zh-CN/howto/configure-sso.md)。
