乐于分享
好东西不私藏

从AI编码助手获取更好R代码的10个技巧

从AI编码助手获取更好R代码的10个技巧

通过正确的设置和指导,你可以让Claude Code、Codex、Posit Assistant等编程助手像专业人士一样编写R代码。以下是具体方法。

大多数生成式AI工具对R语言的了解不如JavaScript和Python等语言,这得益于每种语言可用的训练数据量。然而,通过一些额外的设置,你可以为大型语言模型(LLM)提供所需的知识,以提升其R技能。

以下是帮助生成式AI像专业人士一样编写R代码的10种方法。

一、使用编码代理

AI编码代理比通用聊天机器人拥有更强的功能、更高的灵活性和更专注于编程的工具。

Anthropic的Claude Code和OpenAI的Codex代理有运行在终端、IDE扩展程序、桌面和移动应用以及其他集成中的版本。

R用户可能还对Posit的Posit Assistant感兴趣,它专为R和Python的数据分析而设计。与通用编码代理相比,它对R的设置要求更低,并且内置了更多关于数据科学、R包开发和Shiny应用程序的知识。此外,默认情况下它可以读取你的R和Python环境中的对象,在某些情况下这会很有用(尽管如果你处理敏感数据可能不适用)。Posit Assistant有适用于RStudio、Positron IDE和终端的版本。

注意:Posit Assistant不同于去年posit::conf()大会上展示的旧版Positron Assistant。旧版助手最终将被Posit Assistant取代。Posit Assistant预装在RStudio中但未预先激活,因此你不需要使用它,除非你想使用。

谷歌在此领域的原始产品Gemini CLI将于6月18日起停用,取而代之的是新的“Antigravity CLI”。

其他带有内置代理的IDE平台包括Cursor和Windsurf,以及终端+订阅制编码代理如4月开源的Warp。

你在工作中可能受到雇主允许使用的限制,但仍可以使用公开数据进行自己的实验——然后如果另一个代理更能满足你的需求,可以游说引入新代理。不管你选择什么,从基于网络的聊天机器人转向这些代理应该能产生更好的代码。

宾夕法尼亚大学沃顿商学院生成式AI实验室联合主任埃森·莫利克(Ethan Mollick)表示:“从聊天机器人转向代理是自ChatGPT推出以来人们使用AI方式的最重要变化。”

二、创建 CLAUDE.md、AGENTS.md 或 GEMINI.md 知识文件

每次启动会话时,所有主要编码代理都会查找知识文件进行加载,你可以轻松编辑这些文件。这些文件可以包含你掌握的各种语言的熟练程度以及你喜欢如何记录项目等内容。例如,我会告诉我的 LLM 在每个项目中都包含 README.md,其中有关于如何使用项目的说明以及项目编码的技术信息。

大多数编码工具都允许你有一个全局主文件,该文件会在每个会话中加载,以及每个项目的附加文件。

如果你要将 Claude 或 Codex 添加到现有代码库中,/init 斜杠命令会在扫描和分析代码后创建其中一个 .md 项目文件。你也可以要求 LLM 对你进行访谈,以创建或添加到这些文件中。

Claude Code 会在 ~/.claude/CLAUDE.md 查找用户级别的主 CLAUDE.md 文件,然后在 ./CLAUDE.md 或 ./.claude/CLAUDE.md 查找项目级别的文件。/memory 斜杠命令会显示这些文件的位置。Codex 使用 AGENTS.md 文件。Antigravity 文档指出,它会查找全局主 GEMINI.md 文件以及工作目录中的 GEMINI.md 和/或 AGENTS.md 文件。

根据文档,Positron Assistant 会读取工作区根目录中的 AGENT.md、AGENTS.md、POSITRON.md、CLAUDE.md、GEMINI.md 和 LLMS.txt。

三、使用代理技能

代理技能可以将 R 知识存在疑问的 LLM 转变为理解你希望它如何编写代码的专家。你可以开发自己的技能,与 LLM 合作创建技能,或下载他人编写的技能。Claude 甚至有一个帮助你构建技能的技能。这是停止反复重复相同指令的最佳方法之一。相反,LLM 会通过在需要时加载它们来“记住”技能文件中的内容。

上面提到的知识 .md 文件和技能有什么区别?我喜欢将 CLAUDE.md 或 AGENTS.md 文件视为始终可用的重要背景信息,而技能则是特定时间有用的更具体指令。或者,正如 Claude Opus 4.7 所说:“技能用于触发工作流(‘当用户询问 X 时,执行 Y’)。适用于每个项目的固定规则不是基于触发的;而是我应该始终遵循的指令。” 固定规则应放在 CLAUDE.md 中。

根据 Anthropic 的 Claude Code 文档,“当你不断将相同的指令、清单或多步骤程序粘贴到聊天中,或当 CLAUDE.md 中的某部分已发展为程序而非事实时,创建一个技能。” “与 CLAUDE.md 内容不同,技能正文仅在使用时加载,因此长参考材料在需要之前几乎不产生成本。” 仅在每个会话开始时加载技能描述,以便 LLM 了解可用的技能。

Anthropic 于 2025 年 10 月为 Claude 创建了技能,几个月后将其概念作为开放标准发布。现在大多数编码代理都使用技能。

如果想尝试构建自己的技能,Anthropic 提供了易于遵循的自定义技能创建指南。

Posit Assistant 内置了多个与 R 相关的技能,并允许用户添加更多技能。你可以在此处找到它们。

如果你不使用 Posit Assistant,可以将 Posit 开发的技能添加到其他编码代理中。Posit 在 GitHub 上发布了一个包含技能的仓库,用于创建 R 包、Shiny 应用和 Quarto 文档;用于创建和解决 GitHub 拉取请求;用于开源 R 和 Python 包发布;用于代码审查(R、Python、JavaScript/TypeScript、SQL);以及用于为代码库创建架构文档。

四、阅读并编辑你下载的技能文件

技能本质上只是一个包含一个或多个带有结构化YAML头部的Markdown文本文件的文件夹,该文件夹还可以包含可选的资源和脚本。技能说明文件易于阅读和编辑,因此你可以确保它们按你的需求工作,并根据需要进行调整。

例如,Claude帮助我编写了定制的R技能。Claude倾向于使用tidyverse包,但我还很喜欢其他许多包,比如data.table。我确保R技能了解我的包偏好以及在何种情况下更喜欢使用每个包。

如果你的首选流程发生变化,请记得更新相关技能。或者,可以请LLM为你更新。保持技能最新将使你的编码代理更有用。

同时也要保持你的CLAUDE.md或AGENTS.md文件更新。也许你最初创建的CLAUDE.md文件中提到你是有经验的Python程序员,正在学习R。三个月后,你可能想更新自己的R技能水平。或者,或许你在AGENTS.md文件中表示喜欢充分注释的代码,但现在更倾向于简洁风格。你可能希望不时让编码代理与你一起审阅这些文件,询问主要要点以及是否需要更新。

五、使用 btw R 包及其 MCP 服务器

当大型语言模型(LLM)基于训练数据中过时的 R 包版本编写代码,或对相对较新的包一无所知时,这会令人沮丧。btw 通过让您的编码代理访问系统上安装的所有 R 包的信息来解决这个问题。这意味着它可以基于您特定的 R 环境编写代码。此外,btw 还允许 LLM 通过 Model Context Protocol(MCP)服务器访问您当前 R 环境中的变量。

MCP 服务器是 LLM 访问外部数据的标准方式——在此情况下,即您的运行中的 R 会话(外部不一定指云服务)。与技能类似,MCP 由 Anthropic 创建为开放标准,并已被大多数主要 AI 平台采用。btw R 包包含一个 MCP 服务器,您可以为 Claude Code 安装它,方法是在终端窗口(而非 R 控制台)中运行以下代码。

claude mcp add -s \"user\" r-btw -- Rscript -e \"btw::btw_mcp_server()\

btw 内置了许多工具。将工具过度加载到可能永远不会使用的 LLM 中并不是个好主意。如果您只想注册 btw 工具以访问您的 R 会话和查找包文档,可以改用以下命令:

claude mcp add -s \"user\" r-btw -- Rscript -e \"btw::btw_mcp_server(tools = btw::btw_tools('btw_tool_run_r', 'docs', 'env'))\

您只需执行一次此操作。

要将 Claude Code 连接到您的开放 R 会话,还需要在每个新的 R 会话中运行 btw::btw_mcp_session()。(有时我会忘记这部分,直到困惑于为什么 Claude 无法读取我的 R 变量,甚至看不到我安装了哪些包。)

六、为你的项目使用计划模式

我再怎么强调这一点都不为过。就像人类在开始实施项目前制定计划会受益一样,大型语言模型(LLMs)在生成代码前梳理计划也会受益。此外,在某些情况下,与大型语言模型一起“头脑风暴”结构和功能、向它询问替代方案,甚至让另一个大型语言模型在实施前审查计划,都可能很有用。

Anthropic 建议从计划模式开始。“让 Claude 直接跳转到编码可能会产生解决错误问题的代码。使用计划模式将探索与执行分开”,他们在最佳实践文档中写道。

Claude、Codex、Gemini 和 Posit Assistant 的命令行界面(CLI)版本都提供了计划模式,可通过 /plan 斜杠命令激活。

七、确保你的编程助手从错误中学习

这是我读到的最好建议之一:如果你的编程助手犯了错误,你们一起修复它时,请务必保存这个记忆,以避免再次犯同样的错误。

你的助手可能有一个自动记忆系统来完成其中一些工作,但你也可以指示任何编程助手为每个项目单独保留一个“经验教训”文件,或者询问它如何确保不再重复犯同样的错误。这并非万无一失,就像你不能保证大型语言模型会遵循CLAUDE.md或AGENTS.md文件中的所有规则,或技能中的所有步骤一样。但这确实大大减少了我的助手反复犯同样错误的情况。

八、让您的代理编写测试并进行代码审查

由编码代理执行的测试和代码审查不能替代人工检查软件是否正常工作。每当任务重要时,请亲自审查大型语言模型(LLM)的结果!然而,代理生成的测试仍然是预防一些问题和减少您作为LLM调试伙伴所花费时间的好方法。如果您不知道从何入手来帮助您的代理了解如何测试和审查代码,请参阅Posit的testing-r-packages和critical-code-reviewer技能。您的代理可能还内置了代码审查技能,例如Claude Code的/code-reviewslash命令。

代码审查技能可来自多个来源。例如,Sentry在其仓库中提供了一项代码审查技能。它专门针对其项目的需求而设计,可以作为类似技能的有用示例。Superpowers是一套流行的通用编程技能,被宣传为“基于一组可组合的技能和一些初始指令构建的完整软件开发方法论,确保您的代理使用它们”。我本人不使用Superpowers,但考虑到它在GitHub上拥有超过227,000颗星标和20,000个分支,显然有很多其他人确实在使用它。

另一个建议:几位专家建议使用不同的大型语言模型——甚至来自不同提供商的模型——来进行代码审查,因为每个模型都有其自身的优势和劣势。

九、养成良好的通用提示习惯不可忽视

无论使用何种编程语言,清晰表达都能提升输出质量。请保持请求的针对性,不要期望大语言模型能读懂你的心思。OpenAI在其开发者文档中提到:“当将复杂任务分解为更小、更集中的步骤时,Codex的表现会更好。较小的任务更容易被Codex测试和由你进行审查。如果不确定如何拆分任务,请让Codex提出计划。” 谷歌在《使用AI代码助手的最佳五项实践》中建议:“花时间让你的提示尽可能相关,就像帮助新同事规划任务时一样。考虑为了让人成功完成任务需要分享哪些细节,并将所有这些细节提供给你的AI工具。” 

此外,不要将上下文窗口加载到大语言模型公布的限制值。随着接近最大令牌限制,性能往往会下降。

十、充分利用开源大型语言模型(LLMs),尤其是当你拥有预算和令牌限制时

像Claude、GPT或Gemini这样的前沿LLMs可能永远无法被运行在台式计算机上的小型开源权重模型所匹敌。但对于许多R代码任务来说,它们并不需要做到这一点。

要了解一个LLM编写R代码的能力如何,它应该具备与Claude Code、Codex或Posit Assistant为大型LLMs提供的相同类型的框架。“框架才是产品本身,”AI教育公司Sidecar的Mallory Mejias认为,“模型是其中的引擎——很重要,但越来越可互换。”我不完全同意这一点,因为我仍然认为LLM是这个方程中的关键部分,且不同模型之间存在差异。但同一个LLM的表现会因所使用的工具和上下文而有所不同。

Posit最近将Google的开源Gemma 4 26B模型添加到了Assistant现有的大型闭源LLMs选项中。Posit高级软件工程师Simon Couch在Posit博客上写道:“在此之前,这类大小的模型(足以在高端消费级笔记本电脑上舒适运行)一直在我们的关注范围内,但尚未具备驱动像Posit Assistant这样的代理框架的能力。‘过去几个月,随着Gemma 4等模型的发布,这种情况发生了变化。’然而,在RStudio的Posit Assistant中使用它时,你仍然需要通过Posit AI订阅来运行,而不是本地运行。它消耗的预算仅为使用Claude Sonnet进行相同会话的十分之一。

有几个项目可以使用Claude Code来运行本地LLMs。Ollama是一个用于本地运行LLMs的开源软件,可以通过终端命令`ollama launch claude --model`实现,例如:

ollama launch claude --model gemma4:26b

开源框架Unsloth(用于运行和训练模型)的开发者表示,由于缓存失效问题,在Claude Code中运行本地LLMs可能会非常慢。他们建议通过在`~/.claude/settings.json`的“env”部分下添加“CLAUDE_CODE_ATTRIBUTION_HEADER” : "0"来解决此问题。

Unsloth也可以使用Claude Code来运行本地模型,但安装和设置过程比Ollama稍微复杂一些。

开源编码代理Open Code运行来自OpenAI、Anthropic、Google、Kimi、阿里巴巴Qwen等的LLMs。与我尝试过的其他商业支持的命令行工具相比,我尚未完全接受它,但它拥有174,000个GitHub星标,显然有很多用户。

AI顾问Thomas Wiegold从Claude切换到Open Code后表示:“OpenCode涵盖了我日常工作流程中的所有需求。它速度快,供应商灵活性是真正有用的而非理论上的,TUI对于长时间会话更友好……话虽如此,我不会假装一切都一帆风顺。”他指出了一些稳定性问题以及今年早些时候的一个远程代码执行漏洞。

Wiegold的建议是:“两者都安装。尝试其他工具。保持灵活。”

总结

大型语言模型仍然是不完美且不可预测的工具,但它们正在迅速改进——它们周围的框架也是如此。即使是商业编码代理中的前沿LLMs,有时也会忽略指令,否则会以令人不快的方式出人意料地表现。然而,如果你使用编码代理、花时间用优质指令设置它们,并记住良好的提示技巧,你生成高质量代码的机会将大大增加。祝你好运!

编码代理信息

Claude Code——Anthropic的编码代理可通过终端、IDE扩展程序、桌面应用、移动应用、Slack应用以及可直接在GitHub仓库中运行的云版本使用。作为首个突破性的编码代理,它现在提供优雅的远程控制选项:您可以在桌面端启动会话,然后在手机或平板上继续。尽管专为Claude大语言模型设计,但您可以通过Ollama或Unslope Studio等工具运行本地大语言模型。当使用Claude模型时,其提供的使用量通常低于其他供应商的选项。Anthropic已在GitHub上发布了终端版代码,使用受Anthropic商业服务条款约束。您可以按API付费使用Claude Code,也可将其作为Claude订阅的一部分。

Codex——OpenAI针对Claude Code推出的解决方案可通过终端、应用、IDE扩展程序或云服务使用,并集成了GitHub、Slack和Linear。CLI工具基于Apache许可证开源,在GitHub上提供,支持通过API按使用付费或作为ChatGPT订阅的一部分使用。

Posit Assistant——Posit(原RStudio)的编码代理旨在用于R和Python的数据工作,但Posit高级软件工程师Simon Couch告诉我,它也适用于其他用途和其他编程语言的工作。该代理可用于RStudio IDE(通过RStudio中的Posit AI订阅)、Positron IDE以及独立的CLI终端应用,不过当前CLI工具的功能似乎不如IDE集成丰富(这可能会改变)。截至本文撰写时,您还可以在Positron中使用来自Anthropic、OpenAI和Snowflake Cortex的API密钥以及GitHub Copilot账户。Couch表示,Posit Assistant正在频繁更新。如果您一两个月前测试过它,现在它的功能会更多。

Antigravity CLI——Google的基于终端的工具将于本月取代Gemini CLI,成为未付费用户和Google One用户的默认选择。此外还有Antigravity IDE、SDK以及用于编排多个代理的平台。Antigravity的一个优势是:Google提供免费计划,可访问Gemini 3.5 Flash、Gemini 3.1 Pro、Gemini 3 Flash、Claude Sonnet 4.6、Claude Opus 4.6和gpt-oss-120b模型,并提供所谓的“慷慨”但未明确定义的每周速率限制,具体取决于“我们的容量程度”。