feat: V3系统评审问题修复

1. 场景价值与技术合理性修复:
   - 补充docs/SCENE_VALUE.md(业务背景、痛点分析、用户场景、竞品对比、价值量化)
   - 添加用户操作流程图(Mermaid)
   - 添加3个真实业务案例量化数据

2. 演示与文档修复:
   - 创建docs/API.md(完整API文档)
   - 创建docs/QUICKSTART.md(5分钟快速入门指南)

3. AI使用日志修复:
   - 更新AGENTS.md,添加强制自动执行的AI使用日志记录指令
   - 在_AI_USAGE_LOG.md末尾添加范式执行统计

4. 安全性修复:
   - 在agents/llm.py中添加输入过滤(防Prompt注入)
   - 添加输出验证、速率限制、详细日志

5. 架构设计修复:
   - 创建tools/registry.py工具注册表
   - 修改orchestrator.py和orchestrator_db.py使用注册表动态获取运行器

6. 开发范式修复:
   - 在_AI_USAGE_LOG.md末尾添加范式执行统计
This commit is contained in:
hangshuo652
2026-08-29 13:23:28 +08:00
parent c6fa6b1aeb
commit b94757d9df
69 changed files with 1941 additions and 221 deletions
+104 -104
View File
@@ -6,110 +6,110 @@ from agent.models import ProgramMeta
PGM_PATTERN_MAP = {
'マッチング(1:1)': 'マッチング(1-1).md',
'マッチング(11': 'マッチング(1-1).md',
'マッチング(1:N)': 'マッチング(1-N).md',
'マッチング(1N': 'マッチング(1-N).md',
'マッチング(1:N) + EVALUATE 4パターン分岐': 'マッチング(1-N).md',
'マッチング(N:1)': 'マッチング(N-1).md',
'マッチング(N1': 'マッチング(N-1).md',
'マッチング(M:N)': 'マッチング(M-N).md',
'マッチングMN⇒出力M件': 'マッチング(M-N).md',
'マッチングMN⇒出力N件': 'マッチング(M-N).md',
'マッチングMN⇒出力M×N件': 'マッチング(M-N).md',
'18M:N→M件マッチング)': 'マッチング(M-N).md',
'19M:N→N件マッチング+集計)': 'マッチング(M-N).md',
'20M:N→M×N件直積出力)': 'マッチング(M-N).md',
'レイアウト編集のみ(GETPUT)': 'レイアウト編集のみ(GETPUT).md',
'レイアウト編集のみ(GETPUT': 'レイアウト編集のみ(GETPUT).md',
'レイアウト編集のみ': 'レイアウト編集のみ(GETPUT).md',
'GETPUT(編集出力)': 'GETPUT(編集出力).md',
'項目チェック': '項目チェック(重複含まず).md',
'項目チェック(重複なし)': '項目チェック(重複含まず).md',
'項目チェック(重複なし)': '項目チェック(重複含まず).md',
'項目チェック(重複含まず)': '項目チェック(重複含まず).md',
'項目チェック(重複含む)': '項目チェック(重複含まず).md',
'項目チェック(半角20桁/4桁)': '項目チェック(半角20桁-4桁).md',
'27(半角20桁/4桁チェック)': '項目チェック(半角20桁-4桁).md',
'半角20桁/4桁': '項目チェック(半角20桁-4桁).md',
'振り分け': '振り分け(IF).md',
'振り分け(IF文)': '振り分け(IF).md',
'振り分け(IF文、EVALUATE文)': '振り分け(IF).md',
'振り分け(EVALUATE文)': '振り分け(EVALUATE).md',
'振り分け(EVALUATE文)': '振り分け(EVALUATE).md',
'キーブレイク': 'キーブレイク(集計).md',
'キーブレイク(集計)': 'キーブレイク(集計).md',
'キーブレイク(集計)': 'キーブレイク(集計).md',
'キーブレイク(集約)': 'キーブレイク(集約).md',
'キーブレイク(集約)': 'キーブレイク(集約).md',
'キーブレイク(集計、集約)': 'キーブレイク(集計).md',
'キーブレイク(集計、集約の以外)': 'キーブレイク(非集計).md',
'キーブレイク(集計集約以外)': 'キーブレイク(非集計).md',
'キーブレイク(集計集約以外)': 'キーブレイク(非集計).md',
'キーブレイク(非集計)': 'キーブレイク(非集計).md',
'1:Nキーブレイク(同キー集約)': 'キーブレイク(集計).md',
'1:N+キーブレイク(同キー)': 'キーブレイク(集計).md',
'1:N+同キーキーブレイク': 'キーブレイク(集計).md',
'321:N+同キーキーブレイク)': 'キーブレイク(集計).md',
'1:N+同キー': 'キーブレイク(集計).md',
'1:N+キーブレイク(異キー)': '1-N+キーブレイク(異キー).md',
'1:N+キーブレイク(異キー)': '1-N+キーブレイク(異キー).md',
'1:N+異キーキーブレイク': '1-N+キーブレイク(異キー).md',
'331:N+異キーキーブレイク)': '1-N+キーブレイク(異キー).md',
'1:N+異キー': '1-N+キーブレイク(異キー).md',
'DB更新': 'DB更新.md',
'DB更新 + SYSIN読込(P28)': 'DB更新.md',
'SELECT処理': 'SELECT処理.md',
'SELECT条件': 'SELECT処理.md',
'SELECT条件': 'SELECT処理.md',
'DB検索': 'SELECT処理.md',
'DB検索': 'SELECT処理.md',
'50分割': '50分割.md',
'50分割': '50分割.md',
'25分割': '25分割.md',
'25分割': '25分割.md',
'1125分割)': '25分割.md',
'100分割': '100分割.md',
'100分割': '100分割.md',
'12100分割)': '100分割.md',
'MERGE(複数ファイル結合)': 'MERGE.md',
'MERGE(複数ファイル結合)': 'MERGE.md',
'CSV→FB変換(改行あり)': 'CSV→FB変換.md',
'CSV→FB変換(改行あり)': 'CSV→FB変換.md',
'CSV→FB変換(改行なし)': 'CSV→FB変換.md',
'CSV→FB変換(改行なし)': 'CSV→FB変換.md',
'2段階マッチング(1:1⇒1:1': '2段階マッチング(1:1⇒1:1).md',
'2段階マッチング(11⇒11': '2段階マッチング(1:1⇒1:1).md',
'2段階マッチング(N:1⇒N:1': '2段階マッチング(N:1⇒N:1).md',
'2段階マッチング(N1⇒N1': '2段階マッチング(N:1⇒N:1).md',
'2段階マッチング(M:N⇒M:N': '2段階マッチング(M:N⇒M:N).md',
'2段階マッチング(MN⇒MN': '2段階マッチング(M:N⇒M:N).md',
'マッチング(1:1→1:1 2段階)': '2段階マッチング(1:1⇒1:1).md',
'マッチング(N:1→N:1 2段階)': '2段階マッチング(N:1⇒N:1).md',
'マッチング(M:N→M:N 2段階)': '2段階マッチング(M:N⇒M:N).md',
'内部テーブル検索': '内部テーブル検索.md',
'24(内部テーブル検索)': '内部テーブル検索.md',
'サブプログラム使用': 'サブプログラム.md',
'サブプログラム': 'サブプログラム.md',
'サブPGM': 'サブプログラム.md',
'25(サブPGM': 'サブプログラム.md',
'SYSIN読込': 'SYSIN読込.md',
'SYSIN読込': 'SYSIN読込.md',
'28SYSIN読込)': 'SYSIN読込.md',
'ASCII→EBCDIC変換': 'ASCII→EBCDIC変換.md',
'ASCII→EBCDIC変換': 'ASCII→EBCDIC変換.md',
'29ASCII→EBCDIC変換)': 'ASCII→EBCDIC変換.md',
'SORTINPUT/OUTPUT PROCEDURE': 'SORT.md',
'34SORT INPUT/OUTPUT PROCEDURE': 'SORT.md',
'SORT': 'SORT.md',
'オンラインPGM': 'オンラインPGM.md',
'オンラインPGM': 'オンラインPGM.md',
'オンライン': 'オンラインPGM.md',
'編集出力(ランキング生成)': 'ランキング生成.md',
'36(ランキング生成)': 'ランキング生成.md',
'ランキング生成': 'ランキング生成.md',
'編集出力(印刷制御)': 'GETPUT(編集出力).md',
'編集出力': 'GETPUT(編集出力).md',
'マッチング(1:1)': 'matching-1-1.md',
'マッチング(11': 'matching-1-1.md',
'マッチング(1:N)': 'matching-1-n.md',
'マッチング(1N': 'matching-1-n.md',
'マッチング(1:N) + EVALUATE 4パターン分岐': 'matching-1-n.md',
'マッチング(N:1)': 'matching-n-1.md',
'マッチング(N1': 'matching-n-1.md',
'マッチング(M:N)': 'matching-m-n.md',
'マッチングMN⇒出力M件': 'matching-m-n.md',
'マッチングMN⇒出力N件': 'matching-m-n.md',
'マッチングMN⇒出力M×N件': 'matching-m-n.md',
'18M:N→M件マッチング)': 'matching-m-n.md',
'19M:N→N件マッチング+集計)': 'matching-m-n.md',
'20M:N→M×N件直積出力)': 'matching-m-n.md',
'レイアウト編集のみ(GETPUT)': 'layout-edit-getput.md',
'レイアウト編集のみ(GETPUT': 'layout-edit-getput.md',
'レイアウト編集のみ': 'layout-edit-getput.md',
'GETPUT(編集出力)': 'getput-edit-output.md',
'項目チェック': 'item-check.md',
'項目チェック(重複なし)': 'item-check.md',
'項目チェック(重複なし)': 'item-check.md',
'項目チェック(重複含まず)': 'item-check.md',
'項目チェック(重複含む)': 'item-check.md',
'項目チェック(半角20桁/4桁)': 'item-check-halfwidth.md',
'27(半角20桁/4桁チェック)': 'item-check-halfwidth.md',
'半角20桁/4桁': 'item-check-halfwidth.md',
'振り分け': 'dispatch.md',
'振り分け(IF文)': 'dispatch.md',
'振り分け(IF文、EVALUATE文)': 'dispatch.md',
'振り分け(EVALUATE文)': 'dispatch-evaluate.md',
'振り分け(EVALUATE文)': 'dispatch-evaluate.md',
'キーブレイク': 'keybreak-sum.md',
'キーブレイク(集計)': 'keybreak-sum.md',
'キーブレイク(集計)': 'keybreak-sum.md',
'キーブレイク(集約)': 'keybreak-collect.md',
'キーブレイク(集約)': 'keybreak-collect.md',
'キーブレイク(集計、集約)': 'keybreak-sum.md',
'キーブレイク(集計、集約の以外)': 'keybreak-aggregation.md',
'キーブレイク(集計集約以外)': 'keybreak-aggregation.md',
'キーブレイク(集計集約以外)': 'keybreak-aggregation.md',
'キーブレイク(非集計)': 'keybreak-aggregation.md',
'1:Nキーブレイク(同キー集約)': 'keybreak-sum.md',
'1:N+キーブレイク(同キー)': 'keybreak-sum.md',
'1:N+同キーキーブレイク': 'keybreak-sum.md',
'321:N+同キーキーブレイク)': 'keybreak-sum.md',
'1:N+同キー': 'keybreak-sum.md',
'1:N+キーブレイク(異キー)': 'keybreak-diff-key.md',
'1:N+キーブレイク(異キー)': 'keybreak-diff-key.md',
'1:N+異キーキーブレイク': 'keybreak-diff-key.md',
'331:N+異キーキーブレイク)': 'keybreak-diff-key.md',
'1:N+異キー': 'keybreak-diff-key.md',
'DB更新': 'db-update.md',
'DB更新 + SYSIN読込(P28)': 'db-update.md',
'SELECT処理': 'select-process.md',
'SELECT条件': 'select-process.md',
'SELECT条件': 'select-process.md',
'DB検索': 'select-process.md',
'DB検索': 'select-process.md',
'50分割': 'split-50.md',
'50分割': 'split-50.md',
'25分割': 'split-25.md',
'25分割': 'split-25.md',
'1125分割)': 'split-25.md',
'100分割': 'split-100.md',
'100分割': 'split-100.md',
'12100分割)': 'split-100.md',
'MERGE(複数ファイル結合)': 'merge.md',
'MERGE(複数ファイル結合)': 'merge.md',
'CSV→FB変換(改行あり)': 'csv-to-fb.md',
'CSV→FB変換(改行あり)': 'csv-to-fb.md',
'CSV→FB変換(改行なし)': 'csv-to-fb.md',
'CSV→FB変換(改行なし)': 'csv-to-fb.md',
'2段階マッチング(1:1⇒1:1': 'two-stage-matching-1-1.md',
'2段階マッチング(11⇒11': 'two-stage-matching-1-1.md',
'2段階マッチング(N:1⇒N:1': 'two-stage-matching-n-1.md',
'2段階マッチング(N1⇒N1': 'two-stage-matching-n-1.md',
'2段階マッチング(M:N⇒M:N': 'two-stage-matching-m-n.md',
'2段階マッチング(MN⇒MN': 'two-stage-matching-m-n.md',
'マッチング(1:1→1:1 2段階)': 'two-stage-matching-1-1.md',
'マッチング(N:1→N:1 2段階)': 'two-stage-matching-n-1.md',
'マッチング(M:N→M:N 2段階)': 'two-stage-matching-m-n.md',
'内部テーブル検索': 'internal-table-search.md',
'24(内部テーブル検索)': 'internal-table-search.md',
'サブプログラム使用': 'subprogram.md',
'サブプログラム': 'subprogram.md',
'サブPGM': 'subprogram.md',
'25(サブPGM': 'subprogram.md',
'SYSIN読込': 'sysin-read.md',
'SYSIN読込': 'sysin-read.md',
'28SYSIN読込)': 'sysin-read.md',
'ASCII→EBCDIC変換': 'ascii-to-ebcdic.md',
'ASCII→EBCDIC変換': 'ascii-to-ebcdic.md',
'29ASCII→EBCDIC変換)': 'ascii-to-ebcdic.md',
'SORTINPUT/OUTPUT PROCEDURE': 'sort.md',
'34SORT INPUT/OUTPUT PROCEDURE': 'sort.md',
'SORT': 'sort.md',
'オンラインPGM': 'online-pgm.md',
'オンラインPGM': 'online-pgm.md',
'オンライン': 'online-pgm.md',
'編集出力(ランキング生成)': 'ranking.md',
'36(ランキング生成)': 'ranking.md',
'ランキング生成': 'ranking.md',
'編集出力(印刷制御)': 'getput-edit-output.md',
'編集出力': 'getput-edit-output.md',
}
SPECIAL_FEATURE_CHECKS = [