文档

Mba Thesis Workflow

试用

Write, review, and export MBA / academic theses end-to-end as Word / DOCX. Covers outline planning → node-by-node writing → chapter review → academic deep re...

它能做什么

Write, review, and export MBA / academic theses end-to-end as Word / DOCX. Covers outline planning → node-by-node writing → chapter review → academic deep review → Word export with GB/T 7714 references and 南大-style formatting. Triggers: 论文 / thesis / dissertation / 答辩 / 开题 / MBA / 章节 / 文献综述 / 参考文献 / chapter outline. ⚠️ v2 is beta (outline-anchored + 9 HIL + BGE multi-search); install independently and do not overwrite v1. Prefer v1 (`thesis-workflow`) for production unless user explicitly asks for v2 / 新框架 / outline-anchored / 9 HIL.

技能文档

MBA/学术论文多Agent协作工作流

完整文档见:references/checklist.md(学术规范清单)、references/loop-design.md(Loop 设计原理)

🔌 平台依赖(加载后必看)

本 skill 不是通用 Hermes skill,专为 OpenClaw 设计。在调用本 skill 任何 Python 入口前,先确认平台依赖:

维度依赖项
Agent 启动sessions_spawn(OpenClaw 子 agent 机制)
状态文件目录~/.openclaw/workspace/{paper_name}/ Hermes 标准路径)
工具后端web_search / tavily_search / arxiv_search(OpenClaw MCP 工具链)
CLI 入口python3 scripts/run_workflow.py {paper_name} --phase auto
Python 路径PYTHONPATH=scripts python3 ...(CLI 内部期望 scripts 在 path 上)

反模式: 不要把本 skill 当作标准 Hermes skill 调用——Hermes 的 file / search / web 工具链不能驱动 v2 的状态机和 HIL 拦截。如果你需要把论文流程迁回 Hermes,先做"状态层适配"(用 Hermes 的 workspace 概念替代 ~/.openclaw/workspace/,并把 sessions_spawn 改成 Hermes 的子任务机制),再启用本 skill。

⚠️ 触发规则

当用户请求生成 Word 文档且满足以下任一条件时,必须调用本 skill 的 Word 输出流程,不得使用简单 md2docx 脚本:

  • 输入文件路径匹配:论文*.md*thesis*.md*dissertation*.md
  • 上下文中存在「论文」「MBA」「答辩」「开题」等关键词
  • 用户明确要求导出 .docx 格式且文件性质为学术论文

正确流程: 写作语法预检 → Review Agent 终审(scripts/loop_self_check.py 校验通过)→ scripts/md2docx_strict.py 合规转换 → Word 输出

⚠️ v1 / v2 选择矩阵(加载后必看)

v2 仍处于 beta,生产论文默认走 v1。仅当用户明确要求时再切 v2:

场景选择触发依据
用户说「稳一点 / 跑过答辩 / 已用 v1 / 默认」✅ v1 (thesis-workflow)默认基线
论文已在 ~/.openclaw/workspace/{paper}/ 下运行 v1❌ 切 v2状态文件不兼容
用户说「用 v2 / 新框架 / outline-anchored / 9 HIL / BGE 多工具并行」✅ 本 skill (v2)显式升级
用户未明示 + 新论文⚠️ 走 v1避开 beta 风险

反模式: 不要因为「本 skill 描述更新」就把现有 v1 论文切到 v2——v2 的 _orchestrate_state.json schema 与 v1 不兼容。

v2 HIL 节点一览(确定用 v2 之后再读)

v2 在 9 个位置强制 human-in-the-loop:每到这些点状态机会 hard pause,必须用户确认才能推进。如果 agent 想绕过任何一项,v2.0.6 的拦截规则会拒绝(见 §v2.0.6 拦截规则):

#触发位置检查内容决策
1Phase 1.1 后大纲结构 + 公司映射接受(actual_name/跳过) / 修改
2Phase 1.3 后归因结果接受 / 调整 hint
3write_single_node() 写入单节点前info_scarcity提供 hint / AI 生成 / 跳过
4Phase 2 评审后quality=medium/low接受 / 重写
5Phase 2 完成后章节内容预览通过 / 修改
6Phase 3 整合后整合版内容通过 / 修改反馈
7Phase 3.5 P0 修复超 3 轮未收敛接受 / 继续修订
8Phase 4 整合方案方案是否接受接受 / 修改
9Phase 5.2 后Word 输出导出 / 修改

HIL #1 公司映射(v2.1.2+): HIL #1 同时确认大纲 + 采集公司 actual_name

  • 输入 [1] vivo → 接受大纲,actual_name="vivo"
  • 输入 [2] → 接受大纲,skip_mapping=true(仅适用于纯理论论文)
  • 输入 [3] → 取消,不修改 state
  • 不提供 actual_name 且不跳过 → confirm_phase1() 返回错误「公司映射未填写」

总计 9 HIL 节点(公司映射合并入 #1,不新增节点)。

反模式: 不要给 agent 传 allow_skip_hil=True 或在 prompt 里写"自动通过所有 HIL"——HIL 是论文质量最后一道防线,绕过它的代价是错版交付给导师。

v2.0.6 拦截规则(与 HIL 表配套必读)

如果 agent 想绕过 HIL 或绕过"独立评审",v2.0.6 在 orchestrator 层有 3 类硬拦截:

拦截点强制规则失败场景
拍板 #1 强制phase1_3_skip 不允许;skip_phase1_3() 需要 MBA_THESIS_PRODUCTION=1 + 必填 reason/operator + audit log跳过 Phase 1.3 → 论文方向错位无人工把关,全文跑偏
B-2 幂等保护outline_update_status() 默认拒绝覆盖已 completed 节点误重写已通过审核的节点 → 评审历史回滚,质量倒退
独立 Reviewerwrite_single_node() 默认要求 reviewer_func ≠ llm_func生成+评审用同一 LLM → 自我审核,"我写的都对"假阳性

反模式: 不要在 prompt 里"建议 agent 用 force=True 绕过"或"把 allow_skip_hil 设为 True"——v2.0.6 的拦截规则会拒绝并返回错误。绕过拦截的代价比"卡在 HIL 等用户确认"高得多。

核心架构

Phase 1(规划)→ Phase 2(逐节点写作)→ Phase 2.5(内容确认)
→ Phase 3(整合)→ Phase 3.5(学术深度评审)
→ Phase 4(修复)→ Phase 5(终审 + Word 输出)

⚠️ 阶段强制顺序: 全部 Phase 必须按顺序执行,不得跳过。Phase 2.5(人工确认门槛)和 Phase 3.5(深度评审)是固定节点,不得跳过。

Agent 设计原则

每个 Agent 只做一件事。 Agent 间通过文件传递结果,不共享上下文。Orchestrator 专注调度,不执行执行性工作。

Agent调用方式主责
Orchestrator当前 session调度 / 推进 / 决策
NodeWritersessions_spawn逐节点内容生成
Reviewersessions_spawnPhase 3/5 规则型审核
DeepReviewersessions_spawnPhase 3.5 学术深度评审
Integratorsessions_spawnPhase 4 整合方案
WordAgentexec python3md2docx执行 + 格式校验

关键实现说明

公司信息处理

  • 用真实公司名搜索公开数据,填入正文时替换为代号(A公司/B公司)
  • 搜索 prompt 用真实名,输出 prompt 用代号
  • 映射关系不进入最终文档

公司映射状态字段(v2.1.2+)

"company_info": {
  "code_name": "A公司",      // 从开题报告 docx 自动提取
  "actual_name": "vivo",     // HIL #1 由用户填入;空/null = 未填
  "skip_mapping": false,     // true = 显式跳过(纯理论论文)
  "confirmed": true,         // confirm_phase1() 校验通过
  "confirmed_at": "2026-07-02T..."
}

强制校验: confirm_phase1() 在 v2.1.2+ 会拒绝 actual_name=None && skip_mapping=false 的 state,必须二选一。

使用场景:

  • Phase 2 数据检索:搜 actual_name 公开数据
  • Phase 2 写作锚定:写文档时确保代换为 code_name
  • Phase 5 输出前:脱敏校验,确认 actual_name 不在最终 Word 正文里

安全约束: 该字段不会进入最终 Word 文档,仅作为写作过程的内部状态。

检索同步规则

所有 Phase 调用数据查询工具(web_search / academic-research)时,必须:

  1. 同步输出工具名称 + 查询条件 + 结果摘要(<50字)
  2. Subagent 用 sessions_send 向主 session 发送同步
  3. 大型检索完成后输出结构化结果摘要

数据查询工具(v2 多工具并行策略)

核心原则:4个工具并行发出,取长补短,去重排序,任意失败不阻断。 web_search 等内置工具 Agent 直接调用,无需经过 Python 层包装。

工具矩阵:

工具来源适用场景
web_searchOpenClaw 内置(头条搜索)行业数据、市场规模、新闻动态
tavily_searchTavily MCP(OpenClaw 走内置桥接;Hermes 走 mcporter)结构化摘要、权威来源
arxiv_searcharXiv MCP(mcporter)前沿学术论文、技术细节
openalex_searchscholar-search.py(OpenAlex)学术文献、引用分析

Tavily MCP 检测(v2.1.2+): _check_tavily_mcp() 自动检测运行平台:

  • OpenClaw runtime:通过 openclaw skills list --json 检测 tavily-mcp 是否注册,注册即通过
  • Hermes 兼容:降级调 mcporter call tavily-mcp.tavily_search
  • 其他:报错

Tavily 在 v2.1.2+ 已改为 install_category="none",pre-flight 不再卡 needs_ai_deps 流程。OpenClaw runtime 下 agent 可直接调用内置 tavily-mcp__tavily_search 工具。

Python 层调用(research_tools.py):

from research_tools import quick_search, research_enrich

# 快速检索(返回文本,供注入 prompt)
result = quick_search("竞争战略 市场规模 2024")

# 节点级检索(自动取 outline 中的 research_keywords)
ctx = research_enrich(node_id, paper_name)

并行执行逻辑:

  1. 四工具同时发出,不串行等待
  2. 各工具独立降级(超时/失败 → 静默忽略)
  3. 结果按 URL 去重 + score 排序
  4. 输出格式:[来源] 标题\n 摘要\n URL

Agent 视角:

  • Agent 可继续直接使用 web_search(query=...) 等内置工具
  • quick_search() 是 Python 层的补充,用于学术/论文场景的结构化检索

Phase 详解

Phase 1:规划与定稿

🔴 红线: Phase 1.1 / 1.3 禁止直接调用 Python API,必须经 run_workflow.py(详见 §A.6)。直接 import orchestrator_v2 在 Phase 1 阶段会绕过用户 HIL 确认,论文签收前的方向错误会全白做。

通过问答输出确认清单,用户逐项确认后方可动笔。

红色星标项(必填):

  • ⭐ 实际公司名称(仅用于数据检索,正文以A公司/B公司呈现,不进入公开文档)
  • ⭐ 大纲结构(7章大纲逐章确认)
  • 论文基本信息(题目/作者/专业/学位类型/答辩年份)

→ 生成「写作任务书」用户签收后进入 Phase 2。

Phase 2:逐节点写作

前置检查: Phase 1 必填项已确认

🔴 红线:

  • ❌ 跳过 run_workflow.py 直接读写 _orchestrate_state.json(必须经 CLI 入口)→ 失败场景:CLI 内部维护"状态机锁 + phase 推进历史 + audit log",直接读写会绕过锁,导致下一 Phase 跳号或死锁
  • ❌ 手工修改状态文件的 phase*_status 字段(会破坏 Orchestrator Loop 的下一阶段判断)
  • ❌ 长任务不汇报进度(必须按 25% / 50% / 75% / 100% 节点主动汇报,含 completed_nodes 数)→ 失败场景:Phase 2 写作耗时 20+ 分钟无汇报,用户以为 session 卡死会主动打断,导致已写 30 节点的章节全部丢失、状态半成品

Orchestrator 遍历 outline 树中的每个节点,调用 write_single_node() 逐个生成内容。 每个节点写作前通过 context_builder.py 构建 prompt 包,自动注入:

  • 承接上文(auto bridge)
  • 分析维度建议(规则推导)
  • 开题报告方向参考(content_hint)
  • 行业数据参考(quick_search 多工具检索)

Phase 2 强制检索要求(关键词中的 {论文主题行业} 由 Orchestrator 自动提取):

  • 第3章 PESTEL 分析前 → 多工具并行搜索「{论文主题行业} 市场规模/趋势/政策」
  • 第3章 五力模型分析前 → 多工具并行搜索「{论文主题行业} 主要竞争对手/市场份额」
  • 战略理论部分 → 多工具并行搜索「{论文主题行业} 竞争战略 应用」
  • 每章至少 1 个引用标注来源,全文检索记录 ≥ 3 次
  • 多工具并行检索:调用 quick_search()research_enrich(),结果自动去重排序

状态文件机制: _orchestrate_state.jsonscripts/state_manager_v2.py

→ 全部节点写完且字数达标后进入 Phase 2.5(内容确认)。

Phase 3:整合

Reviewer 对整合版论文进行审核。审核维度:格式 / 大纲 / 内容准确性 / 查重风险 / 学术规范 / 写作语法。

Phase 3.5:深度学术评审(固定节点)

DeepReviewer 对 Phase 3 报告进行二次审查,输出 P0/P1/P2 分级问题清单。P0 问题进入修订 → 重审闭环(见审核 Loop)。

Phase 4:整合

Integrator 汇总 Phase 3 + Phase 3.5 全部评审结果,制定整合方案。核心原则:取长补短,不为统一而破坏内容质量。

自动验证: 整合版运行 python3 scripts/loop_self_check.py 校验,100%通过方可输出 Word。

Phase 5:终审与输出

  • Phase 5:Reviewer 终审
  • Phase 5.1:[可选] humanize-chinese skill 去AI味
  • Phase 5.2:调用 thesis-docx-export skill(Word 转换 + 10 项 Guardrails 校验)

Orchestrator 生命周期管理

🔴 红线: Phase 1 / 5.x 必须run_workflow.py 入口;Phase 2-4 才允许 import orchestrator_v2 直接调 Python API(且仅在已通过 run_workflow 进入论文状态之后)。

  • ❌ 跳过 run_workflow.py 直接 from orchestrator_v2 import orchestrate → 失败场景:CLI 内部维护"状态机锁 + phase 推进历史 + audit log",直接 import 绕过锁,导致下一 Phase 跳号或死锁
  • ❌ Phase 1 任何子阶段(1.1 / 1.2 / 1.3)直接 import orchestrator_v2 调 phase1_* → 失败场景:绕过用户在 Phase 1.1 / 1.3 末尾的 HIL 签收,论文方向错位无人工把关
  • ❌ 把 force=True / allow_skip_hil=True 作为 prompt 默认值 → 失败场景:v2.0.6 拦截规则会拒绝并抛错;agent 越权操作进退两难

真实入口(v2.0.6 新增)

执行脚本scripts/run_workflow.py(v2 真实入口 CLI) 状态文件~/.openclaw/workspace/{paper_name}/_orchestrate_state.json 设计原则:驱动状态机 + 9 个 HIL 节点 hard pause

# 仅查看状态
python3 scripts/run_workflow.py  --status

# auto 模式:根据 state 自动判断下一步
python3 scripts/run_workflow.py  --phase auto

# 指定阶段
python3 scripts/run_workflow.py  --phase phase1
python3 scripts/run_workflow.py  --phase phase2  # 需 --llm
python3 scripts/run_workflow.py  --phase phase3

Python API(v2.0.9)

import sys
sys.path.insert(0, "scripts")
from orchestrator_v2 import orchestrate, write_single_node, apply_user_decision

# Phase 1.1: 解析开题报告(docx 或文本)
r = orchestrate(paper_name, action="phase1_1_init",
                input_type="docx", input_data="path/to/proposal.docx")

# Phase 1.2: 确认大纲(用户 HIL)
r = orchestrate(paper_name, action="phase1_confirm")

# Phase 1.3: 提交开题报告归因
r = orchestrate(paper_name, action="phase1_3_submit",
                docx_path="path/to/proposal.docx", llm_func=my_llm)

# Phase 1.3: 确认归因(用户 HIL)
r = orchestrate(paper_name, action="phase1_3_confirm")

# Phase 2: 逐节点写作(v2.0.4 推荐调用模式)
for node_id in next_nodes:
    r = write_single_node(paper_name, node_id,
                          reviewer_func=my_reviewer)  # 独立评审,llm_func 内部从 session 获取

# Phase 3: 整合
r = orchestrate(paper_name, action="phase3_review")

# Phase 3.5: 深度学术评审(自动进入 Phase 3.5/4/5 链)
# Phase 3 → orchestrate_phase3_5() → P0修复 → Phase 4 → Phase 5
r = orchestrate(paper_name, phase="phase3", action="phase3_export")

# Phase 5: Word 输出提示
print(r.get("message", ""))

HIL 节点(v2.0.6 完整 9 个)

9 个 HIL 节点的速查表已前移到 ## 核心架构 之前(紧跟 v1/v2 选择矩阵后)。在 §"v2 HIL 节点一览"查看完整表。

v2.0.6 拦截规则(enforcement)

v2.0.6 拦截规则段(拍板 #1 / B-2 幂等 / 独立 Reviewer)已前移到 ## 核心架构 之前(紧跟 9 个 HIL 节点表后)。在 §"v2.0.6 拦截规则"查看完整表。

审核 Loop 自动重审

Phase 3.5 完成 → orchestrator 解析 P0 计数 → 有 P0?→ 自动进入修订 → 修订完成 → 自动回到 Phase 3.5 重审 → 连续 2 轮无新 P0 → 通过 → 超过 3 轮 → HIL 暂停

Phase 内部自检

每 Phase 完成后,orchestrator 自动运行 loop_self_check.py 校验:

python3 scripts/orchestrator.py 状态文件.json --validate

校验失败 → RETRY 打回 → Agent 修复 → 再次校验(最多 3 次)

⚠️ Loop 设计原则

5 个 Loop 元素的详细定义、终止条件、HIL 检查点对照、与 OpenClaw Agent Loop 的差异比较:详见 references/loop-design.md(302 行)。

速记: 每个 Loop 最多重试 3 次;Phase 1 / 2.5 / 4 / 5.2 末尾为强制 HIL 节点(必须用户确认才能推进)。

Guardrails 校验(10 项)

python3 scripts/loop_self_check.py --file 论文_xxx.md   # 单文件
python3 scripts/loop_self_check.py --phase 2 --workspace ~/.openclaw/workspace/  # Phase 级别
python3 scripts/loop_self_check.py --file 论文_xxx.docx --verify-docx           # Word 校验
#校验项失败阻断
1章节完整性(7章齐全)Phase 2/4
2字数门槛(每章≥100行)Phase 2/4
3参考文献存在Phase 4
4## 第X章 混合格式Phase 2/4
5**正文加粗**Phase 2/4
6引用完整性(逐章≥1处,全文≥10处)Phase 2/4
7三线表列数一致Phase 4
8表标题在表上方Phase 4
9无合并残留(===END===Phase 4
10核心章节关键词(第5章战略/第6章实施)Phase 2.5

Word 输出

本段已外移。 Word 转换、加粗过滤、三线表、分页、Guardrails 10 项校验等所有 Word 相关细节,由独立 skill thesis-docx-export 承载。

调用入口和文档:

  • Skill:thesis-docx-export/SKILL.md
  • 18 项格式规范清单:thesis-docx-export/references/checklist.md
  • 10 项 Guardrails 校验:thesis-docx-export/scripts/loop_self_check.py(软链接 → scripts/loop_self_check.py

主 skill 只在 Phase 5.2 阶段调用本 skill,不在 Phase 1-5 重复展开。

附录:脚本与文档结构

thesis-workflow/
├── SKILL.md                    ← 本文件(简版触发器 + 核心逻辑)
├── README.md / README_EN.md    ← 安装/使用说明
├── CHANGELOG.md                ← 版本日志
├── config.template             ← 配置模板
├── install.sh                  ← 安装脚本
├── .clawhubignore / .github/workflows/skill-publish.yml
├── scripts/
│   ├── md2docx_strict.py       ← Word 合规转换(真身在主 skill;docx-export 软链接共享)
│   ├── loop_self_check.py      ← Guardrails 自动化校验(10项)(真身在主 skill;docx-export 软链接共享)
│   ├── state_manager.py        ← 状态文件管理
│   └── tests/                  ← 单元测试
├── references/
│   ├── checklist.md            ← 软链接 → thesis-docx-export/references/checklist.md
│   ├── content-hint-fallback.md ← 附录 B 外移版(v7.0 跑题事故修复方案)
│   ├── chapter-summary-design.md ← 章节摘要节点设计
│   ├── git-workflow.md         ← 双版本发布策略
│   └── loop-design.md          ← Loop 设计原理说明
└── thesis-docx-export/         ← 独立 skill(Phase 5.2 Word 输出)
    ├── SKILL.md                ← docx-export 入口文档
    ├── README.md / CHANGELOG.md
    ├── scripts/                ← 软链接主 skill scripts/
    └── references/             ← checklist.md 真身在此

附录 A:论文项目运行 Checklist(agent 必遵守)

来源:v7.0 事故复盘 → 运营者 22:19 反馈 / 2026-06-29
适用对象:跑 thesis-workflow-v2 的任何 agent(含 main session 和 isolated)
生效日期:2026-06-29 起

A.1 触发即汇报

启动任何 thesis-workflow-v2 阶段前,先发一条汇报:

  • 论文名 / 阶段 / 启动时间 / 监考路径(如有 PID/log)
  • 5-30 字,简洁不啰嗦

A.2 阶段切换必汇报

  • Phase 1 → Phase 2(写作开始)
  • Phase 2 → Phase 3(整合开始)
  • Phase 3 → Phase 3.5(评审开始)
  • Phase 3.5 → Phase 4 / Phase 5(终审/导出)

每切换发一条"已到 X 阶段"短汇报。

A.3 长跑阶段主动节拍

Phase 2 写作阶段(如有 background 任务):

进度节点必汇报
启动
完成 25%
完成 50%
完成 75%
完成 100% / 失败
  • 每次汇报含当前 completed_nodes 数量
  • cat _orchestrate_state.json 拿实时数据

A.4 异常即停 + 主动汇报

触发任一异常情况,立即停下来汇报(不等用户问):

  • content_hint 覆盖率 < 50% → Phase 1.3 异常
  • 大量节点 failed → Phase 2 失败
  • 整合版字数异常(< 30k 或 > 200k)
  • outline_state 节点结构与 _orchestrate_state 不一致

A.5 完成必汇报(含产出清单)

论文交付时,必汇报:

  • 终稿路径
  • 字数(中文字数 / 总字符数)
  • 章节完成情况
  • 异常/缺陷(如有)
  • 邮件/通知状态

A.6 红线禁止(继承自 AGENTS.md)

  • ❌ 跳过 run_workflow.py 操作状态文件
  • ❌ 不汇报长任务进度
  • ❌ Phase 1.3 / 1.1 直接调用 Python API
  • ❌ 状态文件手工修改 phase*_status 字段

A.7 辅助工具(可选)

如需手动查看状态,可用:

python3 ~/.openclaw/scripts/thesis_progress_reporter.py --idle-minutes 60

脚本全局通用,跨 macOS/Linux/Windows,纯 stdlib。idle 60min 自动静默。

附录 B(指针):已批准改进方案 — content_hint fallback

历史事故与代码实现已外移到 references/content-hint-fallback.md(139 行)。当 node.content_hint 为空时,scripts/context_builder.py 会自动注入"大纲骨架 + 反面警示"以防 LLM 跑题。

如需查具体函数实现(_extract_paper_subject / _build_outline_skeleton / _build_no_runoff_warning)或验收标准,跳到 references 文件即可。

相关技能

中国 MBA / EMBA 毕业论文 AI 辅助写作指导:选题闸门、五章制大纲、分章写法、证据与理论落地、盲审自查、答辩准备。覆盖营销、人力、运营、质量、财务、战略、数字化、经营管理,不默认营销模板。 当用户提到 MBA论文、开题、五章怎么写、文献综述、对策太空、盲审、答辩、AI辅助写论文、帮我写论文时使用。 落笔时避免机器腔、句长过齐、连接词堆砌。不代写、不编造数据或文献。

Review, revise, and save a complete thesis, dissertation, undergraduate paper, graduation thesis, proposal, or chapter draft from a user's full text or file...

16 次安装

Write detailed, academically rigorous Chinese methodology chapters or methodology sections for theses, dissertations, and undergraduate papers. Use when user...

14 次安装

Write detailed, academically rigorous Chinese results chapters or results sections for theses, dissertations, and undergraduate papers from a user's quantita...

13 次安装

Detect and remove AI writing patterns from Chinese MBA theses, making text sound naturally human-written. Triggered by keywords like "去 AI 痕迹" or "MBA 论文改写". 去除中文 MBA 论文 AI 痕迹,提升学术写作自然度。

11 次安装

Write detailed, academically rigorous Chinese discussion chapters or discussion sections for theses, dissertations, and undergraduate papers from a user's fi...

14 次安装