畅想一些 LLM 跟编译器进一步结合的用法

这个文档是 Gemini 生成的, 展开案例, 当做一份参考, 探索全 LLM 和编译器能力生命周期结合的一些可能性. 可能在上下文工程方面有一些想象成分, 仅作为参考.

提案:AI 协作原生编程生态系统 (AI-Native Programming Ecosystem)

1. 综述 (Executive Summary)

在 AI 时代,编程语言的生态不再仅仅是为人类设计的,它必须具备“机器可读”与“语义对齐”的双重属性。本提案以 Rust 和 MoonBit 为背景,提出一套基于 Claude Skills渐进式协作框架。其核心理念是:将编译器、LSP、文档和包管理器从“被动响应工具”转变为“主动引导 agent 的知识节点”

通过渐进式披露(Progressive Disclosure)和上下文剪枝策略(类似 Gemini Interactions API 的上下文优化),我们旨在解决 LLM 在长上下文下的干扰问题,通过由浅入深的指令链路,引导 LLM 像资深工程师一样精准、高效地完成软件开发全生命周期的任务。


2. 核心架构与功能设计

2.1 编译器与 LSP:从“报错”到“导航”

传统的错误信息是给人类看的,本方案要求编译器增加 --format=llm-json 输出模式。

  • LLM 诊断增强: 报错不仅包含错误行,还包含**“因果追溯链”**。
    • 例子: Rust 生命周期错误时,编译器输出不仅是报错,还附带一个 Skill 指令建议:call: get_borrow_checker_graph(scope_id)
  • AST 级代码重写指令: 减少 LLM 替换大规模代码块的 Token 浪费。
    • 提供 apply_refactoring(type: "rename/extract_interface", range: Range) 接口。LLM 只需发出指令,编译器执行精确重写。
  • 自动调用图 (Call Graph): 提供 get_project_structure(depth: 1)
    • 第一层返回:模块层级和核心数据结构定义。
    • 第二层(按需):特定函数的调用逻辑图。

2.2 在线文档中心:语义化的知识库

文档中心不再只是 HTML 页面,而是一个具备语义检索能力的 Knowledge RAG

  • 语法与案例查询: 当 LLM 不确定语法时(如 MoonBit 的 trait 实现),调用 search_syntax(keyword: "trait implementation")。返回最简化的语法模板和 2 个高质量代码示例。
  • 渐进式 API 探索:
    • list_api(namespace: "std::io"):仅返回函数名和单行简述。
    • describe_api(fn_name: "read_to_string"):返回详细 Doc comment、参数含义及设计意图。

2.3 在线模块仓库:生态系统的社交脑

  • 语义化搜索与对比: search_module(query: "高效的 JSON 解析器", filter: "no-std")
  • 模块“体检报告”: 提供 get_module_readme(crate_name)。LLM 可以快速理解模块是为了解决什么问题,避免引入错误的依赖。

3. 全生命周期推演:程序员与 LLM 的协作路径

第一阶段:项目初始化与感知 (Onboarding)

  1. 项目扫描: LLM 进入项目,自动读取 Cargo.tomlmoon.pkg.json
  2. 依赖画像: LLM 调用 registry_skill:analyze_deps()。系统返回依赖树的摘要,并提示:“发现项目使用 axum,是否需要拉取其核心 Middleware 模式的用法?”
  3. 环境配置: LLM 询问如何编译,编译器 Skill 返回当前环境最优的 check/build 命令。

第二阶段:需求分析与模块发现 (Discovery)

  1. 功能检索: 用户要求增加 WebAssembly 支持。LLM 调用语义搜索,发现 MoonBit 优秀的 Wasm 兼容性,并获取 moon_web 包的 README 和设计意图。
  2. 决策辅助: LLM 对比两个类似的库(如 serde vs miniserde),请求仓库给出“下载量趋势、最近 Bug 修复频率、LLM 友好度评分”。

第三阶段:渐进式编码 (Progressive Coding)

  1. 定义探测: 当编写代码需要用到某个类型时,LLM 不会盲目猜测,而是调用 lsp:peek_definition(symbol)
  2. 文档对齐: 发现定义中有 // Design Intent: This struct is thread-unsafe for performance...。LLM 自动调整生成的并发策略。
  3. 代码缩减编辑: LLM 不再输出 500 行代码,而是发送 skill:modify_ast(add_field, {struct: "User", field: "id: u64"})

第四阶段:错误修复与闭环 (Debugging & Feedback)

  1. 报错捕获: 编译器报错。LLM 自动调用 get_error_context
  2. 深度追踪: 如果报错涉及复杂 trait 嵌套,LLM 调用编译器生成的调用关系图,定位到具体的泛型约束冲突。
  3. 反馈上报: 发现是标准库或第三方库的 Bug。LLM 整理当前失败的测试用例(自动脱敏),询问用户:“发现 foo-lib 在处理空字符时有 Bug,是否一键提交 Issue 到该模块仓库?”

4. 上下文优化策略 (基于 Gemini Interactions 启发)

为了防止 LLM 在长对话中被过期的编译器报错或过大的文档内容淹没,我们实施以下渐进式策略:

  1. 状态快照 (State Checkpointing): 每次成功的编译后,清除之前的错误上下文。
  2. 分级披露 (Hierarchical Disclosure):
    • Level 1 (Namespace): 仅显示类型名。
    • Level 2 (Signatures): 显示函数签名和关键字段。
    • Level 3 (Implementation): 仅在 LLM 显式要求时显示函数体。
  3. 子代理协同 (Sub-agent Strategy):
    • 主 Agent 负责逻辑流转。
    • LSP Sub-agent: 专门处理 AST 修改和定义跳转。
    • Docs Sub-agent: 专门负责从文档库中提取最相关的 3 行示例。
    • Registry Sub-agent: 负责监控依赖版本更新和 Bug 报告。

5. 案例演示 (Example Scenarios)

案例一:修复 Rust 的 Borrow Checker 报错

  • 场景: LLM 写的 Rust 代码出现了 cannot borrow as mutable more than once
  • AI 行为:
    1. LLM 调用 compiler_skill:get_diagnostic()
    2. Skill 返回错误及:"tip": "Use 'inspect_borrows(line:45)' to see the lifecycle graph"
    3. LLM 执行 inspect_borrows,获取到一个文本化的图表,显示变量 s 在第 40 行被租借给了闭包。
    4. LLM 发现问题,通过 lsp_skill:refactor(move_closure, line:40) 自动将闭包移动到正确作用域。

案例二:在 MoonBit 中发现并使用新库

  • 场景: 用户想在 MoonBit 中实现一个加密算法。
  • AI 行为:
    1. LLM 执行 registry:search("SHA256 implementation")
    2. 仓库返回三个结果。LLM 选择第一个,并执行 registry:get_usage_example("crypto/sha256")
    3. Skill 返回:
      {
        "readme_intent": "Provide a high-performance SHA256 for Wasm target.",
        "quick_start": "let hash = @sha256.calculate(\"data\")",
        "next_steps": ["list_types", "list_functions"]
      }
      
    4. LLM 根据 quick_start 快速集成,并通过 list_functions 进一步发现支持 streaming update 功能,从而优化了大数据处理逻辑。

案例三:Bug 自动反馈与生态贡献

  • 场景: 在调用 moon test 时发现某个第三方 json 库在解析科学计数法时溢出。
  • AI 行为:
    1. LLM 生成一个脱敏后的最小复现用例(Minimal Reproducible Example)。
    2. LL: “我发现了 json-lib 的解析 Bug,这是测试用例 [code]。我可以帮你把它提交到 MoonBit 模块中心并关联该项目仓库吗?”
    3. 用户同意后,LLM 通过 registry:report_issue(pkg_id, issue_data) 完成上报。模块作者在后台收到了经过 AI 整理的、包含 AST 分析结果的精准 Bug Report。
1 个赞