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(打开附件 / 晨间简报 / 会前准备) |
| 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。 |
直连 Bedrock 暂不支持 Outlook
Amazon Bedrock 直连模式不支持 Outlook 宿主(build-manifest.mjs 对 outlook 传 aws_* 会直接报错)。Outlook 走 gateway 模式不受限。
Outlook 通过 Microsoft Graph 读取邮箱与日历,无论模型走哪条路,都需要一次性的租户级管理员同意;详见 部署 Office 加载项。
身份与治理
- 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 企业登录 预建同名访问密钥——网关不凭空造身份,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,但不是「零外部依赖」。剩下的都是预期内的:
- 你自己的网关 —— 这就是目的本身。
- Microsoft Entra / Graph —— Office 加载项的鉴权与邮箱 / 日历,不可去除。
- 你自己 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 跨改名 / 多语言稳定。最小示例——打开带某标签的文档时加载项直接不运行:
[
{
"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 不生效。两类规则互相独立,要「一切形式都禁」得两条都写:
[
{
"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 加载项 的踩坑清单。
下一步
- 部署 Office 加载项 看生产部署与六条实测踩坑清单。
- 先跑通网关:Docker 单机。
- 网关侧按真实用户鉴权 / 计费,配合 配置 SSO 企业登录。
