AgentSkillsCN

generate-asset-missions

通过解析自然语言描述(任务、资源、版本、项目)、Word 文档或 Excel 文件,生成资产任务 Excel 文件。当用户说“新建资产任务单”或类似表述时,按固定流程处理。支持从 Word 文档和 Excel 文件批量导入任务。

SKILL.md
--- frontmatter
name: generate-asset-missions
description: 通过解析自然语言描述(任务、资源、版本、项目)、Word 文档或 Excel 文件生成资产任务 Excel 文件。当用户说「新建资产任务单」或类似表述时,按固定流程处理。支持从 Word 文档和 Excel 文件批量导入任务。

生成资产任务

根据用户描述、Word 文档或 Excel 文件提取关键信息,调用 write 接口写入任务表。执行时必须按固定流程进行。

固定执行流程(必须遵守)

流程 A:从用户描述处理(文本输入)

每次处理「新增/更新资产任务」时,按以下三步执行:

  1. 提取关键信息
    从用户描述中解析并整理出所有相关字段(见下方「可提取字段」),以结构化形式列出,便于核对。

  2. 调用 write 接口
    使用 src/write_excel.py,将上一步得到的字段按「字段名 值」成对传入,写入任务表。
    命令形式(在工程根目录执行):venv/bin/python src/write_excel.py <字段名1> <值1> <字段名2> <值2> ...

  3. 写入任务表
    由 write 接口把数据写入 asset_missions/SoFunny3D_<归属项目>_<归属版本>.xlsx,无需再额外操作。

多任务时:对每个任务分别执行「提取 → 调用 write → 写入」;同一描述里包含多条任务时,拆成多条 write 调用。

流程 B:从 Word 文档处理(文档导入)

当用户提供 Word 文档(.docx)时,按以下流程执行:

  1. 通过指定工具读取文档
    使用 src/read_doc_and_write.py 读取 Word 文档,提取文档中的所有段落和列表项。

  2. 理解上下文,获取关键语义
    对文档中的每个任务段落,智能解析并提取以下字段(见下方「字段说明与规则」):

    • 任务ID:自生成(无需提取)
    • 任务名称:必须提供(从文档中提取,括号和逗号后的内容不作为任务名称)
    • 创建时间:自生成(无需提取)
    • 资源名称:通过理解上下文得出,没有则不填
    • 工程分支:通过理解上下文得出,没有则不填
    • 设计文档:通过理解上下文得出,没有则不填
    • 归属版本:必须提供,没有则默认 v1.0
    • 归属业务:通过理解上下文得出,没有则不填
    • 归属项目:必须提供,没有则默认「美术资产」
    • 资源类型:通过理解上下文得出,没有则不填(潜在资源类型包括:角色、场景、动画、特效、模型等)
    • 开发类型:通过理解上下文得出,没有则不填(潜在的开发类型为:内部、外包)
    • 开发成本(工时):通过理解上下文得出,没有则不填
    • 成本占比(版本):通过理解上下文得出,没有则不填
    • 成本占比(提案):通过理解上下文得出,没有则不填
  3. 调用指定工具生成任务表格
    使用 src/read_doc_and_write.py 批量处理文档,工具会自动:

    • 自动识别版本分组:如果文档中包含版本标记(如 "v55 版本"、"v60 版本"),会自动按版本分组任务
    • 识别文档中的多个任务(列表格式或段落格式)
    • 解析每个任务的字段信息
    • 对每个版本分别调用 write_excel_openpyxl 写入任务表
    • 自动判断是更新还是新建(基于任务名称,存在则更新,不存在则新建)
    • 每个版本写入到独立的 Excel 文件:asset_missions/SoFunny3D_<归属项目>_<版本>.xlsx

命令形式(在工程根目录执行):

bash
cd /Users/zhulei/Projects/tech-doc
venv/bin/python src/read_doc_and_write.py <文档路径> --project <归属项目> --version <归属版本>

参数说明

  • --project:归属项目(如果文档中没有,必须提供;如果不提供且文档中没有,默认使用「美术资产」)
  • --version:归属版本(如果文档中没有,必须提供;如果不提供且文档中没有,默认使用 v1.0)

流程 C:从 Excel 文件处理(Excel 导入)

当用户提供 Excel 文件(.xlsx)时,按以下流程执行:

  1. 通过指定工具读取 Excel 文件
    使用 src/read_excel_and_write.py 读取并处理 Excel 文件,提取表格中的所有行数据。

  2. 理解上下文,获取关键语义
    对 Excel 表格中的每一行数据,智能解析并提取以下字段(见下方「字段说明与规则」和「Excel 字段映射规则」):

    • 任务ID:自生成(无需提取)
    • 任务名称:必须提供(从 Excel 的"标题"列提取)
    • 创建时间:自生成(无需提取)
    • 资源名称:从 Excel 中提取,如果没有明确的资源文件字段,则不填(不要从任务名称提取,任务是人类语言描述,但资源名称是一个或多个明确的工程文件,如果没有就是没有
    • 任务开始时间:从 Excel 的"开始时间"列提取(可选)
    • 任务结束时间:从 Excel 的"结束时间"列提取(可选)
    • 作者:从 Excel 的"执行者"列提取(可选)
    • 工程分支:从 Excel 的"主单分支名"列提取
    • 设计文档:从 Excel 的"主单需求文档链接"列提取
    • 归属版本:必须提供(从 Excel 的"国服版本"列提取版本号,如"V3.1版本(8月29日)" → "v3.1",v3.1 和 V3.1 都可以,建议统一转换为小写
    • 归属业务:可以留空
    • 归属项目:必须提供(应该从 Excel 文件名提取,例如"嘎嘎设计_V3.1.xlsx" → 归属项目="嘎嘎设计")
    • 资源类型:从 Excel 的"部门"列提取(可以从语义中提取,如"美术-3D特效" → "特效","美术-2D角色" → "角色")
    • 开发类型:可以留空
    • 开发成本(工时):从 Excel 的"工时"列提取
    • 成本占比(版本):可以留空
    • 成本占比(提案):可以留空
    • 归属提案:可以留空(不能从归属主单判断,但是可以留空
  3. 从 Git 提交记录提取资源名称(可选)
    如果任务包含作者(执行者)、任务开始时间任务结束时间read_excel_and_write.py 会在每个 Git 仓库中查询该作者在时间范围内的提交,并自动提取资源文件、合并到「资源名称」列,同时写入「git 仓库」「git sha」列。

    • 作者:从 Excel「执行者」列提取,用于 Git 作者匹配(支持中文,自动转拼音)
    • 任务开始/结束时间:从 Excel「开始时间」「结束时间」列提取
    • 工程仓库:由调用参数指定——见下方「命令形式」的两种用法(单仓库路径 或 TOML + 工程根目录)

    多仓库支持:当使用三参数 read_excel_and_write.py <xlsx> <toml> <工程根目录> 时,会从 TOML(mgit 风格)解析出多个仓库路径,对每个任务在所有仓库中按同一作者、同一时间范围查询,并将各仓库的资源文件、提交 SHA 合并后写入同一行(资源名称合并去重;git 仓库列格式为「仓库路径1: sha1, sha2; 仓库路径2: sha3」;git sha 列为所有 SHA 的扁平列表)。同一执行者在多仓库有提交时,系统会正确合并结果。

    功能说明

    • 内部使用 git_commit_query.py 的查询逻辑,按作者 + 时间范围查询
    • 时间范围按作者日期(author date)过滤,不按提交者日期(committer date)。因此 rebase、cherry-pick 或他人代提交的 commit,只要作者与作者日期落在任务周期内,也会被计入资产
    • 自动提取提交中的资源文件(.prefab, .fbx, .png, .mat, .asset, .anim, .shader 等),过滤 .meta
    • 支持中文作者名称(自动转拼音匹配)、多种日期格式
    • 若某任务缺少作者或时间,跳过该任务的 Git 查询,仅使用 Excel 原有数据
  4. 调用指定工具生成任务表格
    使用 src/read_excel_and_write.py 批量处理,工具会自动:

    • 读取 Excel 文件的所有数据行,从文件名提取归属项目
    • 解析每行任务的字段信息(字段映射见下方)
    • 若提供仓库信息:对每个任务在所有仓库中按作者+时间范围查 Git,合并资源文件与提交 SHA,写入「资源名称」「git 仓库」「git sha」列
    • 对每个任务调用 write_excel_openpyxl,按任务名称判断更新或新建
    • 写入到 asset_missions/SoFunny3D_<归属项目>_<归属版本>.xlsx

命令形式(在工程根目录执行):

bash
python src/read_excel_and_write.py <Excel文件路径> [Git仓库路径]
# 或(多仓库,推荐):
python src/read_excel_and_write.py <Excel文件路径> <toml文件路径> <工程根目录>

参数说明

  • Excel文件路径:要处理的开发任务 Excel 路径(必填)
  • 两参数Git仓库路径 — 单个 Git 仓库本地路径,用于从该仓库提取资源名称
  • 三参数toml文件路径 — mgit 风格仓库描述(如 docs/嘎嘎射击/release_1.55.toml);工程根目录 — 主仓库路径,TOML 中的 local 会与该路径拼接得到各仓库绝对路径。脚本会逐仓库查询 Git 并合并资源名称与提交信息。

使用场景

  • 不使用 Git 查询:只提供 Excel 文件路径
    bash
    python src/read_excel_and_write.py docs/嘎嘎射击/嘎嘎射击V3.1.xlsx
    
  • 单仓库 + Git 查询:Excel 路径 + 一个仓库路径
    bash
    python src/read_excel_and_write.py docs/任务列表.xlsx F:/Projects/BiuBiuBiu2-MiniGame2
    
  • 多仓库 + Git 查询(推荐):Excel 路径 + TOML 路径 + 工程根目录
    bash
    python src/read_excel_and_write.py docs/嘎嘎射击/嘎嘎射击V3.1.xlsx docs/嘎嘎射击/release_1.55.toml F:/Projects/BiuBiuBiu2-MiniGame2
    

Excel 字段映射规则

  • Excel "标题" → 资产任务清单 "任务名称"
  • Excel "主单分支名" → 资产任务清单 "工程分支"
  • Excel "主单需求文档链接" → 资产任务清单 "设计文档"
  • Excel "工时" → 资产任务清单 "开发成本(工时)"
  • Excel "国服版本" → 资产任务清单 "归属版本"(需提取版本号,统一转换为小写)
  • Excel "部门" → 资产任务清单 "资源类型"(从语义提取,如"美术-3D特效" → "特效")
  • Excel 文件名 → 资产任务清单 "归属项目"(从文件名提取,如"嘎嘎设计_V3.1.xlsx" → "嘎嘎设计")
  • Excel "开始时间" → 资产任务清单 "任务开始时间"(可选,用于 Git 查询)
  • Excel "结束时间" → 资产任务清单 "任务结束时间"(可选,用于 Git 查询)
  • Excel "执行者" → 资产任务清单 "作者"(可选,用于 Git 查询)

何时使用(触发条件)

只要用户提到以下任一表述,即按此技能的固定流程处理:

  • 新建资产任务单
  • 建资产任务单新增资产任务单开资产任务单
  • 建资产任务新增资产任务创建资产任务
  • 资产任务单写任务表写入任务表
  • 提取关键信息,调用 write 接口,写入任务表
  • 通过 xxx 产生资产任务通过 xxx 生成资产任务从 xxx 生成资产任务清单
  • 处理 xxx 文件(当 xxx 是 Excel 或 Word 文档时)

其他相关表述(例如:描述某版本要新增任务、某项目要加资源任务、通过某个文件产生资产任务等)也视为触发,同样按「提取关键信息 → 调用 write 接口 → 写入任务表」执行。


字段说明与规则

字段列表

字段名说明必填默认值提取方式
任务ID任务唯一标识自生成无需提取,由工具自动生成
任务名称任务名称-必须从文档/描述中提取
创建时间创建时间戳自生成无需提取,由工具自动生成
资源名称资源文件名,如 xxx.prefab选填-通过理解上下文得出,没有则不填<br>重要:不要从任务名称提取,任务是人类语言描述,但资源名称是一个或多个明确的工程文件,如果没有就是没有<br>可以从 Git 提交记录提取:如果任务包含作者、任务开始时间、任务结束时间等信息,可以使用 git_commit_query.py 查询提交记录并提取资源文件列表
任务开始时间任务开始日期选填-从 Excel 的"开始时间"列提取,用于 Git 查询的时间范围
任务结束时间任务结束日期选填-从 Excel 的"结束时间"列提取,用于 Git 查询的时间范围
作者任务执行人/提交人选填-从 Excel 的"执行者"列提取,用于 Git 查询的作者匹配(支持中文,自动转拼音)
工程分支Git 分支名,如 feature-d33选填-通过理解上下文得出,没有则不填
设计文档文档链接或路径选填-通过理解上下文得出,没有则不填
归属版本版本号,如 v97、v7.5v1.0必须提供,没有则默认 v1.0<br>注意:v3.1 和 V3.1 都可以,建议统一转换为小写
归属业务业务线/业务名称选填-通过理解上下文得出,没有则不填(可以留空
归属项目项目名称,用于文件命名美术资产必须提供,没有则默认「美术资产」<br>从 Excel 文件读取时:应该从文件名提取(如"嘎嘎设计_V3.1.xlsx" → "嘎嘎设计")
资源类型资源类型选填-通过理解上下文得出,没有则不填<br>潜在类型:角色、场景、动画、特效、模型等<br>从 Excel 文件读取时:可以从语义中提取(如"美术-3D特效" → "特效","美术-2D角色" → "角色")
开发类型开发方式选填-通过理解上下文得出,没有则不填<br>潜在类型:内部、外包(可以留空
开发成本(工时)人天数选填-通过理解上下文得出,没有则不填
成本占比(版本)版本内占比选填-通过理解上下文得出,没有则不填(可以留空
成本占比(提案)提案内占比选填-通过理解上下文得出,没有则不填(可以留空
归属提案提案编号,如 2026.03.01.v2选填-通过理解上下文得出,没有则不填<br>注意:不能从归属主单判断,但是可以留空

字段提取规则

  1. 任务名称提取

    • 括号内的内容不作为任务名称的一部分,应作为字段信息解析
    • 逗号后的内容不作为任务名称的一部分,应作为字段信息解析
    • 例如:「美国队长红皮(开发类型属于外包)」→ 任务名称:「美国队长红皮」,开发类型:「外包」
  2. 上下文理解

    • 识别自然语言描述中的字段关键词(如「开发类型属于」「分支在」「资源名称是」等)
    • 提取对应的值
    • 如果无法提取或值为「不知道」「未知」等,则不填
  3. 默认值规则

    • 归属版本:如果文档中没有且命令行未指定,默认使用 v1.0
    • 归属项目:如果文档中没有且命令行未指定,默认使用「美术资产」

提取后若用户要求「先确认再写入」,则先列出上述字段的取值,待确认后再执行「调用 write 接口」。


调用 write 接口的方式

脚本src/write_excel.py(代码在 src/ 下)

推荐命令形式(在工程根目录执行):

bash
cd /Users/zhulei/Projects/tech-doc
venv/bin/python src/write_excel.py 任务名称 <任务名称> 归属项目 <归属项目> 归属版本 <归属版本> [其他字段名 值 ...]

规则

  • 参数为成对的「字段名 值」,字段名必须与 Excel 表头一致(如「任务名称」「归属项目」「归属版本」「资源名称」「资源类型」「工程分支」等)。
  • 必填:任务名称归属项目归属版本
  • 任务ID、创建时间由脚本自动生成,不要传入。
  • 每条任务单独调用一次;多条任务则多次调用。

示例(固定流程:提取 → 调用 write → 写入任务表)

示例 1:单任务

用户输入:
「嘎嘎射击 v97 版本要新增一个任务,漂亮妞儿制作,预计会有一个 pretty_girl.prefab 的资源,类型是角色」

Step 1 提取关键信息:

  • 任务名称:漂亮妞儿制作
  • 归属项目:嘎嘎射击
  • 归属版本:v97
  • 资源名称:pretty_girl.prefab
  • 资源类型:角色

Step 2 & 3 调用 write 接口并写入任务表:

bash
cd /Users/zhulei/Projects/tech-doc
venv/bin/python src/write_excel.py 任务名称 漂亮妞儿制作 归属项目 嘎嘎射击 归属版本 v97 资源名称 pretty_girl.prefab 资源类型 角色

示例 2:多任务

用户输入:
「不休的乌拉拉 v7.5,产出的资源包括 小猪.prefab、散去.prefab,任务名称分别是 动物模型制作 和 特效3,都在 feature-d33 分支,归属提案和成本占比都还不知道」

Step 1 提取关键信息:

  • 任务1:任务名称=动物模型制作,归属项目=不休的乌拉拉,归属版本=v7.5,资源名称=小猪.prefab,工程分支=feature-d33
  • 任务2:任务名称=特效3,归属项目=不休的乌拉拉,归属版本=v7.5,资源名称=散去.prefab,工程分支=feature-d33
  • 归属提案、成本占比:未知,不传或留空

Step 2 & 3 对每条任务分别调用 write:

bash
venv/bin/python src/write_excel.py 任务名称 动物模型制作 归属项目 不休的乌拉拉 归属版本 v7.5 资源名称 小猪.prefab 工程分支 feature-d33
venv/bin/python src/write_excel.py 任务名称 特效3 归属项目 不休的乌拉拉 归属版本 v7.5 资源名称 散去.prefab 工程分支 feature-d33

示例 3:仅必填字段

用户输入:
「香肠派对 v51 新增一个任务:道奇挑战者模型制作」

Step 1 提取关键信息:

  • 任务名称:道奇挑战者模型制作
  • 归属项目:香肠派对
  • 归属版本:v51

Step 2 & 3 调用 write:

bash
venv/bin/python src/write_excel.py 任务名称 道奇挑战者模型制作 归属项目 香肠派对 归属版本 v51

示例 4:从 Word 文档批量导入

用户输入:
「帮我处理 docs/《云轩的厨房》v75.docx 文档,项目是云轩的厨房,版本是 v75」

Step 1 通过指定工具读取文档:

bash
cd /Users/zhulei/Projects/tech-doc
venv/bin/python src/read_doc_and_write.py "docs/《云轩的厨房》v75.docx" --project "云轩的厨房" --version v75

Step 2 理解上下文,获取关键语义:

工具会自动:

  • 读取文档,识别列表项(如 * 英雄萨姆332
  • 解析每个任务的字段信息
  • 提取任务名称(正确处理括号和逗号)
  • 提取其他字段(开发类型、工程分支、资源名称等)

Step 3 调用指定工具生成任务表格:

工具会自动调用 write_excel_openpyxl,判断每个任务是更新还是新建(基于任务名称),并批量写入到 asset_missions/SoFunny3D_云轩的厨房_v75.xlsx

文档内容示例(单版本):

code
* 英雄萨姆332
* 美国队长红皮娃娃(开发类型属于外包)
* 旧城开发,资源类型属于场景,开发类型属于外包,分支已经在 app-assets 上了
* 洛杉矶实验室,资源类型不知道,资源名称是 lib-03,分支在 ap2 上

处理结果:

  • 任务1:英雄萨姆332(无额外字段)
  • 任务2:美国队长红皮娃娃,开发类型=外包
  • 任务3:旧城开发,资源类型=场景,开发类型=外包,工程分支=app-assets
  • 任务4:洛杉矶实验室,工程分支=ap2,资源名称=lib-03(资源类型「不知道」被忽略)

示例 5:多版本自动分组

用户输入:
「帮我处理 docs/美丽新世界.docx 文档,项目是美丽新世界」

文档内容示例(多版本):

code
v55 版本
开发任务
* 小妞模型制作
* 子俊3 D 打印机,分支在 release 先上,属于内部开发资源

v60 版本
开发任务
* 德刚模型制作,属于角色类型,没有分支,成本是 10 人天
* 小鸟特效

Step 1 通过指定工具读取文档:

bash
cd /Users/zhulei/Projects/tech-doc
venv/bin/python src/read_doc_and_write.py "docs/美丽新世界.docx" --project "美丽新世界"

Step 2 & 3 理解上下文并生成任务表格:

工具会自动:

  • 识别到 2 个版本组:v55、v60
  • v55 版本:2 个任务 → 写入 asset_missions/SoFunny3D_美丽新世界_v55.xlsx
    • 小妞模型制作
    • 子俊3 D 打印机(开发类型=内部,工程分支=release)
  • v60 版本:2 个任务 → 写入 asset_missions/SoFunny3D_美丽新世界_v60.xlsx
    • 德刚模型制作(资源类型=角色,开发成本(工时)=10)
    • 小鸟特效

示例 6:从 Excel 文件批量导入

用户输入:
「帮我处理 docs/嘎嘎设计_V3.1.xlsx 文件」

Step 1 通过指定工具读取 Excel 文件:

bash
cd /Users/zhulei/Desktop/Projects/asset-mission-by-doc
venv/bin/python src/read_excel_and_write.py "docs/嘎嘎设计_V3.1.xlsx"

Step 2 理解上下文,获取关键语义:

工具会自动:

  • 从文件名提取归属项目:"嘎嘎设计_V3.1.xlsx" → 归属项目="嘎嘎设计"
  • 读取 Excel 表格的所有数据行
  • 对每行数据进行字段映射:
    • Excel "标题" → 任务名称
    • Excel "主单分支名" → 工程分支
    • Excel "主单需求文档链接" → 设计文档
    • Excel "工时" → 开发成本(工时)
    • Excel "国服版本" → 归属版本(提取版本号,转换为小写)
    • Excel "部门" → 资源类型(从语义提取)

Excel 数据示例:

标题主单分支名工时部门国服版本
脱战回血功能-资源提交-3D特效-0.3美术-3D特效V3.1版本(8月29日)
玩法模块-新英雄开发-01代号:嘎嘎鸭-2D角色feature/v1/new-hero2.0美术-2D角色V3.1版本(8月29日)

处理结果:

  • 任务1:任务名称="脱战回血功能-资源提交-3D特效",归属项目="嘎嘎设计",归属版本="v3.1",资源类型="特效",开发成本(工时)=0.3
  • 任务2:任务名称="玩法模块-新英雄开发-01代号:嘎嘎鸭-2D角色",归属项目="嘎嘎设计",归属版本="v3.1",工程分支="feature/v1/new-hero",资源类型="角色",开发成本(工时)=2.0

Step 3 从 Git 提交记录提取资源名称(可选):

如果 Excel 中包含"执行者"、"开始时间"、"结束时间"列,且用户提供了 Git 仓库路径,系统会自动从 Git 提交记录中提取资源名称。

使用 Git 查询的完整命令:

bash
venv/bin/python src/read_excel_and_write.py "docs/任务列表.xlsx" /Users/zhulei/Desktop/Projects/unity-wx-test

系统会自动:

  • 检查每个任务是否包含作者、开始时间、结束时间
  • 如果满足条件,调用 git_commit_query.py 查询提交记录
  • 从提交记录中提取资源文件列表
  • 将资源文件列表填充到"资源名称"字段

Step 4 调用指定工具生成任务表格:

工具会自动调用 write_excel_openpyxl,判断每个任务是更新还是新建(基于任务名称),并批量写入到 asset_missions/SoFunny3D_嘎嘎设计_v3.1.xlsx


示例 7:通过项目版本产生资产任务(实际使用场景)

用户输入:
「通过 嘎嘎射击的 v3.2 产生资产任务」

Step 1 识别文件并读取:

系统会自动识别并查找对应的 Excel 文件:docs/嘎嘎射击_V3.2.xlsx

Step 2 通过指定工具读取 Excel 文件:

不使用 Git 时:

bash
python src/read_excel_and_write.py "docs/嘎嘎射击/嘎嘎射击_V3.2.xlsx"

使用多仓库 Git 查询时(推荐,会填充资源名称、git 仓库、git sha):

bash
python src/read_excel_and_write.py "docs/嘎嘎射击/嘎嘎射击_V3.2.xlsx" "docs/嘎嘎射击/release_1.55.toml" "F:/Projects/BiuBiuBiu2-MiniGame2"

Step 3 理解上下文并生成任务表格:

工具会自动:

  • 从文件名提取归属项目:"嘎嘎射击_V3.2.xlsx" → 归属项目="嘎嘎射击"
  • 从"国服版本"列提取版本号并转换为小写:V3.2 → v3.2
  • 读取所有任务行
  • 若提供 TOML + 工程根目录,则在各仓库中按作者+时间查 Git,合并资源名称与提交信息
  • 进行字段映射和转换,批量写入到 asset_missions/SoFunny3D_嘎嘎射击_v3.2.xlsx

处理结果:

  • ✅ 成功处理 37 个任务
  • 输出文件:asset_missions/SoFunny3D_嘎嘎射击_v3.2.xlsx
  • 包含多种资源类型:场景、角色、动作、特效、UI 等

注意事项:

  • 如果 Excel 中有重复的任务名称,系统会自动更新已有任务(基于任务名称唯一性)
  • 所有任务都会自动生成任务ID和创建时间

示例 8:从 Git 提交记录提取资源名称

场景:当任务包含作者、任务开始时间、任务结束时间等信息时,可以从 Git 提交记录中自动提取资源名称。

用户输入:
「处理 Excel 文件,并从 Git 提交记录中提取资源名称,仓库路径是 /Users/zhulei/Desktop/Projects/unity-wx-test」

Excel 数据示例:

标题执行者开始时间结束时间工程分支国服版本
角色模型制作zhulei2025.12.012025.12.30feature-devV3.2版本

Step 1 通过指定工具读取 Excel 文件并提取资源名称:

bash
cd /Users/zhulei/Desktop/Projects/asset-mission-by-doc
venv/bin/python src/read_excel_and_write.py "docs/任务列表.xlsx" /Users/zhulei/Desktop/Projects/unity-wx-test

系统自动处理流程:

  1. 读取 Excel 文件:提取所有字段,包括作者、开始时间、结束时间
  2. 检查 Git 查询条件:系统检测到任务包含作者(zhulei)、开始时间(2025.12.01)、结束时间(2025.12.30)
  3. 调用 Git 查询:系统内部调用 git_commit_query.pyquery_commits_by_author() 函数
    • 查询仓库:/Users/zhulei/Desktop/Projects/unity-wx-test
    • 作者:zhulei
    • 时间范围:2025.12.012025.12.30
  4. 提取资源文件:从提交记录中提取资源文件列表
    • 找到 91 条提交记录
    • 提取到资源文件:Assets/Arts/Dino_Re/Arts/Characters/Avatar/Dino_One.prefabAssets/Arts/Sausages/Avatar/SausgaeMan_Char.prefab
  5. 填充资源名称字段:将资源文件列表(多个文件用逗号分隔)填充到"资源名称"字段

处理结果:

  • 任务名称="角色模型制作"
  • 作者="zhulei"
  • 任务开始时间="2025.12.01"
  • 任务结束时间="2025.12.30"
  • 工程分支="feature-dev"
  • 资源名称="Assets/Arts/Dino_Re/Arts/Characters/Avatar/Dino_One.prefab, Assets/Arts/Sausages/Avatar/SausgaeMan_Char.prefab, ..."(从 Git 提交记录自动提取)

Git 查询功能说明:

  • 支持中文作者名称:自动转换为拼音进行匹配(如"王梅林" → "wangmeilin")
  • 日期格式兼容:支持 2025.12.012025-12-012025/12/01 等多种格式
  • 不区分大小写:作者名称匹配不区分大小写
  • 按作者日期过滤:任务时间范围对应 commit 的 author date(作者日期),不是 committer date(提交者日期),避免漏掉他人代提交或合并后日期变化的提交
  • 自动过滤:自动过滤 .meta 文件,只显示资源文件
  • 资源文件类型:支持 .prefab.fbx.png.mat.asset.anim.shader.hlsl.unity.cs

使用条件:

  • 任务必须包含"作者"(执行者)字段
  • 任务必须包含"任务开始时间"和"任务结束时间"字段
  • 需要提供 Git 仓库的本地路径(用户提供或从配置中获取)
  • 工程分支字段可选,但可以提供以更精确地查询特定分支的提交

行为说明

  1. 文件与命名

    • 输出目录:asset_missions/
    • 文件名:SoFunny3D_<归属项目>_<归属版本>.xlsx(便于区分 SoFunny3D 项目资产清单)
    • 同项目+同版本写入同一文件;新项目或新版本会从模板新建文件。
  2. 自动生成

    • 任务ID:按该文件内现有最大 ID 自增。
    • 创建时间:仅在新增行时写入,更新已有任务时不改。
  3. 唯一性与更新

    • 以「任务名称」为唯一标识:存在则更新该行,不存在则新增一行。

脚本与资源路径

  • Write 接口脚本:/Users/zhulei/Desktop/Projects/asset-mission-by-doc/src/write_excel.py
  • Word 文档读取脚本:/Users/zhulei/Desktop/Projects/asset-mission-by-doc/src/read_doc_and_write.py
  • Excel 文件读取脚本:/Users/zhulei/Desktop/Projects/asset-mission-by-doc/src/read_excel_content.py(查看内容)
  • Excel 文件处理脚本:/Users/zhulei/Desktop/Projects/asset-mission-by-doc/src/read_excel_and_write.py
  • Git 提交查询脚本:/Users/zhulei/Desktop/Projects/asset-mission-by-doc/src/git_commit_query.py(从 Git 提交记录提取资源文件列表)
  • 模板文件:/Users/zhulei/Desktop/Projects/asset-mission-by-doc/data_template.xlsx
  • 输出目录:/Users/zhulei/Desktop/Projects/asset-mission-by-doc/asset_missions/
  • 虚拟环境:/Users/zhulei/Desktop/Projects/asset-mission-by-doc/venv/

Excel 文件格式支持

Excel 字段映射

从 Excel 文件读取时,字段映射规则如下:

Excel 表格字段资产任务清单字段转换规则
标题任务名称直接使用
主单分支名工程分支直接使用
主单需求文档链接设计文档直接使用
工时开发成本(工时)直接使用(单位需确认)
国服版本归属版本提取版本号,统一转换为小写<br>例如:"V3.1版本(8月29日)" → "v3.1"
部门资源类型从语义提取<br>例如:"美术-3D特效" → "特效"<br>"美术-2D角色" → "角色"<br>"美术-3D角色" → "角色"<br>"美术-3D动作" → "动作"<br>"美术-UI" → "UI"<br>其他部门名称也会尝试提取资源类型
文件名归属项目从文件名提取<br>例如:"嘎嘎设计_V3.1.xlsx" → "嘎嘎设计"
(由 Git 填充)资源名称当提供仓库参数且任务有作者、开始/结束时间时,从各仓库 Git 提交中提取资源文件列表并合并
(由 Git 填充)git 仓库格式:仓库路径1: sha1, sha2; 仓库路径2: sha3,便于在对应仓库执行 git show <sha>
(由 Git 填充)git sha所有相关提交 SHA 的扁平列表,逗号分隔

Excel 文件处理流程

  1. 读取 Excel 文件:使用 openpyxl 读取所有工作表和数据行
  2. 从文件名提取归属项目:解析文件名,提取项目名称
  3. 字段映射和转换:按照上述映射规则转换字段
  4. 从 Git 提交记录提取资源名称(可选)
    • 若调用时提供了仓库信息(单仓库路径 或 TOML + 工程根目录),且任务包含作者、任务开始时间、任务结束时间
    • 在每个仓库中查询该作者在时间范围内的提交,提取资源文件列表并合并
    • 将资源文件列表写入「资源名称」列,并按仓库写入「git 仓库」「git sha」列
  5. 批量写入:对每行数据调用 write_excel_openpyxl 写入任务表(输出文件名为 SoFunny3D_<归属项目>_<归属版本>.xlsx

Word 文档格式支持

支持的文档格式

  1. 列表格式(推荐):

    code
    * 英雄萨姆
    * 美国队长红皮(开发类型属于外包)
    * 场景 test03,开发类型属于外包,分支已经在 app-assets 上了
    
  2. 段落格式

    code
    任务名称:角色制作
    归属项目:我的项目
    归属版本:v1.0
    资源名称:hero.prefab
    工程分支:feature-dev
    
  3. 混合格式:文档可以包含标题、段落、列表等多种格式

字段识别模式

工具能够识别以下自然语言模式:

  • 「开发类型属于 xxx」→ 开发类型:xxx
  • 「属于内部开发资源」或「属于外包开发资源」→ 开发类型:内部/外包
  • 「分支在 xxx 上」或「分支已经在 xxx 上了」→ 工程分支:xxx
  • 「资源名称是 xxx」→ 资源名称:xxx
  • 「属于 xxx 类型」(如「属于角色类型」)→ 资源类型:xxx
  • 「类型属于 xxx」→ 资源类型:xxx(排除「开发类型」)
  • 「资源类型是 xxx」→ 资源类型:xxx
  • 「成本是 xxx 人天」→ 开发成本(工时):xxx

版本自动分组

如果文档中包含版本标记(如 "v55 版本"、"v60 版本"),工具会:

  1. 自动识别版本标记
  2. 将后续任务分组到对应版本
  3. 每个版本的任务写入到独立的 Excel 文件
  4. 如果文档中没有版本标记,所有任务使用默认版本(命令行指定或 v1.0)

出错时检查

  1. 是否在项目根目录执行,是否使用 venv/bin/python
  2. 必填字段「任务名称」「归属项目」「归属版本」是否都传入。
  3. 模板文件 data_template.xlsx 是否存在。
  4. 根据终端中 src/write_excel.py 的报错信息排查。