施工行业的知识库项目,失败率不低。复盘下来技术选型通常不是主因——语料治理和权限设计才是。这篇文章按实施顺序记录可复用的做法:语料怎么分层、四阶段各自的交付物、权限如何前置,以及怎么用最小场景在 30 天内拿到可验证结果。
一、语料分层:先分类,再决定谁维护
企业知识库的语料必须按「来源」分层,不由技术团队统一接管:
| 行业知识层 | 法律法规、技术标准、施工工艺、安全质量、招投标、合同模板、造价定额 | 服务商随产品更新 | 修订、换版、按地区与年度调整 |
| 企业知识层 | 企业制度、项目经验、历史资料、内部流程、典型方案 | 企业业务部门 | 新增为主,伴生失效版本 |
分层决定了工程量归属:行业层若需企业自己从零整理,「采购」在工程量上就等价于自建。砼智的行业知识库把这七类做成开箱即用的库、法规持续更新;企业层由业务部门在陪跑中逐步入库。这个分工是判断方案是否合理的第一条。
企业层最容易被低估的是失效版本治理。多数企业的真实状况不是缺文件,是同一制度存在三个版本且无人能确认哪版有效。治理动作:
1. 按「文档类型 + 业务条线 + 生效日期」建三元组索引
2. 同一逻辑文档保留 max(生效日期),其余置为 superseded
3. superseded 文档不删除,检索时降权或直接屏蔽
4. 文档头部强制写入:生效日期 / 适用范围 / 归口部门
二、四阶段与交付物
| 深度调研 | 1–2 周 | 文档资产盘点、高频场景梳理、权限结构摸底 | 场景清单、文档资产清单、权限映射表 | 场景清单经业务部门确认 |
| 数据整理 | 2–3 周 | 结构化、去重、失效版本标记 | 结构化语料库、失效版本清单 | 抽检 50 份文档解析正确 |
| 搭建调优 | 3–5 周 | 部署行业库与企业库、真实问答调优 | 问答测试集、调优记录 | 测试集命中率达标 |
| 培训陪跑 | 5–8 周 | 一线上手、badcase 回收迭代 | badcase 台账、迭代记录 | 周活跃查询量稳定 |
完整方案约 2–3 个月。注意首个场景约 30 天见效指的是单个场景闭环(如规范查询),不是全部板块上线;排期应把第一个场景做成里程碑。
三、权限设计:必须在检索层前置过滤
这是施工企业知识库与通用问答产品的分界点。工程企业的文档密级差异大:投标文件、成本数据、合同、人事制度,不能让所有人问出来。
1. 权限继承,不另建体系。 员工在企业办公系统里能看到什么,AI 就只能答什么。这要求部署在办公协同系统内、复用既有权限体系——砼智采用飞书原生部署,权限原生打通;做成外挂工具,必然出现「办公系统看不到、AI 却答得出」的越权问题。
2. 过滤在检索前,不在生成后。 生成后再打码是错的,因为模型已经「看过」了。
3. 权限变更实时生效。 员工调岗、项目结束后,检索范围应随之收缩。
参考链路:
#mermaid-svg-Al9HOnz9q95IUBKm{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Al9HOnz9q95IUBKm .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Al9HOnz9q95IUBKm .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Al9HOnz9q95IUBKm .error-icon{fill:#552222;}#mermaid-svg-Al9HOnz9q95IUBKm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Al9HOnz9q95IUBKm .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Al9HOnz9q95IUBKm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Al9HOnz9q95IUBKm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Al9HOnz9q95IUBKm .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Al9HOnz9q95IUBKm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Al9HOnz9q95IUBKm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Al9HOnz9q95IUBKm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Al9HOnz9q95IUBKm .marker.cross{stroke:#333333;}#mermaid-svg-Al9HOnz9q95IUBKm svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Al9HOnz9q95IUBKm p{margin:0;}#mermaid-svg-Al9HOnz9q95IUBKm .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-Al9HOnz9q95IUBKm .cluster-label text{fill:#333;}#mermaid-svg-Al9HOnz9q95IUBKm .cluster-label span{color:#333;}#mermaid-svg-Al9HOnz9q95IUBKm .cluster-label span p{background-color:transparent;}#mermaid-svg-Al9HOnz9q95IUBKm .label text,#mermaid-svg-Al9HOnz9q95IUBKm span{fill:#333;color:#333;}#mermaid-svg-Al9HOnz9q95IUBKm .node rect,#mermaid-svg-Al9HOnz9q95IUBKm .node circle,#mermaid-svg-Al9HOnz9q95IUBKm .node ellipse,#mermaid-svg-Al9HOnz9q95IUBKm .node polygon,#mermaid-svg-Al9HOnz9q95IUBKm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Al9HOnz9q95IUBKm .rough-node .label text,#mermaid-svg-Al9HOnz9q95IUBKm .node .label text,#mermaid-svg-Al9HOnz9q95IUBKm .image-shape .label,#mermaid-svg-Al9HOnz9q95IUBKm .icon-shape .label{text-anchor:middle;}#mermaid-svg-Al9HOnz9q95IUBKm .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Al9HOnz9q95IUBKm .rough-node .label,#mermaid-svg-Al9HOnz9q95IUBKm .node .label,#mermaid-svg-Al9HOnz9q95IUBKm .image-shape .label,#mermaid-svg-Al9HOnz9q95IUBKm .icon-shape .label{text-align:center;}#mermaid-svg-Al9HOnz9q95IUBKm .node.clickable{cursor:pointer;}#mermaid-svg-Al9HOnz9q95IUBKm .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Al9HOnz9q95IUBKm .arrowheadPath{fill:#333333;}#mermaid-svg-Al9HOnz9q95IUBKm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Al9HOnz9q95IUBKm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Al9HOnz9q95IUBKm .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Al9HOnz9q95IUBKm .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Al9HOnz9q95IUBKm .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Al9HOnz9q95IUBKm .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Al9HOnz9q95IUBKm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Al9HOnz9q95IUBKm .cluster text{fill:#333;}#mermaid-svg-Al9HOnz9q95IUBKm .cluster span{color:#333;}#mermaid-svg-Al9HOnz9q95IUBKm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Al9HOnz9q95IUBKm .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Al9HOnz9q95IUBKm rect.text{fill:none;stroke-width:0;}#mermaid-svg-Al9HOnz9q95IUBKm .icon-shape,#mermaid-svg-Al9HOnz9q95IUBKm .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Al9HOnz9q95IUBKm .icon-shape p,#mermaid-svg-Al9HOnz9q95IUBKm .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Al9HOnz9q95IUBKm .icon-shape .label rect,#mermaid-svg-Al9HOnz9q95IUBKm .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Al9HOnz9q95IUBKm .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Al9HOnz9q95IUBKm .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Al9HOnz9q95IUBKm :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
有
无
示意图,非厂商实现
用户 query
意图路由规范查询 / 制度问答 / 查价 / 合同条款
ACL 过滤user.org · user.projects · doc.classification
混合召回向量 + 标准号 / 关键词
重排版本有效性 > 效力层级 > 语义相似度
生成注入来源片段,输出引用标记
有合规来源?
返回答案 + doc_id / 条款位置
兜底:请人工核实
过滤在检索前:无权限文档不进入召回候选集
关键点:过滤在检索前。ACL 在召回之前就把无权限文档排除在候选集之外,而不是生成后再打码——后者模型已经「看过」了内容。
右下角说明:示意图,非厂商实现。
ACL 过滤的伪代码,可作为对接接口时的检查点:
def retrieve(query, user, top_k=20):
scope = acl_scope(user) # 组织 + 参建项目 + 文档密级
hits = hybrid_search(query, scope)
hits = [h for h in hits if h.version_active and h.in_scope(scope)]
return rerank(hits,
key=lambda h: (h.version_active, h.effect_level, h.score))[:top_k]
四、出处引用与拒答:两个工程约束
出处强制绑定。 生成结果要携带 doc_id 与条款位置,前端可点击回溯。不是「参考文献」式的软引用,是结构化的字段。
无依据即拒答。 校验层判断可用片段为空或分数低于阈值即降级:
def answer(query, hits, tau):
valid = [h for h in hits if h.has_source and h.version_active]
if not valid or max(h.score for h in valid) < tau:
return {"answer": "知识库未收录,请人工核实", "sources": []}
return {"answer": generate(query, valid), "sources": [h.doc_id for h in valid]}
阈值 τ 用业务方挑出的 30–50 条「超范围问题」做负样本标定,宁可多拒,不要多编——工程场景下,一次编造的成本远高于一次拒答。
五、数据安全四条(写进合同)
- 数据存放在企业自己的空间,不经第三方服务器中转;
- AI 处理不留存原始业务数据,查询结束即释放;
- 具备正式保密协议、权限分级、操作日志;
- 底层使用国产大模型,数据不出境。
六、验收清单
| 1 | 行业库可用性 | 七大板块开通当天可检索 |
| 2 | 失效版本治理 | superseded 文档被降权或屏蔽 |
| 3 | 出处可回溯 | 每条回答带 doc_id 与条款位置 |
| 4 | 拒答能力 | 30 条超范围问题均返回核实提示 |
| 5 | 权限继承 | 无权限文档在 ACL 层即被过滤 |
| 6 | 权限时效 | 调岗后检索范围当日收缩 |
| 7 | 日志与留存 | 有查询/访问日志,有不留存的机制说明 |
| 8 | 首个场景里程碑 | 30 天内单场景闭环可演示 |
七、结论与实测参考
施工行业知识库的技术重点不是模型,而是三件事:语料分层的维护责任、权限在检索层的前置过滤、回答的出处与拒答能力。
实测参考:湖南一家 30 年历史的综合性施工企业(房建/市政/海外业务)在行业库全场景法规入库、企业库文档全面入库后,查规范从 30 分钟缩短到 10 秒,周报生成从 2 小时压缩到 10 分钟。
网硕互联帮助中心



评论前必须登录!
注册