OpenAI provides a number of chat-based models, mostly under the ChatGPT brand. Note that a ChatGPT Plus membership does not grant access to the API. You will need to sign up for a developer account (and pay for it) at the developer platform.
Usage
chat_openai(
system_prompt = NULL,
base_url = "https://api.openai.com/v1",
api_key = openai_key(),
model = NULL,
params = NULL,
seed = lifecycle::deprecated(),
api_args = list(),
echo = c("none", "output", "all")
)
models_openai(base_url = "https://api.openai.com/v1", api_key = openai_key())
Arguments
- system_prompt
A system prompt to set the behavior of the assistant.
- base_url
The base URL to the endpoint; the default uses OpenAI.
- api_key
API key to use for authentication.
You generally should not supply this directly, but instead set the
OPENAI_API_KEY
environment variable. The best place to set this is in.Renviron
, which you can easily edit by callingusethis::edit_r_environ()
.- model
The model to use for the chat (defaults to "gpt-4.1"). We regularly update the default, so we strongly recommend explicitly specifying a model for anything other than casual use. Use
models_openai()
to see all options.- params
Common model parameters, usually created by
params()
.- seed
Optional integer seed that ChatGPT uses to try and make output more reproducible.
- api_args
Named list of arbitrary extra arguments appended to the body of every chat API call. Combined with the body object generated by ellmer with
modifyList()
.- echo
One of the following options:
none
: don't emit any output (default when running in a function).output
: echo text and tool-calling output as it streams in (default when running at the console).all
: echo all input and output.
Note this only affects the
chat()
method.
Value
A Chat object.
See also
Other chatbots:
chat_anthropic()
,
chat_aws_bedrock()
,
chat_azure_openai()
,
chat_cloudflare()
,
chat_cortex_analyst()
,
chat_databricks()
,
chat_deepseek()
,
chat_github()
,
chat_google_gemini()
,
chat_groq()
,
chat_huggingface()
,
chat_mistral()
,
chat_ollama()
,
chat_openrouter()
,
chat_perplexity()
,
chat_portkey()
Examples
chat <- chat_openai()
#> Using model = "gpt-4.1".
chat$chat("
What is the difference between a tibble and a data frame?
Answer with a bulleted list
")
#> - **Printing**:
#> - *Tibble*: Prints only the first 10 rows and as many columns as fit
#> on the screen, making output more readable.
#> - *Data frame*: Prints the entire data set, which can overwhelm the
#> console with large datasets.
#>
#> - **Column types**:
#> - *Tibble*: Keeps column types consistent (e.g., never converts
#> strings to factors automatically).
#> - *Data frame*: Converts character vectors to factors by default
#> unless `stringsAsFactors = FALSE` is specified.
#>
#> - **Subsetting**:
#> - *Tibble*: Always returns a tibble when subsetting, even if there
#> is only one column.
#> - *Data frame*: May return a vector or a data frame depending on how
#> you subset, which can lead to inconsistent results.
#>
#> - **Column names**:
#> - *Tibble*: Allows non-syntactic names (e.g., names with spaces or
#> starting with numbers) without modification.
#> - *Data frame*: Modifies column names to be syntactically valid in R
#> (e.g., replaces spaces with dots).
#>
#> - **Recycling rules**:
#> - *Tibble*: Stricter recycling rules—only allows recycling of length
#> 1 vectors when adding new columns.
#> - *Data frame*: More permissive and may recycle vectors of other
#> lengths, which can cause unintended results.
#>
#> - **Package**:
#> - *Tibble*: Provided by the **tibble** package (part of the
#> tidyverse).
#> - *Data frame*: Base R data structure.
#>
#> - **Row names**:
#> - *Tibble*: Does not have row names.
#> - *Data frame*: Can have row names.
chat$chat("Tell me three funny jokes about statisticians")
#> Sure! Here are three funny jokes about statisticians:
#>
#> 1.
#> Why did the statistician bring a ladder to the bar?
#> Because he heard the drinks were on the house!
#>
#> 2.
#> A statistician can have their head in an oven and their feet in a
#> freezer, and they'll say, "On average, I'm comfortable."
#>
#> 3.
#> How do you tell the difference between a mathematician and a
#> statistician?
#> If you ask them to jump out of an airplane, the statistician will say,
#> "What's the sample size?"