【AI面试临阵磨枪-39】设计一个办公助手 Agent(日程、文档、邮件、会议)的完整方案

一、面试题目

面试官:请你设计一个办公助手 AI Agent 的完整方案,需覆盖日程管理、文档处理、邮件管理、会议协同四大核心办公场景,明确其核心定位、工具集设计、完整业务流程、工程落地要点,确保能真正提升办公效率、降低事务性工作成本。

二、知识储备

1. 办公助手 Agent 核心定位

聚焦职场人日常办公高频事务,替代人工完成日程管理、文档处理、邮件收发、会议协同 等重复性、事务性工作,核心目标:解放双手、简化流程、提升办公效率、实现办公事务自动化闭环,让用户专注核心工作(决策、创作、沟通)。

核心约束:需对接企业办公系统(如企业微信、飞书、钉钉、WPS、Outlook),支持多系统数据同步,保证办公数据(日程、文档、邮件)的安全性、私密性,操作可追溯、可撤销。

2. 核心工具集设计(Function Call 标准化定义)

按 "日程、文档、邮件、会议" 四大场景分类,每个工具明确功能描述、参数约束、调用场景,贴合职场实际办公需求,避免冗余,确保 Agent 可精准调用、高效执行。

(一)日程管理类工具(核心场景:时间规划)

1. 日程查询工具(query_schedule)
  • 功能描述:根据用户需求,查询指定时间段(今日 / 明日 / 本周 / 自定义)的日程安排,返回日程详情(时间、主题、参与人、地点 / 会议链接、备注);支持按参与人、日程类型筛选。
  • 参数定义:表格

|-------------|--------|------------------------------|------------------------|--------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| time_range | string | 时间范围(枚举) | 是 | 今日 / 明日 / 本周 / 自定义 |
| start_time | string | 自定义开始时间(格式:YYYY-MM-DD HH:MM) | 可选(time_range 为自定义时必选) | 2026-05-01 09:00 |
| end_time | string | 自定义结束时间(格式:YYYY-MM-DD HH:MM) | 可选(time_range 为自定义时必选) | 2026-05-01 18:00 |
| participant | string | 参与人姓名 / 工号 | 可选 | 张三 / 10001 |

  • 返回结果:日程列表(含每一条日程的时间、主题、参与人、地点 / 链接、备注)、空闲时间段提示。
  • 调用场景:用户询问 "今日日程""明天有什么会""本周和张三的会议安排" 时调用。
2. 日程创建工具(create_schedule)
  • 功能描述:根据用户需求,创建新日程,自动同步至用户办公系统(如飞书 / 企业微信),并给参与人发送邀请;支持设置提醒、重复日程(每日 / 每周 / 每月)。
  • 参数定义:表格

|----------------|--------|---------------------------|----------------|-----------------------------------------------------------------------------------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| schedule_topic | string | 日程主题 | 是 | 产品需求评审会 |
| start_time | string | 开始时间(格式:YYYY-MM-DD HH:MM) | 是 | 2026-05-02 10:00 |
| end_time | string | 结束时间(格式:YYYY-MM-DD HH:MM) | 是 | 2026-05-02 11:30 |
| participants | array | 参与人列表(姓名 / 工号) | 可选 | ["张三", "李四", "10003"] |
| location | string | 地点 / 会议链接 | 可选 | 会议室 302/https://xxx.feishu.cn/meet |
| reminder | int | 提醒时间(提前 N 分钟) | 可选(默认提前 15 分钟) | 30 |
| repeat | string | 重复规则(枚举) | 可选 | 无 / 每日 / 每周一 / 每月 1 号 |
| remark | string | 日程备注 | 可选 | 请携带需求文档参会 |

  • 返回结果:日程 ID、创建状态、邀请发送状态、日程详情。
  • 调用场景:用户说 "帮我明天 10 点创建一个产品评审会,邀请张三、李四,提前 30 分钟提醒" 时调用。
3. 日程修改 / 删除工具(update_delete_schedule)
  • 功能描述:修改已有日程的时间、参与人、主题等信息,或删除指定日程;修改后自动同步给所有参与人,删除后通知参与人。
  • 参数定义:表格

|-------------|--------|---------------------|--------|--------------------------------------------------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| schedule_id | string | 日程唯一 ID | 是 | sch123456789 |
| operation | string | 操作类型(枚举) | 是 | 修改 / 删除 |
| update_info | object | 修改信息(仅操作为 "修改" 时必选) | 可选 | {"start_time": "2026-05-02 10:30", "participants": ["张三"]} |

  • 返回结果:操作状态、修改后的日程详情(仅修改时)、通知发送状态。
  • 调用场景:用户说 "把明天 10 点的评审会改到 10 点 30 分""删除后天下午的会议" 时调用。

(二)文档处理类工具(核心场景:文档协作)

1. 文档查询 / 检索工具(query_document)
  • 功能描述:根据用户关键词,检索用户有权限访问的办公文档(WPS / 飞书文档 / 钉钉文档),返回文档列表、文档链接、文档摘要;支持按文档类型(文档 / 表格 / 幻灯片)、创建时间筛选。
  • 参数定义:表格

|-------------|--------|----------|--------|----------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| keyword | string | 检索关键词 | 是 | 产品需求文档 |
| doc_type | string | 文档类型(枚举) | 可选 | 文档 / 表格 / 幻灯片 / 全部 |
| create_time | string | 创建时间范围 | 可选 | 近 7 天 / 近 30 天 / 自定义 |

  • 返回结果:文档列表(含文档名称、创建人、创建时间、文档链接、简要摘要)。
  • 调用场景:用户说 "帮我找一下最近的产品需求文档""检索张三创建的表格" 时调用。
2. 文档创建 / 编辑工具(create_edit_document)
  • 功能描述:根据用户需求,创建新文档(文档 / 表格 / 幻灯片),或编辑已有文档(添加内容、修改段落、插入表格);支持模板选择(如会议纪要模板、周报模板)。
  • 参数定义:表格

|-----------|--------|-----------------|--------|------------------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| doc_title | string | 文档标题 | 是 | 2026 年 4 月周报 |
| doc_type | string | 文档类型(枚举) | 是 | 文档 / 表格 / 幻灯片 |
| template | string | 文档模板(枚举) | 可选 | 周报模板 / 会议纪要模板 / 空白模板 |
| content | string | 文档内容(支持简单格式) | 可选 | 本周工作:1. 完成 XX 任务;2. 推进 XX 项目 |
| doc_id | string | 已有文档 ID(仅编辑时必选) | 可选 | doc123456789 |
| edit_type | string | 编辑类型(枚举,仅编辑时必选) | 可选 | 添加内容 / 修改内容 / 删除内容 |

  • 返回结果:文档 ID、文档链接、操作状态(创建 / 编辑成功)。
  • 调用场景:用户说 "帮我创建一个本周周报,用周报模板,内容包括完成 XX 任务""修改文档 doc123456789,添加一段项目进度" 时调用。
3. 文档共享 / 导出工具(share_export_document)
  • 功能描述:将指定文档共享给指定用户(设置查看 / 编辑权限),或导出文档(格式:PDF/Word/Excel);支持生成临时共享链接。
  • 参数定义:表格

|---------------|--------|----------------------|--------|-------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| doc_id | string | 文档唯一 ID | 是 | doc123456789 |
| operation | string | 操作类型(枚举) | 是 | 共享 / 导出 |
| share_users | array | 共享用户(姓名 / 工号,仅共享时必选) | 可选 | ["张三", "10003"] |
| permission | string | 共享权限(枚举,仅共享时必选) | 可选 | 查看 / 编辑 |
| export_format | string | 导出格式(枚举,仅导出时必选) | 可选 | PDF/Word/Excel |

  • 返回结果:操作状态、共享链接(仅共享时)、导出文件链接(仅导出时)。
  • 调用场景:用户说 "把文档 doc123456789 共享给张三,给编辑权限""导出这份文档为 PDF 格式" 时调用。

(三)邮件管理类工具(核心场景:邮件协同)

1. 邮件查询 / 接收工具(query_receive_email)
  • 功能描述:查询用户邮箱(企业邮箱 / Outlook)的邮件,支持按收件箱 / 已发送 / 草稿箱 / 垃圾箱筛选,按发件人、关键词、时间范围检索;接收新邮件时自动提醒用户。
  • 参数定义:表格

|------------|--------|----------------------|--------|-----------------------------------------------------------------------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| mail_box | string | 邮箱文件夹(枚举) | 是 | 收件箱 / 已发送 / 草稿箱 / 垃圾箱 |
| keyword | string | 检索关键词(主题 / 发件人 / 内容) | 可选 | 项目进度 / 张三 |
| sender | string | 发件人邮箱 / 姓名 | 可选 | zhangsan@company.com/ 张三 |
| time_range | string | 时间范围 | 可选 | 今日 / 近 3 天 / 近 7 天 |

  • 返回结果:邮件列表(含邮件主题、发件人、发送时间、邮件摘要、附件提示)。
  • 调用场景:用户说 "帮我看看今天的收件箱邮件""找一下张三发的关于项目进度的邮件" 时调用。
2. 邮件发送工具(send_email)
  • 功能描述:根据用户需求,撰写并发送邮件,支持添加附件、抄送 / 密送,设置发送时间(立即发送 / 定时发送);自动校验收件人邮箱格式。
  • 参数定义:表格

|------------|--------|---------------|----------|------------------------------------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| recipient | array | 收件人邮箱列表 | 是 | ["zhangsan@company.com", "lisi@company.com"] |
| subject | string | 邮件主题 | 是 | 项目进度同步邮件 |
| content | string | 邮件内容(支持简单格式) | 是 | 各位同事,现将本周项目进度同步如下:... |
| cc | array | 抄送邮箱列表 | 可选 | ["wangwu@company.com"] |
| bcc | array | 密送邮箱列表 | 可选 | ["admin@company.com"] |
| attachment | array | 附件路径 / 链接 | 可选 | ["/docs/ 项目进度.xlsx"] |
| send_time | string | 发送时间(立即 / 定时) | 可选(默认立即) | 2026-05-03 09:00 |

  • 返回结果:邮件发送状态、邮件 ID、发送时间。
  • 调用场景:用户说 "给张三、李四发一封项目进度同步邮件,主题是项目进度同步,内容是...,抄送王五" 时调用。
3. 邮件回复 / 转发工具(reply_forward_email)
  • 功能描述:回复指定邮件(全部回复 / 回复发件人),或转发指定邮件给其他用户;支持编辑回复 / 转发内容,添加附件。
  • 参数定义:表格

|------------|--------|-----------------|--------|--------------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| mail_id | string | 邮件唯一 ID | 是 | mail123456789 |
| operation | string | 操作类型(枚举) | 是 | 回复 / 转发 |
| reply_type | string | 回复类型(枚举,仅回复时必选) | 可选 | 回复发件人 / 全部回复 |
| recipient | array | 转发收件人邮箱(仅转发时必选) | 可选 | ["wangwu@company.com"] |
| content | string | 回复 / 转发内容 | 是 | 已收到,将尽快处理。 |
| attachment | array | 附件路径 / 链接 | 可选 | ["/docs/ 回复附件.xlsx"] |

  • 返回结果:操作状态、邮件 ID。
  • 调用场景:用户说 "回复张三刚才发的邮件,内容是已收到,将尽快处理""把这封邮件转发给王五" 时调用。

(四)会议协同类工具(核心场景:会议高效开展)

1. 会议安排工具(arrange_meeting)
  • 功能描述:整合日程、邮件、文档工具,完成会议全流程安排:创建会议日程→发送会议邀请(邮件 / 日程邀请)→创建会议纪要文档→同步会议链接,支持设置会议议程。
  • 参数定义:表格

|------------------|--------|---------------------|--------|---------------------------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| meeting_topic | string | 会议主题 | 是 | 产品上线复盘会 |
| start_time | string | 会议开始时间 | 是 | 2026-05-04 14:00 |
| end_time | string | 会议结束时间 | 是 | 2026-05-04 15:30 |
| participants | array | 参会人列表(姓名 / 工号 / 邮箱) | 是 | ["张三", "lisi@company.com", "10003"] |
| location | string | 会议地点 / 链接 | 是 | 线上会议链接:https://xxx/meet |
| agenda | array | 会议议程 | 可选 | ["1. 上线成果复盘;2. 问题总结;3. 后续计划"] |
| minutes_template | string | 会议纪要模板 | 可选 | 复盘会纪要模板 |

  • 返回结果:会议日程 ID、会议邀请发送状态、会议纪要文档链接、会议详情。
  • 调用场景:用户说 "帮我安排一场产品上线复盘会,明天 14 点开始,邀请张三、李四,线上会议,议程包括成果复盘、问题总结" 时调用。
2. 会议纪要生成工具(generate_meeting_minutes)
  • 功能描述:根据会议录音 / 会议笔记,自动生成会议纪要(提炼会议主题、参会人、议程完成情况、决议事项、待办任务),支持手动编辑优化,同步至参会人。
  • 参数定义:表格

|-----------------|--------|----------------|--------|----------------------------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| meeting_id | string | 会议日程 ID | 是 | sch123456789 |
| meeting_content | string | 会议录音转文字 / 会议笔记 | 是 | 会议内容:1. 张三汇报上线成果... |
| assignee | object | 待办任务分配(可选) | 可选 | {"张三": "整理问题清单", "李四": "推进优化方案"} |

  • 返回结果:会议纪要文档 ID、文档链接、待办任务列表、同步状态。
  • 调用场景:用户说 "根据刚才的会议录音,生成会议纪要,待办任务分配给张三和李四" 时调用。
3. 会议待办跟踪工具(track_meeting_todo)
  • 功能描述:跟踪会议纪要中的待办任务,提醒待办人任务截止时间,查询待办任务进度(未开始 / 进行中 / 已完成),同步待办状态给会议发起人。
  • 参数定义:表格

|------------|--------|--------------------|--------|--------------|
| 参数名 | 类型 | 描述 | 必选 | 示例 |
| minutes_id | string | 会议纪要文档 ID | 是 | doc123456789 |
| todo_id | string | 待办任务 ID(可选,查询单个待办) | 可选 | todo123 |
| assignee | string | 待办人(可选,查询指定人待办) | 可选 | 张三 |

  • 返回结果:待办任务列表(含任务内容、负责人、截止时间、进度)、提醒状态。
  • 调用场景:用户说 "查一下上次复盘会的待办任务进度""提醒李四完成他的待办任务" 时调用。

3. 完整业务流程(标准化闭环,Agent 自动执行)

核心流程:用户需求接入 → 意图识别 → 工具调用 → 执行反馈 → 闭环结束

步骤 1:用户需求接入与意图识别(触发起点)
  • 用户通过办公软件(飞书 / 企业微信)发送办公需求(如 "帮我安排明天的会议""找一下上周的周报""回复张三的邮件");
  • Agent 调用意图识别模块,结合上下文记忆,精准判断需求所属场景(日程 / 文档 / 邮件 / 会议)及具体操作(查询 / 创建 / 修改 / 发送等);
  • 若需求模糊(如 "帮我处理一下文档"),Agent 主动追问,获取关键信息(文档类型、操作内容、相关参数),避免瞎执行。
步骤 2:工具调用与执行(核心环节)
  • 根据识别的意图,自动调用对应场景的工具,按参数约束校验用户提供的信息(如邮箱格式、时间格式),缺失参数则渐进式追问;
  • 复杂需求(如会议安排)自动联动多工具:调用日程创建工具→邮件发送工具→文档创建工具,完成全流程执行;
  • 执行过程中,实时反馈进度(如 "正在创建会议日程""邮件正在发送中"),若工具调用失败(如系统对接异常),自动重试 2 次,仍失败则提示用户并提供备选方案。
步骤 3:执行结果反馈与优化
  • 工具执行完成后,返回清晰的结果(如日程链接、文档链接、邮件发送状态),告知用户操作已完成;
  • 询问用户是否需要进一步操作(如 "会议安排已完成,需要生成会议纪要模板吗?""文档已创建,需要添加内容吗?");
  • 若用户对结果不满意(如 "日程时间错了""邮件内容有误"),调用对应修改工具,快速调整,直至用户确认。
步骤 4:闭环管理与记忆沉淀
  • 每一次操作结果(日程、文档、邮件、会议)自动同步至 Agent 长期记忆,关联用户习惯(如用户常用的会议模板、邮件签名);
  • 定期提醒用户(如日程提醒、待办任务提醒、未读邮件提醒),形成自动化办公闭环;
  • 记录用户操作日志,便于后续排查问题、优化 Agent 处理逻辑(如用户高频需求优先优化)。
步骤 5:异常处理(容错机制)
  • 工具调用失败:重试 2 次,仍失败则提示用户 "当前操作失败,请稍后重试",并同步失败原因;
  • 参数错误(如时间格式错误、邮箱无效):实时提示用户,引导用户修正参数;
  • 权限不足(如无法访问某文档、无法发送邮件):提示用户 "权限不足,请联系管理员授权";
  • 复杂需求(如复杂文档编辑、多参会人冲突协调):自动转接人工助理,同步当前操作进度,避免耽误用户时间。

4. 工程落地关键要点(面试高分重点)

  • 多系统对接:需无缝对接企业常用办公系统(飞书、企业微信、WPS、Outlook 等),采用标准化接口,确保数据同步实时、准确,避免数据不一致;
  • 数据安全与隐私:办公数据(日程、文档、邮件)属于企业敏感信息,需加密存储、加密传输,严格控制权限,仅用户本人可访问自己的办公数据,操作日志可追溯;
  • 上下文记忆与用户习惯适配:记住用户常用操作(如常用会议模板、邮件签名、日程提醒时间),避免重复追问,提升使用体验;
  • 意图识别精准度:优化意图识别模型,覆盖模糊需求、多意图混杂场景(如 "帮我安排会议并生成纪要"),确保工具调用精准,不出现误调用;
  • 人工协同兜底:明确 Agent 与人工助理的边界,Agent 处理标准化、重复性工作,复杂需求(如复杂文档编辑、会议冲突协调)快速转接人工,同步操作进度,不拖延;
  • 可扩展性:工具集设计预留扩展接口,后续可新增办公场景(如考勤管理、报销处理),无需重构整体架构;
  • 稳定性与监控:搭建全链路监控,实时监控工具调用状态、系统对接状态,出现异常及时告警,确保 Agent 稳定运行,避免影响用户办公。

5. 高频场景覆盖(确保实用性)

  • 场景 1:用户说 "帮我查询明天的日程" → 调用日程查询工具→返回明日日程列表 + 空闲时间;
  • 场景 2:用户说 "帮我安排一场明天 10 点的项目会议,邀请张三、李四,线上会议,会后生成纪要" → 调用会议安排工具→创建日程→发送邀请→创建纪要模板→反馈结果;
  • 场景 3:用户说 "找一下最近一周张三发的关于项目进度的邮件" → 调用邮件查询工具→检索相关邮件→返回邮件列表;
  • 场景 4:用户说 "帮我创建一份本周周报,用周报模板,内容包括完成 XX 任务、推进 XX 项目" → 调用文档创建工具→选择模板→填充内容→返回文档链接;
  • 场景 5:用户说 "提醒我明天下午 3 点的会议,提前 20 分钟提醒" → 调用日程修改工具→设置提醒→反馈设置结果。

三、破局之道

面试高阶表述:设计办公助手 Agent,核心不是 "功能堆砌",而是 "贴合职场实际、解决真实痛点、提升办公效率"。职场人每天花费大量时间在日程、文档、邮件、会议等事务性工作上,Agent 的核心价值就是 "替代人工做重复事、简化流程省时间"。

工具集设计要遵循 "单一职责、精准调用" 原则,每个工具只解决一个具体问题,避免功能冗余;业务流程要标准化、自动化,实现 "用户一句话,Agent 全搞定",减少用户操作步骤;工程落地的关键的是 "多系统对接、数据安全、精准意图识别",既要保证 Agent 能无缝对接企业现有办公系统,又要确保办公数据安全,同时精准理解用户需求,不瞎执行、不添乱。

本质上,办公助手 Agent 是 "办公系统的连接器、事务性工作的自动化引擎",核心目标是让用户从繁琐的事务性工作中解放出来,专注核心工作,这也是 Agent 能在企业办公场景落地的核心价值。好的办公助手 Agent,应该是 "隐形的助理",无需用户过多操作,就能主动、高效完成办公事务。

四、代码实现(Python 极简演示,贴合工具调用与流程)

python 复制代码
# 模拟办公助手 Agent 工具集与流程
def llm(prompt):
    # 模拟大模型调用,返回结构化意图/工具调用指令
    return prompt

# 1. 工具集实现(模拟对接办公系统)
class OfficeAssistantTools:
    # 日程管理工具
    def query_schedule(self, time_range, start_time=None, end_time=None, participant=None):
        # 模拟对接日程系统,返回日程详情
        return {
            "schedule_list": [
                {
                    "start_time": "2026-05-02 10:00",
                    "end_time": "2026-05-02 11:30",
                    "topic": "产品需求评审会",
                    "participants": ["张三", "李四"],
                    "location": "线上会议链接:https://xxx/meet",
                    "remark": "请携带需求文档参会"
                }
            ],
            "free_time": "2026-05-02 09:00-10:00, 14:00-16:00"
        }

    def create_schedule(self, schedule_topic, start_time, end_time, participants=None, location=None, reminder=15):
        return {
            "schedule_id": "sch123456789",
            "status": "创建成功",
            "invite_status": "已发送",
            "schedule_detail": {
                "topic": schedule_topic,
                "start_time": start_time,
                "end_time": end_time,
                "participants": participants or [],
                "location": location,
                "reminder": f"提前{reminder}分钟提醒"
            }
        }

    # 文档处理工具
    def query_document(self, keyword, doc_type="全部"):
        return {
            "document_list": [
                {
                    "doc_title": "2026年4月周报",
                    "create_time": "2026-04-30",
                    "creator": "张三",
                    "doc_type": "文档",
                    "doc_link": "https://xxx.wps.cn/doc/123",
                    "summary": "本周完成XX任务,推进XX项目"
                }
            ]
        }

    def create_edit_document(self, doc_title, doc_type, template="空白模板", content=None, doc_id=None):
        return {
            "doc_id": "doc123456789",
            "doc_link": "https://xxx.wps.cn/doc/123",
            "status": "创建成功" if not doc_id else "编辑成功"
        }

    # 邮件管理工具
    def send_email(self, recipient, subject, content, cc=None):
        return {
            "status": "发送成功",
            "mail_id": "mail123456789",
            "send_time": "2026-05-01 15:30"
        }

    # 会议协同工具
    def arrange_meeting(self, meeting_topic, start_time, end_time, participants, location):
        # 联动日程、邮件、文档工具
        schedule_res = self.create_schedule(meeting_topic, start_time, end_time, participants, location)
        email_res = self.send_email(participants, f"会议邀请:{meeting_topic}", f"会议时间:{start_time},地点:{location}")
        doc_res = self.create_edit_document(f"{meeting_topic}纪要", "文档", template="会议纪要模板")
        return {
            "meeting_status": "安排成功",
            "schedule_id": schedule_res["schedule_id"],
            "mail_status": email_res["status"],
            "minutes_link": doc_res["doc_link"]
        }

# 2. 办公助手 Agent 核心流程
class OfficeAssistantAgent:
    def __init__(self):
        self.tools = OfficeAssistantTools()
        self.user_intent = None  # 用户意图
        self.user_context = {}   # 用户上下文(记忆)

    # 步骤1:意图识别
    def recognize_intent(self, user_query):
        # 模拟大模型识别意图,覆盖四大场景
        if "日程" in user_query or "会议" in user_query:
            if "查询" in user_query:
                return "日程查询"
            elif "创建" in user_query or "安排" in user_query:
                return "会议安排" or "日程创建"
            elif "修改" in user_query or "删除" in user_query:
                return "日程修改/删除"
        elif "文档" in user_query:
            if "查询" in user_query or "找" in user_query:
                return "文档查询"
            elif "创建" in user_query or "编辑" in user_query:
                return "文档创建/编辑"
        elif "邮件" in user_query:
            if "查" in user_query or "接收" in user_query:
                return "邮件查询"
            elif "发送" in user_query:
                return "邮件发送"
            elif "回复" in user_query or "转发" in user_query:
                return "邮件回复/转发"
        else:
            return "模糊意图"

    # 步骤2:参数获取与工具调用
    def get_params_and_call_tool(self, intent, user_query):
        # 模拟获取用户需求中的参数(实际场景中由LLM提取)
        if intent == "日程查询":
            return self.tools.query_schedule(time_range="明日")
        elif intent == "会议安排":
            return self.tools.arrange_meeting(
                meeting_topic="项目进度会",
                start_time="2026-05-02 14:00",
                end_time="2026-05-02 15:30",
                participants=["张三", "李四"],
                location="https://xxx/meet"
            )
        elif intent == "文档查询":
            return self.tools.query_document(keyword="周报")
        elif intent == "邮件发送":
            return self.tools.send_email(
                recipient=["zhangsan@company.com"],
                subject="周报同步",
                content="本周周报已发送,请查收。",
                cc=["lisi@company.com"]
            )
        else:
            return "请补充具体需求,我将快速为你处理"

    # 完整运行闭环
    def run(self, user_query):
        # 1. 意图识别
        self.user_intent = self.recognize_intent(user_query)
        if self.user_intent == "模糊意图":
            return "请说明具体办公需求(如日程、文档、邮件、会议相关),我将为你处理"
        # 2. 参数获取与工具调用
        result = self.get_params_and_call_tool(self.user_intent, user_query)
        # 3. 结果反馈
        return f"操作已完成,结果如下:{result}"

# 测试:模拟用户安排会议
agent = OfficeAssistantAgent()
print(agent.run("帮我安排一场明天14点的项目进度会,邀请张三、李四,线上会议"))

JavaScript 版本

javascript 复制代码
// 模拟办公助手工具集
class OfficeAssistantTools {
  // 日程查询
  querySchedule(timeRange, startTime = null, endTime = null, participant = null) {
    return {
      scheduleList: [
        {
          startTime: "2026-05-02 10:00",
          endTime: "2026-05-02 11:30",
          topic: "产品需求评审会",
          participants: ["张三", "李四"],
          location: "线上会议链接:https://xxx/meet",
          remark: "请携带需求文档参会"
        }
      ],
      freeTime: "2026-05-02 09:00-10:00, 14:00-16:00"
    };
  }

  // 创建日程
  createSchedule(scheduleTopic, startTime, endTime, participants = [], location = null, reminder = 15) {
    return {
      scheduleId: "sch123456789",
      status: "创建成功",
      inviteStatus: "已发送",
      scheduleDetail: {
        topic: scheduleTopic,
        startTime,
        endTime,
        participants,
        location,
        reminder: `提前${reminder}分钟提醒`
      }
    };
  }

  // 文档查询
  queryDocument(keyword, docType = "全部") {
    return {
      documentList: [
        {
          docTitle: "2026年4月周报",
          createTime: "2026-04-30",
          creator: "张三",
          docType: "文档",
          docLink: "https://xxx.wps.cn/doc/123",
          summary: "本周完成XX任务,推进XX项目"
        }
      ]
    };
  }

  // 创建文档
  createEditDocument(docTitle, docType, template = "空白模板", content = null, docId = null) {
    return {
      docId: "doc123456789",
      docLink: "https://xxx.wps.cn/doc/123",
      status: docId ? "编辑成功" : "创建成功"
    };
  }

  // 发送邮件
  sendEmail(recipient, subject, content, cc = []) {
    return {
      status: "发送成功",
      mailId: "mail123456789",
      sendTime: "2026-05-01 15:30"
    };
  }

  // 安排会议(联动多工具)
  arrangeMeeting(meetingTopic, startTime, endTime, participants, location) {
    const scheduleRes = this.createSchedule(meetingTopic, startTime, endTime, participants, location);
    const emailRes = this.sendEmail(participants, `会议邀请:${meetingTopic}`, `会议时间:${startTime},地点:${location}`);
    const docRes = this.createEditDocument(`${meetingTopic}纪要`, "文档", "会议纪要模板");
    return {
      meetingStatus: "安排成功",
      scheduleId: scheduleRes.scheduleId,
      mailStatus: emailRes.status,
      minutesLink: docRes.docLink
    };
  }
}

// 办公助手Agent
class OfficeAssistantAgent {
  constructor() {
    this.tools = new OfficeAssistantTools();
    this.userIntent = null;
    this.userContext = {};
  }

  // 意图识别
  recognizeIntent(userQuery) {
    if (userQuery.includes("日程") || userQuery.includes("会议")) {
      if (userQuery.includes("查询")) return "日程查询";
      if (userQuery.includes("创建") || userQuery.includes("安排")) return "会议安排";
      if (userQuery.includes("修改") || userQuery.includes("删除")) return "日程修改/删除";
    }
    if (userQuery.includes("文档")) {
      if (userQuery.includes("查询") || userQuery.includes("找")) return "文档查询";
      if (userQuery.includes("创建") || userQuery.includes("编辑")) return "文档创建/编辑";
    }
    if (userQuery.includes("邮件")) {
      if (userQuery.includes("查") || userQuery.includes("接收")) return "邮件查询";
      if (userQuery.includes("发送")) return "邮件发送";
      if (userQuery.includes("回复") || userQuery.includes("转发")) return "邮件回复/转发";
    }
    return "模糊意图";
  }

  // 参数获取与工具调用
  getParamsAndCallTool(intent, userQuery) {
    switch (intent) {
      case "日程查询":
        return this.tools.querySchedule("明日");
      case "会议安排":
        return this.tools.arrangeMeeting(
          "项目进度会",
          "2026-05-02 14:00",
          "2026-05-02 15:30",
          ["张三", "李四"],
          "https://xxx/meet"
        );
      case "文档查询":
        return this.tools.queryDocument("周报");
      case "邮件发送":
        return this.tools.sendEmail(
          ["zhangsan@company.com"],
          "周报同步",
          "本周周报已发送,请查收。",
          ["lisi@company.com"]
        );
      default:
        return "请补充具体需求,我将快速为你处理";
    }
  }

  // 完整运行闭环
  async run(userQuery) {
    this.userIntent = this.recognizeIntent(userQuery);
    if (this.userIntent === "模糊意图") {
      return "请说明具体办公需求(如日程、文档、邮件、会议相关),我将为你处理";
    }
    const result = this.getParamsAndCallTool(this.userIntent, userQuery);
    return `操作已完成,结果如下:${JSON.stringify(result)}`;
  }
}

// 测试
const agent = new OfficeAssistantAgent();
agent.run("帮我安排一场明天14点的项目进度会,邀请张三、李四,线上会议").then(console.log);
相关推荐
Moment2 小时前
2026年,为什么NestJS + Monorepo越来越流行了 ❓❓❓
前端·后端·面试
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第35题:怎样声明一个类不会被继承?什么场景下会用
java·开发语言·后端·面试
xsgbbx2 小时前
装完 ruflo 发现它内置了 98 个 Agent——拆一下它的多智能体编排架构
面试
明天有专业课2 小时前
RAG-查询前处理
面试·aigc
Byron__2 小时前
Java并发核心面试知识点
java·面试·多线程·并发编程
.NET修仙日记2 小时前
2026 .NET 面试八股文:高频题 + 答案 + 原理(高级核心篇)
面试·职场和发展·c#·.net·.net core·.net 8
哈里谢顿3 小时前
redis的分布式设计
后端·面试
Fuly10243 小时前
技术经理面试相关--管理和沟通篇
面试·职场和发展
晨非辰3 小时前
吃透C++两大默认成员函数:const成员函数、 & 取地址运算符重载
java·大数据·开发语言·c++·人工智能·后端·面试