这是一份关于在开发环境中让 AI 协助编写代码的技术文章,主要内容如下:
- 失败的做法:将相关文件粘贴到 Google Doc 中,发送链接给不了解代码库的软件工程师让其在文档中实现 PR,让 AI 做同样的事情也会失败。
- 设计准则:希望影子工作区实现 LSP 可用性(让 AI 看到修改后的代码提示、跳转定义等)和可运行性(能运行代码并看到输出),同时要满足独立性(不影响用户编码体验)、隐私性、并发性、通用性、可维护性和速度等要求。
- 实现 LSP 可用性的简单尝试及失败原因:尝试创建文件的副本让 AI 编辑和获取代码提示,但会导致一些独立性问题,如影响 Go 语言的命名空间范围和 Rust 语言的文件导入等,还考虑了其他一些失败的想法,如创建自己的语言服务器实例等。
- 当前影子工作区的实现:将影子工作区实现为一个隐藏窗口,当 AI 要获取代码提示时,在当前工作区创建一个隐藏窗口让 AI 在其中编辑并报告代码提示,此设置满足几乎所有要求,除了某些依赖于将代码写入磁盘的语言服务器(如
rust-analyzer
)。 - 实现可运行性的困难及尝试:运行代码需要将代码写入文件系统,不能在用户文件夹中创建影子窗口,尝试了简单的
cp -r
方法但速度很慢,还考虑了使用符号链接、硬链接和写时复制等方法,但都存在问题,真正想要的是内核级的文件夹代理,在 Linux 上可以使用 FUSE 实现,但在 macOS 和 Windows 上存在困难,如 macOS 没有内置的 FUSE 实现,第三方 FUSE 实现存在安装问题等。 - 开放问题:包括如何实现简单的代理文件夹、在 Windows 上的实现方式、在 macOS 上使用 DriverKit 模拟假 USB 设备、实现网络级独立性以及创建与用户本地工作区相同的远程工作区等问题。
总之,让 AI 在后台迭代代码的问题很复杂,需要不断探索和解决各种技术难题。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。