@archsight/aios 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +23 -0
- package/README.md +38 -0
- package/RELEASE_NOTES.md +31 -0
- package/bin/archsight-aios.mjs +253 -8
- package/delivery/README.md +1 -0
- package/delivery/v1.4.0-release-readiness.md +64 -0
- package/docs/quickstart.md +8 -0
- package/docs/v1.4.0-writing-boundary.md +42 -0
- package/docs/v1.4.0-writing-workflow-quickstart.md +83 -0
- package/gemini-extension.json +1 -1
- package/package.json +5 -1
- package/prompts/README.md +3 -0
- package/prompts/evaluation-policy.md +33 -0
- package/prompts/evaluations/engineering-document-writing-fixtures.json +129 -0
- package/prompts/evaluations/engineering-document-writing-scorecard.json +108 -0
- package/prompts/evaluations/skill-runtime/README.md +15 -0
- package/prompts/evaluations/skill-runtime/raw/codex-scheme-writing-sample.md +111 -0
- package/prompts/evaluations/skill-runtime/raw/codex-tender-writing-sample.md +108 -0
- package/prompts/evaluations/skill-runtime/raw/workbuddy-scheme-writing-sample.md +228 -0
- package/prompts/evaluations/skill-runtime/raw/workbuddy-tender-writing-sample.md +143 -0
- package/prompts/evaluations/skill-runtime/v1.4.0-writing-host-scorecard-review.md +29 -0
- package/prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.json +112 -0
- package/prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.md +43 -0
- package/prompts/prompt-registry.md +2 -0
- package/runtime/archsight-aios.manifest.json +70 -8
- package/runtime/skill-routing.md +4 -1
- package/scripts/build-prompt-run-pack.mjs +27 -9
- package/scripts/validate-prompt-fixtures.mjs +31 -10
- package/scripts/validate-prompt-scorecard.mjs +22 -6
- package/scripts/validate-skill-runtime-evidence.mjs +125 -0
- package/skills/README.md +5 -1
- package/skills/aios/SKILL.md +5 -2
- package/skills/aios-scheme-write/SKILL.md +132 -0
- package/skills/aios-scheme-write/agents/openai.yaml +4 -0
- package/skills/aios-scheme-write/prompts/basic-prompt.md +83 -0
- package/skills/aios-tender-write/SKILL.md +130 -0
- package/skills/aios-tender-write/agents/openai.yaml +4 -0
- package/skills/aios-tender-write/prompts/basic-prompt.md +82 -0
- package/skills/archsight-aios/SKILL.md +2 -0
- package/templates/README.md +35 -0
- package/templates/document-writing/draft.md +15 -0
- package/templates/document-writing/final.md +16 -0
- package/templates/document-writing/material-index.md +18 -0
- package/templates/document-writing/review-notes.md +18 -0
- package/templates/document-writing/source-normalized.md +20 -0
- package/templates/document-writing/writing-brief.md +23 -0
- package/templates/document-writing-samples/scheme/README.md +16 -0
- package/templates/document-writing-samples/scheme/draft.md +25 -0
- package/templates/document-writing-samples/scheme/final.md +20 -0
- package/templates/document-writing-samples/scheme/material-index.md +23 -0
- package/templates/document-writing-samples/scheme/review-notes.md +23 -0
- package/templates/document-writing-samples/scheme/source-normalized.md +35 -0
- package/templates/document-writing-samples/scheme/writing-brief.md +26 -0
- package/templates/document-writing-samples/tender/README.md +16 -0
- package/templates/document-writing-samples/tender/draft.md +27 -0
- package/templates/document-writing-samples/tender/final.md +20 -0
- package/templates/document-writing-samples/tender/material-index.md +23 -0
- package/templates/document-writing-samples/tender/review-notes.md +23 -0
- package/templates/document-writing-samples/tender/source-normalized.md +34 -0
- package/templates/document-writing-samples/tender/writing-brief.md +26 -0
- package/templates/project-ai/.ai/agent-routing.md +6 -2
- package/templates/project-ai/.ai/skills.md +6 -1
- package/vision/README.md +1 -0
- package/vision/roadmap.md +8 -0
- package/vision/v1.4.0-engineering-document-workflow.md +205 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": 1,
|
|
3
3
|
"name": "archsight-aios",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.4.0",
|
|
5
5
|
"description": "ArchSight AIOS 的 Agent、Skill、Workflow、Runtime 和项目模板注册表,面向建筑行业知识工作者与 AI 工程团队。",
|
|
6
6
|
"agents": [
|
|
7
7
|
{
|
|
@@ -195,6 +195,13 @@
|
|
|
195
195
|
"path": "skills/aios-commercial-tender/SKILL.md",
|
|
196
196
|
"openaiConfigPath": "skills/aios-commercial-tender/agents/openai.yaml"
|
|
197
197
|
},
|
|
198
|
+
{
|
|
199
|
+
"id": "aios-tender-write",
|
|
200
|
+
"primaryAgent": "mason",
|
|
201
|
+
"defaultWorkflow": "feature-development",
|
|
202
|
+
"path": "skills/aios-tender-write/SKILL.md",
|
|
203
|
+
"openaiConfigPath": "skills/aios-tender-write/agents/openai.yaml"
|
|
204
|
+
},
|
|
198
205
|
{
|
|
199
206
|
"id": "aios-commercial-contract",
|
|
200
207
|
"primaryAgent": "themis",
|
|
@@ -229,6 +236,13 @@
|
|
|
229
236
|
"defaultWorkflow": "review",
|
|
230
237
|
"path": "skills/aios-construction-scheme/SKILL.md",
|
|
231
238
|
"openaiConfigPath": "skills/aios-construction-scheme/agents/openai.yaml"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"id": "aios-scheme-write",
|
|
242
|
+
"primaryAgent": "vitruvius",
|
|
243
|
+
"defaultWorkflow": "feature-development",
|
|
244
|
+
"path": "skills/aios-scheme-write/SKILL.md",
|
|
245
|
+
"openaiConfigPath": "skills/aios-scheme-write/agents/openai.yaml"
|
|
232
246
|
}
|
|
233
247
|
],
|
|
234
248
|
"workflows": [
|
|
@@ -374,6 +388,12 @@
|
|
|
374
388
|
"agent": "mason",
|
|
375
389
|
"workflow": "review"
|
|
376
390
|
},
|
|
391
|
+
{
|
|
392
|
+
"taskType": "工程标书、技术标、投标响应章节生成、改写和历史素材复用",
|
|
393
|
+
"skill": "aios-tender-write",
|
|
394
|
+
"agent": "mason",
|
|
395
|
+
"workflow": "feature-development"
|
|
396
|
+
},
|
|
377
397
|
{
|
|
378
398
|
"taskType": "工程合同履约节点、付款条件、责任边界和资料缺口",
|
|
379
399
|
"skill": "aios-commercial-contract",
|
|
@@ -403,6 +423,12 @@
|
|
|
403
423
|
"skill": "aios-construction-scheme",
|
|
404
424
|
"agent": "vitruvius",
|
|
405
425
|
"workflow": "review"
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
"taskType": "专项施工方案、施工技术措施、交底材料生成、改写和历史方案复用",
|
|
429
|
+
"skill": "aios-scheme-write",
|
|
430
|
+
"agent": "vitruvius",
|
|
431
|
+
"workflow": "feature-development"
|
|
406
432
|
}
|
|
407
433
|
],
|
|
408
434
|
"projectTemplate": {
|
|
@@ -476,13 +502,16 @@
|
|
|
476
502
|
"governance/ai-review-policy.md",
|
|
477
503
|
"governance/security-policy.md",
|
|
478
504
|
"governance/agent-boundary.md",
|
|
479
|
-
"governance/context-policy.md",
|
|
480
|
-
"governance/memory-policy.md",
|
|
481
|
-
"governance/delivery-policy.md",
|
|
482
|
-
"delivery/release-checklist.md",
|
|
483
|
-
"delivery/
|
|
484
|
-
"delivery/
|
|
485
|
-
"
|
|
505
|
+
"governance/context-policy.md",
|
|
506
|
+
"governance/memory-policy.md",
|
|
507
|
+
"governance/delivery-policy.md",
|
|
508
|
+
"delivery/release-checklist.md",
|
|
509
|
+
"delivery/v1.4.0-release-readiness.md",
|
|
510
|
+
"delivery/ai-generated-code-checklist.md",
|
|
511
|
+
"delivery/rollback-policy.md",
|
|
512
|
+
"docs/v1.4.0-writing-workflow-quickstart.md",
|
|
513
|
+
"docs/v1.4.0-writing-boundary.md",
|
|
514
|
+
"memory/decision-records.md",
|
|
486
515
|
"memory/project-memory-policy.md",
|
|
487
516
|
"memory/cleanup-policy.md",
|
|
488
517
|
"knowledge/domain-taxonomy.md",
|
|
@@ -503,6 +532,16 @@
|
|
|
503
532
|
"prompts/evaluations/engineering-business-basic-prompts-2026-06-16.md",
|
|
504
533
|
"prompts/evaluations/engineering-business-basic-scorecard.json",
|
|
505
534
|
"prompts/evaluations/engineering-business-public-advisory-fixtures.json",
|
|
535
|
+
"prompts/evaluations/engineering-document-writing-fixtures.json",
|
|
536
|
+
"prompts/evaluations/engineering-document-writing-scorecard.json",
|
|
537
|
+
"prompts/evaluations/skill-runtime/README.md",
|
|
538
|
+
"prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.json",
|
|
539
|
+
"prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.md",
|
|
540
|
+
"prompts/evaluations/skill-runtime/v1.4.0-writing-host-scorecard-review.md",
|
|
541
|
+
"prompts/evaluations/skill-runtime/raw/codex-tender-writing-sample.md",
|
|
542
|
+
"prompts/evaluations/skill-runtime/raw/codex-scheme-writing-sample.md",
|
|
543
|
+
"prompts/evaluations/skill-runtime/raw/workbuddy-tender-writing-sample.md",
|
|
544
|
+
"prompts/evaluations/skill-runtime/raw/workbuddy-scheme-writing-sample.md",
|
|
506
545
|
"prompts/evaluations/public-advisory-md/01-technical-bid.md",
|
|
507
546
|
"prompts/evaluations/public-advisory-md/02-contract.md",
|
|
508
547
|
"prompts/evaluations/public-advisory-md/03-daily.md",
|
|
@@ -514,17 +553,40 @@
|
|
|
514
553
|
"infra/service-boundaries.md",
|
|
515
554
|
"skills/engineering-business-starter-kit.md",
|
|
516
555
|
"skills/aios-commercial-tender/prompts/basic-prompt.md",
|
|
556
|
+
"skills/aios-tender-write/prompts/basic-prompt.md",
|
|
517
557
|
"skills/aios-commercial-contract/prompts/basic-prompt.md",
|
|
518
558
|
"skills/aios-construction-daily/prompts/basic-prompt.md",
|
|
519
559
|
"skills/aios-construction-meeting/prompts/basic-prompt.md",
|
|
520
560
|
"skills/aios-commercial-variation/prompts/basic-prompt.md",
|
|
521
561
|
"skills/aios-construction-scheme/prompts/basic-prompt.md",
|
|
562
|
+
"skills/aios-scheme-write/prompts/basic-prompt.md",
|
|
563
|
+
"templates/document-writing/source-normalized.md",
|
|
564
|
+
"templates/document-writing/material-index.md",
|
|
565
|
+
"templates/document-writing/writing-brief.md",
|
|
566
|
+
"templates/document-writing/draft.md",
|
|
567
|
+
"templates/document-writing/review-notes.md",
|
|
568
|
+
"templates/document-writing/final.md",
|
|
569
|
+
"templates/document-writing-samples/tender/README.md",
|
|
570
|
+
"templates/document-writing-samples/tender/source-normalized.md",
|
|
571
|
+
"templates/document-writing-samples/tender/material-index.md",
|
|
572
|
+
"templates/document-writing-samples/tender/writing-brief.md",
|
|
573
|
+
"templates/document-writing-samples/tender/draft.md",
|
|
574
|
+
"templates/document-writing-samples/tender/review-notes.md",
|
|
575
|
+
"templates/document-writing-samples/tender/final.md",
|
|
576
|
+
"templates/document-writing-samples/scheme/README.md",
|
|
577
|
+
"templates/document-writing-samples/scheme/source-normalized.md",
|
|
578
|
+
"templates/document-writing-samples/scheme/material-index.md",
|
|
579
|
+
"templates/document-writing-samples/scheme/writing-brief.md",
|
|
580
|
+
"templates/document-writing-samples/scheme/draft.md",
|
|
581
|
+
"templates/document-writing-samples/scheme/review-notes.md",
|
|
582
|
+
"templates/document-writing-samples/scheme/final.md",
|
|
522
583
|
"scripts/analyze-prompt-run-results.mjs",
|
|
523
584
|
"scripts/build-prompt-run-pack.mjs",
|
|
524
585
|
"scripts/validate-prompt-fixtures.mjs",
|
|
525
586
|
"scripts/validate-prompt-model-outputs.mjs",
|
|
526
587
|
"scripts/validate-prompt-run-results.mjs",
|
|
527
588
|
"scripts/validate-prompt-scorecard.mjs",
|
|
589
|
+
"scripts/validate-skill-runtime-evidence.mjs",
|
|
528
590
|
"runtime/hermes/sync-policy.md",
|
|
529
591
|
"runtime/hermes/sync-record-template.md",
|
|
530
592
|
"runtime/capability-adapters.json",
|
package/runtime/skill-routing.md
CHANGED
|
@@ -33,11 +33,13 @@
|
|
|
33
33
|
| 用户明确调用 `aios-compare` 时,比较两份文档、两个版本或两个 AI 输出哪份更专业 | `aios-compare` | Daedalus | `review` |
|
|
34
34
|
| 建筑行业项目中的受控代码修改、文档、脚本、测试 | `aios-exec` | Hephaestus | `feature-development` |
|
|
35
35
|
| 工程招投标响应、评分点、废标风险和技术标资料矩阵 | `aios-commercial-tender` | Mason | `review` |
|
|
36
|
+
| 工程标书、技术标和投标响应章节生成 / 改写 / 历史素材复用 | `aios-tender-write` | Mason | `feature-development` |
|
|
36
37
|
| 工程合同履约节点、付款条件、责任边界和资料缺口 | `aios-commercial-contract` | Themis | `review` |
|
|
37
38
|
| 施工日报、现场异常、项目群记录和问题追踪台账 | `aios-construction-daily` | Mason | `site-daily-loop` |
|
|
38
39
|
| 工程会议纪要、待办闭环、遗留争议和下次追踪 | `aios-construction-meeting` | Mason | `site-daily-loop` |
|
|
39
40
|
| 工程变更签证资料链、联系单、图纸变更和索赔线索 | `aios-commercial-variation` | Plutus | `site-daily-loop` |
|
|
40
41
|
| 专项施工方案、危险源、交底要点和规范 / 计算书复核清单 | `aios-construction-scheme` | Vitruvius | `review` |
|
|
42
|
+
| 专项施工方案、施工技术措施和交底材料生成 / 改写 / 历史方案复用 | `aios-scheme-write` | Vitruvius | `feature-development` |
|
|
41
43
|
|
|
42
44
|
## 路由原则
|
|
43
45
|
|
|
@@ -51,7 +53,8 @@
|
|
|
51
53
|
- `aios-design` 用于实现前判断界面方案是否支撑建筑行业审查、定位、复核、追溯和交付;不替代 `frontend-generation` 的 UI 实现、布局验证和交互验证,也不替代通用 `frontend-design` 的视觉风格和前端代码美化评审。
|
|
52
54
|
- `aios-arch` 应补足通用架构评审缺失的建筑行业平台视角,包括 BIM / IFC、规范知识链路、审图证据链、RAG / GraphRAG、任务编排、审计和后端运行可靠性。
|
|
53
55
|
- `aios-structural` 用于结构力学、荷载、边界条件、FEM 和求解器接口评审;它不能替代结构工程师签审,关键数值必须来自 Capability 或项目已有求解器证据。
|
|
54
|
-
- `aios-commercial-tender`、`aios-commercial-contract`、`aios-construction-daily`、`aios-construction-meeting`、`aios-commercial-variation` 和 `aios-
|
|
56
|
+
- `aios-commercial-tender`、`aios-tender-write`、`aios-commercial-contract`、`aios-construction-daily`、`aios-construction-meeting`、`aios-commercial-variation`、`aios-construction-scheme` 和 `aios-scheme-write` 属于工程业务管理增强;它们只处理建筑工程资料的抽取、生成初稿、证据链整理、风险提示和人工复核分流,不扩展为通用 HR、行政、财务 Skill。
|
|
57
|
+
- `aios-tender-write` 和 `aios-scheme-write` 是写作型 Skill,默认使用 Markdown 工作母版;生成后必须分别交回 `aios-commercial-tender` 和 `aios-construction-scheme` 做审核门禁。
|
|
55
58
|
- 工程业务 Agent 分工:技术标以 Mason 为主;合同法律边界以 Themis 为主;变更签证、工程款、结算和成本线索以 Plutus 为主;会议纪要中的行政、人事、证照和组织协同事项由 Hestia 辅助分流;施工方案以 Vitruvius 为主,涉及结构计算时升级给 Euclid,涉及现场组织和交付时由 Mason 协同。
|
|
56
59
|
- 工程业务管理基础场景可先参考 `skills/engineering-business-starter-kit.md` 和各 Skill 目录下的 `prompts/basic-prompt.md`,形成矩阵、清单、台账和复核问题;涉及金额、工期、责任、合规、质量安全、结构计算或法律意见时,再按对应 Skill 的证据链和人工复核规则升级。
|
|
57
60
|
- `aios-compare` 用于普通两份文档 / 两个版本 / 两个 AI 输出的专业度对比;不做 weak / portable / skill-runtime 提示词评测。
|
|
@@ -121,6 +121,31 @@ function runPackName() {
|
|
|
121
121
|
return `${fixture?.name ?? "prompt-fixture"}-run-pack`;
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
function runPackDataBoundary() {
|
|
125
|
+
if (fixture?.name === "engineering-document-writing-fixtures") {
|
|
126
|
+
return "De-identified engineering document writing run pack. Inputs are synthetic or abstracted writing-task shapes; do not add real customer names, contacts, project names, amounts, dates, locations, or raw source documents.";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return "De-identified weak/basic prompt run pack. Public advisory fixtures use Markdown-normalized synthetic inputs; do not add real customer names, contacts, project names, amounts, dates, locations, or raw source documents.";
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function runPackInstructions() {
|
|
133
|
+
const instructions = [
|
|
134
|
+
"For each item, use prompt as the instruction and sampleInput as the user-provided material.",
|
|
135
|
+
"When inputFormat is markdown, pass the Markdown text as the material under review.",
|
|
136
|
+
"Run weak and basic variants separately for the same caseId.",
|
|
137
|
+
"Save model outputs into the model-output JSON schema and validate with validate-prompt-model-outputs.mjs."
|
|
138
|
+
];
|
|
139
|
+
|
|
140
|
+
if (fixture?.name === "engineering-document-writing-fixtures") {
|
|
141
|
+
instructions.push("Compare weak and basic outputs against expectedStrongSections, bannedClaims, source provenance, material reuse judgment, and review-gate handoff.");
|
|
142
|
+
} else {
|
|
143
|
+
instructions.push("Compare weak and basic outputs using engineering-business-basic-scorecard.json.");
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return instructions;
|
|
147
|
+
}
|
|
148
|
+
|
|
124
149
|
function buildRunPack() {
|
|
125
150
|
if (!fixture) return undefined;
|
|
126
151
|
|
|
@@ -163,15 +188,8 @@ function buildRunPack() {
|
|
|
163
188
|
name: runPackName(),
|
|
164
189
|
version: fixture.version,
|
|
165
190
|
fixture: args.fixture,
|
|
166
|
-
dataBoundary:
|
|
167
|
-
|
|
168
|
-
runInstructions: [
|
|
169
|
-
"For each item, use prompt as the instruction and sampleInput as the user-provided material.",
|
|
170
|
-
"When inputFormat is markdown, pass the Markdown text as the material under review.",
|
|
171
|
-
"Run weak and basic variants separately for the same caseId.",
|
|
172
|
-
"Save model outputs into the model-output JSON schema and validate with validate-prompt-model-outputs.mjs.",
|
|
173
|
-
"Compare weak and basic outputs using engineering-business-basic-scorecard.json."
|
|
174
|
-
],
|
|
191
|
+
dataBoundary: runPackDataBoundary(),
|
|
192
|
+
runInstructions: runPackInstructions(),
|
|
175
193
|
runs
|
|
176
194
|
};
|
|
177
195
|
}
|
|
@@ -8,7 +8,8 @@ const errors = [];
|
|
|
8
8
|
|
|
9
9
|
const fixturePaths = [
|
|
10
10
|
"prompts/evaluations/engineering-business-basic-fixtures.json",
|
|
11
|
-
"prompts/evaluations/engineering-business-public-advisory-fixtures.json"
|
|
11
|
+
"prompts/evaluations/engineering-business-public-advisory-fixtures.json",
|
|
12
|
+
"prompts/evaluations/engineering-document-writing-fixtures.json"
|
|
12
13
|
];
|
|
13
14
|
const fixtures = fixturePaths.map((fixturePath) => ({
|
|
14
15
|
path: fixturePath,
|
|
@@ -143,9 +144,10 @@ function validateFixture(fixturePath, fixture) {
|
|
|
143
144
|
return;
|
|
144
145
|
}
|
|
145
146
|
|
|
147
|
+
const expectations = fixtureExpectations(fixturePath, fixture);
|
|
146
148
|
check(fixture.schema === 1, `${fixturePath}: schema must be 1`);
|
|
147
149
|
check(Array.isArray(fixture.cases), `${fixturePath}: cases must be an array`);
|
|
148
|
-
check(fixture.cases?.length ===
|
|
150
|
+
check(fixture.cases?.length === expectations.caseCount, `${fixturePath}: must cover ${expectations.caseCount} ${expectations.label} cases`);
|
|
149
151
|
|
|
150
152
|
const seenIds = new Set();
|
|
151
153
|
const seenSkills = new Set();
|
|
@@ -201,17 +203,36 @@ function validateFixture(fixturePath, fixture) {
|
|
|
201
203
|
}
|
|
202
204
|
}
|
|
203
205
|
|
|
204
|
-
const expectedSkills =
|
|
205
|
-
"aios-commercial-tender",
|
|
206
|
-
"aios-commercial-contract",
|
|
207
|
-
"aios-construction-daily",
|
|
208
|
-
"aios-construction-meeting",
|
|
209
|
-
"aios-commercial-variation",
|
|
210
|
-
"aios-construction-scheme"
|
|
211
|
-
].sort();
|
|
206
|
+
const expectedSkills = expectations.skillIds.sort();
|
|
212
207
|
check(JSON.stringify([...seenSkills].sort()) === JSON.stringify(expectedSkills), `${fixturePath}: skill coverage mismatch`);
|
|
213
208
|
}
|
|
214
209
|
|
|
210
|
+
function fixtureExpectations(fixturePath, fixture) {
|
|
211
|
+
if (fixture.name === "engineering-document-writing-fixtures") {
|
|
212
|
+
return {
|
|
213
|
+
label: "engineering-document-writing",
|
|
214
|
+
caseCount: 2,
|
|
215
|
+
skillIds: [
|
|
216
|
+
"aios-tender-write",
|
|
217
|
+
"aios-scheme-write"
|
|
218
|
+
]
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return {
|
|
223
|
+
label: "engineering-business",
|
|
224
|
+
caseCount: 6,
|
|
225
|
+
skillIds: [
|
|
226
|
+
"aios-commercial-tender",
|
|
227
|
+
"aios-commercial-contract",
|
|
228
|
+
"aios-construction-daily",
|
|
229
|
+
"aios-construction-meeting",
|
|
230
|
+
"aios-commercial-variation",
|
|
231
|
+
"aios-construction-scheme"
|
|
232
|
+
]
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
|
|
215
236
|
for (const fixture of fixtures) {
|
|
216
237
|
validateFixture(fixture.path, fixture.data);
|
|
217
238
|
}
|
|
@@ -6,10 +6,16 @@ import path from "node:path";
|
|
|
6
6
|
const root = fs.realpathSync(process.cwd());
|
|
7
7
|
const errors = [];
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
const scorecardSpecs = [
|
|
10
|
+
{
|
|
11
|
+
fixturePath: "prompts/evaluations/engineering-business-basic-fixtures.json",
|
|
12
|
+
scorecardPath: "prompts/evaluations/engineering-business-basic-scorecard.json"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
fixturePath: "prompts/evaluations/engineering-document-writing-fixtures.json",
|
|
16
|
+
scorecardPath: "prompts/evaluations/engineering-document-writing-scorecard.json"
|
|
17
|
+
}
|
|
18
|
+
];
|
|
13
19
|
|
|
14
20
|
const sensitiveTerms = [
|
|
15
21
|
"立信",
|
|
@@ -64,10 +70,16 @@ function weightedScore(scores, criteria) {
|
|
|
64
70
|
);
|
|
65
71
|
}
|
|
66
72
|
|
|
67
|
-
|
|
73
|
+
function validateScorecard(fixturePathValue, scorecardPathValue) {
|
|
74
|
+
const fixture = readJson(repoPath(fixturePathValue));
|
|
75
|
+
const scorecard = readJson(repoPath(scorecardPathValue));
|
|
76
|
+
if (!fixture || !scorecard) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
|
|
68
80
|
check(scorecard.schema === 1, "scorecard: schema must be 1");
|
|
69
81
|
check(scorecard.version === fixture.version, `scorecard: version must match fixture version ${fixture.version}`);
|
|
70
|
-
check(scorecard.fixture ===
|
|
82
|
+
check(scorecard.fixture === fixturePathValue, `${scorecardPathValue}: fixture path mismatch`);
|
|
71
83
|
check(Array.isArray(scorecard.criteria) && scorecard.criteria.length > 0, "scorecard: criteria must be a non-empty array");
|
|
72
84
|
check(Array.isArray(scorecard.cases) && scorecard.cases.length === fixture.cases.length, "scorecard: case count mismatch");
|
|
73
85
|
|
|
@@ -124,6 +136,10 @@ if (fixture && scorecard) {
|
|
|
124
136
|
check(typeof scorecard.overallDecision?.notAClaim === "string", "scorecard: overallDecision.notAClaim is required");
|
|
125
137
|
}
|
|
126
138
|
|
|
139
|
+
for (const spec of scorecardSpecs) {
|
|
140
|
+
validateScorecard(spec.fixturePath, spec.scorecardPath);
|
|
141
|
+
}
|
|
142
|
+
|
|
127
143
|
if (errors.length > 0) {
|
|
128
144
|
console.error(`Prompt scorecard validation failed with ${errors.length} error(s):`);
|
|
129
145
|
for (const error of errors) console.error(`- ${error}`);
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import fs from "node:fs";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
|
|
6
|
+
const root = fs.realpathSync(process.cwd());
|
|
7
|
+
const errors = [];
|
|
8
|
+
const evidencePath = "prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.json";
|
|
9
|
+
const reportPath = "prompts/evaluations/skill-runtime/v1.4.0-writing-host-validation.md";
|
|
10
|
+
|
|
11
|
+
const sensitiveTerms = [
|
|
12
|
+
"立信",
|
|
13
|
+
"费敏",
|
|
14
|
+
"闻总",
|
|
15
|
+
"谭总",
|
|
16
|
+
"客户内部",
|
|
17
|
+
"培训演示",
|
|
18
|
+
"基础内测",
|
|
19
|
+
"内测模式",
|
|
20
|
+
"内测包"
|
|
21
|
+
];
|
|
22
|
+
|
|
23
|
+
function repoPath(...parts) {
|
|
24
|
+
const target = path.join(root, ...parts);
|
|
25
|
+
const relative = path.relative(root, target);
|
|
26
|
+
if (relative.startsWith("..") || path.isAbsolute(relative)) {
|
|
27
|
+
throw new Error(`Path traversal detected: ${target}`);
|
|
28
|
+
}
|
|
29
|
+
return target;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function readJson(relativePath) {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(fs.readFileSync(repoPath(relativePath), "utf8"));
|
|
35
|
+
} catch (error) {
|
|
36
|
+
errors.push(`${relativePath}: invalid JSON (${error.message})`);
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function readText(relativePath) {
|
|
42
|
+
try {
|
|
43
|
+
return fs.readFileSync(repoPath(relativePath), "utf8");
|
|
44
|
+
} catch (error) {
|
|
45
|
+
errors.push(`${relativePath}: ${error.message}`);
|
|
46
|
+
return "";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function exists(relativePath) {
|
|
51
|
+
return fs.existsSync(repoPath(relativePath));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function check(condition, message) {
|
|
55
|
+
if (!condition) errors.push(message);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function includesSensitiveTerm(value) {
|
|
59
|
+
const raw = typeof value === "string" ? value : JSON.stringify(value);
|
|
60
|
+
return sensitiveTerms.filter((term) => raw.includes(term));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const evidence = readJson(evidencePath);
|
|
64
|
+
const report = readText(reportPath);
|
|
65
|
+
|
|
66
|
+
if (evidence) {
|
|
67
|
+
check(evidence.schema === 1, "evidence: schema must be 1");
|
|
68
|
+
check(evidence.name === "v1.4.0-writing-host-validation", "evidence: unexpected name");
|
|
69
|
+
check(typeof evidence.aiosVersion === "string" && evidence.aiosVersion.length > 0, "evidence: aiosVersion is required");
|
|
70
|
+
check(Array.isArray(evidence.hostChecks) && evidence.hostChecks.length >= 2, "evidence: hostChecks must cover at least two hosts");
|
|
71
|
+
check(Array.isArray(evidence.cases) && evidence.cases.length >= 4, "evidence: cases must cover host x writing skill matrix");
|
|
72
|
+
check(typeof evidence.scorecardReview?.reviewPath === "string", "evidence: scorecardReview.reviewPath is required");
|
|
73
|
+
check(exists(evidence.scorecardReview?.scorecardPath ?? ""), "evidence: scorecardReview.scorecardPath missing");
|
|
74
|
+
check(exists(evidence.scorecardReview?.reviewPath ?? ""), "evidence: scorecardReview.reviewPath missing");
|
|
75
|
+
check(typeof evidence.releaseGate?.notReadyUntil === "string", "evidence: releaseGate.notReadyUntil is required");
|
|
76
|
+
check(report.includes(evidence.name), "report: must reference evidence name");
|
|
77
|
+
const scorecardReview = evidence.scorecardReview?.reviewPath ? readText(evidence.scorecardReview.reviewPath) : "";
|
|
78
|
+
|
|
79
|
+
const sensitiveHits = includesSensitiveTerm(evidence);
|
|
80
|
+
check(sensitiveHits.length === 0, `evidence: sensitive terms leaked (${sensitiveHits.join(", ")})`);
|
|
81
|
+
|
|
82
|
+
const expectedPairs = new Set([
|
|
83
|
+
"codex::aios-tender-write",
|
|
84
|
+
"codex::aios-scheme-write",
|
|
85
|
+
"workbuddy::aios-tender-write",
|
|
86
|
+
"workbuddy::aios-scheme-write"
|
|
87
|
+
]);
|
|
88
|
+
const actualPairs = new Set();
|
|
89
|
+
const allowedStatuses = new Set(["yes", "no", "blocked", "uncertain"]);
|
|
90
|
+
|
|
91
|
+
for (const item of evidence.cases ?? []) {
|
|
92
|
+
check(typeof item.caseId === "string" && item.caseId.length > 0, "case: caseId is required");
|
|
93
|
+
check(typeof item.host === "string" && item.host.length > 0, `${item.caseId}: host is required`);
|
|
94
|
+
check(typeof item.skillId === "string" && item.skillId.startsWith("aios-"), `${item.caseId}: skillId is invalid`);
|
|
95
|
+
check(typeof item.expectedGateSkill === "string" && item.expectedGateSkill.startsWith("aios-"), `${item.caseId}: expectedGateSkill is invalid`);
|
|
96
|
+
check(typeof item.sampleWorkspacePath === "string" && exists(item.sampleWorkspacePath), `${item.caseId}: sampleWorkspacePath missing`);
|
|
97
|
+
check(typeof item.triggerPrompt === "string" && item.triggerPrompt.includes(item.skillId), `${item.caseId}: triggerPrompt must mention skillId`);
|
|
98
|
+
check(allowedStatuses.has(item.skillRuntimeConfirmed), `${item.caseId}: invalid skillRuntimeConfirmed`);
|
|
99
|
+
check(Array.isArray(item.evidence) && item.evidence.length > 0, `${item.caseId}: evidence must be non-empty`);
|
|
100
|
+
actualPairs.add(`${item.host}::${item.skillId}`);
|
|
101
|
+
|
|
102
|
+
if (item.skillRuntimeConfirmed === "yes") {
|
|
103
|
+
check(typeof item.rawOutputPath === "string" && exists(item.rawOutputPath), `${item.caseId}: confirmed runtime needs rawOutputPath`);
|
|
104
|
+
const raw = readText(item.rawOutputPath);
|
|
105
|
+
check(raw.includes(item.skillId), `${item.caseId}: raw output must include skillId`);
|
|
106
|
+
check(raw.includes(item.expectedGateSkill), `${item.caseId}: raw output must include expected gate skill`);
|
|
107
|
+
check(scorecardReview.includes(item.caseId), `${item.caseId}: scorecard review must mention caseId`);
|
|
108
|
+
} else {
|
|
109
|
+
check(item.rawOutputPath === null, `${item.caseId}: non-confirmed runtime must not point to raw output`);
|
|
110
|
+
check(typeof item.blocker === "string" && item.blocker.length > 0, `${item.caseId}: blocker is required when runtime is not confirmed`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
for (const expected of expectedPairs) {
|
|
115
|
+
check(actualPairs.has(expected), `evidence: missing case ${expected}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
if (errors.length > 0) {
|
|
120
|
+
console.error(`Skill runtime evidence validation failed with ${errors.length} error(s):`);
|
|
121
|
+
for (const error of errors) console.error(`- ${error}`);
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
console.log("Skill runtime evidence validation passed.");
|
package/skills/README.md
CHANGED
|
@@ -64,6 +64,8 @@ Skill 可以继续用 `SKILL.md` 表达操作方法,但涉及确定性工具
|
|
|
64
64
|
| `aios-runtime` | Prompt、Context、Memory、MCP/Tool、RAG/GraphRAG 和多 Agent Runtime 设计。 |
|
|
65
65
|
| `aios-compare` | 文档专业度对比:比较两份文档、两个版本或两个 AI 输出哪份更专业、更可复核、更适合交付。 |
|
|
66
66
|
| `aios-prompt-compare` | 内部 Prompt / Skill 测试工具:仅开发者明确调用时,对同一输入分别评估弱提示词、便携强提示词和真实 Skill 触发结果,判断是否应沉淀为 Skill。 |
|
|
67
|
+
| `aios-tender-write` | 工程标书 / 技术标生成与改写:基于招标要求、历史标书素材和用户初稿生成 Markdown 工作母版,并交回 `aios-commercial-tender` 复核。 |
|
|
68
|
+
| `aios-scheme-write` | 专项施工方案生成与改写:基于方案初稿、历史方案素材、工程概况和专家意见生成 Markdown 工作母版,并交回 `aios-construction-scheme` 复核。 |
|
|
67
69
|
|
|
68
70
|
工程业务管理技能包 (Engineering Project Management):
|
|
69
71
|
|
|
@@ -72,10 +74,12 @@ Skill 可以继续用 `SKILL.md` 表达操作方法,但涉及确定性工具
|
|
|
72
74
|
| Skill | 用途 |
|
|
73
75
|
| --- | --- |
|
|
74
76
|
| `aios-commercial-tender` | 工程招投标响应证据链,用于提取评分点、资格条件、废标风险、资料缺口和人工复核事项。 |
|
|
77
|
+
| `aios-tender-write` | 工程标书 / 技术标生成与改写,用于生成目录、章节初稿、评分点响应内容和历史素材复用表。 |
|
|
75
78
|
| `aios-commercial-contract` | 工程分包、采购和补充协议履约证据链,用于提取节点、责任边界、付款条件和合同资料缺口。 |
|
|
76
79
|
| `aios-construction-daily` | 现场施工日报证据链,用于提取管理摘要、异常、问题台账、计划偏差和需补充确认事项。 |
|
|
77
80
|
| `aios-construction-meeting` | 工程现场会议待办闭环,用于将会议讨论转化为责任人、期限、争议点和下次追踪清单。 |
|
|
78
81
|
| `aios-commercial-variation` | 工程变更签证资料链审查,用于梳理联系单、纪要、图纸变更、合同流程和资料断点。 |
|
|
79
82
|
| `aios-construction-scheme` | 专项施工方案证据链辅审,用于提取危险源、交底要点、规范核验点、计算书缺口和专家复核事项。 |
|
|
83
|
+
| `aios-scheme-write` | 专项施工方案生成与改写,用于生成方案章节、工艺流程、危险源控制措施和交底材料初稿。 |
|
|
80
84
|
|
|
81
|
-
工程业务管理 Skill
|
|
85
|
+
工程业务管理 Skill 只处理建筑工程资料抽取、生成初稿、证据链整理、风险提示和人工复核分流,不替代法务、造价、监理、安全、项目经理、总工或专家签审。涉及规范、制度、结构计算、质量安全、金额、工期索赔或责任归属时,必须输出中文化的 `判断事项 / 证据 / 工具结果 / 处理建议`;没有工具或人工证据时只能标注 `需核验` 或 `转人工复核`。写作型 Skill 必须使用 Markdown 工作母版,保留素材来源、复用判断、待补占位和审核门禁,不得把历史项目事实直接套入当前项目。
|
package/skills/aios/SKILL.md
CHANGED
|
@@ -31,11 +31,13 @@ description: ArchSight AIOS 总路由入口。用户只说“请用 AIOS 技能
|
|
|
31
31
|
| 资料 / 任务线索 | 路由到 | 默认输出方向 |
|
|
32
32
|
|---|---|---|
|
|
33
33
|
| 招标文件、评分办法、技术标、商务标、资格条件、AI 技术标问题、废标风险 | `aios-commercial-tender` | 响应矩阵、评分点、资料清单、风险提示、人工复核事项 |
|
|
34
|
+
| 标书编写、技术标生成、投标响应章节改写、历史标书素材复用、用户提供技术标初稿 | `aios-tender-write` | Markdown 工作母版、写作 brief、素材匹配表、章节初稿、审核门禁 |
|
|
34
35
|
| 合同、协议、分包、采购、租赁、付款、结算、履约、违约、争议解决 | `aios-commercial-contract` | 合同基本事实、空白字段、履约节点、付款结算、责任边界、资料缺口 |
|
|
35
36
|
| 项目日报、施工日报、周报素材、现场记录、材料进场、机械、劳务、进度 | `aios-construction-daily` | 管理摘要、问题台账、异常事项、模板质量诊断、待追踪事项 |
|
|
36
37
|
| 会议纪要、例会、协调会、专题会、交底会、待办、责任人、截止时间 | `aios-construction-meeting` | 会议结论、待办闭环、责任线索、遗留问题、下次追踪 |
|
|
37
38
|
| 变更、签证、联系单、洽商、索赔、停工窝工、图纸变更、工程量变化 | `aios-commercial-variation` | 资料链、断点、流程依据、疑点、复核分流 |
|
|
38
39
|
| 专项施工方案、施工组织、危大工程、深基坑、高支模、脚手架、吊装、危险源、交底、专家论证、计算书 | `aios-construction-scheme` | 工程概况、关键工序、危险源、交底要点、规范 / 计算书 / 专家复核清单 |
|
|
40
|
+
| 方案编写、方案生成、方案改写、历史方案素材复用、专家意见回写、施工方案初稿优化 | `aios-scheme-write` | Markdown 工作母版、写作 brief、素材匹配表、方案章节初稿、审核门禁 |
|
|
39
41
|
| 结构计算、荷载、边界条件、挠度、稳定、FEM、结构求解器 | `aios-structural` | 结构力学输入检查、求解链路、转 Euclid 结构复核、人工签审边界 |
|
|
40
42
|
| BIM、IFC、Revit、CAD、建筑规范、审图规则、知识结构化 | `aios-knowledge` | 行业语义、规范知识、资料来源、知识结构化边界 |
|
|
41
43
|
| 用户明确调用 `aios-compare`,或明确要求用 AIOS 判断两份文档 / 两个版本 / 两个 AI 输出哪份更专业 | `aios-compare` | 对比范围、可比性判断、结构差异、内容差异、专业度评分、边界风险、合并建议 |
|
|
@@ -54,8 +56,9 @@ description: ArchSight AIOS 总路由入口。用户只说“请用 AIOS 技能
|
|
|
54
56
|
2. 未指定时,根据文件名、标题、正文高频词、表格字段和用户任务判断资料类型。
|
|
55
57
|
3. 命中单一高置信场景时,按对应 Skill 的 `SKILL.md` 工作流执行。
|
|
56
58
|
4. 同一资料包含多个场景时,先输出资料类型判断,再按主任务路由;必要时列出次级 Skill 作为后续复核建议。
|
|
57
|
-
5.
|
|
58
|
-
6.
|
|
59
|
+
5. 当用户动词是“生成、编写、改写、优化初稿、套用历史素材”时,优先选择写作型 Skill;当用户动词是“审核、复核、检查、抽取风险、列缺口”时,优先选择审核型 Skill。
|
|
60
|
+
6. 类型不清时,不要泛泛总结;先输出“资料状态判断”和“需要用户补充的资料类型 / 目标”。
|
|
61
|
+
7. 不因为用户说“AIOS”就强行套建筑行业规则;非建筑任务优先说明 AIOS 不适用,并建议使用宿主工具通用能力。
|
|
59
62
|
|
|
60
63
|
## 输出要求
|
|
61
64
|
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aios-scheme-write
|
|
3
|
+
description: 工程专项施工方案生成与改写工作流。用于基于方案初稿、历史方案素材、工程概况、专家意见和用户模板生成或优化施工方案 Markdown 初稿,并交回施工方案审核 Skill 做安全、规范和复核门禁。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# AIOS Scheme Write
|
|
7
|
+
|
|
8
|
+
## 目标
|
|
9
|
+
|
|
10
|
+
以 Vitruvius(建筑数字化专家)的方式组织专项施工方案写作,把方案初稿、历史方案素材、工程概况和专家意见转成可复核、可改写、可人工定稿的 Markdown 初稿。
|
|
11
|
+
|
|
12
|
+
本 Skill 是写作型能力,不替代 `aios-construction-scheme` 的审核职责。它负责生成、改写和素材复用;生成后必须交回 `aios-construction-scheme` 做危险源、规范 / 计算书、专家复核和交底要点门禁。
|
|
13
|
+
|
|
14
|
+
## AIOS 适用性
|
|
15
|
+
|
|
16
|
+
本 Skill 仅用于建筑工程专项施工方案、施工技术措施、质量安全方案和班组交底资料的生成与优化。
|
|
17
|
+
|
|
18
|
+
- 用户提供施工方案初稿、历史方案素材、工程概况、施工工艺、安全措施、专家意见或用户指定模板时,启用本 Skill。
|
|
19
|
+
- 只要求危险源、交底要点、专家意见回查、计算书缺口或规范核验时,使用 `aios-construction-scheme`。
|
|
20
|
+
- 普通通用流程文档、非建筑作业指导书或行政制度,不使用本 Skill。
|
|
21
|
+
|
|
22
|
+
## 输入
|
|
23
|
+
|
|
24
|
+
优先收集:
|
|
25
|
+
|
|
26
|
+
- 方案初稿、工程概况、图纸说明、施工工艺、质量安全措施、专家意见、审批意见和计算书目录。
|
|
27
|
+
- 历史专项方案、企业工法、标准化章节、类似工程方案、交底材料和用户指定模板。
|
|
28
|
+
- 项目条件:地区、工程类型、危险性较大分部分项工程属性、施工阶段、场地环境、设备和材料。
|
|
29
|
+
- 本次写作要求:目标章节、篇幅、格式、交付时间、技术负责人、总工、安全负责人和资料负责人。
|
|
30
|
+
- 资料定位:文件名、版本、日期、页码、章节、图号、表号、历史素材来源和适用条件。
|
|
31
|
+
|
|
32
|
+
## Markdown 工作母版
|
|
33
|
+
|
|
34
|
+
施工方案生成和改写默认使用 Markdown 作为工作母版;Word、PDF、PPT 是交付格式,不是主要编辑格式。
|
|
35
|
+
|
|
36
|
+
推荐文件链:
|
|
37
|
+
|
|
38
|
+
```text
|
|
39
|
+
source-normalized.md
|
|
40
|
+
material-index.md
|
|
41
|
+
writing-brief.md
|
|
42
|
+
draft.md
|
|
43
|
+
review-notes.md
|
|
44
|
+
final.md
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
写作前必须先明确:
|
|
48
|
+
|
|
49
|
+
- 本次工程概况、施工条件和专家意见来自哪里。
|
|
50
|
+
- 历史方案中哪些内容可复用改写、仅参考、不可套用或需人工确认。
|
|
51
|
+
- 哪些参数、工艺、设备、危险源、规范、计算书和审批事项缺少证据。
|
|
52
|
+
- 哪些内容只能作为占位,不能写成已确认现场条件或专业结论。
|
|
53
|
+
|
|
54
|
+
## 素材复用判断
|
|
55
|
+
|
|
56
|
+
历史方案素材必须先分级,再进入正文:
|
|
57
|
+
|
|
58
|
+
| 复用级别 | 使用方式 |
|
|
59
|
+
|---|---|
|
|
60
|
+
| 可复用改写 | 工程类型、工艺、适用条件和控制措施匹配,去除旧项目事实后可改写入本次方案。 |
|
|
61
|
+
| 仅参考 | 章节结构、表达方式或管理措施可参考,但项目参数、地点、设备、图号和工期不能套用。 |
|
|
62
|
+
| 不可套用 | 与本次工程类型、地区、专业、危险源、设备、规范或现场条件不匹配。 |
|
|
63
|
+
| 需人工确认 | 需要技术负责人、总工、安全负责人、质量负责人、专家或资料员确认后才能写入。 |
|
|
64
|
+
|
|
65
|
+
## 工作流
|
|
66
|
+
|
|
67
|
+
1. 建立资料来源清单:列出方案初稿、历史方案、工程概况、专家意见、计算书和定位方式。
|
|
68
|
+
2. 建立写作 brief:确认本次章节、方案用途、工程条件、输出格式、人工复核人和禁止结论。
|
|
69
|
+
3. 建立素材索引:按章节、工程类型、工艺、危险源和复用级别整理历史素材。
|
|
70
|
+
4. 生成章节结构:把工程概况、施工部署、工艺流程、质量安全控制、应急措施和交底要点映射到方案目录。
|
|
71
|
+
5. 生成或改写 `draft.md`:保留来源标记、待补占位和复用级别,不把历史项目事实写成本项目事实。
|
|
72
|
+
6. 自检写作稿:检查是否输出方案合格、计算正确、专家论证通过、审批通过或现场安全满足等越权结论。
|
|
73
|
+
7. 审核门禁:把 `draft.md` 交给 `aios-construction-scheme` 复核危险源、规范 / 计算书、专家意见和交底要点。
|
|
74
|
+
|
|
75
|
+
## 输出格式
|
|
76
|
+
|
|
77
|
+
默认输出:
|
|
78
|
+
|
|
79
|
+
1. 写作任务判断
|
|
80
|
+
2. 资料来源清单
|
|
81
|
+
3. 写作 brief
|
|
82
|
+
4. 历史素材匹配表
|
|
83
|
+
5. 方案章节结构
|
|
84
|
+
6. 施工方案 Markdown 初稿 / 改写稿
|
|
85
|
+
7. 危险源和控制措施占位表
|
|
86
|
+
8. 待补资料和人工复核清单
|
|
87
|
+
9. 审核门禁交接
|
|
88
|
+
10. 输出自检
|
|
89
|
+
|
|
90
|
+
历史素材匹配表格式:
|
|
91
|
+
|
|
92
|
+
```text
|
|
93
|
+
素材来源:
|
|
94
|
+
原章节 / 原段落:
|
|
95
|
+
本次可用位置:
|
|
96
|
+
复用级别:可复用改写 / 仅参考 / 不可套用 / 需人工确认
|
|
97
|
+
需要删除的旧项目事实:
|
|
98
|
+
需要补充的本项目证据:
|
|
99
|
+
建议复核岗位:
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
章节草稿条目格式:
|
|
103
|
+
|
|
104
|
+
```text
|
|
105
|
+
章节:
|
|
106
|
+
对应工程条件 / 专家意见 / 方案要求:
|
|
107
|
+
可用素材:
|
|
108
|
+
正文草稿:
|
|
109
|
+
待补占位:
|
|
110
|
+
来源标记:
|
|
111
|
+
人工复核岗位:
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## 审核门禁
|
|
115
|
+
|
|
116
|
+
生成或改写后必须明确交接给 `aios-construction-scheme`,至少复核:
|
|
117
|
+
|
|
118
|
+
- 危险源、控制措施、交底要点是否有方案原文或本项目条件依据。
|
|
119
|
+
- 规范、地方规程、危大工程判断是否缺少工具、项目资料或专家证据。
|
|
120
|
+
- 计算书、荷载、稳定、变形、设备能力和安全系数是否需要 `aios-structural` 或项目计算书复核。
|
|
121
|
+
- 是否把历史方案中的旧项目地点、参数、工艺、设备、图号或工期写成未经证实的本次事实。
|
|
122
|
+
- 是否存在方案合格、计算正确、专家论证通过、审批通过或现场安全满足等越权结论。
|
|
123
|
+
|
|
124
|
+
## 约束
|
|
125
|
+
|
|
126
|
+
- 不输出“方案合格 / 不合格 / 已通过审查”。
|
|
127
|
+
- 不编造工程概况、现场条件、施工参数、设备能力、图纸编号、专家意见、计算书结论或审批状态。
|
|
128
|
+
- 不替代总工、专家论证、危大工程审批、结构计算、监理、安全负责人或审批主体。
|
|
129
|
+
- 不用 LLM 口算承载力、稳定、变形、荷载、设备能力或安全系数。
|
|
130
|
+
- 不把历史方案中的旧项目名称、地点、参数、设备、工期、图号或专家意见自动套入新项目。
|
|
131
|
+
- 计算和规范结论缺少项目计算书、确定性工具或正式依据时标为 `需核验`。
|
|
132
|
+
- 不绕过 `aios-construction-scheme` 审核门禁直接把 AI 草稿标为可交付定稿。
|