Files
skills/tencent-docs/smartcanvas/entry.md
T

742 lines
46 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 文档(SmartCanvas)工具完整参考文档
腾讯文档(SmartCanvas)提供了一套完整的在线文档操作工具,支持创建、编辑智能文档。**内容格式使用 MDX,向下兼容全部 Markdown 语法**——标题、列表、表格、代码块、引用、图片、链接等标准 Markdown 可直接使用,同时支持分栏、高亮块、待办等高级排版组件。
---
## 目录
- [概念说明](#概念说明)
- [创建智能文档 — create_smartcanvas_by_mdx](#创建智能文档--create_smartcanvas_by_mdx)
- [统一编辑工具(推荐)](#统一编辑工具推荐)
- [smartcanvas.get_top_level_pages - 查询顶层页面列表](#smartcanvasget_top_level_pages)
- [smartcanvas.read - 读取页面内容](#smartcanvasread)
- [smartcanvas.find - 搜索文档内容](#smartcanvasfind)
- [smartcanvas.edit - 编辑文档内容](#smartcanvasedit)
- [边界场景处理规范](#边界场景处理规范)
- [典型工作流示例](#典型工作流示例)
- [工作流一:用户指定了编辑位置(有查询意图)](#工作流一用户指定了编辑位置有查询意图)
- [工作流二:用户未指定编辑位置(无查询意图)](#工作流二用户未指定编辑位置无查询意图)
- [工作流三:在「XXX」后插入内容](#工作流三在xxx后插入内容)
- [工作流四:修改「XXX」为新内容](#工作流四修改xxx为新内容)
- [工作流五:删除「XXX」](#工作流五删除xxx)
- [工作流六:直接追加内容到文档末尾](#工作流六直接追加内容到文档末尾)
- [工作流七:创建分栏布局](#工作流七创建分栏布局)
- [工作流八:向已有分栏中添加内容](#工作流八向已有分栏中添加内容)
- [工作流九:修改分栏列数或宽度比例](#工作流九修改分栏列数或宽度比例)
---
## 概念说明
| 概念 | 说明 |
|------|------|
| `file_id` | 文档的唯一标识符,每个文档有唯一的 file_id |
| `page_id` | 页面 ID,Page 是文档的基本容器单元,可通过 `smartcanvas.read` 读取页面内容 |
| `Block ID` | 块 ID`smartcanvas.read` / `smartcanvas.find` 返回的 MDX 中 `id` 属性值,用于 `smartcanvas.edit` 定位锚点 |
**文档结构**
```
file_id(文档)
└── Page(页面)
├── Heading(标题,level 1-6
├── Paragraph / Text(段落/文本)
├── BulletedList / NumberedList(列表)
├── Todo(待办事项)
├── Table(表格)
├── Callout(高亮块)
├── ColumnList(分栏布局)
├── Image(图片)
└── ...(更多组件详见 mdx_references.md
```
> ⚠️ **重要约束**
> - 所有内容块(Block)必须挂载在 `Page` 下
> - `Page` 可以不指定父节点(挂载到根节点)
> - 完整的组件列表和规范详见 `mdx_references.md`
---
## 创建智能文档 — create_smartcanvas_by_mdx
**【创建文档的首选工具】** 创建排版丰富的在线智能文档。
**【格式说明】** 统一使用 mdx 格式(`content_format="mdx"`,默认值,无需显式传入)。
- **MDX 向下兼容全部 Markdown 语法**:标题、列表、表格、代码块、引用、图片、链接等标准 md 语法可直接写入 `mdx` 字段,无需转换
- **MDX 同时支持高级组件**:分栏布局 `ColumnList`、高亮块 `Callout`、待办列表 `Todo`、表格 `Table`、带样式文本 `Mark` 等丰富排版组件,适用于需要复杂排版和视觉效果的场景
- 生成包含 MDX 高级组件的内容时,须严格遵循 `mdx_references.md` 规范,并对照规范逐条自校验;纯 Markdown 语法无此约束
**【图片约束】** 所有图片禁止直接使用 http/https 外链,必须先调用 `upload_image` 工具上传获取 `image_id`,再填入对应位置:
- **MDX 组件**:封面图 `cover: image_id值`,正文图片 `<Image src='image_id值' alt='描述' />`
- **标准 Markdown 图片**`![描述](image_id值)`
- 如果图片过大导致上传失败,必须先本地压缩图片再重新上传,严禁回退使用 URL。
**📖 MDX 规范详见:** `mdx_references.md`
### 工作流
【统一使用 mdx 格式(content_format 默认 "mdx",兼容全部 Markdown 语法)】
步骤 1:【模板匹配 - 必须优先执行】
根据用户需求,在下方【模板列表】中查找最匹配的模板:
匹配优先级:精确匹配 > 场景匹配 > 分类匹配 > 通用生成
- 精确匹配:用户需求与模板标题高度一致 → 直接读取对应引用文件
- 场景匹配:用户需求与模板场景相符但细节不同 → 读取最接近的模板文件作为结构参考
- 分类匹配:用户需求属于某分类但无精确模板 → 读取同类模板文件参考结构
- 通用生成:无匹配模板 → 跳过,直接进入步骤 2 自由生成
【找到匹配模板】→ 读取 smartcanvas/template/<引用文件名>
- 以模板的 frontmatter 配置(icon、layout 等)为参考
- 以模板的章节结构和 MDX 组件类型为骨架
- ⚠️ 将模板中所有示例数据替换为用户实际信息,禁止照搬示例内容
【模板列表】
| # | 模板标题 | 示例 Prompt | 引用文件 |
|---|----------|------------|----------|
| 1 | 阶段性工作总结 | 帮我生成一份Q1季度阶段性工作总结,岗位为市场运营,总结内容包括本季度核心目标达成情况、关键项目进展与成果、数据指标对比分析、团队协作亮点、存在的不足与改进方向、下一阶段工作规划,要有具体的数据支撑和案例说明。 | `q1_quarterly_marketing_operations_summary.mdx` |
| 2 | 晋升述职报告 | 帮我生成一份从P6晋升P7的述职报告,岗位为后端开发工程师,内容包括个人基本信息与晋升时间线、核心项目经历及个人贡献、技术能力成长与突破、业务价值创造与量化成果、团队影响力与mentor经验、未来发展规划与目标,突出技术深度和业务影响力。 | `p6_to_p7_promotion_report.mdx` |
| 3 | 实习生实习报告 | 帮我生成一份大三暑期实习报告,实习岗位为数据分析实习生,实习单位为一家互联网科技公司,内容包括实习单位简介、实习岗位职责、主要参与的项目与工作内容、学到的技能与工具、遇到的挑战与解决过程、个人成长与收获、对未来职业发展的思考。 | `summer_internship_report_data_analyst.mdx` |
| 4 | 试用期转正总结 | 帮我生成一份为期三个月的试用期转正工作总结,岗位为UI设计师,内容包括试用期工作概述、主要参与项目及设计成果、工作技能提升情况、团队协作与沟通表现、对公司文化的理解与融入、自我评价与不足反思、转正后的工作目标与计划。 | `ui_designer_probation_summary.mdx` |
| 5 | 项目复盘报告 | 帮我生成一份App 2.0版本改版项目的复盘报告,内容包括项目背景与目标、项目时间线与里程碑、核心成果与数据表现、项目过程中的亮点与创新、遇到的问题与踩坑记录、根因分析与改进措施、经验教训总结、后续迭代建议。 | `app_2_project_retrospective.mdx` |
| 6 | 品牌宣传方案 | 帮我生成一份新消费茶饮品牌的年度品牌宣传方案,品牌定位为年轻时尚健康,目标受众为18-30岁都市年轻人,内容包括品牌现状分析、年度宣传目标、核心传播策略、线上线下整合营销计划、KOL及社交媒体投放策略、重点campaign创意概念、预算分配建议、效果评估指标,全面地展示所有信息,整体篇幅约4000字。 | `new_tea_brand_annual_promotion_plan.mdx` |
| 7 | 产品需求文档 | 帮我生成一份电商平台会员积分系统的产品需求文档(PRD),内容包括需求背景与目标、用户场景分析、功能范围与优先级、核心功能详细描述(积分获取规则、积分消耗方式、会员等级体系、积分商城)、业务流程图说明、数据埋点需求、非功能性需求、版本迭代规划。 | `ecommerce_membership_points_prd.mdx` |
| 8 | 市场营销推广方案 | 帮我生成一份在线教育平台暑期大促的市场营销推广方案,活动周期为一个月,内容包括市场环境分析、目标用户画像、活动主题与核心卖点、推广渠道策略(信息流广告、社交媒体、KOL合作、社群运营)、促销机制设计、内容营销计划、预算分配与ROI预估、执行时间表、风险预案,论据充分,篇幅不少于4000字。 | `online_education_summer_marketing_plan.mdx` |
| 9 | 活动策划方案 | 帮我生成一份公司五周年庆典活动策划方案,参与人数约200人,包含线下晚宴和团建环节,内容包括活动主题与定位、时间地点安排、活动流程与环节设计(签到、开场表演、领导致辞、颁奖典礼、互动游戏、抽奖、晚宴)、场地布置方案、物料清单、人员分工、预算明细、应急预案。 | `company_5th_anniversary_event_plan.mdx` |
| 10 | 运营规划方案 | 帮我生成一份社区团购小程序的年度运营规划方案,内容包括业务现状与数据分析、年度运营目标与KPI拆解、用户增长策略、用户留存与活跃策略、供应链运营优化、团长管理体系、内容运营计划、数据驱动运营体系搭建、季度里程碑与资源需求、风险评估与应对策略。 | `community_group_buying_annual_operation_plan.mdx` |
| 11 | 商业计划书 | 帮我生成一份智能家居IoT创业项目的商业计划书,内容包括执行摘要、公司简介与愿景、市场分析与行业趋势、目标市场与用户画像、产品与服务介绍、核心竞争优势与壁垒、商业模式与盈利方式、营销与推广策略、团队介绍、财务预测与融资需求、风险分析与应对措施、发展规划与里程碑,整体篇幅在4000字左右。 | `smart_home_iot_business_plan.mdx` |
| 12 | 个人自媒体运营方案 | 帮我生成一份个人美食探店类自媒体账号的运营方案,目标平台为小红书和抖音,内容包括账号定位与人设打造、目标受众分析、内容规划与选题方向、拍摄与制作标准、发布频率与最佳发布时间、涨粉策略、互动运营技巧、变现路径规划、月度内容排期表、竞品账号分析与差异化策略。 | `food_review_self_media_operation_plan.mdx` |
| 13 | 副业计划 | 帮我生成一份针对上班族的知识付费副业计划,方向为职场技能培训,内容包括副业定位与目标、个人优势与资源盘点、目标受众与需求分析、产品体系设计(课程、社群、咨询)、平台选择与入驻策略、内容生产计划、推广引流方案、时间管理与精力分配、收入目标与成本预算、阶段性里程碑,整体篇幅约5000字。 | `office_worker_knowledge_side_business_plan.mdx` |
| 14 | 竞品分析报告 | 帮我生成一份短视频平台的竞品分析报告,分析对象为抖音、快手、视频号三个平台,内容包括分析目的与方法论、行业背景与市场规模、竞品基本信息对比、产品定位与核心功能对比、用户画像与用户规模、商业模式与变现能力分析、运营策略差异、技术能力对比、SWOT分析、对自身产品的策略建议,整体篇幅约5000字。 | `short_video_platform_competitive_analysis_2026.mdx` |
| 15 | 行业趋势分析报告 | 帮我生成一份2025年人工智能行业趋势分析报告,内容包括全球AI市场规模与增长趋势、核心技术发展方向(大模型、多模态、AI Agent)、重点应用场景与商业化进展、主要玩家竞争格局、投融资热点与资本动向、政策法规与监管趋势、行业面临的挑战与风险、未来3-5年趋势预测与机会点,信息要足够详细和全面,篇幅在4000-5000字。 | `2025_ai_industry_trend_analysis_report.mdx` |
| 16 | 用户调研报告 | 帮我生成一份在线办公协作工具的用户调研报告,调研方式包括问卷调查和深度访谈,内容包括调研背景与目标、调研方法与样本说明、用户基本画像分析、使用习惯与行为分析、核心需求与痛点挖掘、满意度与NPS分析、竞品使用情况对比、用户典型场景与案例、关键发现与洞察总结、产品优化建议,整体篇幅约4000字。 | `online_office_tool_user_research_report.mdx` |
| 17 | 市场可行性分析 | 帮我生成一份社区生鲜即时配送项目的市场可行性分析报告,内容包括项目概述与目标、市场环境分析(宏观环境PEST分析、行业现状)、目标市场规模测算、竞争格局与进入壁垒、目标用户需求验证、商业模式与盈利能力分析、运营模式与成本结构、风险评估与应对策略、投资回报预测、可行性结论与建议,信息应全面,论据充分,整体篇幅约5000字。 | `community_fresh_delivery_feasibility_report.mdx` |
| 18 | 产品体验评测报告 | 帮我生成一份智能手表产品体验评测报告,评测对象为Apple Watch和华为Watch GT系列,内容包括评测背景与方法、外观设计与做工对比、屏幕显示效果、健康监测功能体验(心率、血氧、睡眠)、运动追踪精准度、智能功能与生态体验、续航能力实测、佩戴舒适度、性价比分析、综合评分与推荐建议,内容详细信息全面,整体篇幅约4000字。 | `smartwatch_comparison_apple_watch_vs_huawei_gt.mdx` |
| 19 | 目标人群画像分析 | 帮我生成一份母婴电商平台目标人群画像分析报告,内容包括分析目的与数据来源、人群基本属性(年龄、地域、收入、学历)、消费行为特征(消费频次、客单价、品类偏好)、媒介触达习惯、决策因素与购买动机、典型用户分群与画像描述、用户生命周期阶段分析、营销触达策略建议,篇幅在4000-5000字。 | `maternity_ecommerce_user_persona_report.mdx` |
| 20 | 选址/选品分析报告 | 帮我生成一份咖啡店选址分析报告,备选地址为三个商圈(CBD写字楼区、大学城周边、社区商业街),内容包括选址标准与评估维度、各备选地址周边环境分析、人流量与客群分析、竞争对手分布情况、租金成本与性价比、交通便利性与可达性、商圈发展潜力评估、综合评分与排名、选址建议与风险提示,篇幅在3000字左右。 | `coffee_shop_location_analysis_report.mdx` |
| 21 | 商业模式分析报告 | 帮我生成一份共享充电宝行业的商业模式分析报告,内容包括行业概述与发展历程、主要玩家与市场份额、商业模式画布分析(价值主张、客户细分、渠道通路、收入来源、成本结构、关键资源、核心活动、重要伙伴)、盈利模式与单位经济模型、核心竞争要素分析、行业挑战与发展瓶颈、未来演变趋势与创新方向,信息要足够详细和全面,篇幅在4000-5000字。 | `shared_powerbank_business_model_report.mdx` |
| 22 | 求职自荐信 | 帮我生成一份应聘互联网公司产品经理岗位的求职自荐信,应聘者为有3年经验的产品经理,内容包括自我介绍与求职意向、与岗位匹配的核心能力、代表性项目经历与成果、对目标公司和岗位的理解、个人职业热情与发展期望、结尾致谢与联系方式,语言真诚有感染力且突出个人亮点。 | `internet_product_manager_cover_letter.mdx` |
| 23 | 推荐信 | 帮我生成一份由大学教授为学生撰写的研究生入学推荐信,被推荐人为计算机科学专业大四学生,内容包括推荐人自我介绍与推荐关系说明、对被推荐人学术能力的评价、研究项目参与情况与表现、个人品质与团队合作能力、与其他学生的横向比较、对其研究生阶段发展的期望、推荐结论,语言正式客观且有说服力。 | `graduate_admission_recommendation_letter.mdx` |
| 24 | 个人职业规划书 | 帮我生成一份应届毕业生的五年职业规划书,专业背景为金融学,目标行业为互联网金融,内容包括自我分析(兴趣、能力、价值观)、行业与职业分析、SWOT个人分析、职业目标设定(短期1年、中期3年、长期5年)、实现路径与行动计划、所需资源与技能提升计划、可能遇到的障碍与应对策略、评估调整机制,篇幅约3000字。 | `finance_graduate_career_plan.mdx` |
| 25 | 面试常见问题准备清单 | 帮我生成一份互联网公司产品经理岗位的面试常见问题准备清单,涵盖自我介绍、行为面试题(STAR法则)、专业能力题(产品设计、数据分析、用户研究)、案例分析题、压力面试题、反问环节建议,每个模块下准备多个问题并附带回答思路和框架,帮助面试者系统化准备。 | `internet_product_manager_interview_checklist.mdx` |
| 26 | 英文自我介绍 | 帮我生成一份适用于外企面试的英文自我介绍模板,时长约2-3分钟,内容包括基本信息与教育背景、工作经验概述、核心技能与专业优势、代表性成就、对目标岗位的热情与匹配度、简短的个人特质展示,提供不同场景版本(正式面试版、社交场合版),语言地道流畅有感染力。 | `english_self_introduction_for_interview.mdx` |
| 27 | 旅行攻略 | 帮我生成一份三天两晚的泉州旅行攻略,从深圳出发,注重自然景观和人文艺术和当地美食,经典容易出片,推荐旅行地点的交通方式以及住宿区域,行程可以安排得相对紧凑,同时罗列一些注意事项。 | `quanzhou_3_day_travel_guide.mdx` |
| 28 | 婚礼策划清单 | 帮我生成一份中式现代风格婚礼的策划清单,预算约15万元,婚礼规模约150人,在酒店举办,内容包括婚礼时间线与筹备进度表(婚前6个月到婚礼当天)、场地布置方案、婚庆团队选择要点、婚纱礼服与造型准备、婚礼流程安排(迎亲、仪式、宴席)、宾客管理与座位安排、婚品采购清单、预算分配明细、注意事项与避坑指南。 | `chinese_modern_wedding_planning_guide.mdx` |
| 29 | 生日派对策划清单 | 帮我生成一份小朋友6岁生日派对的策划清单,主题为太空探险,参与人数约20个小朋友和家长,在家中举办,内容包括派对主题设计与装饰方案、邀请函设计、场地布置清单(气球、横幅、桌布等)、派对流程与互动游戏设计、生日蛋糕与美食菜单、伴手礼准备、拍照打卡区设置、安全注意事项、预算清单、物品采购链接建议。 | `space_theme_6th_birthday_party_plan.mdx` |
| 30 | 家庭年度预算规划 | 帮我生成一份三口之家的年度家庭预算规划,家庭月收入约3万元,坐标二线城市有房贷,内容包括家庭财务现状盘点、年度收入预估、固定支出梳理(房贷、保险、教育)、弹性支出预算(餐饮、交通、娱乐、购物)、储蓄与投资目标、各月预算分配表、应急资金规划、大额支出计划(旅行、家电更换)、节流建议与开源思路、预算执行跟踪方法。 | `2026_family_annual_budget_plan.mdx` |
| 31 | 搬家物品整理清单 | 帮我生成一份从合租房搬到新家的搬家物品整理清单,内容包括搬家前准备工作时间线、物品分类整理方案(客厅、卧室、厨房、卫生间、书房)、需要打包的物品清单、需要丢弃或捐赠的物品筛选标准、搬家公司选择与比价要点、搬家当天流程安排、新家入住前需采购物品清单、水电气网络过户提醒、搬家后整理收纳建议。 | `shared_apartment_moving_checklist.mdx` |
| 32 | 健身训练计划 | 帮我生成一份为期12周的增肌健身训练计划,适合有半年健身基础的男性,每周训练5天,内容包括训练目标与身体数据记录、每周训练部位分配、每日训练动作详细安排(动作名称、组数、次数、休息时间)、热身与拉伸建议、饮食配合建议(蛋白质摄入、碳水循环)、补剂建议、每周进度检查指标、常见错误与纠正提示。 | `12_week_muscle_building_workout_plan.mdx` |
| 33 | 读书笔记 | 帮我生成一份《原则》(Ray Dalio)的读书笔记,内容包括书籍基本信息与推荐理由、作者简介、全书核心主旨与结构概览、各章节要点提炼、核心原则归纳(生活原则、工作原则、管理原则)、精彩语句摘录、个人感悟与思考、与自身工作生活的关联与应用、推荐阅读的相关书籍,整体篇幅约3000字。 | `principles_ray_dalio_book_notes.mdx` |
| 34 | 电影/书籍推荐清单 | 帮我生成一份适合职场人士的成长类书籍和电影推荐清单,包含10本书和10部电影,内容包括推荐主题分类(思维提升、沟通表达、领导力、时间管理、心理健康)、每个推荐作品的基本信息、一句话推荐语、核心看点与收获、适合阅读/观看的场景、难度和时间投入参考、按优先级排序的阅读/观看顺序建议。 | `career_growth_books_and_movies_recommendations.mdx` |
| 35 | 个人年度目标规划 | 帮我生成一份2026年个人年度目标规划,涵盖职业发展、财务管理、健康运动、学习成长、人际关系、生活品质六大维度,内容包括上一年度回顾与反思、各维度年度目标设定、目标拆解为季度和月度里程碑、关键行动计划与习惯养成、所需资源与支持、潜在障碍与应对策略、奖励机制设计、月度复盘检查模板。 | `2026_personal_annual_goal_plan.mdx` |
| 36 | 宠物养护指南 | 帮我生成一份新手养猫全面养护指南,适合第一次养英短蓝猫的铲屎官,内容包括接猫前的准备工作与必备用品清单、猫咪到家后的适应期指南、日常喂养方案(猫粮选择、喂食量、饮水)、疫苗驱虫计划、日常护理(梳毛、剪指甲、清洁耳朵)、常见疾病预防与识别、绝育建议与注意事项、行为习惯解读与训练建议、每月养猫费用预估,尽量详细,篇幅在4000字左右。 | `british_shorthair_cat_care_guide.mdx` |
| 37 | 家庭食谱/每周菜单 | 帮我生成一份家庭一周健康菜单规划,三口之家包含一个6岁儿童,注重营养均衡和荤素搭配,内容包括一周七天的三餐加下午茶安排、每餐的菜品搭配与营养分析、重点菜品的简易做法、每周食材采购清单与预估费用、食材保鲜与储存建议、儿童营养补充要点、周末亲子烹饪活动建议、节约时间的备餐技巧。 | `family_weekly_healthy_meal_plan.mdx` |
| 38 | 节日祝福文案集 | 帮我生成一份全年节日祝福文案集,涵盖春节、元宵节、情人节、妇女节、清明节、劳动节、母亲节、父亲节、端午节、七夕、中秋节、国庆节、重阳节、圣诞节等主要节日,每个节日提供3-5条不同风格的祝福文案(正式商务版、亲友温馨版、朋友圈文艺版、幽默趣味版),同时提供节日相关知识小科普。 | `annual_holiday_greeting_messages.mdx` |
步骤 2:【阅读 MDX 规范】
阅读 mdx_references.md,了解 MDX 组件规范(组件列表、属性、取值白名单、格式约束)
步骤 3:【生成 MDX 内容】
按规范生成包含 Frontmatter 和 MDX 组件的内容:
- 有模板参考时:以模板结构为骨架,填入用户实际内容
- 无模板参考时:根据文档类型自由设计结构
步骤 4:【图片处理 - 必须执行】
**封面图(frontmatter cover**
- **默认必须设置**:根据文档主题自行通过网络搜索合适图片并下载 → 调用 `upload_image` 上传 → image_id 填入 `cover: image_id值`
- 仅当搜索或下载/上传失败时,才去掉 cover 字段
**正文图片(`<Image>` 元素)**
- 若 MDX 中包含 `<Image>`:必须先调用 `upload_image` 上传获取 image_id,填入 `src` 属性(约束详见工具说明开头)
步骤 5:【自校验】
对照 mdx_references 逐条自校验,确保格式合规(重点检查 cover 和 `<Image src>` 均为 image_id 而非 URL
步骤 6:【调用工具创建文档】
调用 create_smartcanvas_by_mdx 创建文档(传入 title + MDX 内容)
从返回结果中获取 file_id 和 url
```
### 参数说明
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `title` | string | ✅ | 文档标题。参数名必须为 `title`,不要使用 `doc_title`、`name`、`file_name` 等其他名称 |
| `mdx` | string | ✅ | 文档正文内容。MDX 向下兼容全部 Markdown 语法,标准 md 内容可直接填入;使用 MDX 高级组件(`Callout` / `ColumnList` / `Todo` / `Table` 等)时须严格遵循 `mdx_references` 规范并逐条自校验。图片约束见工具说明开头 |
| `content_format` | string | | 内容格式。默认 `"mdx"`,建议始终使用默认值——MDX 已向下兼容全部 Markdown 语法,无需切换 |
### 调用示例
```json
{
"title": "项目需求文档",
"mdx": "---\ntitle: 项目需求文档\nicon: 📋\n---\n\n# 项目需求\n\n<Callout icon=\"📌\" blockColor=\"light_blue\" borderColor=\"blue\">\n 本项目旨在开发一套智能文档管理系统。\n</Callout>\n\n## 功能需求\n\n<BulletedList>\n 文档创建功能\n</BulletedList>\n<BulletedList>\n 文档编辑功能\n</BulletedList>\n<BulletedList>\n 协作功能\n</BulletedList>"
}
```
### 返回值说明
```json
{
"file_id": "doc_1234567890",
"url": "https://docs.qq.com/doc/DV2h5cWJ0R1lQb0lH",
"error": "",
"trace_id": "trace_1234567890"
}
```
---
## 统一编辑工具(推荐)
> 💡 **推荐使用统一编辑工具**`smartcanvas.get_top_level_pages` + `smartcanvas.read` + `smartcanvas.find` + `smartcanvas.edit` 组合,支持 MDX 格式内容、更简洁的 API 设计。
### smartcanvas.get_top_level_pages
**功能**:查询文档的顶层页面列表,返回文档中所有顶级页面的基本信息,用于快速浏览文档结构。
**使用场景**
- 获取文档的所有页面列表及其 page_id
- 在读取或编辑文档前先了解文档的页面结构
- 当文档包含多个页面时,确定要操作的目标页面
**请求参数**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `file_id` | string | ✅ | 智能文档的唯一标识符 |
**返回字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| `pages` | array | 顶层页面列表 |
| `pages[].page_id` | string | 页面 ID |
| `pages[].title` | string | 页面标题 |
| `error` | string | 错误信息 |
| `trace_id` | string | 调用链追踪 ID |
**调用示例**
```json
{
"file_id": "your_file_id"
}
```
---
### smartcanvas.read
**功能**:读取智能文档指定页面的完整 MDX 格式内容。一次调用即返回页面全部内容。
**使用场景**
- 在编辑文档前先阅读全文,了解文档结构和内容
- 获取页面完整内容用于分析、总结或摘要
- `smartcanvas.find` 找不到目标内容时,降级用本工具获取全文查找
**请求参数**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `file_id` | string | ✅ | 智能文档的唯一标识符 |
| `page_id` | string | | 要读取的页面 ID,为空时自动获取文档的第一个页面 |
| `next_token` | string | | 分页游标,首次请求为空,后续请求传入上次返回的 next_token 以获取下一页内容 |
| `size` | integer | | 每页返回的子节点数量,最大为 20,为 0 或不传时默认为 20 |
**返回字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| `content` | string | 页面内容的 MDX 格式文本 |
| `error` | string | 错误信息 |
| `trace_id` | string | 调用链追踪 ID |
| `next_token` | string | 下一页游标,非空表示还有更多内容,客户端可传入此值继续拉取 |
**调用示例(读取文档第一个页面)**
```json
{
"file_id": "your_file_id"
}
```
**调用示例(读取指定页面)**
```json
{
"file_id": "your_file_id",
"page_id": "page_abc123"
}
```
**返回示例**
```json
{
"content": "## 项目背景\n\n本项目旨在提升用户体验...\n\n## 总结\n\n以上是文档的全部内容。"
}
```
---
### smartcanvas.find
**功能**:根据文本搜索智能文档中的 Block,返回匹配 Block 的 ID 和 MDX 格式内容。搜索结果中的 Block ID 可作为锚点,用于 `smartcanvas.edit` 的精准编辑操作。
**使用场景**
- 定位文档中某段内容的位置,获取 Block ID 作为编辑锚点
- 搜索包含特定关键词的内容块
**请求参数**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `file_id` | string | ✅ | 智能文档的唯一标识符 |
| `query` | string | ✅ | 搜索文本,系统将在文档所有页面中搜索包含该文本的 Block |
**返回字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| `blocks` | array | 匹配的 Block 列表 |
| `blocks[].id` | string | Block 的唯一标识符(锚点 ID) |
| `blocks[].content` | string | Block 的 MDX 格式内容 |
| `error` | string | 错误信息 |
| `trace_id` | string | 调用链追踪 ID |
**调用示例**
```json
{
"file_id": "your_file_id",
"query": "项目背景"
}
```
**返回示例**
```json
{
"blocks": [
{
"id": "block_abc123",
"content": "## 项目背景\n\n本项目旨在提升用户体验..."
}
]
}
```
---
### smartcanvas.edit
**功能**:编辑智能文档,支持 4 种操作类型:在指定位置前/后插入、删除、修改。
**操作类型说明**
| Action | 说明 | id 参数 | content 参数 |
|--------|------|---------|----------|
| `INSERT_BEFORE` | 在指定 Block 前插入内容 | 锚点 Block ID(必填) | MDX 格式内容(必填) |
| `INSERT_AFTER` | 在指定 Block 后插入内容 | 锚点 Block ID(为空则追加到文档末尾) | MDX 格式内容(必填) |
| `DELETE` | 删除指定 Block | 要删除的 Block ID(必填,⚠️ 必须先通过 find/read 获取) | 不需要 |
| `UPDATE` | 修改指定 Block 的内容 | 要修改的 Block ID(必填,⚠️ 必须先通过 find/read 获取) | 新的 MDX 格式内容(必填) |
> ⚠️ **强制约束**`UPDATE` 和 `DELETE` 操作的 `id` 参数**必须**来源于 `smartcanvas.find` 或 `smartcanvas.read` 的返回结果,**禁止**在未获取文档数据的情况下直接传入 id 执行 UPDATE 或 DELETE 操作。
> ⚠️ **readonly 约束**:当 `smartcanvas.find` 或 `smartcanvas.read` 返回的 MDX 内容中,某个块级组件(如 `<Table>`)带有 `readonly` 属性时,表示该组件及其所有子元素为只读状态。**禁止**使用只读组件或其内部子元素的 `id` 作为 `smartcanvas.edit` 的锚点(INSERT_BEFORE / INSERT_AFTER / UPDATE / DELETE 均不可用)。如需在只读组件附近操作,应选择只读组件上方或下方的非只读 Block 作为锚点。
**请求参数**
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| `file_id` | string | ✅ | 智能文档的唯一标识符 |
| `action` | enum | ✅ | 操作类型:INSERT_BEFORE / INSERT_AFTER / DELETE / UPDATE |
| `id` | string | 条件 | 锚点 Block ID,见上表说明 |
| `content` | string | 条件 | MDX 格式内容,见上表说明 |
**返回字段**
| 字段 | 类型 | 说明 |
|------|------|------|
| `error` | string | 错误信息 |
| `trace_id` | string | 调用链追踪 ID |
**调用示例(在指定 Block 后插入内容)**
```json
{
"file_id": "your_file_id",
"action": "INSERT_AFTER",
"id": "block_abc123",
"content": "## 新章节\n\n这是插入的新内容。"
}
```
**调用示例(追加到文档末尾)**
```json
{
"file_id": "your_file_id",
"action": "INSERT_AFTER",
"content": "追加到文档末尾的内容"
}
```
**调用示例(删除指定 Block)**
```json
{
"file_id": "your_file_id",
"action": "DELETE",
"id": "block_abc123"
}
```
**调用示例(修改指定 Block)**
```json
{
"file_id": "your_file_id",
"action": "UPDATE",
"id": "block_abc123",
"content": "## 修改后的标题\n\n这是更新后的内容。"
}
```
---
### 边界场景处理规范
#### 1. `ColumnList` 分栏删除边界场景
- **删除后只剩 1 个 Column**:不允许 `ColumnList` 中只有一个 `Column`,必须将整个 `ColumnList`(包含剩余 `Column` 内的所有内容)用 `UPDATE` 操作替换为普通块内容(将 `Column` 内的子块直接平铺输出,去掉 `ColumnList` / `Column` 容器)。
- **删除后剩余 2 个或更多 Column**:需要用 `UPDATE` 操作更新整个 `ColumnList`,重新均分或合理分配各 `Column``width`(例如两列各 `50%`,三列各 `33%`)。
- **操作方式**:上述两种情况均不能只 `DELETE` 单个 `Column`,必须对 `ColumnList` 整体执行 `UPDATE`,传入调整后的完整 MDX 内容。
```json
// 删除一列后只剩一列 → 将 ColumnList 整体替换为普通块内容
{
"file_id": "your_file_id",
"action": "UPDATE",
"id": "columnlist_id",
"content": "剩余 Column 内子块平铺后的 MDX 内容"
}
```
```json
// 删除一列后仍剩多列 → 更新整个 ColumnList 并重新分配 width
{
"file_id": "your_file_id",
"action": "UPDATE",
"id": "columnlist_id",
"content": "<ColumnList>\n <Column width=\"50%\">\n 左列内容\n </Column>\n <Column width=\"50%\">\n 右列内容\n </Column>\n</ColumnList>"
}
```
#### 2. `Callout` 内容清空边界场景
- 当用户要删除 `Callout` 内的全部内容时,`Callout` 本身也应一并删除,不允许保留空的 `Callout` 容器。
- **操作方式**:对 `Callout``id` 执行 `DELETE` 操作,而非仅删除其内部子块。
```json
{
"file_id": "your_file_id",
"action": "DELETE",
"id": "callout_id"
}
```
#### 3. `BlockQuote` 内容清空边界场景
-`BlockQuote` 内的全部内容被删除时,`BlockQuote` 本身也应一并删除,不允许保留空的 `BlockQuote` 容器。
- **操作方式**:对 `BlockQuote``id` 执行 `DELETE` 操作,而非仅删除其内部子块。
```json
{
"file_id": "your_file_id",
"action": "DELETE",
"id": "blockquote_id"
}
```
#### 4. 列表(`BulletedList` / `NumberedList` / `Todo`)删除含子项的列表项边界场景
- 当删除某个列表项时,若该列表项下存在子列表项(嵌套的 `BulletedList` / `NumberedList` / `Todo`),子项不能悬空独立存在。
- **操作方式**:对该列表项的 `id` 执行 `DELETE` 操作,系统会连同其所有子项一并删除;若需保留子项内容,应先用 `UPDATE` 将子项内容提升到父级或平铺为独立块,再执行 `DELETE`
```json
// 直接删除父项(子项一并删除)
{
"file_id": "your_file_id",
"action": "DELETE",
"id": "parent_list_item_id"
}
```
#### 5. `TableRow` / `TableCell` 使用边界场景
- `TableRow` 禁止单独存在,只能作为 `Table` 的直接子元素;`TableCell` 禁止单独存在,只能作为 `TableRow` 的直接子元素。
- **禁止**使用 `TableRow``TableCell``id` 作为 `INSERT_BEFORE` / `INSERT_AFTER` 的锚点,向表格内部插入非表格结构的内容。
- **禁止**单独对 `TableRow``TableCell` 执行 `DELETE` 操作(删除单行/单格),如需修改表格结构,应对整个 `Table` 执行 `UPDATE`,传入调整后的完整表格 MDX 内容。
- **禁止**单独对 `TableCell` 执行 `UPDATE` 操作修改单元格内容,同样应对整个 `Table` 执行 `UPDATE`,传入完整表格 MDX 内容。
- 注意:`Table` 通常带有 `readonly` 属性,此时 `TableRow` / `TableCell``id` 同样不可用,任何操作均需绕开只读表格,选择其上方或下方的非只读 Block 作为锚点。
```json
// 修改表格内容(如删除某行、修改某单元格)→ 对整个 Table 执行 UPDATE
{
"file_id": "your_file_id",
"action": "UPDATE",
"id": "table_id",
"content": "<Table>\n <TableRow>\n <TableCell>\n 列1内容\n </TableCell>\n <TableCell>\n 列2内容\n </TableCell>\n </TableRow>\n</Table>"
}
```
---
### 图片编辑说明
编辑场景与创建场景图片约束一致(详见工具说明开头):必须先调用 `upload_image` 上传获取 `image_id`,再设置到 `src` 属性中,严禁使用外部 URL。
**调用示例(使用 upload_image 上传后插入图片)**
```json
// 步骤 1:先调用 upload_image 获取 image_id
// 步骤 2:将 image_id 设置到 content 的 Image src 属性中
{
"file_id": "your_file_id",
"action": "INSERT_AFTER",
"id": "block_abc123",
"content": "<Image src=\"upload_image返回的image_id\" alt=\"示例图片\" />"
}
```
---
## 典型工作流示例
> ⚠️ **定位策略**:有关键词 → 优先 `find`,找不到降级 `read`;无关键词 → 直接 `read`。**UPDATE / DELETE 前必须先通过 `find` 或 `read` 获取真实 Block ID,禁止跳过。**
### 工作流一:用户指定了编辑位置(有查询意图)
```
步骤 1:使用 find 搜索目标 Block
→ smartcanvas.find(file_id, query="用户指定的关键词")
→ 检查搜索结果
步骤 2Afind 找到匹配 Block
→ 将 find 返回的 Block 列表展示给用户确认
→ 用户确认锚点位置后,调用 smartcanvas.edit 传入确认的锚点 ID 执行操作
步骤 2B:find 未找到匹配 Block(降级)
→ 调用 smartcanvas.read(file_id) 读取文档全部内容
→ 在返回的 content 中查找目标内容
→ 根据找到的内容分析并猜测合适的锚点位置
→ 调用 smartcanvas.edit 执行编辑操作
```
### 工作流二:用户未指定编辑位置(无查询意图)
```
步骤 1:读取文档全部内容(⚠️ UPDATE/DELETE 操作此步骤为必须)
→ smartcanvas.read(file_id)
→ 返回的 content 即为页面完整 MDX 内容,了解文档结构
步骤 2:根据文档内容和用户意图猜测锚点位置,执行编辑操作
→ 插入到文档最前面:smartcanvas.edit(action=INSERT_BEFORE, id=首个Block ID, content=MDX内容)
→ 插入到文档最后面:smartcanvas.edit(action=INSERT_AFTER, id为空, content=MDX内容)
→ 插入到特定位置:smartcanvas.edit(action=INSERT_BEFORE/INSERT_AFTER, id=猜测的锚点ID, content=MDX内容)
→ 修改特定内容:smartcanvas.edit(action=UPDATE, id=目标Block ID, content=新MDX内容)【id 必须来自 find/read 结果】
→ 删除特定内容:smartcanvas.edit(action=DELETE, id=目标Block ID)【id 必须来自 find/read 结果】
```
### 工作流三:在「XXX」后插入内容
```
步骤 1:搜索定位目标 Block
→ smartcanvas.find(file_id, query="XXX")
步骤 2A:找到匹配 Block
→ 展示 find 结果给用户确认锚点位置
→ 用户确认后,调用 smartcanvas.edit(action=INSERT_AFTER, id=确认的锚点ID, content=MDX内容)
步骤 2B:未找到匹配 Block(降级)
→ smartcanvas.read(file_id) 获取全文
→ 根据全文内容猜测"XXX"附近的锚点位置
→ smartcanvas.edit(action=INSERT_AFTER, id=猜测的锚点ID, content=MDX内容)
```
### 工作流四:修改「XXX」为新内容
```
步骤 1:搜索定位目标 Block
→ smartcanvas.find(file_id, query="XXX")
步骤 2A:找到匹配 Block
→ 展示 find 结果给用户确认目标 Block
→ 用户确认后,调用 smartcanvas.edit(action=UPDATE, id=确认的Block ID, content=新MDX内容)
步骤 2B:未找到匹配 Block(降级)
→ smartcanvas.read(file_id) 获取全文
→ 根据全文内容定位目标位置
→ smartcanvas.edit(action=UPDATE, id=目标Block ID, content=新MDX内容)
```
### 工作流五:删除「XXX」
```
步骤 1:搜索定位目标 Block
→ smartcanvas.find(file_id, query="XXX")
步骤 2A:找到匹配 Block
→ 展示 find 结果给用户确认要删除的 Block
→ 用户确认后,调用 smartcanvas.edit(action=DELETE, id=确认的Block ID)
步骤 2B:未找到匹配 Block(降级)
→ smartcanvas.read(file_id) 获取全文
→ 根据全文内容定位目标位置
→ smartcanvas.edit(action=DELETE, id=目标Block ID)
```
### 工作流六:直接追加内容到文档末尾
```
步骤 1:直接追加到文档末尾(无需定位)
→ smartcanvas.edit(file_id, action=INSERT_AFTER, id为空, content=MDX内容)
```
### 工作流七:创建分栏布局
> 适用场景:用户希望在文档中新增一个左右分栏区域(如「左边放说明,右边放示例」)。
```
步骤 1:确定插入位置
→ 若用户指定了位置关键词:smartcanvas.find(file_id, query="关键词") 获取锚点 Block ID
→ 若用户未指定位置:smartcanvas.read(file_id) 获取全文,根据文档结构选择合适锚点
步骤 2:构造 ColumnList MDX 内容
→ 两列等宽示例(各 50%):
<ColumnList>
<Column width="50%">
左列内容(可包含 Heading、Paragraph、BulletedList 等任意块)
</Column>
<Column width="50%">
右列内容
</Column>
</ColumnList>
→ 三列等宽示例(各 33%):
<ColumnList>
<Column width="33%">
第一列内容
</Column>
<Column width="33%">
第二列内容
</Column>
<Column width="34%">
第三列内容
</Column>
</ColumnList>
⚠️ 注意:ColumnList 至少需要 2 个 Columnwidth 之和应为 100%
步骤 3:调用 smartcanvas.edit 插入分栏
→ smartcanvas.edit(file_id, action=INSERT_AFTER, id=锚点Block ID, content=ColumnList MDX内容)
→ 若插入到文档末尾:id 为空
```
**调用示例**
```json
// 在 block_abc123 后插入一个两列分栏
{
"file_id": "your_file_id",
"action": "INSERT_AFTER",
"id": "block_abc123",
"content": "<ColumnList>\n <Column width=\"50%\">\n ## 功能说明\n\n 这里描述功能的详细说明。\n </Column>\n <Column width=\"50%\">\n ## 代码示例\n\n 这里放对应的代码示例。\n </Column>\n</ColumnList>"
}
```
### 工作流八:向已有分栏中添加内容
> 适用场景:用户希望在某个已存在的分栏(ColumnList)的某一列中追加或修改内容。
```
步骤 1:读取文档内容,获取目标 ColumnList 的完整 MDX 结构
→ smartcanvas.find(file_id, query="分栏内已知的关键词")
或 smartcanvas.read(file_id) 获取全文
→ 找到目标 ColumnList 的 id 及其完整 MDX 内容
步骤 2:在原有 MDX 基础上修改目标列的内容
→ 保持 ColumnList / Column 结构不变
→ 仅在目标 Column 内追加或修改子块内容
⚠️ 注意:不能单独对 Column 内的子块执行 INSERT_BEFORE/INSERT_AFTER
必须对整个 ColumnList 执行 UPDATE,传入完整的新 MDX 内容
步骤 3:调用 smartcanvas.edit 更新整个 ColumnList
→ smartcanvas.edit(file_id, action=UPDATE, id=ColumnList的Block ID, content=更新后的完整ColumnList MDX)
```
**调用示例**
```json
// 在右列末尾追加一条说明(对整个 ColumnList 执行 UPDATE
{
"file_id": "your_file_id",
"action": "UPDATE",
"id": "columnlist_block_id",
"content": "<ColumnList>\n <Column width=\"50%\">\n ## 功能说明\n\n 这里描述功能的详细说明。\n </Column>\n <Column width=\"50%\">\n ## 代码示例\n\n 这里放对应的代码示例。\n\n > 注意:示例仅供参考,请根据实际情况调整。\n </Column>\n</ColumnList>"
}
```
### 工作流九:修改分栏列数或宽度比例
> 适用场景:用户希望将两列分栏改为三列,或调整各列宽度比例(如从 50/50 改为 30/70)。
```
步骤 1:读取文档内容,获取目标 ColumnList 的完整 MDX 结构
→ smartcanvas.find(file_id, query="分栏内已知的关键词")
或 smartcanvas.read(file_id) 获取全文
→ 找到目标 ColumnList 的 id 及其完整 MDX 内容
步骤 2:构造调整后的完整 ColumnList MDX
→ 增加列:在原有 Column 基础上新增 Column,重新分配 width(各列 width 之和为 100%
→ 调整宽度:修改各 Column 的 width 属性值
→ 减少列(删除后剩余 ≥ 2 列):移除目标 Column,重新均分剩余列的 width
→ 减少列(删除后只剩 1 列):将 ColumnList 整体替换为普通块内容(参见边界场景处理规范第 1 条)
⚠️ 注意:width 之和必须为 100%,且 ColumnList 至少保留 2 个 Column
步骤 3:调用 smartcanvas.edit 更新整个 ColumnList
→ smartcanvas.edit(file_id, action=UPDATE, id=ColumnList的Block ID, content=调整后的完整ColumnList MDX)
```
**调用示例(两列改三列)**
```json
{
"file_id": "your_file_id",
"action": "UPDATE",
"id": "columnlist_block_id",
"content": "<ColumnList>\n <Column width=\"33%\">\n ## 第一列\n\n 第一列内容。\n </Column>\n <Column width=\"33%\">\n ## 第二列\n\n 第二列内容。\n </Column>\n <Column width=\"34%\">\n ## 第三列\n\n 新增的第三列内容。\n </Column>\n</ColumnList>"
}
```
**调用示例(调整宽度比例为 30/70)**
```json
{
"file_id": "your_file_id",
"action": "UPDATE",
"id": "columnlist_block_id",
"content": "<ColumnList>\n <Column width=\"30%\">\n ## 侧边说明\n\n 简短的辅助说明内容。\n </Column>\n <Column width=\"70%\">\n ## 主要内容\n\n 详细的主体内容区域。\n </Column>\n</ColumnList>"
}
```
---
> 📌 **提示**`file_id` 可通过 `manage.search_file` 搜索获取,或从创建文档的返回结果中获取。所有内容块必须挂载在 `Page` 下,完整组件列表详见 `mdx_references.md`。
---