跳到正文

Office / Microsoft 365 加载项

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

包怎么获取

部署包由 GateLLM 向签约客户提供,不公开下载。尚未获取时,先经官网产品页接洽。

目标

让企业用户在 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(打开附件 / 晨间简报 / 会前准备)
Metaskillify(从一段对话生成新技能)

接入模型的四条路

加载项支持四条接入路径,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

直连 Bedrock 暂不支持 Outlook

Amazon Bedrock 直连模式不支持 Outlook 宿主(build-manifest.mjsoutlookaws_* 会直接报错)。Outlook 走 gateway 模式不受限。

Outlook 通过 Microsoft Graph 读取邮箱与日历,无论模型走哪条路,都需要一次性的租户级管理员同意;详见 部署 Office 加载项

身份与治理

  • Entra SSOentra_sso=1 让加载项启动时获取 Entra ID token。可自带 Entra app(graph_client_id / entra_scope),否则默认用多租户 app。
  • Entra token 直接当网关 Bearergateway_auth_source=entra 时,加载项把 Entra access token 直接作为 Authorization: Bearer 发到网关,由网关侧按真实用户鉴权 / 计费 —— 无需单独的 gateway_token 或 bootstrap 中转。(「无需」指加载项侧不内置凭据;网关侧仍需按 配置 SSO 企业登录 预建同名访问密钥——网关不凭空造身份,name_expr 把 Entra 身份映射到同名密钥后才放行。)
  • access_policies(IAM 式 allow/deny):按条件门控加载项能力。已落地两条标签条件控制:
    • addin.access —— 某敏感度标签的文档上加载项直接不许运行;
    • file.upload —— 带某标签的文件不许作附件上传。 两者按 Microsoft Purview 敏感度标签 GUIDmip_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_policiesaddin.access 规则按 Purview 标签 GUIDmip_label_guid)做 deny。标签 GUID 跨改名 / 多语言稳定。最小示例——打开带某标签的文档时加载项直接不运行:

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

要禁止带该标签的文件作附件上传,写第二条语句,且 actionresource.type 要一起换actionfile.uploadresource.typeuploaded_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 加载项 的踩坑清单。

下一步