这个文档是 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)。
- 例子: Rust 生命周期错误时,编译器输出不仅是报错,还附带一个 Skill 指令建议:
- 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)
- 项目扫描: LLM 进入项目,自动读取
Cargo.toml或moon.pkg.json。 - 依赖画像: LLM 调用
registry_skill:analyze_deps()。系统返回依赖树的摘要,并提示:“发现项目使用axum,是否需要拉取其核心 Middleware 模式的用法?” - 环境配置: LLM 询问如何编译,编译器 Skill 返回当前环境最优的
check/build命令。
第二阶段:需求分析与模块发现 (Discovery)
- 功能检索: 用户要求增加 WebAssembly 支持。LLM 调用语义搜索,发现 MoonBit 优秀的 Wasm 兼容性,并获取
moon_web包的 README 和设计意图。 - 决策辅助: LLM 对比两个类似的库(如
serdevsminiserde),请求仓库给出“下载量趋势、最近 Bug 修复频率、LLM 友好度评分”。
第三阶段:渐进式编码 (Progressive Coding)
- 定义探测: 当编写代码需要用到某个类型时,LLM 不会盲目猜测,而是调用
lsp:peek_definition(symbol)。 - 文档对齐: 发现定义中有
// Design Intent: This struct is thread-unsafe for performance...。LLM 自动调整生成的并发策略。 - 代码缩减编辑: LLM 不再输出 500 行代码,而是发送
skill:modify_ast(add_field, {struct: "User", field: "id: u64"})。
第四阶段:错误修复与闭环 (Debugging & Feedback)
- 报错捕获: 编译器报错。LLM 自动调用
get_error_context。 - 深度追踪: 如果报错涉及复杂 trait 嵌套,LLM 调用编译器生成的调用关系图,定位到具体的泛型约束冲突。
- 反馈上报: 发现是标准库或第三方库的 Bug。LLM 整理当前失败的测试用例(自动脱敏),询问用户:“发现
foo-lib在处理空字符时有 Bug,是否一键提交 Issue 到该模块仓库?”
4. 上下文优化策略 (基于 Gemini Interactions 启发)
为了防止 LLM 在长对话中被过期的编译器报错或过大的文档内容淹没,我们实施以下渐进式策略:
- 状态快照 (State Checkpointing): 每次成功的编译后,清除之前的错误上下文。
- 分级披露 (Hierarchical Disclosure):
- Level 1 (Namespace): 仅显示类型名。
- Level 2 (Signatures): 显示函数签名和关键字段。
- Level 3 (Implementation): 仅在 LLM 显式要求时显示函数体。
- 子代理协同 (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 行为:
- LLM 调用
compiler_skill:get_diagnostic()。 - Skill 返回错误及:
"tip": "Use 'inspect_borrows(line:45)' to see the lifecycle graph"。 - LLM 执行
inspect_borrows,获取到一个文本化的图表,显示变量s在第 40 行被租借给了闭包。 - LLM 发现问题,通过
lsp_skill:refactor(move_closure, line:40)自动将闭包移动到正确作用域。
- LLM 调用
案例二:在 MoonBit 中发现并使用新库
- 场景: 用户想在 MoonBit 中实现一个加密算法。
- AI 行为:
- LLM 执行
registry:search("SHA256 implementation")。 - 仓库返回三个结果。LLM 选择第一个,并执行
registry:get_usage_example("crypto/sha256")。 - Skill 返回:
{ "readme_intent": "Provide a high-performance SHA256 for Wasm target.", "quick_start": "let hash = @sha256.calculate(\"data\")", "next_steps": ["list_types", "list_functions"] } - LLM 根据
quick_start快速集成,并通过list_functions进一步发现支持streaming update功能,从而优化了大数据处理逻辑。
- LLM 执行
案例三:Bug 自动反馈与生态贡献
- 场景: 在调用
moon test时发现某个第三方json库在解析科学计数法时溢出。 - AI 行为:
- LLM 生成一个脱敏后的最小复现用例(Minimal Reproducible Example)。
- LL: “我发现了
json-lib的解析 Bug,这是测试用例 [code]。我可以帮你把它提交到 MoonBit 模块中心并关联该项目仓库吗?” - 用户同意后,LLM 通过
registry:report_issue(pkg_id, issue_data)完成上报。模块作者在后台收到了经过 AI 整理的、包含 AST 分析结果的精准 Bug Report。