其他
提问帖
置顶
精华
海光 DCU 接入 HERMES 一条龙
2026-06-25 16:31:09
317
# 海光 DCU 接入 HERMES 一条龙 > **目标读者**:已经准备使用海光 DCU 部署本地大模型,并希望把本地模型接入 HERMES / Hermes Agent,同时进一步把 HERMES 扩展成企业级自动办公系统的开发者、运维同学、测试同学和方案设计人员。 > **本文定位**:从整体链路讲清楚“海光 DCU 本地模型服务如何接入 HERMES”,并继续讲清楚 HERMES 如何通过 MCP / Skill 调用桌面、Office、WPS、文件系统和企业内部工具,最终形成一个可扩展的企业级 AI 操作系统雏形。 > **核心思路**:海光 DCU 负责跑模型,vLLM / SGLang 负责把模型发布成 OpenAI Compatible API,HERMES 通过 Custom Endpoint 调用这个 API;MCP 负责把外部系统能力变成标准工具;Skill 负责把具体工作流固化成可复用方法。 --- ## 0. 一张图看完整链路 HERMES 并不需要直接识别 DCU。只要 DCU 上的模型服务对外提供 OpenAI 兼容接口,HERMES 就可以像调用云端模型一样调用本地 DCU 模型。 进一步扩展以后,HERMES 也不需要直接内置 PPT、Word、Excel、WPS 或桌面自动化组件,而是通过 MCP 把这些能力接进来。 ```mermaid flowchart TD A0["用户 / 开发者 / 运维人员"] --> A1["HERMES / Hermes Agent
CLI / Desktop / Gateway"] subgraph HERMES["HERMES Agent 层"] A1 --> A2["模型配置
provider: custom / self-hosted"] A1 --> A3["Agent 能力
Tools / Memory / Skills / Cron"] A1 --> A4["MCP Client
发现外部工具并注册"] A2 --> A5["OpenAI Compatible Client"] end A5 --> B0["HTTP API
http://DCU服务器:8001/v1"] subgraph SERVE["模型服务层"] B0 --> B1["vLLM / SGLang Server"] B1 --> B2["/v1/chat/completions"] B1 --> B3["/v1/models"] B1 --> B4["tool calls / streaming / long context"] end subgraph DCU["海光 DCU 运行环境"] B1 --> C1["DCU 适配镜像
vLLM / SGLang / DAS"] C1 --> C2["DTK / HIP Runtime
数学库 / 通信库 / 编译器"] C2 --> C3["DCU 驱动与设备节点
/dev/kfd /dev/dri /dev/mkfd"] C3 --> C4["海光 DCU 显卡
K100 / K100_AI / BW 系列等"] end subgraph MCP["MCP / Skill 执行扩展层"] A4 --> M1["Filesystem MCP
读写文件"] A4 --> M2["Office MCP
Word / Excel / PPT"] A4 --> M3["WPS MCP
WPS文字 / 表格 / 演示"] A4 --> M4["Desktop MCP
Windows UI 自动化"] A4 --> M5["Database / Browser / Internal API MCP"] A3 --> S1["Skill
把流程固化成方法"] end subgraph DATA["资源来源"] D1["光合开发者社区
驱动 / DTK / DAS"] D2["光源
镜像 / 模型仓库"] D3["ModelZoo README
模型对应镜像和启动参数"] end D1 --> C2 D2 --> C1 D3 --> B1 ``` 这一张图可以把整篇文章总结成三句话: 1. **DCU 不直接接 HERMES,DCU 先通过 vLLM / SGLang 变成 OpenAI Compatible API。** 2. **HERMES 不直接接 Office / WPS / 桌面,HERMES 通过 MCP 把这些能力变成工具。** 3. **企业级 AI 操作系统不是单一模型,而是“模型服务 + Agent 调度 + MCP 执行层 + 权限审计”的组合。** --- ## 1. 先讲清楚几个概念 ### 1.1 DCU 驱动、DTK、DAS、镜像、模型仓库分别做什么? 可以把海光 DCU 大模型运行环境理解成五层: | 层级 | 作用 | 本文处理方式 | |---|---|---| | DCU 驱动 | 让操作系统识别并调度 DCU 设备 | 驱动是底座,设备节点不正常时不要继续排查上层 | | DTK | 海光 DCU 的开发和运行基础套件,包含运行时、数学库、通信库、编译器、调试优化工具等 | 需要与镜像、PyTorch、vLLM、模型版本匹配 | | DAS / 深度学习栈 | 面向 AI 框架和推理训练场景的适配软件栈 | 按模型仓库 README 选择,不要随意混搭 | | 镜像 | 已经集成好 DTK / PyTorch / vLLM / SGLang 等组件的容器环境 | 优先使用官方或 ModelZoo 推荐镜像 | | 模型仓库 | 存放模型说明、权重入口、推荐镜像、启动命令 | 本文以 Qwen3.6 为例,其他模型同理 | 官方入口: - 光合资源工具页: - DTK 页面: - 光源镜像 / 模型仓库入口: - 光合论坛首页: - Qwen3.6 ModelZoo 示例入口: ### 1.2 HERMES 是什么? 在本文语境里,HERMES 指 **NousResearch Hermes Agent**。 它的角色不是“显卡驱动”,也不是“vLLM 服务”,而是: ```text HERMES = Agent 调度层 + 模型客户端 + 工具路由器 + Skill/Memory/Cron 工作流系统 ``` 它调用模型时,只关心模型服务是否能提供标准接口: ```text /v1/chat/completions /v1/models ``` 也就是说,HERMES 不需要知道底层是海光 DCU、NVIDIA CUDA、AMD ROCm,还是 CPU;它只需要能访问 OpenAI Compatible API。 ### 1.3 MCP 是什么? MCP,全称 **Model Context Protocol**,可以理解成: ```text MCP = 把外部系统能力标准化成 AI 可调用工具的协议层 ``` 它解决的问题是:模型不能直接操作电脑、数据库、浏览器、WPS、Office、内部系统,但是 MCP Server 可以把这些能力暴露成标准工具,然后 HERMES 发现这些工具并调用。 ```mermaid flowchart LR A["用户自然语言任务"] --> B["HERMES"] B --> C["本地模型判断是否需要工具"] C --> D["tool_call"] D --> E["MCP Server"] E --> F["真实系统
文件 / 桌面 / Office / WPS / 数据库"] F --> G["执行结果"] G --> B ``` ### 1.4 Skill 是什么? Skill 不是直接执行工具的接口,而是“把经验固化成可复用流程”。 例如: - “生成周报”是一套流程; - “分析 Excel 并生成 PPT”是一套流程; - “读取项目目录并总结架构”是一套流程; - “用 WPS 打开文档、提取正文、调用本地模型改写、再写回文档”也是一套流程。 MCP 更像“工具箱”,Skill 更像“操作手册”。 ```mermaid flowchart TD A["Skill:说明怎么做"] --> B["拆任务"] B --> C["调用 MCP 工具"] C --> D["执行文件 / 桌面 / Office / WPS 操作"] D --> E["把结果交回模型总结"] ``` ### 1.5 WPS 能不能接入本地模型? 能,但要分清楚两种情况。 第一种是 **WPS 产品本身是否提供可配置本地模型 Base URL 的 AI 入口**。这个取决于 WPS 具体版本、企业授权和开放平台能力,不能假设每个个人版 WPS 都有一个直接填写 `http://本地模型/v1` 的入口。 第二种是 **通过插件、宏、COM、UI 自动化或 MCP 桥接,让 WPS 文档内容走本地模型处理**。这种方式是可落地的,本文重点讲这一种: ```mermaid flowchart LR A["WPS 文档"] --> B["WPS 插件 / JS API / COM / UIA"] B --> C["WPS MCP Server"] C --> D["HERMES"] D --> E["本地 vLLM / SGLang 模型"] E --> F["生成 / 改写 / 总结结果"] F --> C C --> G["写回 WPS 文档"] ``` --- ## 2. 基础环境安装与检查 ### 2.1 驱动安装后的最小检查 驱动是最底层。驱动安装完成后,宿主机需要能够看到 DCU 相关设备节点: ```bash ls -l /dev/kfd ls -l /dev/dri ls -l /dev/mkfd ``` 如果设备节点不存在,后面的容器、vLLM、HERMES、MCP 都不用继续排查,应先回到驱动层处理。 常见搜索关键词: ```text 海光 DCU 驱动安装 DCU 驱动 K100 驱动 DTK 驱动 ``` ### 2.2 DTK 安装后的最小检查 DTK 是 DCU 应用开发、运行和优化的基础工具套件。安装后应检查运行时和工具链是否可用: ```bash which hy-smi || true which hipcc || true hy-smi ``` 如果 `hy-smi` 能看到卡、温度、显存、功耗等信息,说明驱动和设备识别已经进入可用状态。 ### 2.3 DAS、PyTorch、vLLM、SGLang 的选择原则 本文不推荐从零编译深度学习环境。更稳定的路径是: ```mermaid flowchart LR A["确定目标模型"] --> B["查看 ModelZoo README"] B --> C["使用 README 推荐镜像"] C --> D["按 README 启动 vLLM / SGLang"] D --> E["暴露 OpenAI Compatible API"] E --> F["HERMES 接入 API"] ``` 模型仓库 README 写了用哪个镜像、哪个启动命令,就优先用它。 如果为了优化性能需要自己编译 vLLM / kernel,也应先完成官方推荐路径的基线验证,再进入自编译优化阶段。 --- ## 3. 部署拓扑 ### 3.1 HERMES 和 vLLM 在同一台 DCU 服务器上 适合本地测试、单机开发: ```mermaid flowchart LR U["用户"] --> H["DCU 服务器上的 HERMES"] H -->|"http://127.0.0.1:8001/v1"| V["本机 vLLM"] V --> M["本地模型权重"] V --> D["海光 DCU"] ``` HERMES 配置中的 Base URL: ```text http://127.0.0.1:8001/v1 ``` ### 3.2 HERMES 在办公机,vLLM 在 DCU 服务器上 适合内网多人使用: ```mermaid flowchart LR U["用户电脑 / 运维机 / Windows Desktop"] --> H["HERMES Agent"] H -->|"OpenAI Compatible API"| V["DCU 服务器上的 vLLM
http://DCU服务器IP:8001/v1"] V --> M["本地模型权重"] V --> D["海光 DCU"] ``` HERMES 配置中的 Base URL: ```text http://:8001/v1 ``` ### 3.3 Windows Hermes Desktop + 远程 DCU 模型 适合办公场景。用户在 Windows 上使用 Hermes Desktop,模型跑在内网 DCU 服务器上。 ```mermaid flowchart TD A["Windows 用户"] --> B["Hermes Desktop"] B --> C["Custom Provider
Base URL = http://DCU服务器IP:8001/v1"] C --> D["DCU 服务器 vLLM / SGLang"] D --> E["海光 DCU 推理"] B --> F["本机 MCP
Desktop / Office / WPS"] F --> G["Windows 桌面与办公软件"] ``` 这个拓扑的关键点是: - 模型推理发生在 DCU 服务器; - 桌面、Office、WPS 操作发生在 Windows 用户机; - HERMES 负责把“模型推理”和“本地工具执行”串起来。 ### 3.4 企业级拓扑 企业级环境不应让每个客户端直接管理所有能力,而是引入网关、权限和审计。 ```mermaid flowchart TD Users["多用户终端
Hermes Desktop / CLI / Web"] --> APIGW["API Gateway / 内网入口"] APIGW --> HermesCluster["Hermes Agent 集群"] HermesCluster --> Router["模型路由 / Policy Engine"] Router --> VLLM1["vLLM 实例 A
办公模型"] Router --> VLLM2["vLLM 实例 B
代码模型"] Router --> VLLM3["vLLM 实例 C
语音/ASR模型"] VLLM1 --> DCU["DCU / GPU 集群"] VLLM2 --> DCU VLLM3 --> DCU HermesCluster --> MCPGW["MCP Gateway"] MCPGW --> OfficeMCP["Office / WPS MCP"] MCPGW --> DesktopMCP["Desktop RPA MCP"] MCPGW --> DataMCP["Database / File / API MCP"] MCPGW --> Audit["审计日志"] APIGW --> Auth["认证 / RBAC / 租户隔离"] ``` --- ## 4. 在海光 DCU 上启动模型服务 以下以 **Qwen3.6-27B + vLLM** 为例。其他模型应以对应 ModelZoo README 为准,不要直接照搬参数。 ### 4.1 进入官方推荐镜像 Qwen3.6 README 中给出的 vLLM 镜像示例: ```text harbor.sourcefind.cn:5443/dcu/admin/base/custom:vllm018-ubuntu22.04-dtk26.04-qwen3.6-20260423 ``` 容器启动示例: ```bash docker run -it \ --shm-size 256g \ --network=host \ --name qwen3.6-hermes-demo \ --privileged \ --device=/dev/kfd \ --device=/dev/dri \ --device=/dev/mkfd \ --group-add video \ --cap-add=SYS_PTRACE \ --security-opt seccomp=unconfined \ -u root \ -v /opt/hyhal/:/opt/hyhal/:ro \ -v /data/models/:/data/models/ \ harbor.sourcefind.cn:5443/dcu/admin/base/custom:vllm018-ubuntu22.04-dtk26.04-qwen3.6-20260423 \ bash ``` 关键参数说明: | 参数 | 含义 | |---|---| | `--device=/dev/kfd` | DCU / HIP 运行时需要的设备入口 | | `--device=/dev/dri` | 图形 / 计算设备节点 | | `--device=/dev/mkfd` | 海光 DCU 场景中常见的设备节点 | | `-v /opt/hyhal/:/opt/hyhal/:ro` | 挂载宿主机侧 DCU 相关运行组件 | | `--network=host` | 让容器中的 vLLM 端口直接暴露到宿主机 | | `-v /data/models/:/data/models/` | 挂载模型权重目录 | | `--shm-size 256g` | 给大模型推理提供足够共享内存,具体数值按服务器配置调整 | ### 4.2 启动 vLLM OpenAI 兼容接口 如果直接使用在线模型名: ```bash vllm serve Qwen/Qwen3.6-27B \ --port 8001 \ --trust-remote-code \ --dtype bfloat16 \ --gpu-memory-utilization 0.9 \ --max-model-len 65536 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --reasoning-parser qwen3 ``` 如果已经把模型下载到了本地: ```bash vllm serve /data/models/Qwen3.6-27B \ --served-model-name qwen3.6-dcu \ --port 8001 \ --trust-remote-code \ --dtype bfloat16 \ --gpu-memory-utilization 0.9 \ --max-model-len 65536 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --reasoning-parser qwen3 ``` 参数说明: | 参数 | 说明 | |---|---| | `--served-model-name qwen3.6-dcu` | 对外暴露给 HERMES 的模型名 | | `--port 8001` | vLLM 服务端口 | | `--trust-remote-code` | 允许加载模型仓库中的自定义代码,部分模型需要 | | `--dtype bfloat16` | 使用 bfloat16 推理,具体以模型和镜像支持为准 | | `--gpu-memory-utilization 0.9` | 控制显存利用率,显存不足时可适当降低 | | `--max-model-len 65536` | 给 Agent 场景预留较长上下文窗口 | | `--enable-auto-tool-choice` | 允许 OpenAI 工具调用风格 | | `--tool-call-parser qwen3_coder` | 让 vLLM 正确解析 Qwen3.6 的工具调用格式 | | `--reasoning-parser qwen3` | 适配 Qwen3 系列 reasoning 输出 | 不同模型的 parser、上下文长度、dtype、张量并行参数可能不同,最终以模型 README 和镜像说明为准。 ### 4.3 验证 vLLM 服务 先看模型列表: ```bash curl http://127.0.0.1:8001/v1/models ``` 如果 HERMES 不在 DCU 服务器本机,而是在另一台机器上,则从 HERMES 所在机器测试: ```bash curl http://:8001/v1/models ``` 再发一条普通对话请求: ```bash curl http://127.0.0.1:8001/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen3.6-dcu", "messages": [ {"role": "user", "content": "你好,请用一句话介绍你自己。"} ], "temperature": 0.7, "max_tokens": 256 }' ``` 如果能返回正常文本,说明下面这条链路已经打通: ```mermaid flowchart LR A["DCU 驱动"] --> B["DTK / DAS"] B --> C["vLLM 容器"] C --> D["模型权重"] D --> E["OpenAI Compatible API"] ``` ### 4.4 让 vLLM 面向内网访问 如果 HERMES 在另一台机器上,vLLM 需要被内网访问。常见检查命令: ```bash ss -lntp | grep 8001 || true curl http://127.0.0.1:8001/v1/models hostname -I ``` 从 Windows 机器测试: ```powershell curl.exe http://:8001/v1/models ``` 如果服务器本机能访问、Windows 不能访问,重点检查: ```bash sudo ufw status sudo iptables -S | grep 8001 || true ``` --- ## 5. 安装 HERMES / Hermes Agent 本文中的 HERMES 指 **NousResearch Hermes Agent**,命令行为: ```bash hermes ``` Hermes Agent 官方安装文档: ```text https://hermes-agent.nousresearch.com/docs/getting-started/installation ``` Linux / macOS / WSL2 安装命令: ```bash curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash ``` Windows PowerShell 安装命令: ```powershell iex (irm https://hermes-agent.nousresearch.com/install.ps1) ``` 安装完成后,Linux / macOS / WSL2 通常需要重新加载 shell: ```bash source ~/.bashrc # 或 source ~/.zshrc ``` 验证安装: ```bash hermes --version hermes doctor ``` --- ## 6. 让 HERMES 接入本地 DCU 模型 HERMES 接入本地模型的核心不是“识别 DCU”,而是配置一个 OpenAI 兼容的模型端点。 模型端点格式通常是: ```text http://:8001/v1 ``` Hermes Agent 自定义模型端点文档: ```text https://hermes-agent.nousresearch.com/docs/integrations/providers ``` ### 6.1 方式一:交互式配置 在安装 HERMES 的机器上执行: ```bash hermes model ``` 选择自托管或自定义端点类型,填写: ```text Base URL: http://:8001/v1 Model: qwen3.6-dcu API Key: 本地测试可留空;生产环境使用网关或 token Context length: 65536 ``` 如果 HERMES 和 vLLM 在同一台机器: ```text http://127.0.0.1:8001/v1 ``` 如果 HERMES 在办公机,vLLM 在 DCU 服务器: ```text http://:8001/v1 ``` 模型名必须与 `/v1/models` 返回的模型名一致。可以用下面命令确认: ```bash curl http://:8001/v1/models ``` ### 6.2 方式二:手动修改配置文件 打开 HERMES 配置文件: ```bash vim ~/.hermes/config.yaml ``` 单机示例: ```yaml model: provider: custom default: qwen3.6-dcu base_url: http://127.0.0.1:8001/v1 api_key: "" context_length: 65536 ``` 远程 DCU 服务器示例: ```yaml model: provider: custom default: qwen3.6-dcu base_url: http://192.168.10.88:8001/v1 api_key: "" context_length: 65536 ``` 其中: | 配置项 | 含义 | |---|---| | `provider: custom` | 使用自定义模型服务商 | | `default: qwen3.6-dcu` | 默认调用的模型名 | | `base_url` | vLLM / SGLang 暴露的 OpenAI 兼容接口地址 | | `api_key` | 本地测试可为空,生产环境应设置 | | `context_length` | 上下文长度,建议与 vLLM 的 `--max-model-len` 对齐 | ### 6.3 Windows Desktop Hermes 接入远程 DCU 模型 Windows Desktop 版本的 Hermes 可以理解成: ```text Hermes Desktop = UI + Agent Runtime + OpenAI API Client + 本机工具执行入口 ``` 工作原理: ```mermaid flowchart LR A["Windows Hermes Desktop"] --> B["Custom Provider"] B --> C["http://DCU服务器IP:8001/v1"] C --> D["vLLM / SGLang"] D --> E["海光 DCU"] A --> F["本机 MCP 工具"] F --> G["Windows / Office / WPS / 文件系统"] ``` Windows 上先验证 DCU 服务: ```powershell curl.exe http://:8001/v1/models ``` 再在 Hermes Desktop 的模型配置里填: ```text Provider: Custom / Self-hosted / OpenAI Compatible Base URL: http://:8001/v1 Model: qwen3.6-dcu API Key: 本地测试可为空;生产环境使用网关 token ``` 完成后测试一句: ```text 只回复 HERMES_DCU_OK,不要解释。 ``` 如果返回: ```text HERMES_DCU_OK ``` 说明 Windows Hermes Desktop 已经通过远程 DCU 模型服务回答。 --- ## 7. HERMES 实际请求链路 成功接入后,HERMES 的每一次对话请求大致会经过下面的链路: ```mermaid sequenceDiagram participant User as 用户 participant Hermes as HERMES Agent participant API as vLLM OpenAI API participant Model as Qwen3.6 on DCU participant DCU as 海光 DCU User->>Hermes: 输入任务 Hermes->>Hermes: 组织系统提示词 / 工具 / 记忆 Hermes->>API: POST /v1/chat/completions API->>Model: 推理请求 Model->>DCU: 使用 DCU 加速计算 DCU-->>Model: 返回计算结果 Model-->>API: tokens / tool calls / reasoning API-->>Hermes: OpenAI 兼容响应 Hermes-->>User: 最终回答 ``` HERMES 关注的是: ```text 这个模型接口能不能按 OpenAI 格式响应? ``` DCU、DTK、DAS、vLLM 的细节,则在模型服务端解决。 --- ## 8. MCP 接入 HERMES:从原理到可执行配置 ### 8.1 MCP 的执行模型 MCP 的本质是: ```text MCP Server = 一个独立进程 / HTTP 服务 + 工具清单 + 工具执行逻辑 ``` HERMES 启动时连接 MCP Server,读取它暴露的工具 schema,然后把这些工具交给模型选择。 ```mermaid sequenceDiagram participant Hermes as HERMES participant MCP as MCP Server participant LLM as 本地模型 participant OS as 外部系统 Hermes->>MCP: 启动/连接 MCP Server MCP-->>Hermes: 返回 tools/list Hermes->>LLM: prompt + tools schema LLM-->>Hermes: tool_call Hermes->>MCP: tool_call arguments MCP->>OS: 执行文件/桌面/Office/WPS操作 OS-->>MCP: 执行结果 MCP-->>Hermes: result Hermes->>LLM: tool result LLM-->>Hermes: 最终回答 ``` ### 8.2 MCP 的两种服务形态 | 类型 | 运行方式 | 场景 | |---|---|---| | stdio MCP | HERMES 启动一个本地进程,通过 stdin/stdout 通信 | 文件系统、桌面自动化、本机 Office/WPS | | HTTP MCP | HERMES 连接一个远程 HTTP MCP 服务 | 企业内部 API、数据库、集中式 Office/WPS 执行集群 | ### 8.3 配置一个最小 filesystem MCP 先用文件系统 MCP 验证 HERMES 的 MCP 能力。 Linux / WSL2 示例: ```yaml mcp_servers: project_fs: command: "npx" args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/my-project"] ``` Windows 示例: ```yaml mcp_servers: project_fs: command: "npx" args: ["-y", "@modelcontextprotocol/server-filesystem", "D:\\projects"] ``` 保存后启动: ```bash hermes chat ``` 在 HERMES 里输入: ```text 读取项目目录并总结文件结构。 ``` 如果 HERMES 能列出目录、读取文件并总结,说明 MCP 基础链路已经通了。 ### 8.4 生产环境要限制 MCP 工具范围 文件系统、桌面、Office、WPS 都属于能改变真实世界状态的工具。企业环境应只开放必要工具。 配置形态: ```yaml mcp_servers: project_fs: command: "npx" args: ["-y", "@modelcontextprotocol/server-filesystem", "/data/hermes-workspace"] tools: include: - read_file - list_directory - write_file ``` 原则: ```text 能只读就不要写 能限制目录就不要放全盘 能限制工具就不要暴露全部工具 ``` --- ## 9. Skill:把 MCP 工具组合成稳定工作流 MCP 负责“能做什么”,Skill 负责“怎么稳定地做”。 ### 9.1 Skill 和 MCP 的关系 ```mermaid flowchart TD A["用户:生成周报并做PPT"] --> B["Skill:周报生成流程"] B --> C["读取数据文件"] C --> D["调用 Excel MCP 分析"] D --> E["调用 Word MCP 写报告"] E --> F["调用 PPT MCP 做汇报"] F --> G["返回报告路径和PPT路径"] ``` ### 9.2 一个办公自动化 Skill 的内容结构 文件名可以命名为: ```text office-report/SKILL.md ``` 内容: ```markdown # Office Report Skill ## 触发条件 当用户要求生成周报、月报、汇报材料、PPT、Excel 分析或 Word 报告时使用。 ## 工作原则 1. 先判断输入数据来源。 2. 如果是 Excel/CSV,先读取并检查字段。 3. 先生成报告大纲,再生成文档。 4. Office/WPS 文件必须保存到用户指定目录或工作区目录。 5. 修改现有文件前先生成副本。 6. 最终回答必须包含输出文件路径和处理摘要。 ## 可用工具 - filesystem MCP - office MCP - wps MCP - desktop MCP ## 标准流程 1. 读取用户提供的数据文件。 2. 分析数据结构。 3. 生成报告大纲。 4. 生成 Word 报告。 5. 生成 Excel 汇总表。 6. 生成 PPT 汇报。 7. 返回文件路径。 ``` Skill 的价值是让 HERMES 不只是“临时会做”,而是每次遇到同类任务都按固定流程执行。 --- ## 10. Desktop MCP:Windows 桌面自动化 ### 10.1 Desktop 自动化的本质 桌面自动化不是模型直接移动鼠标,而是 HERMES 通过 MCP 调用一个桌面自动化服务,由这个服务操作 Windows UI。 ```mermaid flowchart TD A["用户任务"] --> B["HERMES"] B --> C["模型判断需要桌面工具"] C --> D["Desktop MCP"] D --> E["UI Automation / Win32 / pywinauto"] E --> F["真实 Windows 应用"] F --> G["执行结果"] ``` 技术路径有三类: | 路径 | 说明 | 适合场景 | |---|---|---| | UI Automation / UIA | 读取控件树,按控件名、类型、AutomationId 定位 | 稳定桌面软件 | | Win32 API | 按窗口句柄、进程、控件类名操作 | 老式 Win32 软件 | | 键盘鼠标模拟 | 模拟输入和点击 | 没有良好 UIA 支持的软件 | ### 10.2 Windows 上准备 Desktop 自动化环境 在 Windows PowerShell 执行: ```powershell py -m pip install -U pip py -m pip install pywinauto pywin32 mcp ``` ### 10.3 最小桌面操作验证 创建文件: ```powershell mkdir C:\hermes-mcp -Force notepad C:\hermes-mcp\desktop_test.py ``` 写入: ```python from pywinauto import Application import time app = Application(backend="uia").start("notepad.exe") time.sleep(1) win = app.window(title_re=".*Notepad.*|.*记事本.*") win.type_keys("Hello Hermes Desktop MCP", with_spaces=True) time.sleep(1) print("DESKTOP_AUTOMATION_OK") ``` 运行: ```powershell py C:\hermes-mcp\desktop_test.py ``` 看到记事本打开并输入文字,说明本机桌面自动化基础可用。 ### 10.4 Desktop MCP 的工具设计 一个 Desktop MCP 不应把“任意鼠标点击”直接暴露给模型。更好的做法是暴露高层动作: | 工具名 | 参数 | 动作 | |---|---|---| | `open_app` | `app_name` | 打开指定软件 | | `type_text` | `text` | 向当前焦点输入文本 | | `press_hotkey` | `keys` | 执行快捷键 | | `find_window` | `title` | 查找窗口 | | `click_control` | `window_title`, `control_name` | 点击指定控件 | 这样模型调用的是结构化动作,而不是不稳定的坐标。 ```mermaid flowchart LR A["不推荐:click x=533 y=281"] --> B["易受分辨率影响"] C["推荐:click_control window='WPS' control='保存'"] --> D["语义稳定"] ``` --- ## 11. Office MCP:Word / Excel / PPT 自动化 Office 自动化分两层: | 层级 | 方式 | 特点 | |---|---|---| | 文件级自动化 | `python-docx` / `openpyxl` / `python-pptx` | 不依赖 Office UI,稳定,适合生成新文件 | | 桌面级自动化 | COM / UIA / Office.js | 可以操作已打开的 Office/WPS 窗口,适合编辑现有文件 | ### 11.1 安装 Office 文件级依赖 Windows: ```powershell py -m pip install python-docx openpyxl python-pptx pandas matplotlib mcp ``` Linux / WSL2: ```bash python3 -m pip install python-docx openpyxl python-pptx pandas matplotlib mcp ``` ### 11.2 Word 自动生成报告 ```python from docx import Document from docx.shared import Pt def create_report(path: str, title: str, sections: list[dict]): doc = Document() doc.add_heading(title, level=0) for sec in sections: doc.add_heading(sec["heading"], level=1) doc.add_paragraph(sec["body"]) doc.save(path) create_report( "report.docx", "AI 自动生成项目报告", [ {"heading": "一、项目概述", "body": "本报告由 Hermes 调用本地模型与 Office MCP 自动生成。"}, {"heading": "二、系统架构", "body": "系统由 DCU 模型服务、Hermes Agent、MCP 执行层组成。"} ] ) ``` ### 11.3 Excel 数据分析与汇总 ```python from openpyxl import Workbook from openpyxl.chart import BarChart, Reference wb = Workbook() ws = wb.active ws.title = "summary" rows = [ ["部门", "收入"], ["一部", 120], ["二部", 180], ["三部", 150], ] for row in rows: ws.append(row) chart = BarChart() data = Reference(ws, min_col=2, min_row=1, max_row=4) cats = Reference(ws, min_col=1, min_row=2, max_row=4) chart.add_data(data, titles_from_data=True) chart.set_categories(cats) ws.add_chart(chart, "D2") wb.save("summary.xlsx") ``` ### 11.4 PPT 自动生成 ```python from pptx import Presentation prs = Presentation() slide = prs.slides.add_slide(prs.slide_layouts[0]) slide.shapes.title.text = "Hermes + DCU 企业级 AI 办公系统" slide.placeholders[1].text = "本地模型 + MCP + Office/WPS 自动化" slide = prs.slides.add_slide(prs.slide_layouts[1]) slide.shapes.title.text = "系统组成" slide.placeholders[1].text = "1. 海光 DCU 模型服务\n2. Hermes Agent\n3. MCP 工具层\n4. Office / WPS / Desktop 自动化" prs.save("hermes_ai_office.pptx") ``` ### 11.5 Office MCP 最小实现思路 创建: ```powershell mkdir C:\hermes-mcp -Force notepad C:\hermes-mcp\office_mcp.py ``` 写入: ```python from mcp.server.fastmcp import FastMCP from docx import Document from openpyxl import Workbook from pptx import Presentation mcp = FastMCP("office-local") @mcp.tool() def create_docx(path: str, title: str, body: str) -> str: doc = Document() doc.add_heading(title, level=0) doc.add_paragraph(body) doc.save(path) return f"created docx: {path}" @mcp.tool() def create_xlsx(path: str, rows: list[list[str]]) -> str: wb = Workbook() ws = wb.active for row in rows: ws.append(row) wb.save(path) return f"created xlsx: {path}" @mcp.tool() def create_pptx(path: str, title: str, bullets: list[str]) -> str: prs = Presentation() slide = prs.slides.add_slide(prs.slide_layouts[1]) slide.shapes.title.text = title slide.placeholders[1].text = "\n".join(bullets) prs.save(path) return f"created pptx: {path}" if __name__ == "__main__": mcp.run() ``` HERMES 配置: ```yaml mcp_servers: office_local: command: "py" args: ["C:\\hermes-mcp\\office_mcp.py"] tools: include: - create_docx - create_xlsx - create_pptx ``` HERMES 里测试: ```text 调用 office_local 工具,在 C:\hermes-out\ 生成一个标题为“本地AI办公系统”的 PPT,包含三条要点:DCU推理、Hermes调度、MCP执行。 ``` 执行逻辑: ```mermaid sequenceDiagram participant U as 用户 participant H as Hermes participant L as 本地模型 participant M as Office MCP participant F as 文件系统 U->>H: 生成PPT H->>L: prompt + create_pptx工具 L-->>H: tool_call create_pptx H->>M: create_pptx(path,title,bullets) M->>F: 写入pptx F-->>M: 文件生成成功 M-->>H: created pptx H->>L: 工具结果 L-->>H: 汇报文件路径 ``` --- ## 12. PPT Master:开源 AI PPT 生成工具接入 HERMES ### 12.1 PPT Master 是什么 PPT Master 是一个开源 AI PPT 生成工作流,它不是传统 SaaS,也不是简单的 `python-pptx` 模板填充脚本。它的核心目标是:把 PDF、DOCX、URL、Markdown、Excel、已有 PPTX 等材料转成**真正可编辑的 PowerPoint 文件**,输出结果是原生 PPTX 里的 DrawingML 形状、文本框、图表和动画,而不是把每页做成一张图片塞进 PPT 里。 这点非常关键。很多“AI 生成 PPT”工具的输出看起来像 PPT,但每页本质是一张图,后期无法逐个编辑元素。PPT Master 的路线是先让 AI 生成 SVG 页面,再通过脚本把 SVG 转成 PowerPoint 原生对象,所以用户可以在 PowerPoint、WPS 演示、Keynote、LibreOffice 里继续编辑文字、形状、颜色和排版。 ```mermaid flowchart LR A["普通 AI PPT
图片式输出"] --> B["每页是一张图"] B --> C["后期难编辑"] D["PPT Master"] --> E["AI 生成 SVG"] E --> F["SVG 转 DrawingML"] F --> G["原生可编辑 PPTX"] ``` PPT Master 更准确的定位是: ```text PPT Master = PPT 生成 Skill / Workflow / Harness ``` 也就是说,它本身负责流程、目录结构、脚本、质量检查、SVG 到 PPTX 的转换;最终效果上限主要取决于你接入的模型能力、上下文长度、视觉设计能力和你对工作流的使用熟练度。 ### 12.2 它和 python-pptx、普通 Office MCP 的区别 在本文前面的 Office MCP 里,我们已经讲过用 `python-docx`、`openpyxl`、`python-pptx` 生成 Word / Excel / PPT。那为什么还需要 PPT Master? 区别在这里: | 方案 | 适合场景 | 优点 | 局限 | |---|---|---|---| | `python-pptx` | 程序化生成固定结构 PPT | 稳定、简单、可控 | 设计感弱,复杂页面需要大量手写布局 | | Office/WPS COM | 操作已有 Office/WPS 软件 | 能控制真实软件 | 对桌面环境依赖强,容易受 UI/版本影响 | | 普通 AI PPT SaaS | 快速出图文 PPT | 上手简单 | 数据可能出内网,格式和可编辑性不一定可控 | | PPT Master | 从资料生成可编辑高质量 PPT | 工作流完整,原生 PPTX,可用模板,支持多格式资料 | 需要 Agent 执行流程,对模型能力要求较高 | 所以在 HERMES 企业级 AI 操作系统里,三者不是互相替代,而是分工: ```mermaid flowchart TD A["企业 PPT 任务"] --> B{"任务类型"} B -->|"固定报表 / 批量模板"| C["python-pptx Office MCP"] B -->|"操作已有 WPS / Office 文件"| D["WPS/Office COM MCP"] B -->|"从资料生成高质量演示稿"| E["PPT Master 工作流"] B -->|"复用已有品牌模板"| F["PPT Master Template Fill / Create Template"] ``` ### 12.3 PPT Master 的核心原理 PPT Master 的主流水线可以拆成九步: ```mermaid flowchart TD A["源材料
PDF / DOCX / XLSX / PPTX / URL / Markdown"] --> B["source_to_md
转成 Markdown"] B --> C["project_manager
创建项目目录"] C --> D["可选:模板 / 品牌 / 版式"] D --> E["Strategist
确认页面数量、风格、结构"] E --> F["Image_Generator
AI图 / 网络图 / 用户素材"] F --> G["Executor
逐页生成 SVG"] G --> H["svg_quality_checker
质量检查"] H --> I["finalize_svg
后处理"] I --> J["svg_to_pptx
转成原生 PPTX"] J --> K["exports/_.pptx"] ``` 其中最重要的是 **SVG 中间层**。 直接让模型写 PowerPoint 底层 DrawingML XML 很难,因为 DrawingML 非常冗长,也不适合人眼调试。PPT Master 选择 SVG,是因为 SVG 和 PowerPoint DrawingML 都是二维矢量图形思路,都有矩形、路径、圆、渐变、透明度、坐标变换等概念。AI 更容易生成 SVG,人也可以用浏览器预览,最后再通过脚本转成 PPTX 原生对象。 ```mermaid flowchart LR A["AI 直接写 DrawingML"] --> B["XML冗长
难调试
模型容易错"] C["AI 写 HTML"] --> D["流式排版
和PPT绝对坐标不一致"] E["AI 写 SVG"] --> F["绝对坐标
浏览器可预览
容易转DrawingML"] F --> G["原生可编辑 PPTX"] ``` ### 12.4 PPT Master 在 HERMES 架构里的位置 PPT Master 不应该被理解成“另一个 Office 软件”。在本文的企业级 AI 操作系统架构里,它位于 Skill / MCP / Office 执行层之间: ```mermaid flowchart TD User["用户:把这份报告做成PPT"] --> Hermes["HERMES Agent"] Hermes --> Model["本地模型
DCU vLLM / SGLang"] Hermes --> Skill["PPT Master Skill"] Skill --> FS["Filesystem MCP
读写项目文件"] Skill --> Shell["Terminal MCP
执行PPT Master脚本"] Skill --> Office["Office/WPS
打开和二次编辑PPTX"] Model --> Strategist["生成结构和设计策略"] Model --> Executor["生成逐页SVG"] Shell --> Export["svg_to_pptx.py"] Export --> PPTX["原生可编辑PPTX"] ``` 在这个结构里: - HERMES 负责对话、模型调用、任务拆解、工具调度; - 本地 DCU 模型负责理解资料、生成页面结构和 SVG; - PPT Master 负责项目结构、质量检查、后处理、导出 PPTX; - MCP 负责给 HERMES 提供文件系统和命令执行能力; - PowerPoint / WPS 负责最终打开和人工精修。 ### 12.5 Windows 上安装 PPT Master Windows 上最小依赖是 Python 3.10+。如果已经安装 Git,推荐用 Git 克隆;如果没有 Git,可以下载 ZIP 后解压。 PowerShell 操作流程: ```powershell mkdir D:\ai-tools -Force cd D:\ai-tools git clone https://github.com/hugohe3/ppt-master.git cd D:\ai-tools\ppt-master py -3 -m venv .venv .\.venv\Scripts\Activate.ps1 python -m pip install -U pip pip install -r requirements.txt python -c "import pptx; import fitz; print('PPT_MASTER_DEPS_OK')" ``` 如果最后输出: ```text PPT_MASTER_DEPS_OK ``` 说明核心依赖已经安装成功。 如果 PowerShell 不允许激活 venv,执行: ```powershell Set-ExecutionPolicy -Scope CurrentUser RemoteSigned ``` 然后重新打开 PowerShell,再进入目录激活: ```powershell cd D:\ai-tools\ppt-master .\.venv\Scripts\Activate.ps1 ``` ### 12.6 Linux / openEuler / Ubuntu 上安装 PPT Master Linux 上操作类似: ```bash mkdir -p /data/ai-tools cd /data/ai-tools git clone https://github.com/hugohe3/ppt-master.git cd /data/ai-tools/ppt-master python3 -m venv .venv source .venv/bin/activate python -m pip install -U pip pip install -r requirements.txt python -c "import pptx; import fitz; print('PPT_MASTER_DEPS_OK')" ``` 如果需要处理老格式文档,例如 `.doc`、`.odt`、`.rtf`,可以额外安装 pandoc: ```bash sudo apt install pandoc ``` 一般 `.pdf`、`.docx`、`.xlsx`、`.pptx`、`.md`、网页 URL 等常见输入,不应一开始就把问题复杂化;先跑通主流程,再按需要补依赖。 ### 12.7 准备 PPT Master 项目目录 PPT Master 的工作区核心目录是: ```text ppt-master/ projects/ exports/ skills/ppt-master/ skills/ppt-master/scripts/ skills/ppt-master/templates/ ``` 可以创建一个项目目录,把资料放进去: Windows: ```powershell cd D:\ai-tools\ppt-master mkdir projects\dcu-hermes\sources -Force copy D:\docs\dcu-hermes-report.pdf projects\dcu-hermes\sources\ ``` Linux: ```bash cd /data/ai-tools/ppt-master mkdir -p projects/dcu-hermes/sources cp /data/docs/dcu-hermes-report.pdf projects/dcu-hermes/sources/ ``` ### 12.8 用 HERMES 驱动 PPT Master 的方式 PPT Master 官方工作方式更像“给 AI Coding Agent 的技能仓库”。也就是说,它要求 Agent 能做三件事: 1. 读写项目文件; 2. 运行 Python / Shell 命令; 3. 在多轮对话里持续执行工作流。 HERMES 如果已经接入本地 DCU 模型,并且配置了 filesystem MCP 与 terminal MCP,就可以按这个模式驱动 PPT Master。 ```mermaid sequenceDiagram participant U as 用户 participant H as HERMES participant L as 本地DCU模型 participant FS as Filesystem MCP participant SH as Terminal MCP participant PM as PPT Master U->>H: 把报告做成PPT H->>L: 读取PPT Master Skill规则 H->>FS: 读取源材料和项目文件 H->>SH: 执行source_to_md / project_manager L-->>H: 生成设计策略与页面结构 H->>FS: 写入design_spec / spec_lock / SVG页面 H->>SH: 运行质量检查与导出脚本 PM-->>H: exports目录生成pptx H-->>U: 返回PPTX路径 ``` 在 HERMES 里可以这样发起任务: ```text 请使用 D:\ai-tools\ppt-master 里的 PPT Master 工作流,把 projects\dcu-hermes\sources\dcu-hermes-report.pdf 生成一份 12 页左右的中文技术论坛分享 PPT。 要求: 1. 输出为 16:9 PPTX。 2. 风格偏技术架构图,适合论坛发布。 3. 尽量使用原生可编辑图形,不要把每页做成图片。 4. 生成完成后告诉我 exports 里的 pptx 文件路径。 ``` 如果是 Markdown 源文档: ```text 请使用 PPT Master,把 projects\dcu-hermes\sources\article.md 做成一份 10 页中文演示稿。 结构要求: 1. 封面 2. 背景与目标 3. 总体架构 4. DCU 模型服务 5. HERMES 接入 6. MCP 扩展 7. Office/WPS 自动化 8. 企业级 AI OS v2 9. 部署注意事项 10. 总结 ``` ### 12.9 HERMES 配置 filesystem MCP HERMES 需要能读写 PPT Master 目录。示例配置: ```yaml mcp_servers: ppt_master_fs: command: "npx" args: - "-y" - "@modelcontextprotocol/server-filesystem" - "D:\\ai-tools\\ppt-master" tools: include: - read_file - write_file - list_directory ``` 这样 HERMES 可以读取: ```text D:\ai-tools\ppt-master\skills\ppt-master\SKILL.md D:\ai-tools\ppt-master\projects\ D:\ai-tools\ppt-master\exports\ ``` ### 12.10 HERMES 配置 PPT Master 专用 MCP 只开放文件系统还不够,PPT Master 还需要运行脚本。可以写一个受控 MCP,把常用命令封装起来,避免让模型拿到“任意 shell”。 创建文件: ```powershell mkdir C:\hermes-mcp -Force notepad C:\hermes-mcp\ppt_master_mcp.py ``` 写入: ```python from mcp.server.fastmcp import FastMCP from pathlib import Path import subprocess mcp = FastMCP("ppt-master-local") ROOT = Path(r"D:\ai-tools\ppt-master").resolve() PYTHON = ROOT / ".venv" / "Scripts" / "python.exe" def run_cmd(args: list[str], timeout: int = 900) -> str: if not PYTHON.exists(): raise RuntimeError(f"python not found: {PYTHON}") result = subprocess.run( [str(PYTHON)] + args, cwd=str(ROOT), capture_output=True, text=True, timeout=timeout, encoding="utf-8", errors="replace", ) out = [] out.append(f"returncode={result.returncode}") if result.stdout: out.append("stdout:") out.append(result.stdout[-8000:]) if result.stderr: out.append("stderr:") out.append(result.stderr[-8000:]) if result.returncode != 0: raise RuntimeError("\n".join(out)) return "\n".join(out) def project_path(project_name: str) -> Path: safe = project_name.replace("\\", "/").strip("/") p = (ROOT / "projects" / safe).resolve() if ROOT not in p.parents and p != ROOT: raise ValueError("project path escapes ppt-master root") return p @mcp.tool() def ppt_master_init(project_name: str, fmt: str = "ppt169") -> str: return run_cmd([ "skills/ppt-master/scripts/project_manager.py", "init", project_name, "--format", fmt, ]) @mcp.tool() def ppt_master_import_sources(project_name: str, sources: list[str], move: bool = False) -> str: p = project_path(project_name) args = [ "skills/ppt-master/scripts/project_manager.py", "import-sources", str(p), ] + sources if move: args.append("--move") return run_cmd(args) @mcp.tool() def ppt_master_validate(project_name: str) -> str: p = project_path(project_name) return run_cmd([ "skills/ppt-master/scripts/project_manager.py", "validate", str(p), ]) @mcp.tool() def ppt_master_quality_check(project_name: str) -> str: p = project_path(project_name) return run_cmd([ "skills/ppt-master/scripts/svg_quality_checker.py", str(p), ]) @mcp.tool() def ppt_master_export(project_name: str, no_merge: bool = False, svg_snapshot: bool = False) -> str: p = project_path(project_name) outputs = [] outputs.append(run_cmd(["skills/ppt-master/scripts/total_md_split.py", str(p)])) outputs.append(run_cmd(["skills/ppt-master/scripts/finalize_svg.py", str(p)])) args = ["skills/ppt-master/scripts/svg_to_pptx.py", str(p)] if no_merge: args.append("--no-merge") if svg_snapshot: args.append("--svg-snapshot") outputs.append(run_cmd(args)) return "\n\n".join(outputs) if __name__ == "__main__": mcp.run() ``` 然后在 HERMES 配置中加入: ```yaml mcp_servers: ppt_master_local: command: "py" args: - "C:\\hermes-mcp\\ppt_master_mcp.py" tools: include: - ppt_master_init - ppt_master_import_sources - ppt_master_validate - ppt_master_quality_check - ppt_master_export ``` 这个 MCP 不是让 PPT Master “一键自动变魔法”,而是把项目创建、导入资料、校验、质量检查、导出这些命令变成 HERMES 可以安全调用的工具。真正的页面规划和 SVG 生成仍由 HERMES 调用本地模型完成。 ### 12.11 本地 DCU 模型与 PPT Master 的关系 如果 HERMES 已经配置为本地 DCU 模型: ```yaml model: provider: custom default: qwen3.6-dcu base_url: http://:8001/v1 api_key: "" context_length: 65536 ``` 那么 PPT Master 的 AI 生成阶段使用的就是 HERMES 当前模型。也就是说: ```mermaid flowchart LR A["PPT Master Workflow"] --> B["HERMES"] B --> C["本地 vLLM / SGLang API"] C --> D["海光 DCU 模型"] ``` 这里要注意一个现实问题:PPT Master 对模型能力要求很高,尤其是长上下文、视觉设计、SVG 坐标、跨页一致性。用本地 Qwen / DeepSeek / GLM 等模型可以跑流程,但如果本地模型在 SVG 布局、坐标、设计语言上不够强,输出质量会低于强视觉/强代码/长上下文模型。 企业内部落地时可以采用双模型策略: ```mermaid flowchart TD A["PPT任务"] --> B{"任务阶段"} B -->|"资料理解 / 大纲 / 中文表达"| C["本地 DCU 大模型"] B -->|"SVG视觉执行 / 复杂页面设计"| D["更强视觉/代码模型
可选"] B -->|"导出 / 转换 / 校验"| E["PPT Master Python脚本"] B -->|"二次润色 / 合规检查"| F["本地模型"] ``` 如果要求数据完全不出内网,就全部使用本地模型;如果允许外部模型处理脱敏后的设计任务,可以把“视觉执行”阶段路由给更强模型。 ### 12.12 PPT Master 的典型工作流:从 PDF 生成 PPT 准备资料: ```powershell cd D:\ai-tools\ppt-master mkdir projects\dcu-hermes\sources -Force copy D:\docs\dcu-hermes-report.pdf projects\dcu-hermes\sources\ ``` 在 HERMES 里执行: ```text 使用 PPT Master 工作流,为项目 dcu-hermes 生成一份中文 PPT。 输入资料: D:\ai-tools\ppt-master\projects\dcu-hermes\sources\dcu-hermes-report.pdf 要求: 1. 16:9。 2. 12页左右。 3. 技术论坛风格。 4. 每页要有清晰标题。 5. 尽量多使用架构图、流程图、对比表。 6. 输出为原生可编辑 PPTX。 7. 生成后运行质量检查和导出。 ``` 内部执行顺序: ```mermaid sequenceDiagram participant User as 用户 participant Hermes as HERMES participant MCP as ppt_master_local MCP participant FS as 文件系统 participant Model as 本地DCU模型 User->>Hermes: 发起PDF转PPT任务 Hermes->>MCP: ppt_master_init("dcu-hermes","ppt169") Hermes->>MCP: ppt_master_import_sources(...) Hermes->>FS: 读取PPT Master SKILL.md Hermes->>Model: 分析源文档并生成设计策略 Model-->>Hermes: 大纲、风格、页面规划 Hermes->>FS: 写入design_spec.md / spec_lock.md Hermes->>Model: 逐页生成SVG Hermes->>FS: 写入svg_output/page_*.svg Hermes->>MCP: ppt_master_quality_check("dcu-hermes") Hermes->>MCP: ppt_master_export("dcu-hermes") MCP-->>Hermes: exports/*.pptx Hermes-->>User: 返回PPTX文件路径 ``` ### 12.13 从 Markdown 生成 PPT 如果你的论坛文章本来就是 Markdown,可以直接走 Markdown 输入。比如把本文保存为: ```text D:\ai-tools\ppt-master\projects\dcu-hermes\sources\article.md ``` 然后在 HERMES 中输入: ```text 使用 PPT Master,把 projects\dcu-hermes\sources\article.md 做成一份 10 页中文 PPT。 目标: 1. 给论坛读者讲清楚 DCU + HERMES + MCP + Office/WPS 的整体架构。 2. 每页只讲一个核心观点。 3. 页面风格偏工程技术,使用深色科技风。 4. 输出 PPTX 放到 exports 目录。 ``` Markdown 到 PPT 的优势是结构更清晰,模型更容易识别标题层级、代码块、表格和流程图描述。 ```mermaid flowchart LR A["Markdown文章"] --> B["章节结构清晰"] B --> C["模型拆分页面更稳定"] C --> D["PPT Master生成SVG页面"] D --> E["导出PPTX"] ``` ### 12.14 使用已有 PPT 模板 企业里经常有固定模板,比如公司汇报模板、产品发布模板、政府项目申报模板。PPT Master 有两种路线: | 路线 | 适合场景 | 输出特点 | |---|---|---| | Template Fill | 已有 PPT 模板非常固定,只想替换文字/表格/图表内容 | 保留原模板页结构 | | Create Template | 想把现有 PPT 的风格提取成可复用模板,再生成新结构 | 更灵活,适合不同页数和不同内容 | 在 HERMES 里可以这样描述: ```text 使用 PPT Master 的 template fill 路线,把 projects\template\company_template.pptx 作为模板,把 projects\dcu-hermes\sources\article.md 的内容填进去。 要求: 1. 保留原模板风格。 2. 选择适合内容的页面。 3. 输出可编辑 PPTX。 ``` 如果要创建模板: ```text 使用 PPT Master 的 create-template 路线,从 projects\template\company_template.pptx 提取一套公司模板,然后用这个模板生成 dcu-hermes 项目的 PPT。 ``` 模板路线适合企业级 AI OS,因为它解决的是“AI 生成内容”和“企业品牌统一”之间的冲突。 ```mermaid flowchart TD A["企业品牌PPT"] --> B["Create Template"] B --> C["模板库"] D["新报告 / 新材料"] --> E["PPT Master"] C --> E E --> F["符合企业视觉规范的PPTX"] ``` ### 12.15 PPT Master 与 WPS 的关系 PPT Master 输出的是标准 `.pptx` 文件,后续可以用 PowerPoint 或 WPS 演示打开。对于国产化办公环境,可以采用: ```mermaid flowchart LR A["PPT Master生成PPTX"] --> B["WPS 演示打开"] B --> C["WPS MCP二次检查"] C --> D["读取页面文字 / 检查格式"] D --> E["本地模型润色"] E --> F["写回WPS"] ``` 也就是说: - PPT Master 负责从资料生成高质量初稿; - WPS 负责国产办公环境下打开、展示、人工编辑; - WPS MCP 负责把 WPS 文档读写能力接入 HERMES; - HERMES 负责统一调度和审计。 ### 12.16 PPT Master 在企业级 AI OS 中的推荐定位 在企业级架构里,PPT 生成可以分为三级: ```mermaid flowchart TD A["企业PPT生成需求"] --> B{"质量要求"} B -->|"批量固定格式"| C["python-pptx
速度快、模板稳定"] B -->|"已有企业模板填充"| D["PPT Master Template Fill"] B -->|"高质量新演示稿"| E["PPT Master SVG Pipeline"] B -->|"最终人工精修"| F["PowerPoint / WPS"] ``` 推荐组合: | 需求 | 推荐工具 | |---|---| | 每天自动生成固定格式日报 | `python-pptx` | | 从 Excel 自动生成经营分析 PPT | `openpyxl + python-pptx` 或 PPT Master | | 从长报告生成讲解型 PPT | PPT Master | | 保留公司模板做新汇报 | PPT Master Template Fill | | 国产办公环境二次编辑 | WPS + WPS MCP | | 最终高质量交付 | PPT Master 初稿 + 人工精修 | ### 12.17 PPT Master 的企业安全边界 PPT Master 会读源材料、调用模型、写文件、可能调用图片生成或图片搜索能力,所以企业环境必须加边界: ```mermaid flowchart TD A["PPT生成请求"] --> B["权限检查"] B --> C["资料脱敏检查"] C --> D{"是否允许外部模型/图片API"} D -->|"仅内网"| E["本地DCU模型 + 内部素材库"] D -->|"允许脱敏外部调用"| F["外部模型/图片API"] E --> G["PPT Master生成"] F --> G G --> H["审计日志"] ``` 安全策略: | 项目 | 策略 | |---|---| | 源文件目录 | 只允许读取工作区目录 | | 输出目录 | 只允许写入 `exports/` 或企业指定目录 | | 模型调用 | 敏感材料只走本地 DCU 模型 | | 图片来源 | 内部素材库优先,外部图片 API 需要审批 | | 模板 | 企业模板统一管理,避免泄露品牌资料 | | 审计 | 记录输入文件、输出文件、模型、工具调用时间 | ### 12.18 PPT Master 常见问题 #### 12.18.1 生成的 PPT 质量不稳定 原因通常不是脚本问题,而是模型能力、上下文长度、提示词、源材料结构、页面数量共同影响。处理顺序: 1. 先减少页数,验证 3 页或 5 页能否稳定生成; 2. 使用结构清晰的 Markdown 或 DOCX; 3. 提前指定风格、页数、受众; 4. 让 HERMES 读取 `skills/ppt-master/SKILL.md` 后再执行; 5. 本地模型不稳定时,把任务拆成“大纲生成”和“页面执行”两阶段。 #### 12.18.2 文字溢出或页面元素重叠 处理方式: ```text 请只修复第 5 页:标题太长、正文溢出,请保持整体风格不变,减少正文长度并重新排版。 ``` 也可以运行质量检查: ```powershell cd D:\ai-tools\ppt-master .\.venv\Scripts\Activate.ps1 python skills/ppt-master/scripts/svg_quality_checker.py projects\dcu-hermes ``` #### 12.18.3 导出的 PPT 在 WPS 中显示和 PowerPoint 不完全一致 PPTX 是标准文件,但不同软件对动画、SVG、渐变、字体替换的支持程度不同。企业环境可以设定两条输出规范: | 场景 | 输出策略 | |---|---| | PowerPoint 演示 | 允许使用动画、渐变、复杂形状 | | WPS / 国产环境 | 减少复杂动画,字体使用系统已有字体,图形保持简洁 | #### 12.18.4 本地 DCU 模型能不能完全替代 Claude / GPT 做 PPT Master 可以跑通工作流,但效果取决于本地模型能力。PPT Master 对模型要求不是普通问答能力,而是: - 长上下文; - 内容结构化; - 视觉设计; - SVG 坐标与排版; - 跨页风格一致性; - 遵循复杂 workflow 的能力。 本地模型适合先承担: ```text 资料总结 → 大纲生成 → 页面文案 → 论坛技术内容组织 ``` 如果要追求非常强的视觉表现,需要继续优化本地模型的 tool call、长上下文、SVG 生成稳定性,或者把部分非敏感视觉执行任务路由给更强模型。 ### 12.19 PPT Master 小结 PPT Master 在本文体系里的价值不是“又多了一个 PPT 工具”,而是把 PPT 生成从简单文件写入升级成了一套完整的 Agent 工作流: ```text 源资料 → 内容理解 → 设计策略 → SVG 页面 → 质量检查 → 原生 PPTX → WPS/PowerPoint 精修 ``` 和 HERMES + DCU + MCP 结合后,它可以成为企业级 AI 操作系统里的“高质量演示稿生成引擎”。 ## 13. WPS 接入本地模型 ### 13.1 WPS 接入本地模型的正确理解 WPS 接入本地模型不是“让 WPS 自己跑大模型”,而是把 WPS 作为文档前端,把本地模型作为后端智能能力。 ```mermaid flowchart TD A["WPS 文字 / 表格 / 演示"] --> B["提取当前文档内容"] B --> C["发送到本地模型 API"] C --> D["模型生成结果"] D --> E["写回 WPS 文档"] ``` 可落地方式有四种: | 方式 | 是否需要企业授权 | 说明 | |---|---|---| | WPS AI / 企业私有化接口 | 取决于 WPS 版本和授权 | 如果企业版支持 AI 网关或插件配置,可接入内部模型网关 | | WPS JS API / 加载项 | 取决于 WPS 开放平台能力 | 用 JS 获取文档对象,调用 HTTP API,再写回 | | WPS COM / OLE 自动化 | Windows 桌面版常用 | 用 PowerShell / Python 操作 WPS 应用对象 | | WPS Desktop MCP | 可自建 | 把 JS/COM/UIA 封装成 MCP 工具给 HERMES 调用 | ### 13.2 本地模型 API 网关 为了让 WPS 和 HERMES 都能调用同一个本地模型,推荐统一走一个 OpenAI Compatible 网关: ```mermaid flowchart LR WPS["WPS 插件 / COM / MCP"] --> GW["AI API Gateway"] Hermes["Hermes Agent"] --> GW GW --> VLLM["vLLM / SGLang"] VLLM --> DCU["DCU / GPU"] ``` 网关地址示例: ```text http://192.168.10.88:8001/v1 ``` WPS 插件、WPS MCP、Hermes 都调用这个地址,避免每个客户端单独维护模型配置。 ### 13.3 WPS COM 自动化探测 不同 WPS 版本的 COM ProgID 可能不同,可以先探测: ```powershell $progids = @( "KWPS.Application", "WPS.Application", "Et.Application", "WPP.Application" ) foreach ($p in $progids) { try { $app = New-Object -ComObject $p Write-Host "FOUND_COM_PROGID=$p" $app.Quit() } catch { Write-Host "NOT_FOUND=$p" } } ``` 含义: | ProgID | 可能对应 | |---|---| | `KWPS.Application` / `WPS.Application` | WPS 文字 | | `Et.Application` | WPS 表格 | | `WPP.Application` | WPS 演示 | ### 13.4 PowerShell 操作 WPS 文字 ```powershell $wps = New-Object -ComObject "KWPS.Application" $wps.Visible = $true $doc = $wps.Documents.Add() $doc.Content.Text = "这是一段由本地 AI 工作流准备写入 WPS 的文本。" $out = "C:\hermes-out\wps-demo.docx" $doc.SaveAs($out) Write-Host "WPS_DOC_CREATED=$out" ``` ### 13.5 WPS 调用本地模型的 HTTP 流程 WPS 插件或 WPS MCP 提取文档文本后,调用本地模型: ```powershell $body = @{ model = "qwen3.6-dcu" messages = @( @{ role = "user" content = "请把下面文字改写成正式公文风格:这是一段测试内容。" } ) temperature = 0.2 max_tokens = 512 } | ConvertTo-Json -Depth 10 $r = Invoke-RestMethod ` -Uri "http://192.168.10.88:8001/v1/chat/completions" ` -Method Post ` -ContentType "application/json" ` -Body $body $r.choices[0].message.content ``` WPS MCP 的完整链路: ```mermaid sequenceDiagram participant User as 用户 participant WPS as WPS participant MCP as WPS MCP participant Hermes as Hermes participant VLLM as 本地模型API User->>Hermes: 改写当前WPS文档 Hermes->>MCP: read_current_document MCP->>WPS: 读取正文 WPS-->>MCP: 文档文本 MCP-->>Hermes: 文本内容 Hermes->>VLLM: 调用本地模型改写 VLLM-->>Hermes: 改写结果 Hermes->>MCP: write_current_document MCP->>WPS: 写回文档 WPS-->>User: 文档已更新 ``` ### 13.6 WPS MCP 工具设计 WPS MCP 工具不应一上来开放任意 COM 操作,应先开放高层动作: | 工具名 | 作用 | |---|---| | `wps_read_document` | 读取当前 WPS 文字正文 | | `wps_write_document` | 写回当前 WPS 文字 | | `wps_create_document` | 新建 WPS 文档 | | `wps_read_sheet` | 读取当前 WPS 表格区域 | | `wps_write_sheet` | 写入 WPS 表格 | | `wps_create_presentation` | 生成 WPS 演示文件 | 对应的 HERMES 用户任务: ```text 读取当前 WPS 文档,把语言改得更正式,但不要改变原意。 ``` HERMES 执行: ```mermaid flowchart TD A["用户任务"] --> B["Skill:文档润色流程"] B --> C["wps_read_document"] C --> D["本地模型改写"] D --> E["wps_write_document"] E --> F["返回处理摘要"] ``` --- ## 14. 企业级 AI 操作系统 ### 14.1 v2 的核心变化 v1 是: ```text HERMES 接入本地 DCU 模型 ``` v2 是: ```text HERMES + DCU 模型 + MCP 工具集群 + Office/WPS/Desktop 自动化 + 权限审计 ``` ### 14.2 多模型路由 不同任务交给不同模型: ```mermaid flowchart LR A["用户任务"] --> B["任务分类器 / Policy Engine"] B --> C["办公写作 / 汇报材料
Qwen / 通用模型"] B --> D["代码 / 逆向 / 工程任务
DeepSeek / Coding模型"] B --> E["语音输入 / ASR / TTS
VibeVoice / ASR模型"] B --> F["简单摘要 / 轻量任务
小模型"] ``` 路由规则可以按关键词、任务类型、成本、上下文长度、模型可用性决定。 ### 14.3 MCP Gateway 企业环境中,不应让每个 Hermes 客户端都直接连接所有 MCP Server。更好的结构是: ```mermaid flowchart TD Hermes["Hermes Agent"] --> MCPGW["MCP Gateway"] MCPGW --> Auth["认证与授权"] MCPGW --> Tools["工具注册表"] MCPGW --> Audit["审计日志"] MCPGW --> Policy["策略引擎"] Tools --> Office["Office/WPS工具"] Tools --> Desktop["Desktop RPA工具"] Tools --> Data["数据库/文件/API工具"] ``` MCP Gateway 的职责: | 模块 | 作用 | |---|---| | 工具注册 | 管理哪些工具可用 | | 权限控制 | 判断谁能调用哪些工具 | | 参数校验 | 防止危险路径、危险命令、越权操作 | | 审计日志 | 记录谁在什么时间调用了什么工具 | | 执行隔离 | 不同用户、部门、租户互相隔离 | ### 14.4 AI 防火墙 企业级工具调用必须在模型输出和真实执行之间增加策略层。 ```mermaid flowchart TD A["模型输出 tool_call"] --> B["AI Firewall"] B --> C{"策略检查"} C -->|"允许"| D["执行 MCP 工具"] C -->|"拒绝"| E["返回拒绝原因"] C -->|"需要确认"| F["请求人工确认"] D --> G["审计日志"] E --> G F --> G ``` 典型策略: | 类型 | 规则 | |---|---| | 文件路径 | 只能写入工作区,不能写系统目录 | | Office/WPS | 修改现有文件前先复制备份 | | Desktop | 禁止自动点击支付、删除、格式化等危险按钮 | | 数据库 | 只读账号和写入账号分离 | | API | 生产系统写操作需要人工确认 | | 模型 | 高风险任务转人工审批 | ### 14.5 审计日志格式 每次工具调用都记录: ```json { "time": "2026-06-25T10:00:00+09:00", "user": "muyi", "tenant": "internal", "agent": "hermes-desktop", "model": "qwen3.6-dcu", "tool": "create_pptx", "arguments_hash": "sha256:xxxx", "target_path": "C:\\hermes-out\\report.pptx", "result": "success", "latency_ms": 1832 } ``` ### 14.6 v2 企业级最终架构 ```mermaid flowchart TD subgraph Client["用户端"] C1["Hermes Desktop"] C2["Hermes CLI"] C3["Web / 企业门户"] end subgraph Agent["Agent 层"] A1["Hermes Agent"] A2["Skill 工作流"] A3["Memory / Context"] end subgraph Model["模型层"] R["Model Router"] M1["办公模型"] M2["代码模型"] M3["语音模型"] M4["小模型"] end subgraph Compute["算力层"] V1["vLLM / SGLang"] G1["海光 DCU"] G2["NVIDIA GPU"] end subgraph Tool["工具执行层"] GW["MCP Gateway"] T1["Office MCP"] T2["WPS MCP"] T3["Desktop MCP"] T4["Filesystem MCP"] T5["Database MCP"] end subgraph Security["安全治理层"] P["Policy Engine"] AU["Audit Log"] RBAC["RBAC / 多租户"] end Client --> Agent Agent --> R R --> M1 R --> M2 R --> M3 R --> M4 M1 --> V1 M2 --> V1 M3 --> V1 M4 --> V1 V1 --> G1 V1 --> G2 Agent --> GW GW --> P P --> T1 P --> T2 P --> T3 P --> T4 P --> T5 P --> AU RBAC --> P ``` --- ## 15. 常见问题排查 ### 15.1 HERMES 报连接失败 先不要看 HERMES,直接在 HERMES 所在机器上执行: ```bash curl http://:8001/v1/models ``` 失败原因通常在以下位置之一: - vLLM 服务没有启动; - 端口不是 `8001`; - 容器没有使用 `--network=host`; - 防火墙阻止访问; - HERMES 所在机器和 DCU 服务器网络不通; - Base URL 写错,少了 `/v1`。 正确格式一般是: ```text http://:8001/v1 ``` 不是: ```text http://:8001 ``` ### 15.2 HERMES 报 model not found 检查 vLLM 实际暴露的模型名: ```bash curl http://:8001/v1/models ``` HERMES 里的模型名必须和这里一致。 推荐在启动 vLLM 时固定名称: ```bash --served-model-name qwen3.6-dcu ``` 然后 HERMES 中统一填写: ```text qwen3.6-dcu ``` ### 15.3 HERMES 启动后上下文不够 Agent 场景会占用较多上下文,包括: - 系统提示词; - 工具 schema; - 历史对话; - 文件内容; - 中间推理过程; - 函数调用返回结果。 建议 vLLM 启动时设置: ```bash --max-model-len 65536 ``` HERMES 配置里也写: ```yaml context_length: 65536 ``` 如果显存不够: - 换更小模型; - 降低 `--max-model-len` 做纯聊天测试; - 增加 tensor parallel 卡数; - 使用模型仓库中推荐的量化或 FP8 版本,前提是对应 DCU 型号和镜像支持。 ### 15.4 工具调用变成普通文本 如果模型输出类似 JSON 的工具调用文本,但 HERMES 没有真的执行工具,通常说明 vLLM 的 tool call parser 没有正确启用,或者模型本身的工具调用格式与当前 parser 不匹配。 Qwen3.6 示例: ```bash --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --reasoning-parser qwen3 ``` 不同模型的 parser 不一样,必须看对应模型仓库 README。 ### 15.5 Docker 容器里看不到 DCU 检查容器启动参数: ```bash --device=/dev/kfd --device=/dev/dri --device=/dev/mkfd ``` 检查宿主机设备节点: ```bash ls /dev/kfd ls /dev/dri ls /dev/mkfd ``` 如果宿主机都没有这些设备节点,应回到驱动安装阶段排查。 ### 15.6 vLLM 本机能访问,Windows 不能访问 在 DCU 服务器上测试: ```bash curl http://127.0.0.1:8001/v1/models ``` 在 Windows 上测试: ```powershell curl.exe http://:8001/v1/models ``` 如果前者成功、后者失败,重点检查: - DCU 服务器防火墙; - 内网路由; - 安全组策略; - vLLM 是否只监听了本地地址; - 容器网络是否正确暴露。 ### 15.7 MCP 没有加载 检查配置文件: ```bash vim ~/.hermes/config.yaml ``` 检查 `mcp_servers` 缩进是否正确。 启动 HERMES 后输入: ```text 告诉我当前可用的 MCP 工具有哪些。 ``` 如果没有看到目标工具,检查: - `npx` 或 `py` 是否在 PATH; - MCP Server 命令是否能单独启动; - 工作目录是否存在; - Windows 路径是否需要双反斜杠; - 工具是否被 `tools.include` 过滤掉。 ### 15.8 Office / WPS 文件生成失败 重点检查: - 输出目录是否存在; - 文件是否被 WPS/Office 打开占用; - Python 依赖是否安装; - Windows 权限是否允许写入; - COM ProgID 是否正确; - 32 位 / 64 位 Office/WPS 与 Python 位数是否匹配。 --- ## 16. 最小可用命令汇总 ### 16.1 DCU 服务器:启动模型容器 ```bash docker run -it \ --shm-size 256g \ --network=host \ --name qwen3.6-hermes-demo \ --privileged \ --device=/dev/kfd \ --device=/dev/dri \ --device=/dev/mkfd \ --group-add video \ --cap-add=SYS_PTRACE \ --security-opt seccomp=unconfined \ -u root \ -v /opt/hyhal/:/opt/hyhal/:ro \ -v /data/models/:/data/models/ \ harbor.sourcefind.cn:5443/dcu/admin/base/custom:vllm018-ubuntu22.04-dtk26.04-qwen3.6-20260423 \ bash ``` ### 16.2 容器内:启动 vLLM ```bash vllm serve /data/models/Qwen3.6-27B \ --served-model-name qwen3.6-dcu \ --port 8001 \ --trust-remote-code \ --dtype bfloat16 \ --gpu-memory-utilization 0.9 \ --max-model-len 65536 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --reasoning-parser qwen3 ``` ### 16.3 HERMES 机器:验证模型接口 ```bash curl http://:8001/v1/models ``` Windows: ```powershell curl.exe http://:8001/v1/models ``` ### 16.4 HERMES 机器:安装 HERMES Linux / WSL2: ```bash curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash source ~/.bashrc hermes doctor ``` Windows PowerShell: ```powershell iex (irm https://hermes-agent.nousresearch.com/install.ps1) hermes doctor ``` ### 16.5 HERMES 机器:配置模型 ```bash hermes model ``` 填写: ```text Provider: Custom endpoint / Self-hosted / OpenAI Compatible Base URL: http://:8001/v1 API Key: 本地测试留空;生产环境填写网关 token Model: qwen3.6-dcu Context length: 65536 ``` ### 16.6 HERMES 机器:启动测试 ```bash hermes chat ``` 测试: ```text 只回复 HERMES_DCU_OK,不要解释。 ``` ### 16.7 Windows 机器:安装 Office/WPS MCP 所需依赖 ```powershell py -m pip install -U pip py -m pip install mcp python-docx openpyxl python-pptx pandas matplotlib pywinauto pywin32 requests ``` ### 16.8 HERMES 配置 Office MCP ```yaml mcp_servers: office_local: command: "py" args: ["C:\\hermes-mcp\\office_mcp.py"] tools: include: - create_docx - create_xlsx - create_pptx ``` ### 16.9 HERMES 配置文件系统 MCP ```yaml mcp_servers: project_fs: command: "npx" args: ["-y", "@modelcontextprotocol/server-filesystem", "D:\\projects"] tools: include: - read_file - list_directory - write_file ``` --- ## 17. 生产环境做法 本地测试可以直接裸跑: ```text http://127.0.0.1:8001/v1 ``` 多人使用或生产环境应增加网关层: ```mermaid flowchart LR H["HERMES"] --> G["内网网关 / Nginx / API Key"] G --> V["vLLM :8001"] V --> D["海光 DCU"] H --> M["MCP Gateway"] M --> A["权限 / 审计 / 工具过滤"] ``` 生产环境至少做到: | 项目 | 做法 | |---|---| | 网络 | 不直接暴露公网 | | 鉴权 | vLLM 或网关层加 API Key | | 访问范围 | 只允许 HERMES 所在机器或指定内网访问 | | 日志 | vLLM、HERMES、网关、MCP 审计日志分开 | | 模型名 | 用 `--served-model-name` 固定 | | 版本 | 驱动、DTK、镜像、模型 README 保持匹配 | | 资源隔离 | 多用户场景按端口、容器、模型实例隔离 | | 工具权限 | MCP 工具白名单、路径白名单、危险操作人工确认 | | 可观测性 | 记录请求耗时、token 数、错误率、DCU 使用率、工具调用结果 | --- ## 18. 参考页面 | 内容 | 页面地址 | |---|---| | 光合资源工具页:驱动、DTK、DAS、光源入口 | | | DTK 页面 | | | DTK 26.04 更新说明 | | | 光源:镜像、模型仓库 | | | 光合论坛 | | | Qwen3.6 ModelZoo 示例 | | | Hermes Agent 安装文档 | | | Hermes Agent AI Providers 文档 | | | Hermes Agent MCP 文档 | | | PPT Master GitHub 仓库 | | | PPT Master 官方展示页 | | | PPT Master Getting Started | | | PPT Master Windows 安装文档 | | | PPT Master Skill 工作流 | | | PPT Master 技术设计文档 | | | WPS 开放平台 JS API 文档 | | --- ## 19. 结论 海光 DCU 接入 HERMES 的关键,不是让 HERMES 直接“认识 DCU”,而是把 DCU 上的大模型服务标准化成: ```text OpenAI Compatible API ``` 也就是: ```text /v1/chat/completions ``` 只要这一步打通,HERMES 就可以像调用云端模型一样调用本地 DCU 模型。 企业级 v2 的关键,则是把 HERMES 从“能聊天的本地 Agent”升级为;并把 PPT Master 这类高质量演示稿生成工作流纳入 Office/WPS 自动化体系: ```text 模型调度 + MCP 工具执行 + Office/WPS/Desktop 自动化 + 权限审计 ``` 最终形成的架构是: ```mermaid flowchart LR A["海光 DCU"] --> B["vLLM / SGLang"] B --> C["OpenAI Compatible API"] C --> D["HERMES Agent"] D --> E["MCP Gateway"] E --> F["Office / WPS / Desktop / 文件 / 数据库"] E --> G["权限 / 审计 / 企业流程"] ``` 后续要换 Qwen、DeepSeek、GLM、Kimi、VibeVoice 或其他模型,本质上只是替换: ```text 模型权重 + 镜像 + vLLM/SGLang 启动参数 + 模型路由策略 ``` HERMES 侧保持: ```yaml provider: custom base_url: http://:8001/v1 ``` MCP 侧保持: ```yaml mcp_servers: 工具名: command: "工具启动命令" args: ["工具参数"] tools: include: ["允许暴露的工具"] ``` 这就是整条链路最稳定、最容易维护、也最容易继续扩展成企业级 AI 操作系统的方式。
全部评论(1)
只看楼主
M
muyi_muyi
楼主
1楼
attachmentId-image.png
8/11
没有更多内容了
--
楼主
Level.2
0 帖子
楼主热帖
暂无数据