ITADN
tidyverse/ellmer
tidyverse/ellmer · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

ellmer ellmer website

Lifecycle:
experimental R-CMD-check

ellmer 让从 R 中使用大型语言模型(LLM)变得简单。它 支持多种 LLM 提供商,并实现了一系列丰富的功能,包括流式输出、工具/函数调用、结构化 数据提取等。

ellmer 是 Posit 创建的一系列 LLM 相关包之一:

  • 在 python 中寻找类似的东西?请查看 chatlas
  • 想要评估你的 LLM?请尝试 vitals
  • 需要 RAG?请查看 ragnar
  • 想要制作一个美观的 LLM 驱动聊天机器人?请考虑 shinychat
  • 正在使用 MCP?请查看 mcptools

安装

你可以从 CRAN 安装 ellmer:

install.packages("ellmer")

提供商

ellmer 支持多种模型提供商。官方提供商 得到积极维护,在错误修复和新 功能方面享有优先支持。社区提供商由 社区贡献和维护;欢迎提交改进它们的贡献。

官方提供商

  • Anthropic 的 Claude:chat_anthropic()
  • AWS Bedrock:chat_aws_bedrock()
  • Azure OpenAI:chat_azure_openai()
  • Databricks:chat_databricks()
  • DeepSeek:chat_deepseek()
  • Google Gemini/Vertex AI:chat_google_gemini()chat_google_vertex()
  • Ollama:chat_ollama()
  • OpenAI:chat_openai()
  • Posit AI:chat_posit()
  • Snowflake Cortex:chat_snowflake()chat_cortex_analyst()

社区提供商

  • Cloudflare:chat_cloudflare()
  • Groq:chat_groq()
  • Hugging Face:chat_huggingface()
  • LM Studio:chat_lmstudio()
  • Mistral:chat_mistral()
  • OpenRouter:chat_openrouter()
  • perplexity.ai:chat_perplexity()
  • Portkey:chat_portkey()
  • VLLM:chat_vllm()

提供商/模型选择

如果你在组织内使用 ellmer,你可能有内部 政策,限制你只能使用大型云提供商的模型, 例如 chat_azure_openai()chat_aws_bedrock()chat_databricks(), 或 chat_snowflake()

如果你出于个人探索目的使用 ellmer,你将拥有更多 自由度,因此我们有一些建议帮助你入门:

  • chat_openai()chat_anthropic() 是不错的起点。 chat_openai() 默认使用 GPT-5.4,但你可以使用 model = "gpt-5.4-nano" 来选择更便宜、更快的模型。 chat_anthropic() 默认使用 Claude Sonnet 4.6,我们发现 它在编写 R 代码方面表现尤为出色。

  • chat_google_gemini() 是一个强大的模型,提供免费层级(缺点是 你的数据会被 用于 改进模型),如果你不想花费任何钱,它是一个很好的起点。

  • chat_ollama(),它使用 Ollama,允许你 在自己的计算机上运行模型。虽然你能在本地运行的最大模型 不如最先进的托管模型,但它们 不会共享你的数据,并且实际上免费。

身份验证

身份验证根据提供商的不同而略有不同。 一些流行的提供商(包括 OpenAI 和 Anthropic)要求你获取 一个 API 密钥。我们建议你将其保存在环境变量中,而不是 直接在代码中使用它,并且如果你部署了一个使用 ellmer 的应用或报告 到另一个系统,你需要确保该 环境变量在那里也可用。

ellmer 还会自动检测许多由大型云提供商使用的基于 OAuth 或 IAM 的 凭据(目前 chat_azure_openai()chat_aws_bedrock()chat_databricks()chat_snowflake())。这包括由 Posit WorkbenchPosit Connect 管理的这些平台的凭据。

如果你发现 ellmer 无法从这些云提供商之一检测凭据的情况, 请随时提交一个 issue;如果需要,我们很乐意添加 更多的身份验证机制。

使用 ellmer

你可以以几种不同的方式使用 ellmer,具体取决于 你是交互式工作还是编程式工作。它们都以 创建一个新的聊天对象开始:

library(ellmer)

chat <- chat_openai("Be terse", model = "gpt-4o-mini")

聊天对象是有状态的 R6 对象:它们 保留对话的上下文,因此每个新查询都建立在 之前的查询之上。你使用 $ 调用它们的方法。

交互式聊天控制台

使用 ellmer 最具交互性且最少编程性的方式是 在 R 控制台或浏览器中通过 live_console(chat)live_browser() 直接进行聊天:

live_console(chat)
#> ╔════════════════════════════════════════════════════════╗
#> ║  Entering chat console. Use """ for multi-line input.  ║
#> ║  Press Ctrl+C to quit.                                 ║
#> ╚════════════════════════════════════════════════════════╝
#> >>> Who were the original creators of R?
#> R was originally created by Ross Ihaka and Robert Gentleman at the University of
#> Auckland, New Zealand.
#>
#> >>> When was that?
#> R was initially released in 1995. Development began a few years prior to that,
#> in the early 1990s.

请记住,chat 对象会保留状态,因此当你进入 chat 控制台时,与该 chat 对象之前的任何交互仍然是对话的一部分,而你在 chat 控制台中进行的任何交互在你退出并返回到 R 提示符后都会持续存在。无论你使用哪个 chat 函数,这都是正确的。

交互式方法调用

第二种最具交互性的聊天方式是调用 chat() 方法:

chat$chat("What preceding languages most influenced R?")
#> R was primarily influenced by:
#> 
#> 1. **S** - The predecessor to R, which introduced many foundational concepts.
#> 2. **Scheme** - A dialect of Lisp that influenced R's functional programming 
#> aspects.
#> 3. **Fortran** - Influenced R's efficiency and mathematical capabilities.
#> 4. **C** - Impacted R's performance and low-level programming features.
#> 
#> These languages contributed to R's design and functionality in statistics and 
#> data analysis.

如果在全局环境中初始化聊天对象,chat 方法会将响应流式传输到控制台。当整个响应 接收完毕后,它也会(不可见地)作为字符向量返回。 这在您希望看到响应到达时的情况,但不想进入聊天控制台时很有用。

如果您想询问关于图像的问题,您可以使用 content_image_file() 和/或 content_image_url() 传递一个或多个额外的输入参数:

chat$chat(
  content_image_url("https://www.r-project.org/Rlogo.png"),
  "Can you explain this logo?"
)
#> The logo features a stylized letter "R" within a circular shape. The design 
#> reflects the programming language R, which is widely used for statistical 
#> analysis and data visualization. The circular element suggests continuity and 
#> completeness, while the bold "R" emphasizes its identity. Overall, the logo 
#> conveys modernity and practicality, aligning with R's functionality in data 
#> science.

流式传输与捕获

在大多数情况下,ellmer 会将输出流式传输到控制台。你可以通过在创建聊天对象时或调用 $chat() 时设置 echo 参数来控制此行为。将 echo = "none" 设置为返回字符串:

my_function <- function() {
  chat <- chat_openai("Be terse", model = "gpt-4o-mini", echo = "none")
  chat$chat("What is 6 times 7?")
}
str(my_function())
#>  'ellmer_output' chr "6 times 7 is 42."

如有需要,你可以使用 echo 参数手动控制此行为。当结果不打算供人类阅读,或者你希望在显示之前处理响应时, 这在用 ellmer 进行编程时非常有用。

了解更多

ellmer 附带了一系列 vignettes,帮助你深入学习:

  • vignette("ellmer") 中学习关键术语并查看示例用例。
  • vignette("prompt-design") 中学习如何设计你的提示词。
  • vignette("tool-calling") 中了解工具/函数调用。
  • vignette("structured-data") 中学习如何提取结构化数据。
  • vignette("streaming-async") 中了解流式和异步 API。