技能:一键生成立项报告(通用版)
触发场景
当用户要求生成项目立项报告、投资立项报告、项目建议书、投资建议书等文档时触发。
适用性:本技能通用,不限定具体项目。用户提供企业材料后,从企业提供的信息中提取数据填充。
前置确认(必须)
在生成报告之前,必须先向用户确认以下关键信息,不得跳过:
- 项目名称 —— 要生成哪个项目的立项报告?(列出workspace中可用项目让用户选择)
- 预期估值 —— 投资前/投资后估值是多少?(可提供区间选项:1亿以下/1-5亿/5-10亿/10亿以上/手动输入)
- 投资金额 —— 本轮计划投资多少?(可提供区间选项:500万以下/500-2000万/2000-5000万/5000万以上/手动输入)
- 投资轮次 —— 天使轮/Pre-A/A轮/B轮/C轮/战略投资?
用户确认以上信息后再开始提取企业提供的信息、搜索数据和生成文档。四项都必须经用户明确确认,不得静默默认或编造;用户未提供估值/金额/轮次时,再次追问,直到用户给出明确答案。
提问环节操作规则(必须遵守,防止"点击没反应/答案不是所选")
前置确认使用 ask 工具的多选卡片提问。以下规则是硬性要求:
- 每个问题必须至少 2 个选项。选项少于 2 个时 ask 卡片会整体报错、弹不出来(表现为"点击没反应")。
- 项目名称:列出 2~3 个 workspace 中候选项目 + 1 个「以上都不是,手动输入」,保证 ≥2 个选项。
- 估值/金额/轮次:直接列全区间选项(如 5-10亿 / 10亿以上 / 手动输入),同样保证 ≥2 个选项。 - 一次 ask 调用最多问 2 个问题,推荐每次只问 1 个。禁止把 4 个问题一次性连发——多卡片布局容易误点、错位,且任一问题出错会导致整组失败。
- 选项 label 即最终取值:label 写用户要确认的具体值(如"B轮"、"5-10亿"、"5000万-1亿"),description 只放说明文字;不要在 label 里写模糊表述或与 description 重复。
- 收到 ask 结果后,必须把每个答案原样回显给用户并请求确认,例如:"已确认:项目=×××,轮次=B轮,估值=5-10亿,金额=5000万-1亿。如有误请直接纠正。" 与用户意图不符时立即重问,不得静默采用。
- 用户选了「手动输入」时,必须停下等用户下一条消息给出具体值,不得用默认值代替。
- 如果 ask 卡片无返回或显示中断(工具结果为空/被中断),礼貌重试一次;重试仍失败则改用纯文字提问(按 1/2/3/4 编号列出),不要卡死或自作主张继续。
一、排版规范(公文排版)
1.1 页面设置
| 项目 | 值 |
|---|---|
| 页边距(上) | 3.7cm |
| 页边距(下) | 3.5cm |
| 页边距(左) | 2.8cm |
| 页边距(右) | 2.6cm |
| 文档网格 | linesAndChars, linePitch=312 |
| 行距 | 固定30.3磅(line=606, rule=exact),全文统一 |
| 段间距 | 段前段后均为0,无额外间距 |
| 对齐方式 | 两端对齐(JUSTIFY) |
| 首行缩进 | 正文32磅(约2字符),标题不缩进 |
1.2 字体规范
| 元素 | 字体(eastAsia) | 字号 | 加粗 | 备注 |
|---|---|---|---|---|
| 文档标题 | 方正公文小标宋 | 二号(22pt) | 否 | 居中 |
| 一级标题(一、二、…) | 方正公文黑体 | 三号(16pt) | 不加粗 | ⚠️ 和默认行为相反 |
| 二级标题((一)(二)…) | 方正公文楷体 | 三号(16pt) | 否 | |
| 三级标题 | 方正公文仿宋 | 三号(16pt) | 否 | 首行缩进 |
| 正文 | 方正公文仿宋 | 三号(16pt) | 否 | 首行缩进 |
| 阿拉伯数字 | 宋体 | 三号(16pt) | 不加粗 | ⚠️ 必须独立run |
| 英文字母 | 方正公文小标宋 | 三号(16pt) | 不加粗 | 不是Times New Roman |
| 标点符号 | 宋体 | 三号(16pt) | 加粗 | ⚠️ 必须独立run;六角括号〔〕除外用仿宋;引号必须用中文弯引号\u201c\u201d,严禁直双引号\"(U+0022) |
1.3 python-docx 代码模板
from docx import Document
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn, nsdecls
from docx.oxml import parse_xml
# 页面设置
def set_page(doc):
s = doc.sections[0]
s.top_margin = Cm(3.7); s.bottom_margin = Cm(3.5)
s.left_margin = Cm(2.8); s.right_margin = Cm(2.6)
g = parse_xml(f'<w:docGrid {nsdecls("w")} w:type="linesAndChars" w:linePitch="312"/>')
s._sectPr.append(g)
# 行距(全文统一调用)
def set_ls(p):
pPr = p._p.get_or_add_pPr()
sp = pPr.find(qn('w:spacing'))
if sp is None:
sp = parse_xml(f'<w:spacing {nsdecls("w")}/>')
pPr.append(sp)
sp.set(qn('w:line'), '606')
sp.set(qn('w:lineRule'), 'exact')
sp.set(qn('w:before'), '0')
sp.set(qn('w:after'), '0')
# 混排 run 添加
def mk_run(p, text, ea='方正公文仿宋', fn='方正公文小标宋', sz=16, bd=False):
r = p.add_run(text)
r.font.size = Pt(sz); r.font.name = fn
r._element.rPr.rFonts.set(qn('w:eastAsia'), ea)
if bd: r.bold = True
# 混排正文(数字/中文/英文/标点分段传入)
def mk_body(doc, segments):
"""segments: [(text, ea, fn, bold), ...]"""
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
p.paragraph_format.first_line_indent = Pt(32)
set_ls(p)
for text, ea, fn, bd in segments:
mk_run(p, text, ea, fn, bd=bd)
# 一级标题:方正公文黑体,不加粗
def mk_h1(doc, text):
p = doc.add_paragraph()
p.style = doc.styles['Heading 1']
p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY; set_ls(p)
r = p.add_run(text)
r.font.size = Pt(16); r.font.name = '方正公文黑体'
r._element.rPr.rFonts.set(qn('w:eastAsia'), '方正公文黑体')
r.bold = False # ⚠️ 关键:不加粗
# 二级标题:方正公文楷体
def mk_h2(doc, text):
p = doc.add_paragraph()
p.style = doc.styles['Heading 2']
p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY; set_ls(p)
r = p.add_run(text)
r.font.size = Pt(16); r.font.name = '方正公文楷体'
r._element.rPr.rFonts.set(qn('w:eastAsia'), '方正公文楷体')
# 正文
def mk_p(doc, text):
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
p.paragraph_format.first_line_indent = Pt(32)
set_ls(p)
mk_run(p, text)
# 全文统一格式化(处理已有段落)
def fmt_all(doc):
for p in doc.paragraphs:
t = ''.join(r.text for r in p.runs).strip()
if not t: continue
p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY; set_ls(p)
sn = p.style.name
if sn == 'Heading 1':
for r in p.runs:
r.font.size = Pt(16); r.font.name = '方正公文黑体'
r._element.rPr.rFonts.set(qn('w:eastAsia'), '方正公文黑体')
r.bold = False
elif sn == 'Heading 2':
for r in p.runs:
r.font.size = Pt(16); r.font.name = '方正公文楷体'
r._element.rPr.rFonts.set(qn('w:eastAsia'), '方正公文楷体')
elif sn == 'Heading 3':
p.paragraph_format.first_line_indent = Pt(32)
for r in p.runs:
r.font.size = Pt(16); r.font.name = '方正公文小标宋'
r._element.rPr.rFonts.set(qn('w:eastAsia'), '方正公文仿宋')
else:
p.paragraph_format.first_line_indent = Pt(32)
for r in p.runs:
r.font.size = Pt(16); r.font.name = '方正公文小标宋'
r._element.rPr.rFonts.set(qn('w:eastAsia'), '方正公文仿宋')
for t in doc.tables:
for row in t.rows:
for cell in row.cells:
for p in cell.paragraphs:
p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
二、立项报告通用大纲
以下大纲适用于任何项目的投资立项场景。各节内容根据企业提供的信息提取填充。
标题:[项目名称] 立项报告
一、项目基本情况
(一)基本信息 —— 公司/项目全称、注册信息、成立日期、法定代表人、注册资本、经营范围
(二)历史沿革 —— 即融资历程(轮次、时间、投资人、金额、估值);无融资历史则写"暂无"
(三)股权结构 —— 股东名册、持股比例、股东背景
(四)组织架构 —— 部门设置、子公司/分支机构
(五)核心团队 —— 高管简历、员工人数、研发占比
二、公司业务基本情况
(一)核心技术/产品情况
1. 技术路线与原理 —— 底层技术架构、关键技术路线选择、技术代际定位
2. 核心产品矩阵 —— 产品线全景图、各产品定位与迭代阶段(在研/试产/量产)
3. 性能指标对标 —— 关键性能参数、与行业基准/国际领先水平的量化对比
4. 知识产权布局 —— 发明专利/实用新型/软著/集成电路布图/PCT国际申请
├ 已授权数量、实审中数量、权属清晰度
└ 核心专利覆盖范围、标准必要专利(SEP)情况
5. 研发投入与产出 —— 研发费用占比、研发团队规模与结构、技术成果转化率
(二)主营业务/产品简介
1. 产品线架构 —— 各产品/服务的功能定位、谱系关系、平台化程度
2. 核心产品详述 —— 功能描述、技术指标、交付形态(SaaS/私有部署/硬件/解决方案)
3. 目标客户画像 —— 客户行业分布、客户体量(大B/小B/G端/C端)、核心决策人
4. 典型应用场景 —— 至少2个标杆场景的端到端描述(痛点→方案→效果)
5. 技术优势与差异化 —— vs 竞品的功能/性能/成本/体验对比,可替代性评估
(三)经营模式
1. 商业模式画布 —— 价值主张、客户关系、渠道通路、收入来源、核心资源、
关键业务、重要伙伴、成本结构
2. 收入结构拆解 —— 各业务线收入占比、经常性收入(ARR/MRR)vs 一次性收入
3. 收费与定价 —— 定价模型(订阅/买断/按量/抽佣)、客单价区间、毛利率水平
4. 销售体系 —— 直销/渠道/ISV生态、销售周期、获客成本(CAC)、销售团队规模
5. 增长策略 —— 横向扩展(新产品线/新行业)vs 纵向深耕(增购/复购/升级)
6. 供应链与交付 —— 核心供应商依赖度、交付周期、产能/服务上限
(四)主要客户/合作伙伴
1. 客户分级 —— 战略客户/核心客户/一般客户的数量与收入贡献占比
2. 标杆客户案例 —— 至少2个KA的落地情况(签约时间、实施周期、合同金额、续约)
3. 合作伙伴生态 —— 技术合作/渠道代理/联合解决方案/产学研合作
4. 订单与合同 —— 已签约合同总额、在手订单、框架协议、招投标中标记录
5. 客户健康度 —— NPS/满意度、续约率/续费率(NDR)、客户生命周期价值(LTV)
6. 客户集中度 —— 前五大客户收入占比,单一客户依赖风险
三、行业情况
(一)市场分析
1. 行业定义与分类 —— 赛道界定、细分市场划分、产业链位置(上游/中游/下游)
2. 政策环境 —— 国家级/省部级/地方政策清单、资质许可/准入壁垒、
补贴/税收优惠、政策窗口期判断
3. 市场规模 —— 全球市场规模及增速、中国市场规模及增速、
可及市场(SAM/TAM/SOM)测算
4. 增长驱动力 —— 需求侧驱动(人口/消费/城镇化/老龄化)、
供给侧驱动(技术突破/国产替代/基础设施)、政策驱动
5. 技术演进趋势 —— 技术成熟度曲线(Gartner Hype Cycle)、
下一代技术方向、颠覆性技术风险
6. 产业链分析 —— 上下游议价能力、价值分布(哪个环节利润最厚)、
纵向一体化趋势
7. 市场集中度 —— CR3/CR5/HHI指数、头部玩家市占率、长尾格局
8. 目标细分市场定位 —— 公司所处的细分赛道规模、增速、渗透率、进入时机
(二)竞争对手分析
1. 竞争格局图谱 —— 按技术/价格/市场三维度的竞争矩阵(文字或表格描述)
2. 核心竞品逐一对比 —— 至少3家直接竞对 + 2家间接竞对的详细对标:
├ 成立时间、融资阶段、团队规模、收入体量
├ 产品功能/性能/价格/市场覆盖
└ 优劣势总结
3. 竞争壁垒评估 —— 技术壁垒(专利/Know-how)、数据壁垒(数据飞轮)、
网络效应、规模效应、品牌/客户转换成本
4. 替代品威胁 —— 跨界替代方案、开源/低成本替代、客户自研可能性
5. 竞争格局演变 —— 未来3-5年格局预判、新进入者威胁、并购整合趋势
6. 公司竞争优势总结 —— 差异化定位、护城河深度、追赶周期估算
四、财务状况分析 —— 近3年财务数据表(资产/负债/收入/利润/现金流)+ 趋势分析
五、企业估值及估值依据 —— PS法、PE法、可比公司分析 → 建议估值区间
六、投资方案及落地计划 —— 轮次、金额、估值、资金用途、退出路径、落地安排
七、投资亮点与风险
(一)投资亮点 —— 技术/数据/市场/团队/模式/政策 各维度亮点
(二)投资风险 —— 各项风险描述 + 应对措施
八、下一步工作计划 —— 技术尽调、客户背调、法务尽调、财务复核等
落款:[部门] / 投资经理:[姓名] / [日期]
大纲说明
| 项目 | 动作 |
|---|---|
| 标题名称 | 从用户项目名称替换 |
| 核心团队 | 从企业提供的信息中提取人物信息 |
| 市场数据 | 搜索/提取行业规模、增速、政策、产业链、市场集中度等数据 |
| 财务数据 | 从审计报告/财务报表提取 |
| 竞争分析 | 至少3家直接竞对+2家间接竞对详细对标,含产品/技术/团队/融资/市场全覆盖 |
| 客户分析 | 标杆客户案例详述、客户分级、健康度指标、集中度评估 |
| 知识产权 | 专利/软著/标准清单,权属验证 |
| 经营模式 | 商业模式画布全维度、收入拆解、CAC/LTV、增长策略 |
| 估值区间 | 基于财务预测+可比公司计算 |
| 投资方案 | 根据用户需求填写 |
| 落款 | 替换为实际部门/姓名/日期 |
报告产出后:未提供材料清单(必须)
每次生成立项报告后,必须另附一份《企业目前未提供的材料清单》,严禁嵌入报告正文。 清单作为独立内容,在 .docx 文件输出后以对话消息形式单独发送。
清单按报告各章节逐一对照,标注"已提供"和"未提供"状态:
【企业未提供材料清单】
一、项目基本情况
✅ 基本信息 —— 已提供
✅ 历史沿革/融资历程 —— 已提供 / ❌ 未提供
✅ 股权结构 —— 已提供 / ❌ 未提供
✅ 核心团队 —— 已提供 / ❌ 未提供(缺少高管简历)
二、公司业务基本情况
❌ 知识产权清单 —— 未提供(需专利号/软著号/权属证明)
❌ 前五大客户明细 —— 未提供
❌ 在手订单/合同 —— 未提供
三、行业情况
✅ 市场分析 —— 已提供 / ❌ 未提供(需第三方行业报告)
四、财务状况
❌ 近三年审计报告 —— 未提供
❌ 最近一期财务报表 —— 未提供
五、估值及投资方案
✅ 预期估值 —— 用户已确认
✅ 投资金额/轮次 —— 用户已确认
❌ 资金使用计划明细 —— 未提供
六、其他待补充
❌ 工商档案/企业信用报告
❌ 核心客户/供应商合同
❌ …
规则:
- 每个大纲子项都要过一遍,不能遗漏
- 已提供的打 ✅,简要标注已有内容
- 未提供的打 ❌,说明具体缺什么
- 格式简洁,不需要公文排版,纯文本即可
- 放在报告 .docx 文件输出之后,作为对话消息直接列出
三、混排字体处理(核心难点)
同一段包含中文+数字+英文+标点时,必须按字符类型拆分为多个独立run:
| 字符类型 | eastAsia | bold | 示例 |
|---|---|---|---|
| 中文字符 | 按段落类型(正文=仿宋、一级=黑体等) | 否 | 公司成立于 |
| 阿拉伯数字 | 宋体 | 否 | 2024 |
| 英文字母 | 方正公文小标宋 | 否 | ReID 、 IPO |
| 标点符号 | 宋体 | 是 | 。 、 , 、 、 、 ; 、 : 、 ? 、 ! 、 \u201c\u201d 、 \u2018\u2019 、 () 、 【】 、 — 、 … 、 · |
| 六角括号〔〕 | 仿宋(与正文同) | 否 | 〔2026〕 |
示例代码:
mk_body(doc, [
('该技术于', '方正公文仿宋', '方正公文小标宋', False),
('2024', '宋体', '宋体', False),
('年实现收入', '方正公文仿宋', '方正公文小标宋', False),
('5,137', '宋体', '宋体', False),
('万元', '方正公文仿宋', '方正公文小标宋', False),
('。', '宋体', '宋体', True),
('Market', '方正公文小标宋', '方正公文小标宋', False),
('-', '宋体', '宋体', True),
('1501', '宋体', '宋体', False),
])
四、引号规范化(必须)
严禁使用直双引号 "(U+0022)和直单引号 '(U+0027),必须替换为中文弯引号,按出现顺序交替配对:
def normalize_quotes(text):
"""将直引号转为中文弯引号(交替配对)"""
result = []
dq_open = True # True = 左双引号 \u201c, False = 右双引号 \u201d
sq_open = True # 左单引号 \u2018, 右单引号 \u2019
for ch in text:
if ch == '"':
result.append('\u201c' if dq_open else '\u201d')
dq_open = not dq_open
elif ch == "'":
result.append('\u2018' if sq_open else '\u2019')
sq_open = not sq_open
else:
result.append(ch)
return ''.join(result)
在构建段落文本前,所有文本(正文、标题、表格)统一调用 normalize_quotes()。
五、注意事项
- 一级标题不加粗——方正公文黑体默认是加粗的,此处要显式 bold=False
- 数字必须独立run——不能混在仿宋run中,否则会被仿宋覆盖;数字的 ea(中文字体)和 fn(西文字体)都必须设为宋体,如
('2024', '宋体', '宋体', False) - 英文用小标宋——不是Times New Roman,也不是宋体
- 标点必须加粗独立run——但六角括号〔〕例外,用仿宋;标点不能和中文混在同一run中,否则会遗漏加粗
- 引号必须规范化——严禁直双引号
",必须用中文弯引号\u201c\u201d,在 parse_mixed() 入口统一调用 normalize_quotes() - 行距全文必须一致——固定30.3磅,不得有的有间距有的没有
- 段间距均为0——无额外段前段后
- 先构建内容再统一格式化——避免边写边排导致逻辑混乱
- 表格单元格也要遵循相同规则——混排字体+两端对齐
- 方正公文系列字体需事先安装,否则Word会fallback到默认字体