当前位置: 首页 > news >正文

ForgeCraft-MCP:为AI编码助手建立可执行的“质量契约”

1. 项目概述:为AI编码助手建立“质量契约”

如果你最近开始让AI助手(比如Claude、Cursor、GitHub Copilot)帮你写代码,大概率经历过这种“甜蜜的烦恼”:AI写代码飞快,但随之而来的是项目目录里多出几个没用的.venv,Docker里躺着几个忘了清理的容器,或者VS Code被装了一堆重复的插件。更糟的是,你可能在某个下午发现磁盘空间被悄无声息地吃光了——这不是优雅的失败,而是一场灾难,它会同时干掉你的编辑器、终端、数据库,让你半天的工作瞬间归零。

ForgeCraft-MCP 就是为了解决这个问题而生的。它不是一个运行时框架,也不是一个代码库,而是一个**“质量契约”生成器**。你可以把它理解为你和AI助手之间的“工程规范翻译官”和“环境卫生监督员”。它的核心工作是在项目初始化时,根据你的技术栈和项目类型(比如是API、Web应用还是数据管道),自动生成一份详尽、可执行的工程规范文件(如CLAUDE.md.cursor/rules/),并配置好一系列质量检查钩子。这份“契约”会告诉你的AI助手:“在这个项目里,我们应该这样组织代码,这样管理依赖,这样处理数据,并且要定期打扫‘房间’。”

我花了十几年时间在大小团队里推行工程规范,深知让规范落地有多难——要么文档太泛泛而谈,要么执行成本太高。ForgeCraft的巧妙之处在于,它把抽象的“好代码”原则(如SOLID、六边形架构)和具体的“好习惯”(如Docker容器复用、虚拟环境管理)转化成了AI能直接理解并执行的指令块。它通过一个叫做“生成式规范”的七维度模型,给你的项目质量打分(满分14分),让你能清晰地看到差距在哪里,而不是凭感觉。

2. 核心设计思路:从“规范文档”到“可执行契约”

2.1 生成式规范模型:量化AI代码质量

ForgeCraft的理论基础是“生成式规范”模型。这个模型认为,评价AI生成的代码质量,不能只看它“能不能跑”,而要从七个可度量的属性去评估。这七个属性构成了ForgeCraft审计(audit)功能的核心打分项:

属性检查内容典型证据
自描述性代码库能否在不依赖外部解释的情况下说明自身?存在详尽的CLAUDE.mdREADME.md,关键决策有文档记录。
边界清晰业务逻辑是否泄漏到了路由层?路由文件(如src/routes/*.ts)中没有直接的数据库调用,所有业务逻辑都封装在服务层。
可验证性是否有测试,并且测试在真实运行时环境中通过了?存在测试文件,测试覆盖率报告,以及CI流水线中成功的测试运行记录。
防御性是否有钩子在错误代码提交前就将其拦截?配置了pre-commit钩子,其中包含代码风格检查(lint)、类型检查和基础测试。
可审计性每个架构决策是否都被记录并可追溯?存在架构决策记录(ADR)目录(docs/adrs/),并且记录了决策状态(Status.md)。
可组合性能否在不触及领域逻辑的情况下更换数据库?代码结构清晰地区分了领域层、应用层和基础设施层,数据库访问通过接口(端口)抽象。
可执行性是否有证据表明这个东西真的能运行起来?项目有可运行的构建脚本,CI/CD流水线配置正确且最近一次运行成功。

这个模型的价值在于,它将模糊的“代码质量”概念,拆解成了具体、可检查的条目。当你运行npx forgecraft-mcp audit .时,它会基于这七个维度给你的项目打分(0-100分),并明确指出是哪一项拉了后腿。比如,它可能会告诉你:“hardcoded_url检查失败,在src/auth/service.ts第45行发现了硬编码的API地址”,或者“status_md_current检查失败,Status.md文件已经12天没更新了”。这种指向性的反馈,比一个笼统的“代码质量有待提高”要有用得多。

2.2 开发环境卫生:用约定取代记忆

AI助手的一个常见问题是“健忘”和“随意”。它可能在一个会话里创建了一个Python虚拟环境,下一个会话因为上下文丢失,又创建了一个。ForgeCraft通过向生成的指令文件中注入一系列强制性的“卫生习惯”,来根治这个问题。这些习惯不是建议,而是被定义为“约定违反”,AI助手在行动前必须检查。

  • VS Code扩展管理:在安装任何扩展前,AI必须执行code --list-extensions | grep -i <扩展名>来检查是否已安装。同一天内不允许重复下载同一主版本的扩展。
  • Docker容器管理:在创建容器前,必须检查是否存在同名容器(docker ps -a --filter name=<服务名>)。如果存在,则启动它,而不是创建新的。优先使用docker compose up(复用)而非docker run(总是创建新实例)。日志文件大小被限制在500MB以内。docker system prune -f被记录为定期维护步骤,而非紧急清理手段。
  • Python虚拟环境:一个项目根目录下只允许一个.venv。如果Python主次版本号匹配,则复用现有的虚拟环境。禁止在子目录(除非是独立的可安装包)创建新的虚拟环境。使用pip list --not-required来标记未使用的依赖。
  • 磁盘空间守卫:如果工作区(排除已知的构建产物如node_modules/,.venv/,dist/)体积增长超过2GB,AI必须发出警告并停止操作,而不是静默地填满磁盘。

注意:这些规则被直接写入到给AI的指令文件中。例如,在给Claude的CLAUDE.md里,你会看到类似“Docker容器管理:在运行docker run之前,总是先检查同名容器是否存在...”的段落。这相当于给AI戴上了“紧箍咒”,让它从“可能犯错”变成了“按规则办事”。

2.3 内容深度分级:按需索取,避免过度设计

不是每个项目第一天就需要领域驱动设计(DDD)或事件溯源。ForgeCraft引入了“内容深度分级”概念,让你可以根据项目阶段和团队成熟度选择合适的规范强度。

层级包含内容适用场景
核心代码标准、基础测试、提交协议、错误处理。新项目、小型项目、原型验证阶段。
推荐核心层 + 架构模式(如分层)、CI/CD、整洁代码实践、部署配置。大多数项目的默认选择,在规范性和灵活性间取得平衡。
可选推荐层 + 高级模式(DDD、CQRS、事件溯源)、设计模式。成熟团队、复杂业务领域、长期维护的大型项目。

你可以在项目的forgecraft.yaml配置文件中通过tier: recommended来设置。这意味着,一个处于“核心”层级的个人小工具项目,其生成的指令文件会专注于如何写出没有bug的、可测试的函数;而一个“可选”层级的金融交易系统,其指令则会详细描述如何实现双入口记账、金额的精确计算以及审计日志。

3. 核心功能与实操要点解析

3.1 一键项目初始化与规范注入

ForgeCraft的核心命令极其简单。进入你的项目根目录,执行:

npx forgecraft-mcp setup .

这个命令会触发一系列自动化操作:

  1. 分析阶段:扫描你的项目目录,读取现有的package.jsondocker-compose.yml等文件,并尝试解析你的项目规格文档(如docs/specs/下的文件)。
  2. 标签推断:基于分析结果,AI(如果启用了MCP)或启发式算法会为你的项目打上标签(如APIWEB-REACTDATA-PIPELINE)。这些标签决定了后续要注入哪些领域的特定规则。
  3. 生成契约:根据推断出的标签和选定的内容层级(tier),从116个预置的、经过精心编排的“指令块”中选取合适的部分,组装成针对不同AI助手的工程规范文件。
  4. 脚手架创建:同时生成项目所需的基础结构,如Status.md(会话连续性追踪)、docs/adrs/(架构决策记录目录)、docs/PRD.md(产品需求文档骨架)、docs/TechSpec.md(技术规格文档骨架)以及预提交钩子(.claude/hooks/)。

实操心得:第一次运行setup时,建议先不加任何参数,让它自动分析。然后查看生成的forgecraft.yaml文件中的tags列表。你可能会发现它漏掉了一些标签(比如你的React项目同时需要API标签),或者多给了一些用不上的标签。这时,你可以手动编辑forgecraft.yaml,调整tagstier,然后运行npx forgecraft-mcp generate .来重新生成指令文件。这个过程是迭代式的。

3.2 24个领域标签:精准匹配你的技术栈

ForgeCraft的威力很大程度上来自于其精细的领域标签系统。这些标签不是简单的“前端/后端”,而是具体到技术栈和业务领域。以下是一些关键标签及其作用:

标签作用描述
UNIVERSAL始终启用。包含SOLID原则、测试金字塔、提交规范、错误处理等通用工程实践。
API添加REST/GraphQL API契约规范、认证授权、速率限制、API版本化策略。
WEB-REACT添加React组件架构(原子设计或类似)、状态管理规范、可访问性(a11y)要求、性能预算。
CLI添加命令行参数解析规范、输出格式化、退出码定义、交互式提示指南。
INFRA添加基础设施即代码(Terraform/CDK)规范、Kubernetes部署清单模板、密钥管理实践。
FINTECH金融科技专用。添加双入口会计模型、高精度十进制运算(避免浮点数)、金融合规性检查。
HEALTHCARE医疗健康专用。添加HIPAA合规性指南、受保护健康信息处理、增强的审计日志和加密要求。
GAME游戏开发。添加游戏循环架构、实体组件系统模式、针对Phaser 3/PixiJS/Three.js的性能优化预算。

注意事项:标签是叠加的,而不是互斥的。一个电商后端项目可能同时拥有UNIVERSALAPIDATA-PIPELINE(处理订单流水)和SOC2(需要合规)标签。ForgeCraft会智能地合并所有相关标签的指令块,并处理可能的重叠或冲突规则。

3.3 质量门禁:分阶段的自动化检查点

质量门禁是ForgeCraft中一个非常强大的概念。它不同于传统的代码检查(Lint),而是在特定时刻(如提交前、发布前、部署后)运行的结构化通过/失败检查。每个门禁都有明确的条件、需要提供的证据,以及一个标志位来指示是否需要人工复核。

门禁按发布阶段组织,避免在项目初期就运行不切实际的严格检查:

阶段示例门禁
开发阶段单元测试通过、代码风格检查通过、无分层架构违规、无硬编码密钥。
预发布强化阶段变异测试覆盖率≥80%、动态应用安全测试扫描通过、2倍峰值负载测试、混沌测试(如使用Toxiproxy模拟故障)。
发布候选阶段OWASP Top 10渗透测试、完整的变异测试审计、兼容性矩阵验证、无障碍访问检查。
部署阶段金丝雀发布配置已验证、冒烟测试通过、可观测性(监控、日志、链路追踪)已确认配置。
部署后阶段合成监控探针已上线、30分钟错误窗口监控、事件应急手册已评审。

这些门禁以“钩子”的形式集成到你的开发流程中。例如,一个标记为development阶段且requires_human_review: false的“无硬编码密钥”门禁,可以配置为pre-commit钩子,在提交时自动运行扫描,如果发现硬编码的密码或API密钥,则阻止提交。而一个pre-release hardening阶段且requires_human_review: true的“渗透测试报告”门禁,则可能是一个需要人工上传报告并点击确认的CI/CD流水线关卡。

实操心得:不要一开始就启用所有门禁。建议从development阶段的几个核心门禁开始(如单元测试、Lint)。随着项目成熟,再逐步引入更高级的门禁。你可以通过npx forgecraft-mcp list hooks --tags API, WEB-REACT来查看针对你项目标签的所有可用钩子,然后选择性地通过npx forgecraft-mcp add-hook <hook_name> .添加到项目中。

3.4 架构决策记录自动化

ADR是记录重要技术决策及其上下文、备选方案和后果的文档。ForgeCraft让创建和管理ADR变得异常简单。

npx forgecraft-mcp generate_adr . \ --title "采用事件溯源模式记录订单历史" \ --status "已接受" \ --context "为满足合规要求,订单变更需要完整的审计追踪" \ --decision "采用仅追加的事件日志,在读取时投影生成当前状态"

执行上述命令后,ForgeCraft会自动在docs/adrs/目录下生成一个按顺序编号的文件(如0004-采用事件溯源模式记录订单历史.md),并采用MADR(Markdown架构决策记录)格式。这确保了决策过程的可追溯性,并且当AI助手在未来需要修改相关代码时,它可以先阅读这些ADR来理解当初的决策背景,避免做出矛盾的修改。

4. 完整工作流程与实战指南

4.1 新项目(绿地项目)标准化流程

假设我们要启动一个名为user-profile-service的新后端API项目。

  1. 创建项目并初始化

    mkdir user-profile-service && cd user-profile-service npm init -y # 假设我们使用TypeScript和Express npm install express typescript ts-node @types/express npx tsc --init
  2. 运行ForgeCraft初始化

    npx forgecraft-mcp setup .

    此时,ForgeCraft会分析你的package.jsontsconfig.json,推断出这是一个TypeScript项目,并很可能打上UNIVERSALAPI标签。它会在项目中生成一系列文件。

  3. 审查并调整配置: 打开生成的forgecraft.yaml,你可能会看到:

    projectName: user-profile-service tags: [UNIVERSAL, API] tier: recommended outputTargets: [claude]

    如果你知道这个服务未来需要处理金融数据,可以手动添加FINTECH标签:

    tags: [UNIVERSAL, API, FINTECH]

    然后重新生成指令文件以包含金融领域的特定规则:

    npx forgecraft-mcp generate .
  4. 开始开发: 现在,当你打开AI助手(如Claude)并指向这个项目时,它会读取CLAUDE.md。这份文件现在包含了:

    • API设计规范:如何定义REST端点、请求/响应格式、错误码。
    • 金融数据规范:使用decimal.jsBigDecimal进行货币计算,禁止使用number类型。
    • 测试规范:单元测试、集成测试的编写指南和目标覆盖率。
    • 开发卫生:Docker和虚拟环境的管理规则。 你可以直接给AI一个需求:“基于docs/PRD.md中的用户模型,实现一个创建用户profile的REST端点,包含输入验证和数据库持久化。” AI会依据“契约”来编写结构良好、符合规范的代码。

4.2 现有项目(棕地项目)集成流程

将一个已有项目接入ForgeCraft同样简单,目标是逐步规范化,而非推倒重来。

  1. 在现有项目根目录运行初始化

    cd your-existing-project npx forgecraft-mcp setup .

    ForgeCraft会以“只读”模式分析你的代码库,尝试推断标签,并生成指令文件和脚手架。关键的一步是使用--merge标志,如果你已经有一个自定义的CLAUDE.md或类似文件。

  2. 合并现有配置

    # 假设你已有自己的CLAUDE.md npx forgecraft-mcp generate . --merge

    这个操作会将ForgeCraft的规范块与你已有的自定义部分智能合并,而不是覆盖。

  3. 运行首次审计,发现差距

    npx forgecraft-mcp audit .

    审计报告会清晰地指出问题所在,例如“在src/utils/config.ts中发现硬编码的数据库URL”。报告还会直接链接到对应的修复工作流。

  4. 按优先级修复: 根据审计报告,使用ForgeCraft提供的“工作流手册”进行修复。例如,对于hardcoded_credential(硬编码凭证)问题,手册会指导你:

    • 立即将密钥移至环境变量或密钥管理服务。
    • 在代码中使用配置库来读取。
    • 更新.env.example文件。
    • Status.md中记录此次变更。 你可以命令AI助手:“按照ForgeCraft工作流手册,修复审计报告中关于硬编码凭证的所有问题。”
  5. 迭代改进: 每次完成一批修复后,重新运行audit,看到分数提升。逐步引入质量门禁钩子,比如先加一个pre-commit钩子来防止新的硬编码凭证进入代码库。

4.3 项目演进与上下文刷新

项目不是一成不变的。当你从单纯的API服务,增加了后台管理面板(需要WEB-REACT标签)和数据分析任务(需要DATA-PIPELINE标签)时,你需要更新ForgeCraft的上下文。

  1. 运行刷新预览

    npx forgecraft-mcp refresh .

    这个命令会重新分析项目,并与当前的forgecraft.yaml配置进行比较,展示一个差异报告,列出它建议新增或移除的标签。

  2. 应用更改: 如果差异报告符合预期,运行:

    npx forgecraft-mcp refresh . --apply

    这会更新forgecraft.yaml中的标签,并重新生成所有指令文件,将新的领域规则(如React组件规范、ETL任务幂等性要求)融入其中。

  3. 更新会话状态: 确保Status.md文件被更新,以反映项目范围的变化和当前的重心。这有助于保持AI助手在不同会话间的上下文连续性。

5. 常见问题、排查技巧与深度解析

5.1 指令文件过于冗长,导致AI上下文窗口紧张

问题:为大型项目(包含多个标签)生成的CLAUDE.md文件可能非常庞大,消耗大量AI模型的上下文令牌。

解决方案

  1. 使用--compact标志:在生成或刷新时使用npx forgecraft-mcp generate . --compact。这个选项会移除解释性的尾部文字并合并重复行,通常能减少20%-40%的体积。
  2. 调整内容层级:评估你的项目是否真的需要optional层级的所有高级模式。降级到recommended可以显著减少关于DDD、CQRS等复杂模式的详细说明。
  3. 精准选择标签:定期审查forgecraft.yaml中的tags列表,移除那些不再适用或暂时用不上的标签。例如,一个内部工具项目可能不需要SOC2合规标签。
  4. 分而治之:对于超大型单体项目,可以考虑是否应该拆分为多个微服务或独立库,每个都有自己更聚焦的ForgeCraft配置。

5.2 与现有团队工作流或CI/CD流水线冲突

问题:团队已有成熟的Git钩子(如Husky)、CI脚本(Jenkins/GitLab CI)或代码审查流程。

解决方案

  1. 钩子集成:ForgeCraft生成的钩子(在.claude/hooks/)是独立的脚本。你可以不直接使用它们,而是将其逻辑整合到你现有的Husky钩子或CI流水线阶段中。例如,将pre-commit钩子中的“无硬编码密钥”检查脚本,复制到你团队的pre-commit配置里。
  2. 审计作为CI阶段:在CI流水线中增加一个阶段,运行npx forgecraft-mcp audit .,并将分数和失败项作为流水线通过/失败的条件之一,或者作为PR评论的一部分输出。
  3. 审查清单:使用npx forgecraft-mcp review .生成针对当前项目标签的结构化代码审查清单。这份清单可以作为你团队Code Review流程的补充检查项,确保人工审查也覆盖了架构和领域特定的要点。

5.3 生成的架构建议与团队技术选型不符

问题:ForgeCraft基于标签推荐了六边形架构,但团队目前采用的是更简单的分层架构,且暂时不打算重构。

解决方案

  1. 配置排除:在forgecraft.yaml中使用exclude字段,明确排除你不想要的模式块。例如:
    exclude: - hexagonal-architecture - ddd-repository-pattern
    重新生成后,指令文件中将不再包含这些模式的详细规则。
  2. 自定义模板:ForgeCraft支持自定义模板包。你可以创建一套符合团队现有约定的模板。首先,复制templates/universal/目录结构到本地(如./my-team-standards),然后修改其中的YAML文件(如instructions.yaml),用你们团队的架构模式替换掉默认的六边形架构描述。最后,在forgecraft.yaml中引用:
    templateDirs: - ./my-team-standards
    这样,ForgeCraft会优先使用你的自定义模板。

5.4 MCP Sentinel的取舍:何时用,何时不用

问题:MCP Sentinel工具很方便,但它会持续占用模型的上下文令牌。是否应该一直启用?

深度解析与建议: ForgeCraft的MCP Sentinel设计非常克制,它只有一个核心功能:读取forgecraft.yamlCLAUDE.md和钩子状态,然后推荐一个最合适的CLI命令(如setup,audit,refresh)。它本身不执行任何操作,只是一个“导航员”。

  • 启用时机
    • 项目初始化阶段:当你第一次在一个项目中使用ForgeCraft时,启用Sentinel,让AI助手帮你运行npx forgecraft-mcp setup .。这能确保配置过程顺畅。
    • 项目重大变更后:当你觉得项目范围变化很大,不确定该运行refresh还是generate时,可以临时启用Sentinel,让它分析后给出建议。
  • 禁用时机
    • 日常开发阶段:一旦项目完成初始化,指令文件就位,日常开发中AI助手直接阅读CLAUDE.md即可。此时应移除Sentinel以节省宝贵的上下文令牌。记住,每个声明的MCP工具都会被模型在每轮对话中读取,占用令牌。
    • 令牌预算紧张时:如果你的AI助手上限了上下文长度,且你需要处理大量代码文件,那么关闭非核心的MCP服务器(包括Sentinel)是明智的。

操作指南:将添加/移除Sentinel视为一个临时性操作。在你的AI助手配置中(如Claude Desktop的settings.json),可以快速注释或取消注释ForgeCraft的MCP服务器配置。

5.5 “质量分”波动或下降

问题:上次审计还是85分,这次突然掉到70分了,但代码似乎没大改。

排查步骤

  1. 检查Status.md:分数下降的一个常见原因是Status.md文件过期(stale_status检查失败)。确保这个文件随着项目进展而更新。
  2. 运行详细审计:使用npx forgecraft-mcp audit . -v(如果支持verbose模式)或直接查看审计输出的详细列表。关注具体是哪个属性(如Defended)下的哪个检查项(如hook_missing)失败了。
  3. 检查标签一致性:确认forgecraft.yaml中的tags是否与项目当前的实际技术栈一致。例如,如果你移除了数据库相关代码但未移除DATA-PIPELINE标签,审计可能会检查不存在的数据库层规范而导致失败。
  4. 审查新增代码:检查最近提交中是否引入了违反规范的模式,例如在路由处理函数中直接写了SQL查询(layer_violation),或者新增了没有对应测试的复杂逻辑(Verifiable分数下降)。

ForgeCraft提供的不仅是一个工具,更是一套让AI辅助开发走向标准化、可预测、高质量的工程实践框架。它通过将最佳实践编码成机器和AI都能理解的“契约”,从根本上降低了协同开发中的认知负荷和一致性维护成本。无论是个人开发者还是团队,将其集成到工作流中,都能显著提升代码产出的可靠性和可维护性。

http://www.jsqmd.com/news/740672/

相关文章:

  • Arkon框架:AI原生应用开发的工程化实践与架构解析
  • 硬件(处理器/显卡)大比拼(不定期更新)
  • Excel批量查询工具终极指南:10分钟搞定100个Excel文件,告别Ctrl+F的繁琐时代
  • 告别臃肿官方软件!AlienFX Tools:让你的Alienware设备焕发新生的终极指南
  • Autovisor:告别手动刷课,让在线学习自动化起来
  • LLMs在软件开发中的双刃剑效应与TDD协同实践
  • 【flutter for open harmony】第三方库Flutter 鸿蒙版 剪贴板管理 实战指南(适配 1.0.0)✨
  • Autovisor:终极智慧树自动化学习指南 - 5分钟掌握无人值守刷课技巧
  • ComfyUI-Impact-Pack深度解析:模块化图像增强与语义分割技术架构
  • 【C语言OTA调试实战宝典】:20年嵌入式老兵亲授7大隐性故障定位法,错过再等三年!
  • 家庭电脑从选购、安装、维护到回收全流程
  • 通信理论赋能图像表征:COMiT架构解析与实践
  • 哔哩下载姬:3步搞定B站视频高效下载,从新手到高手完全指南
  • 【flutter for open harmony】第三方库Flutter 鸿蒙版 照片拼图 实战指南(适配 1.0.0)✨
  • 扩散模型去噪机制与解码策略优化实践
  • NoFWL桌面AI伴侣:基于Tauri的跨平台本地化ChatGPT客户端
  • 日本专升硕的条件
  • 歌词滚动姬:免费开源的Web端歌词制作工具完全指南
  • 从Qt到Unity都报错?可能是Windows这个隐藏服务在搞鬼(手把手修复null.sys)
  • 如何用Zotero插件市场一键管理所有文献工具?3步打造高效学术工作流
  • 【Backend Flow工程实践 17】Timing Analysis:为什么 Backend Flow 的每一步都围绕 slack 和 path 展开?
  • 卖家精灵优惠折扣码 - 易派
  • 别再让YOLOv7在人群里‘抓瞎’了!手把手教你用CrowdHuman数据集训练专属模型(附完整代码与权重)
  • 言论责任链上绑定程序,颠覆网络匿名乱喷,发言上链可溯有责但不侵犯隐私。
  • C语言FDA测试不是写TestCase,而是构建可审计证据链:从需求→设计→代码→测试→配置管理的12节点闭环验证体系
  • 基于MCP协议为开源大模型集成Perplexity联网搜索能力
  • 手机号查询QQ号技术实现:基于TEA加密的协议逆向工程解决方案
  • 用斐波那契数列手把手调试你的第一个LoongArch单周期CPU(Vivado仿真+上板验证)
  • TMS320F28377D双核开发实战:RAM调试与Flash固化,一份CCS7.40的完整配置清单
  • 从老式收音机到精密传感器:二极管温度补偿电路的‘前世今生’与实战选型指南