Semcheck如何用AI大模型验证代码规范?2026年最新工具指南
Semcheck is an AI-powered tool that uses large language models to verify code implementation matches specifications through inline comments or configuration rules, supporting multiple LLM providers and integration with CI/CD workflows.
原文翻译: Semcheck是一款AI驱动的工具,利用大语言模型通过内联注释或配置规则验证代码实现是否符合规范,支持多种LLM提供商,并能与CI/CD工作流集成。
Semcheck 是一款利用大语言模型(LLM)来验证您的代码实现是否符合设计规范的工具。您可以通过内联注释直接将规范链接到代码,或者定义语义规则来描述代码应如何与规范对齐。建议在提交或合并代码前将其作为最终检查步骤使用。
Semcheck 是一个利用大语言模型来验证代码实现是否符合设计规范的工具。它允许您通过内联注释直接将规范链接到代码,或者定义语义规则来描述代码应如何与规范对齐。建议在提交或合并代码前将其作为最终检查步骤使用。
核心特性
- 非侵入式:无需修改现有代码或规范文件 (Non-intrusive: no changes required to existing code or specification files)
- 自带模型:支持 OpenAI、Anthropic、Gemini、Cerebras 以及 Ollama(本地运行) (Bring Your Own Model: supports OpenAI, Anthropic, Gemini, Cerebras and Ollama (local))
- 支持远程规范文件:例如
https://www.rfc-editor.org/rfc/rfc7946.txt(Supports remote specification files (e.g.,https://www.rfc-editor.org/rfc/rfc7946.txt)) - 易于设置:使用
semcheck -init命令快速初始化 (Easy setup withsemcheck -init)
安装指南
前置条件
- Go 1.24 或更高版本
- golangci-lint:(可选,用于开发)
- Just:(可选,用于开发)
安装步骤
通过以下命令安装最新版本的 Semcheck:
go install github.com/rejot-dev/semcheck@latest
配置
Semcheck 需要一个配置文件。您可以使用 -init 标志以交互方式生成一个:
semcheck -init
此命令将创建一个 semcheck.yaml 文件。请根据您的项目需求编辑此文件。
Semcheck requires a configuration file. Generate one interactively using the
-initflag. This command creates asemcheck.yamlfile. Edit this file to suit your project.
链接规范与实现
Semcheck 支持两种不同的模式来将规范文件链接到实现代码,这两种模式可以结合使用。
1. 内联规范引用
使用特殊的注释语法在代码中直接链接规范。
# semcheck:rfc(8259)
class JsonParser:
def parse(self, data: bytes):
# ... 实现代码
内联引用支持以下几种命令:
semcheck:file(./local/spec.md) # 链接仓库内的本地文件,路径相对于 semcheck 工作目录
semcheck:url(https://example.com/docs/api) # 链接到远程文档
semcheck:rfc(8259) # 链接到 rfc-editor.org 上 RFC 文档的简写形式
使用片段/锚点
您可以使用 URL 片段来定位结构化文档(HTML 和 Markdown)中的特定部分:
# 链接到 HTML 文档的特定章节
# semcheck:url(https://www.rfc-editor.org/rfc/rfc7946.html#section-3.1.1)
# 使用标题文本链接到 Markdown 文档的特定章节
# semcheck:file(./docs/api-spec.md#authentication)
# 对 RFC 文档同样有效
# semcheck:rfc(8259#section1)
对于 HTML 文档,片段的工作方式与浏览器导航相同,它们会定位具有匹配 id 或 name 属性的元素。对于 Markdown 文档,您可以使用标题文本作为片段标识符(空格和特殊字符会被转换为锚点格式)。
You can target specific sections of structured documents (HTML and Markdown) using URL fragments. For HTML documents, fragments work the same way as browser navigation, they target elements with matching
idornameattributes. For Markdown documents, you can use the header text as the fragment identifier (spaces and special characters are converted to anchor format).
2. 规则
在您的 Semcheck 配置中定义规则,将规范文件链接到实现文件。Semcheck 会为每条规则运行一次 LLM,在预提交模式下,则只针对包含已修改文件的规则运行。为了获得最佳效果,请尽量保持每条规则涉及的文件数量较少,LLM 在上下文聚焦时表现最佳。
规则配置示例:
rules:
- name: "config-spec"
enabled: true
files:
include:
- "./internal/config/*.go"
exclude:
- "*_test.go"
specs:
- path: "config-spec.md"
- name: "geojson"
description: "Ensure GeoJSON implementation matches RFC 7946"
enabled: true
files:
include:
- "packages/geojson/src/*.ts"
exclude:
- "*.test.ts"
specs:
- path: "https://www.rfc-editor.org/rfc/rfc7946.txt"
prompt: |
Our GeoJSON implementation is incomplete; only check implemented features.
使用方法
基础用法
# 创建配置文件
semcheck -init
# 检查所有规范/实现规则
semcheck
# 传递需要检查的特定文件,
# semcheck 会根据规则判断需要进行哪些比较
semcheck spec.md
# 可以传递实现文件和规范文件
semcheck impl.go
# 在暂存文件上运行(预提交检查)
semcheck -pre-commit
# 使用自定义配置文件
semcheck -config my-config.yaml file1.go
# 也可以使用双破折号语法传递标志
semcheck --config my-config.yaml
# 显示帮助信息
semcheck -help
忽略文件
Semcheck 使用顶层的 .gitignore 文件来确定在处理过程中跳过哪些文件。如果您没有使用 Git,也可以创建一个遵循与 .gitignore 文件相同语义的 .semignore 文件。
Semcheck uses the top-level
.gitignorefile to determine which files to skip during processing, if you're not using git you can also create a.semignorethat follows the same semantics as a gitignore file.
GitHub Actions 集成
Semcheck 可以在 GitHub Actions 工作流中使用,以检查代码中的语义问题。
可用的配置选项:
config-file:Semcheck 配置文件的路径fail-on-issues:如果发现问题,是否使 Action 失败semcheck-version:要使用的 Semcheck 版本go-version:要使用的 Go 版本
工作流配置示例:
on:
pull_request:
branches:
- main
jobs:
semcheck:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run semcheck
uses: rejot-dev/semcheck@main
with:
config-file: semcheck.yaml
fail-on-issues: false
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} # 或其他提供商的 API 密钥,可在 semcheck.yaml 中配置
模型评估
在 evals 目录下提供了一个(相对)基础的评估套件,用于衡量模型和提示词随时间的准确性。要了解哪些模型/提供商能获得最佳结果,请查看评估结果:
A (somewhat) primitive evaluation suite is available in
evalsin order to measure the accuracy of models and prompts over time. To get an idea which model/providers get the best results take a look at the evaluation results.
常见问题(FAQ)
Semcheck如何验证代码是否符合规范?
Semcheck通过内联注释或配置规则将规范链接到代码,利用大语言模型自动验证实现与规范的一致性,支持本地文件和远程URL规范。
Semcheck支持哪些大语言模型?
支持OpenAI、Anthropic、Gemini、Cerebras及Ollama(本地运行)等多种LLM提供商,用户可自带模型灵活选择。
如何在CI/CD流程中集成Semcheck?
可通过GitHub Actions集成,在提交或合并代码前作为最终检查步骤,支持预提交模式仅检查修改文件,提升开发效率。
版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。
文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。
若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。 也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。