DEV Community

Zhang Zhemin
Zhang Zhemin

Posted on

用 WPS 开放 API + AI Agent 重写文档自动化:一名软件工程师的实战笔记

WPS 开放 API + AI Agent 重写文档自动化:一名软件工程师的实战笔记

1. 背景:文档自动化为什么需要重写

过去我们做文档自动化,套路通常是:找模板、复制、填字段、人工校验、导出 PDF、发邮件。模板一多,字段映射就散落在脚本和 Excel 里;格式一改,维护成本指数上升。WPS 开放 API 的出现,让我们可以把“文档操作”从业务代码里抽离出来,交给稳定的文档服务;而 AI Agent 则负责理解自然语言任务、规划步骤、调用工具。两者结合,不是简单堆叠,而是把流程从“人驱动脚本”变成“Agent 编排、WPS 执行、人只审核”。

2. 整体架构

系统分四层:

  1. 接入层:Webhook、定时任务、IM 消息、表单。
  2. Agent 层:LLM + 规划器 + 工具调用 + 记忆 + 规则校验。
  3. 工具层:封装 WPS 开放 API,包括创建文档、替换书签/占位符、导出 PDF、设置权限、读取元数据。
  4. 存储层:模板库、任务库、对象存储、审计日志。

关键原则:不让 LLM 直接生成复杂文档 XML,而是让它输出结构化 JSON,由工具层调用 WPS 开放 API。这样可控、可测、可回滚。

3. 准备 WPS 开放平台环境

先到 WPS官网 进入开放平台,注册开发者账号,创建应用,获取 App ID、App Secret 和回调地址。本地联调时,建议从 WPS官网WPS下载 页面安装最新版 WPS Office,保证加载项、云文档和 API 版本一致。WPS下载 要认准官方渠道,避免第三方安装包带来安全风险;WPS官网 有完整的 API 文档、SDK、调试工具和错误码说明。

WPS 开放 API 常见鉴权方式包括 OAuth2 和签名鉴权。生产环境要把 token 放密钥管理,不要硬编码。access_token 要缓存,并处理过期与刷新,避免并发刷新触发限流。

4. AI Agent 的角色

Agent 的核心循环可以概括为:

  • 理解任务:例如“根据销售数据生成周报,套用公司模板,导出 PDF 并发给王经理”。
  • 规划步骤:取数、填模板、校验、导出、通知。
  • 调用工具:get_sales_data、wps_create_doc、wps_replace_placeholders、wps_export_pdf、send_message。
  • 自我反思:检查字段缺失、金额格式、日期范围、权限边界。
  • 输出结果:返回文档链接、PDF、审计记录。

用 Function Calling 定义工具 schema,例如:

tools = [
    {
        'name': 'wps_replace_placeholders',
        'description': '在 [WPS](https://www.wps.com/) 文档中替换占位符',
        'parameters': {
            'type': 'object',
            'properties': {
                'doc_id': {'type': 'string'},
                'mapping': {'type': 'object'}
            },
            'required': ['doc_id', 'mapping']
        }
    }
]
Enter fullscreen mode Exit fullscreen mode

注意:工具描述要准确,参数校验要严格。LLM 可能编造模板 ID 或字段,工具层必须拒绝非法请求。

5. 调用 WPS 开放 API 的代码骨架

下面是一段 Python 示例,展示认证、创建文档、替换占位符的骨架。实际路径、参数和鉴权方式以 WPS官网 开放平台文档为准。

import requests

class [WPS](https://www.wps.com/)Client:
    def __init__(self, app_id, app_secret):
        self.base = 'https://open.wps.cn/api/v1'
        self.app_id = app_id
        self.app_secret = app_secret
        self.token = None

    def get_token(self):
        if self.token:
            return self.token
        resp = requests.post(
            f'{self.base}/oauth/token',
            json={
                'app_id': self.app_id,
                'app_secret': self.app_secret,
                'grant_type': 'client_credentials'
            },
            timeout=10
        )
        resp.raise_for_status()
        self.token = resp.json()['access_token']
        return self.token

    def create_doc(self, template_id, name):
        headers = {'Authorization': f'Bearer {self.get_token()}'}
        resp = requests.post(
            f'{self.base}/docs',
            headers=headers,
            json={'template_id': template_id, 'name': name},
            timeout=20
        )
        resp.raise_for_status()
        return resp.json()['doc_id']

    def replace_placeholders(self, doc_id, mapping):
        headers = {'Authorization': f'Bearer {self.get_token()}'}
        resp = requests.post(
            f'{self.base}/docs/{doc_id}/replace',
            headers=headers,
            json={'mapping': mapping},
            timeout=20
        )
        resp.raise_for_status()
        return resp.json()
Enter fullscreen mode Exit fullscreen mode

这段代码的重点不是路径本身,而是分层:WPSClient 只负责 HTTP 和鉴权,Agent 不直接拼请求。这样后期替换成 SDK 或调整 API 版本,改动面很小。

6. Agent 编排伪代码

def run_agent(task):
    plan = llm_plan(task, tools)
    ctx = {}
    for step in plan:
        tool = step['tool']
        args = step['args']
        if tool == 'wps_create_doc':
            ctx['doc_id'] = wps.create_doc(args['template_id'], args['name'])
        elif tool == 'wps_replace_placeholders':
            wps.replace_placeholders(ctx['doc_id'], args['mapping'])
        elif tool == 'wps_export_pdf':
            ctx['pdf_url'] = wps.export_pdf(ctx['doc_id'])
    return ctx
Enter fullscreen mode Exit fullscreen mode

每一轮循环都要做三件事:参数校验、权限校验、审计记录。特别是权限,Agent 只能访问当前用户有权限的模板和文档。越权风险不能靠 prompt 解决,要靠工具层和鉴权系统。

7. 实战中踩过的坑

  1. 模板格式漂移:WPS 模板里的书签被误删,替换失败。解决:模板版本化,替换前先校验书签清单。
  2. Token 并发刷新:多个任务同时刷新 token,触发限流。解决:单飞 + 分布式锁 + 提前刷新。
  3. 大文档性能:一次替换上千字段很慢。解决:批量接口、分片、异步任务、进度回调。
  4. 权限边界:Agent 不能越权访问文档。解决:最小权限、用户身份透传、操作审计。
  5. PDF 字体缺失:导出后排版变化。解决:服务端预装字体,或使用 WPS官网 推荐方案。
  6. 错误码不透明:WPS 开放 API 返回错误时,要记录 request_id,方便排查。

8. 效果与总结

重写后,周报生成从 30 分钟降到 2 分钟,人工只做审核;合同生成、发票整理也在复用同一套工具层。WPS 开放 API 负责稳定的文档操作,AI Agent 负责灵活的任务理解与编排。建议从单一高频场景切入,先把工具层做稳,再让 Agent 逐步接管更多步骤。

最后提醒:从 WPS官网 获取最新 API 文档,从 WPS下载 安装官方客户端联调。WPS 开放 API + AI Agent 不是替代人,而是把工程师从重复劳动中解放出来。

Top comments (0)