跳过正文
  1. 知识笔记/

Dify初体验1

·

工作流介绍。
#

工作流整体如图所示。

  • 首先是用户输入,对于用户输入的问题,使用一个参数提取器,调用glm-4.7模型对其进行参数提取,参数提取为year,region,task_type,keywords。为了方便的其他操作。
  • 接着呢,就是一段代码执行块,执行了下面这一段python代码。主要实现的逻辑是,对于没有发布指定法规的年份,使用上一个最近的发布的法规,即对于2022徐州的问题,就返回2021年发布的支出标准。对于2026徐州就返回2025年发布的支出标准。
 1def main(year: int, region: str, keywords: str):
 2    REGULATIONS = [
 3        {"region": "徐州", "year": 2021, "filename": "徐州市政务信息化项目运维服务支出标准(徐财评〔2021〕5号).pdf"},
 4        {"region": "徐州", "year": 2025, "filename": "徐州市政务信息化项目运维服务支出标准(徐财评〔2025〕13号).pdf"},
 5        {"region": "无锡", "year": 0, "filename": "《无锡市市级政务信息化建设及运行维护项目预算支出标准(试行)》.pdf"},
 6        {"region": "江苏省", "year": 2021, "filename": "省政府办公厅关于印发江苏省省级政务信息化项目建设管理办法的通知(苏政办发〔2021〕24号).pdf"},
 7        {"region": "辽宁", "year": 0, "filename": "《辽宁省省级政务信息化建设项目预算支出标准规定(试行)》.pdf"},
 8        {"region": "连云港", "year": 0, "filename": "《连云港市市级政务信息化项目运维方案编制指南和支出预算标准(试行)》.pdf"},
 9    ]
10    FALLBACK_REGION = "江苏省"
11
12    # 1. 匹配地区
13    candidates = [r for r in REGULATIONS if region in r["region"] or r["region"] in region]
14    if not candidates:
15        candidates = [r for r in REGULATIONS if FALLBACK_REGION in r["region"]]
16
17    # 2. 匹配年份
18    if candidates:
19        eligible = [r for r in candidates if r["year"] <= year]
20        best = max(eligible, key=lambda r: r["year"]) if eligible else None
21    else:
22        best = None
23
24    # 3. 拼接 query
25    if best:
26        filename_stem = best["filename"].replace(".pdf", "")
27        query = f"{filename_stem} {keywords}"
28    else:
29        # 无匹配时用基础信息兜底
30        query = f"{region} {year}{keywords}"
31
32    return {
33        "year": str(year),
34        "filename": best["filename"] if best else None,
35        "query": query,
36    }
  • 接着,是一个llm节点,调用deepseekv3,根据得到的信息实现rag查询重写,为了方便在知识库中查找。以下为system提示词:
 1你是一个面向向量检索(RAG)的查询重写专家。用户当前的需求是估算政务软件项目的造价。
 2请根据用户的原始 query,将其拆解并改写为 2 到 3 个具体的【自然语言问句或短句】,以便在知识库中精准匹配到长文档中的计算公式和费率表。
 3
 4改写规则与约束:
 51. 严禁堆砌关键词:绝对不要输出用空格隔开的零散词汇组合,必须是结构完整的自然语言。
 62. 剥离业务噪音:将用户原始 query 中具体的业务场景(如“录入表单”、“财政业务”)抽象为通用的造价术语(如“定制软件开发”、“功能点测算”)。
 73. 必须包含多路检索意图:
 8   - 意图 A(找公式):生成一句专门针对底层计算公式的检索词(如:“定制软件开发服务费用的计算公式是什么?”)
 9   - 意图 B(找参数):生成一句专门针对费率和取费标准的检索词(如:“软件开发生产率基准、人月折算系数和基准人月费率是多少?”)
10
11不要输出任何解释或思考过程,请直接分行输出优化后的自然语言查询句子。要明确年份和地区

接下来就是知识检索,我将文件分成了两个知识库,一个是行业基准数据,一个是地方政策。索引方式都是高质量,使用zhipu的embedding-3模型,检索方式采用混合检索,使用有道的bcererankbaseV1模型,top-K设置为7。

接下来是变量聚合器,将上面查询两个数据库的结果合并起来。

最后,整合上面主要的信息,输入给llm节点,让他来进行最后的计算。该节点调用的是glm4.7,下面是他的提示词

 1# Role
 2你是一位资深的政府信息化项目造价评估与审计专家。你的任务是根据提供的官方政策文件和行业基准数据,为软件开发或系统运维项目提供极其严谨、准确的成本估算。
 3
 4# Rules
 51. **绝对忠实于上下文**:你必须【仅根据】提供的上下文(Context)中的公式、基准价格、系数进行计算。严禁使用任何外部知识或自行编造单价。
 62. **处理信息缺失**:如果上下文中缺乏计算必需的参数(如某个特定表单的复杂度权重、特定级别工程师的单价等),请明确指出缺失的内容,并根据已有信息给出一个合理的估算范围,或仅列出计算公式。
 73. **展现思维链(CoT)**:所有的计算必须有明确的推导过程,不能直接抛出结果。必须先列出公式,再代入数据,最后得出结果。
 84. **单位统一**:请在计算过程中注意单位的统一(如“元”、“万元”、“人月”、“人年”等),并在最终结果中清晰标注。
 9
10# Output Format
11请严格按照以下四个部分输出你的解答:
12**1. 需求解析**:简述项目年份、所属地域、项目类型(开发/运维)及关键规模参数(如表单数、接口数、驻场人数等)。
13**2. 评估依据**:明确列出你从上下文中提取到的用于计算的具体文件名称、计算公式、基准单价和相关系数。
14**3. 计算过程**:将需求参数代入公式,一步步进行数学运算。
15**4. 最终估算**:给出一个明确的总价(或价格区间),并附上一句简短的专业风险提示或建议。

运行测试
#

输入问题
#

2022年3月,徐州市财政局要开发一套财政业务管理系统,包括3个录入查询表单,每个表单分别对应3个数据库的表和一个外部接口,请估算合理的价格范围;

输出结果
#

 1**1. 需求解析**
 2
 3- **项目年份**:2022年3月(依据上下文规则,采用2021年度基准数据)。
 4- **所属地域**:徐州市(注:上下文提供的人月费率基准为无锡市数据,计算中将暂用此基准,并在建议中提示地域差异)。
 5- **项目类型**:新建软件开发项目(财政业务管理系统)。
 6- **规模参数**:包含3个录入查询表单。每个表单对应3个数据库表(共计9个内部逻辑文件参考对象)和1个外部接口(共计3个外部接口参考对象)。
 7
 8**2. 评估依据**
 9根据提供的上下文(《江苏省省级财政投资评审项目支出预算标准》及相关引用文件),本次估算依据如下:
10
11- **计算模型**:采用功能点法进行成本估算。
12- **人月折算系数**:174 人·时/月。
13- **软件开发生产率基准(P50)**:6.32 人·时/功能点(电子政务领域)。
14- **生产率浮动范围**:根据实际情况可上下浮动 20%(即 5.056 ~ 7.584 人·时/功能点)。
15- **复用度调整系数**:新建项目预算阶段默认取值范围为 0.75 - 1(复用度低)。
16- **软件开发基准人月费率**:24,000 元/人·月(参考上下文中无锡市平均基准)。
17- **缺失参数说明**:上下文中未提供具体的“功能点计数规则”(即未定义表单、数据库表、接口分别对应多少功能点),因此无法直接将业务需求数量转换为功能点总数。以下计算将基于**“单功能点单价”**进行推导。
18
19**3. 计算过程**
20
21**步骤一:计算基准工时单价**
22根据人月费率和人月折算系数,计算每小时的直接人力成本单价:
23
24$$
25\begin{aligned}
26\text{基准工时单价} &= \frac{\text{软件开发基准人月费率}}{\text{人月折算系数}} \\
27&= \frac{24,000 \text{ 元/人月}}{174 \text{ 人·时/人月}} \\
28&\approx 137.931 \text{ 元/人·时}
29\end{aligned}
30$$
31
32**步骤二:计算单功能点成本范围(未考虑复用度)**
33结合生产率基准及浮动范围(±20%),计算单个功能点的开发成本:
34
35- **生产率下限(效率最高)**:$6.32 \times (1 - 20\%) = 5.056 \text{ 人·时/FP}$
36- **生产率上限(效率最低)**:$6.32 \times (1 + 20\%) = 7.584 \text{ 人·时/FP}$
37
38- **单功能点成本下限**:
39  $$ 137.931 \text{ 元/人·时} \times 5.056 \text{ 人·时/FP} \approx 697.36 \text{ 元/FP} $$
40- **单功能点成本上限**:
41  $$ 137.931 \text{ 元/人·时} \times 7.584 \text{ 人·时/FP} \approx 1,046.03 \text{ 元/FP} $$
42
43**步骤三:应用复用度调整系数**
44针对新建项目,复用度调整系数范围为 0.75 - 1。我们需要计算最终的单功能点综合单价区间。
45
46- **最低单价**(生产率下限 $\times$ 最低复用度):
47  $$ 697.36 \times 0.75 \approx 523.02 \text{ 元/FP} $$
48- **最高单价**(生产率上限 $\times$ 最高复用度):
49  $$ 1,046.03 \times 1.00 = 1,046.03 \text{ 元/FP} $$
50
51**步骤四:项目总规模估算(功能点推导)**
52_由于上下文缺乏具体的“功能点计数表”,无法精确计算规模。以下为基于行业常见理解(非上下文数据,仅供参考逻辑)的公式化表述:_
53
54若设该项目的总功能点数为 $S$,则总价计算公式为:
55$$ \text{项目总费用} = S \times \text{单功能点综合单价} $$
56
57**4. 最终估算**
58
59由于提供的上下文中**缺失功能点计数标准**(即无法确定“3个表单”、“9个数据库表”、“3个接口”具体折算多少功能点),无法直接得出具体的总价。
60
61基于上下文数据,该项目的**单功能点综合单价应在 523.02 元 至 1,046.03 元 之间**。
62
63_若假设_(仅为举例,非依据上下文)该项目总规模为 100 功能点,则总价估算范围为:
64$$ 52,302 \text{ 元} \leq \text{总价} \leq 104,603 \text{ 元} $$
65
66**专家风险提示与建议:**
67
681.  **地域差异**:计算依据使用了上下文中的“无锡市”平均基准人月费率(2.4万元/人月)。徐州市的实际费率可能与此存在差异,建议查询徐州市当地发布的最新信息化项目造价标准进行替换。
692.  **标准缺失**:目前最关键的是缺乏《软件工程 功能规模测量》等具体的计数规则文件,建议补充“表单”、“数据表”与“功能点”的对应换算表,以完成精确的规模测算。
703.  **非人力成本**:上述估算仅包含软件开发的人力及间接成本,未包含直接非人力成本(如软硬件采购、差旅费等),如有此类支出需另行计算。

输入问题
#

2026年,徐州公安局要开发一套警察人员管理系统,包括3个录入查询表单,每个表单分别对应3个数据库的表和一个外部接口,请估算合理的价格范围;

输出结果
#

  1    *   **1. 需求解析:**
  2        *   年份:2026年。
  3        *   地点:徐州(江苏)。*注:上下文使用的是辽宁费率。*
  4        *   类型:完全定制开发(J0401)。
  5        *   规模:3个表单,3个数据库表,1个外部接口。
  6    *   **2. 评估依据:**
  7        *   文件:“5.软件开发费”,表1。
  8        *   方法:完全定制开发。
  9        *   公式:定制开发费用 = 人月费率 × 开发工作量。
 10        *   费率:1.87万元/人月。
 11        *   注意:原则上应使用功能点法,但上下文缺少功能点计数规则和基准生产率。
 12    *   **3. 计算过程:**
 13        *   假设“开发工作量” = X 人月。
 14        *   计算:1.87 * X。
 15        *   由于我无法计算X(需要“功能点数”和转换系数),计算停在这里。
 16        *   确立人月单价。
 17    *   **4. 最终估算:**
 18        *   结果:无法确定总价。
 19        *   确定费率:**18,700元/人月**。
 20        *   建议:建议在徐州当地重新评估费率,并确定工作量(可能通过功能点分析)。
 21
 22- _等等,再看“用户的具体项目需求”。_ “请估算合理的价格范围。”
 23- 如果用户*期待*一个数字,并且我提供不了,我需要非常有条理。
 24- 有*任何*可能“接口”或“表单”有隐含成本吗?不。
 25- _修正:_ 我将提供计算**如果**工作量已知的结构,并强调1.87万这个数字。
 26
 27- _让我们最后一次检查提示指令。_ “如果上下文缺乏... 给出合理的估算范围,或仅列出公式。”
 28- 既然我不能编造范围,我将“仅列出公式”并提供“单价”。
 29
 30- _完善后的输出结构:_
 31  - **1. 需求解析**:清楚地陈述徐州2026年项目的细节。提到地域不匹配(徐州 vs 辽宁)。
 32  - **2. 评估依据**:引用“完全定制开发”方法和具体的“1.87万元/人月”费率。引用功能点优先但数据缺失。
 33  - **3. 计算过程**:
 34    - 公式:`总价 = 人月费率 × 开发工作量` 35    - 已知:`人月费率 = 1.87万元/人月` 36    - 未知:`开发工作量`。解释为什么未知(没有功能点表/工作量表)。
 37    - 数学:展示单价是18,700。
 38  - **4. 最终估算**:
 39    - 由于变量缺失,无法计算总价。
 40    - **有效单价:** 18,700元/人月。
 41    - **风险/说明:** 地域差异(辽宁费率应用于江苏),以及缺少工作量估算参数。
 42
 43- _自我修正/完善:_ 提示要求我成为“资深专家”。资深专家不仅仅是说“我不能”。他们会说“基于提供的数据,我们建立了单位成本模型。然而,要得出总价,我们需要通过[缺失方法]确定工作量。基于现有数据,单位成本如下...”
 44- 这是最稳健的回答方式。它遵循规则(不编造工作量),但回答了请求的“精神”(估算成本 = 确立费率)。
 45
 46- _再检查一次:_ “接口”算作“商品软件”吗?不,通常是定制。“表单”呢?定制。
 47- _等等_,“商品软件费用”提到“∑商品软件单价×数量”。项目没有提到购买商品软件(如Oracle许可证或成品系统)。所以“商品软件费用”为0。
 48- _等等_,“分级部署费用”?文本说“完全定制开发... — — 定制开发费用”。所以不涉及分级部署费用或商品软件费用。
 49
 50- _逻辑的最终检查:_
 51  1.  **项目**:完全定制开发。
 52  2.  **费用公式**:人月费率 × 开发工作量。
 53  3.  **费率**:1.87万元/人月(根据提供的文本)。
 54  4.  **工作量**:未知/缺失。
 55  5.  **结论**:成本 = 1.87 \* 工作量。
 56
 57- _格式:_ 按要求使用四个部分。
 58
 59- _关于“3年”条款的一个细节?_ 不,提示说“开发一个系统”。这不是租赁或运维项目(尽管提到“1年维保”)。合同“可能”是3年(租赁),但这里“开发”意味着建设。
 60- _输出语言:_ 中文,专业语气。
 61  </think>**1. 需求解析**
 62- **项目年份**:2026年
 63- **所属地域**:江苏省徐州市(注意:参考文件数据基于辽宁省,存在地域基准差异)
 64- **项目类型**:定制软件开发服务(完全定制开发,J0401)
 65- **关键规模参数**:包含3个录入查询表单、3个数据库表、1个外部接口。
 66
 67**2. 评估依据**
 68根据提供的参考上下文,提取以下计算标准:
 69
 70- **服务类别**:完全定制开发。
 71- **费用构成公式**:`定制开发费用 = 人月费率 × 开发工作量`(见上下文第3条“完全定制开发”计算方法及(1)工作量估算法)。
 72- **人月费率标准**:根据上下文,软件开发人员的人月费率标准为 **1.87 万元/人月** 73- **功能点法补充说明**:上下文提到“原则上按功能点法估算”,且提供了功能点法的复杂公式,但未提供具体的“功能点数对应表”、“基准生产率”、“人月折算系数”或“应用类型调整因子”的具体数值。因此,无法采用功能点法进行直接计算,只能采用工作量估算法列出公式。
 74- **其他费用**:项目无商品软件购置或分级部署费用,仅计算定制开发费用。
 75
 76**3. 计算过程**
 77由于上下文中未提供“录入查询表单”、“数据库表”或“外部接口”对应的“开发工作量”(人月)折算标准,无法直接计算最终总价。以下基于已知参数建立费用模型:
 78
 79**第一步:确定基础单价**
 80根据上下文中辽宁省的数据标准:
 81
 82- 人月费率 = 1.87 万元/人月
 83
 84**第二步:建立计算公式**
 85根据完全定制开发的费用计算规则:
 86
 87- 定制开发费用 = 1.87 万元/人月 × 开发工作量(人月)
 88
 89**第三步:分析缺失参数**
 90要得到具体总价,需要确定“开发工作量”。
 91
 92- 若采用工作量估算法:需要知道3个表单、3个数据库表、1个接口具体需要多少个人月来完成。上下文中未提供这些组件的工时基准(如:每个表单开发需要0.5人月等)。
 93- 若采用功能点估算法:需要先计算功能点数,并代入公式:
 94  `费用 = 功能点数 × 规模变更调整因子 × 基准生产率 / 人月折算系数 × 应用类型调整因子 × 人月费率`
 95  但上下文未提供上述各调整因子的具体数值,且未提供“表单”与“功能点”的转换规则,故此路径无法计算。
 96
 97**4. 最终估算**
 98由于上下文缺失关键参数(组件与工作量/功能点的对应关系及调整系数),无法给出具体的总价数值。
 99
100**估算结论**101该项目每投入 1 个开发人月,成本为 **1.87 万元**102建议按照以下公式进行最终测算:
103
104> **总价(万元) = 1.87 × 预估开发人月数**
105
106**专家风险提示**107
1081.  **地域差异风险**:提供的人月费率(1.87万元/人月)明确基于辽宁省统计数据,而项目位于江苏徐州。通常江苏省的人工成本高于辽宁省,直接使用该费率可能导致估算偏低,建议结合江苏省或徐州市当地的同类项目标准调整费率。
1092.  **工作量测算缺失**:在缺乏具体功能点计费规则的情况下,建议通过专家评审法(如德尔菲法)对3个表单和1个接口的开发工作量进行人天评估,再代入上述公式计算。