Merge pull request #24 from fmagent-project/fix-rust-extraction Fix rust extraction
Merge pull request #24 from fmagent-project/fix-rust-extraction
Fix rust extraction
English | 中文
官网 · 论文
FM-Agent 是首个实现大规模系统正确性全自动推理的框架,支持的软件包括14万行代码的 Claude C Compiler。
它包含三个步骤:
FM-Agent 的官方网站提供了在线代码库推理服务,欢迎体验!
⚠️ 注意:本框架的推理效果受所使用模型的能力影响较大。使用能力较弱的模型时,可能出现幻觉(hallucination),导致错误的推理结论。建议使用推理能力较强的模型(例如Claude Sonnet 4.6)以获得更可靠的结果。
|-- main.py # 程序入口 |-- config.py # 配置 |-- install.sh # 依赖安装脚本 |-- src/ # 核心源码模块(提取、推理、LLM 交互等) |-- md/ # 引导 LLM 推理的工作流说明文档
bunx
设置 FM-Agent 和 OpenCode 共用的 LLM API 密钥。推荐使用 OpenRouter:FM-Agent 会并发调用 LLM,而 OpenRouter 的 RPM(每分钟请求数)和 TPM(每分钟 Token 数)限制更宽松——不过任何兼容的 provider 都可以。
export LLM_API_KEY="your-api-key-here"
OpenCode provider 的配置以及可选的 prompt 缓存设置见 docs/config_llm.md。
上述所有依赖(Ubuntu 和 Python 除外)均可通过以下脚本一键安装:
./install.sh
(可选)如有需要,可在 OpenCode 的配置文件中手动设置默认 LLM 模型和 API 密钥。
重要提示: FM-Agent 会根据推理过程自动生成测试用例,以触发潜在 Bug,帮助开发者定位和修复问题。运行 FM-Agent 前,请确保目标代码库的测试环境已就绪,并在必要时在 md/bug_validator.md 中指定测试用例的运行方式。若未指定,Agent 将自主决定执行方式。
md/bug_validator.md
关键参数可在 config.py 中调整。
LLM_MODEL
anthropic/claude-sonnet-4.6
OPENCODE_SETUP_MODEL
OPENCODE_SPEC_MODEL
OPENCODE_BUG_VALIDATION_MODEL
REASONER_POST_CONDITION_MODEL
REASONER_SPEC_CHECK_MODEL
LLM_API_KEY
LLM_API_BASE_URL
https://openrouter.ai/api/v1
重要说明: 强烈建议使用 Claude Sonnet 4.6 等能力较强的模型,其他模型可能推理能力,无法有效发现 Bug。此外,请使用有权限访问 Claude 模型的 API 密钥,因为 FM-Agent 调用的 OpenCode 可能会使用 Claude 模型。
(可选)FM-Agent 使用 oh-my-openagent 插件增强 OpenCode。该插件内置的 comment-checker 钩子应当禁用,否则它会拦截 FM-Agent 写入的每一个注释块(这些注释是函数的正确性规约),并迫使 Agent 消耗大量 Token 去论证注释的必要性或将其删除。 请打开 oh-my-openagent 配置文件(通常位于 ~/.config/opencode/oh-my-openagent.json),添加 disabled_hooks:
~/.config/opencode/oh-my-openagent.json
disabled_hooks
{ "disabled_hooks": ["comment-checker"], }
python3 main.py <proj_dir>
proj_dir
FM-Agent 会在代码库目录下创建 fm_agent/ 目录,主要输出内容如下:
fm_agent/
fm_agent/bug_validation/<bug_id>.md
每个已确认或经过排查的 Bug 都会生成一份 Markdown 报告,包含以下内容:
fm_agent/bug_validation/ 目录下的 summary.json 文件汇总了所有 Bug 结果,包括报告的Bug总数、已确认Bug数、未确认Bug数。
fm_agent/bug_validation/
summary.json
fm_agent/fm_agent.log
单一日志文件记录完整的流水线执行过程,包括文件提取进度、推理任务的提交与完成情况、网络错误与重试,以及最终的推理统计摘要。日志级别为 INFO,格式为 %(asctime)s [%(levelname)s] %(message)s。
INFO
%(asctime)s [%(levelname)s] %(message)s
md/
如果您使用了 FM-Agent,请引用我们的论文:
@misc{ding2026fmagent, Author = {Haoran Ding and Zhaoguo Wang and Haibo Chen}, Title = {FM-Agent: Scaling Formal Methods to Large Systems via LLM-Based Hoare-Style Reasoning}, Year = {2026}, Eprint = {arXiv:2604.11556}, }
如有任何问题,欢迎提交 Issue 或发送邮件联系。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
FM-Agent:通过基于大模型的霍尔逻辑推理将形式化方法扩展至大规模系统软件
English | 中文
官网 · 论文
FM-Agent 是首个实现大规模系统正确性全自动推理的框架,支持的软件包括14万行代码的 Claude C Compiler。
它包含三个步骤:
FM-Agent 的官方网站提供了在线代码库推理服务,欢迎体验!
目录
文件结构
环境配置
依赖要求
bunx安装)安装依赖
设置 FM-Agent 和 OpenCode 共用的 LLM API 密钥。推荐使用 OpenRouter:FM-Agent 会并发调用 LLM,而 OpenRouter 的 RPM(每分钟请求数)和 TPM(每分钟 Token 数)限制更宽松——不过任何兼容的 provider 都可以。
OpenCode provider 的配置以及可选的 prompt 缓存设置见 docs/config_llm.md。
上述所有依赖(Ubuntu 和 Python 除外)均可通过以下脚本一键安装:
(可选)如有需要,可在 OpenCode 的配置文件中手动设置默认 LLM 模型和 API 密钥。
重要提示: FM-Agent 会根据推理过程自动生成测试用例,以触发潜在 Bug,帮助开发者定位和修复问题。运行 FM-Agent 前,请确保目标代码库的测试环境已就绪,并在必要时在
md/bug_validator.md中指定测试用例的运行方式。若未指定,Agent 将自主决定执行方式。参数配置
关键参数可在 config.py 中调整。
LLM_MODELanthropic/claude-sonnet-4.6OPENCODE_SETUP_MODELLLM_MODELOPENCODE_SPEC_MODELLLM_MODELOPENCODE_BUG_VALIDATION_MODELLLM_MODELREASONER_POST_CONDITION_MODELLLM_MODELREASONER_SPEC_CHECK_MODELLLM_MODELLLM_API_KEYLLM_API_BASE_URLhttps://openrouter.ai/api/v1重要说明: 强烈建议使用 Claude Sonnet 4.6 等能力较强的模型,其他模型可能推理能力,无法有效发现 Bug。此外,请使用有权限访问 Claude 模型的 API 密钥,因为 FM-Agent 调用的 OpenCode 可能会使用 Claude 模型。
(可选)FM-Agent 使用 oh-my-openagent 插件增强 OpenCode。该插件内置的 comment-checker 钩子应当禁用,否则它会拦截 FM-Agent 写入的每一个注释块(这些注释是函数的正确性规约),并迫使 Agent 消耗大量 Token 去论证注释的必要性或将其删除。 请打开 oh-my-openagent 配置文件(通常位于
~/.config/opencode/oh-my-openagent.json),添加disabled_hooks:快速开始
proj_dir输出说明
FM-Agent 会在代码库目录下创建
fm_agent/目录,主要输出内容如下:Bug 报告(
fm_agent/bug_validation/<bug_id>.md)每个已确认或经过排查的 Bug 都会生成一份 Markdown 报告,包含以下内容:
fm_agent/bug_validation/目录下的summary.json文件汇总了所有 Bug 结果,包括报告的Bug总数、已确认Bug数、未确认Bug数。日志文件(
fm_agent/fm_agent.log)单一日志文件记录完整的流水线执行过程,包括文件提取进度、推理任务的提交与完成情况、网络错误与重试,以及最终的推理统计摘要。日志级别为
INFO,格式为%(asctime)s [%(levelname)s] %(message)s。注意事项
fm_agent/目录,请确保不存在命名冲突。md/目录下的 Markdown 文件提供了引导 Agent 推理过程的通用说明。针对特定项目进行定制可以提高准确性并发现更多 Bug。例如,可以加入项目文档以加深 Agent 对代码库的理解;若正在推理编译器的正确性,可修改md/bug_validator.md,指示 Agent 将输出与参考实现(如 GCC)进行对比。论文引用
如果您使用了 FM-Agent,请引用我们的论文:
联系方式
如有任何问题,欢迎提交 Issue 或发送邮件联系。