第3章 AI 办公助理¶
学习目标¶
- 掌握 AI 办公助理的能力边界与典型功能模块
- 理解多工具集成(Tool Use)在办公场景中的设计模式
- 学会使用 Agent 编排实现日程、邮件、文档、会议、任务等子流程
- 能够设计企业 OA 系统集成方案与权限管控策略
- 识别办公助理落地中的隐私、安全与体验关键点
问题导入¶
某中型企业员工每天花费大量时间在重复事务上:安排会议要协调多人日程,处理邮件要分类回复,周报要汇总多个系统数据,会议纪要要手动整理。CTO 希望"给每位员工配一个 AI 助理,把这些杂事自动办了"。但很快遇到一连串问题:助理要能读写日历、收发邮件、查询 OA、生成文档,涉及多个异构系统;不同岗位的助理能力不同,销售助理要管 CRM,HR 助理要管招聘系统;部分操作敏感(如代发邮件、改日程),必须有人工确认。如何设计一个既能干又安全、可扩展的办公助理?本章将系统解答。
核心概念¶
1. 办公助理能力地图¶
| 模块 | 典型功能 | 依赖工具 |
|---|---|---|
| 日程管理 | 创建/修改/查询日程、会议协调 | 日历 API、同事空闲查询 |
| 邮件处理 | 分类、摘要、草稿回复、重要提醒 | 邮箱 API、通讯录 |
| 文档生成 | 周报、纪要、方案、模板填充 | 文档系统、数据源 |
| 会议纪要 | 转写、摘要、待办提取、分发 | 会议系统、ASR |
| 任务跟踪 | 创建任务、进度同步、催办 | 任务系统、IM |
| 信息查询 | 查制度、查数据、查联系人 | 知识库、数据仓库 |
2. 多工具集成模式¶
办公助理的核心挑战是工具数量多、参数复杂。常见三种集成模式:
- 直接函数调用:Agent 通过 function calling 调用每个工具,适合工具数 < 10 的场景。
- MCP 服务化:把工具封装为 MCP Server,Agent 通过统一协议调用,适合工具多、跨团队复用。
- 技能路由:按意图路由到子 Agent,每个子 Agent 专注一类工具,降低主 Agent 上下文压力。
3. 任务编排与人工确认¶
办公场景中部分操作不可逆(发邮件、改日程、发通知),必须引入人工确认。典型编排:
- Agent 解析用户意图,生成操作计划(Plan)。
- 对只读操作(查询、摘要)直接执行。
- 对写操作(发送、修改、创建)生成确认请求,等待用户批准。
- 用户确认后执行,并回执结果。
4. 权限与数据隔离¶
办公助理接入企业多系统,权限管控是底线:
- 身份代理:以用户身份调用各系统 API,遵循用户既有权限,避免越权。
- 数据隔离:不同部门、不同级别的员工可访问的工具与数据不同。
- 审计日志:所有写操作记录操作人、时间、参数,便于追溯。
- 敏感数据脱敏:Agent 上下文中不应残留密码、薪资等敏感字段。
5. 个性化与记忆¶
办公助理需记住用户偏好:常用会议时段、邮件签名、周报模板、汇报对象。这些信息存储在用户级长期记忆中,可在会话间复用,避免每次重复说明。
原理图¶
flowchart TB
U[用户指令] --> Planner[任务规划 Agent]
Planner --> RO{操作类型判定}
RO -->|只读| Exec[直接执行]
RO -->|写操作| Confirm[人工确认节点]
Confirm -->|批准| Exec
Confirm -->|拒绝| End2[取消并反馈]
Exec --> Router{技能路由}
Router -->|日程| Cal[日程工具集]
Router -->|邮件| Mail[邮件工具集]
Router -->|文档| Doc[文档工具集]
Router -->|会议| Mtg[会议工具集]
Router -->|任务| Task[任务工具集]
Cal --> OA[(企业 OA / 日历 / 邮件 / IM)]
Mail --> OA
Doc --> OA
Mtg --> OA
Task --> OA
Exec --> Reply[回复用户]
Reply --> Memory[(用户长期记忆)]
图:AI 办公助理架构,含任务规划、人工确认、技能路由与多工具集成
示例代码¶
以下代码演示一个简化版办公助理,含任务规划、写操作确认与技能路由。
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass
class Action:
"""Agent 生成的操作计划。"""
tool: str
params: dict
write: bool = False # 是否写操作
# 模拟工具实现
def create_event(params: dict) -> str:
return f"已创建日程:{params.get('title')} @ {params.get('time')}"
def send_email(params: dict) -> str:
return f"已发送邮件至 {params.get('to')}:{params.get('subject')}"
def query_schedule(params: dict) -> str:
return f"{params.get('date')} 您有 3 个会议:09:00 周会、14:00 评审、16:00 1on1"
def summarize_doc(params: dict) -> str:
return f"文档摘要:{params.get('doc_name')} 主要内容为 Q3 业绩复盘……"
TOOLS = {
"create_event": (create_event, True),
"send_email": (send_email, True),
"query_schedule": (query_schedule, False),
"summarize_doc": (summarize_doc, False),
}
@dataclass
class OfficeAssistant:
"""简化版办公助理 Agent。"""
user: str
pending: list[Action] = field(default_factory=list)
def plan(self, message: str) -> list[Action]:
"""根据用户指令生成操作计划(演示用,实际用 LLM)。"""
if "安排会议" in message:
return [Action("query_schedule", {"date": "今天"}),
Action("create_event",
{"title": "项目对齐", "time": "明天 10:00"}, write=True)]
if "发邮件" in message:
return [Action("send_email",
{"to": "team@corp.com", "subject": "周报提醒"},
write=True)]
if "总结" in message:
return [Action("summarize_doc", {"doc_name": "Q3 复盘.docx"})]
return [Action("query_schedule", {"date": "今天"})]
def execute(self, actions: list[Action]) -> list[str]:
results = []
for act in actions:
func, is_write = TOOLS[act.tool]
if is_write:
# 写操作需用户确认
self.pending.append(act)
results.append(f"[待确认] {act.tool}:{act.params},回复 Y 执行")
else:
results.append(f"[已执行] {func(act.params)}")
return results
def confirm(self, reply: str) -> list[str]:
"""用户确认写操作。"""
if reply.strip().upper() != "Y":
self.pending.clear()
return ["已取消操作"]
results = []
for act in self.pending:
func, _ = TOOLS[act.tool]
results.append(f"[已执行] {func(act.params)}")
self.pending.clear()
return results
if __name__ == "__main__":
bot = OfficeAssistant(user="alice")
print("— 规划 —")
for r in bot.execute(bot.plan("帮我安排明天的项目对齐会议")):
print(r)
print("— 确认 —")
for r in bot.confirm("Y"):
print(r)
企业案例¶
案例 1:某科技公司 OA 集成¶
该公司办公助理接入飞书日历、邮件、文档、IM 四大系统。采用 MCP 把每个系统的能力封装为独立 Server,主 Agent 通过 MCP 协议统一调用。员工可用自然语言"帮我约产品同学下周二评审这个方案,并把方案文档发给他们",助理自动查询日程、创建会议、发送文档链接,写操作需用户确认。上线后人均每周节省约 4 小时事务工时。
案例 2:某咨询公司的会议纪要自动化¶
该公司会议密集,纪要整理耗时。引入"会议纪要 Agent":接入会议系统 ASR 转写 → LLM 提取议题、决议、待办 → 自动创建任务并分发责任人 → 推送纪要到 IM。关键决策点保留人工校对节点。纪要交付周期从 2 小时缩短至 10 分钟,待办跟进率从 60% 提升至 95%。
案例 3:某金融企业的权限隔离实践¶
该企业办公助理需访问 OA、CRM、风控系统,但不同岗位权限差异大。采用"身份代理 + 工具白名单"方案:每个工具调用携带用户 token,由后端系统校验权限;Agent 启动时根据用户角色加载工具白名单,无权工具不可见。审计日志记录所有写操作,满足合规审计要求。
常见问题¶
Q1:办公助理用单 Agent 还是多 Agent? A:工具数少(< 10)用单 Agent + function calling 即可;工具多、岗位差异大时建议技能路由到子 Agent,每个子 Agent 专注一类工具,主 Agent 负责规划与分发。
Q2:如何避免助理误发邮件或误改日程? A:所有写操作必须经人工确认节点,确认前仅生成"操作预览"。同时设置操作回滚机制(如邮件可在 30 秒内撤回)。敏感操作(群发、外发)可设置二次审批。
Q3:办公助理的记忆怎么存? A:用户级长期记忆存偏好与画像(会议时段、常用模板),会话级短期记忆存当前任务上下文。长期记忆建议用向量库 + 结构化字段混合存储,便于检索与更新。
Q4:如何衡量办公助理的 ROI? A:核心指标是人均节省工时 × 时薪。可通过员工自报、操作日志对比(助理上线前后在事务系统上的耗时)来测算,并扣除助理开发与调用成本。
面试题¶
1. 描述 AI 办公助理的多工具集成三种模式及适用场景。 参考答案:直接函数调用适合工具少;MCP 服务化适合工具多、跨团队复用;技能路由适合岗位差异大、工具分类清晰。三者可组合使用。
2. 为什么办公助理的写操作必须人工确认?如何实现? 答题要点:写操作不可逆且可能影响他人(发邮件、改日程),需人工把关。实现上在 Agent 流程中插入确认节点,生成操作预览,用户批准后才执行,并保留审计日志与撤回机制。
3. 如何设计办公助理的权限与数据隔离? 参考答案:以用户身份代理调用各系统 API,遵循用户既有权限;按角色加载工具白名单;敏感数据脱敏;所有写操作审计留痕;部门间数据隔离。
练习题¶
- 工具设计:为"周报自动生成"场景列出所需工具(取数、汇总、生成、发送),并画出 Agent 编排流程图。
- 确认机制:设计一个写操作确认 UI,包含操作预览、批准/拒绝、批量确认,写出交互状态机。
- 思考题:如果助理要同时服务员工与管理者(管理者可查看下属日程),如何在不越权的前提下满足双方诉求?
小结¶
AI 办公助理是企业内部提效的关键场景,其核心是"多工具集成 + 任务编排 + 人工确认 + 权限隔离"。技术上,MCP 协议让工具集成更标准化,LangGraph 的状态图让写操作确认与回退流程清晰可控;业务上,权限管控与审计是底线,个性化记忆是体验加分项。衡量成功的最终标准是人均节省工时与员工满意度。下一章我们将进入开发者场景——AI 编程助手。