The moderator puts each question to the group; every participant answers (speaking order rotates across questions so nobody speaks first every round); participants see the discussion so far, as in a real group. The moderator closes with a synthesis of themes and disagreements.
Usage
focus_group(
moderator,
participants,
topic,
questions = NULL,
n_questions = 3L,
msg_mode = NULL,
quiet = FALSE,
...
)Arguments
- moderator
An Agent running the group.
- participants
A list of Agents.
- topic
The study topic (context for everyone).
- questions
Character vector of questions. If NULL, the moderator drafts
n_questionsitself, which is useful for piloting.- n_questions
Number of questions to draft when
questionsis NULL.- msg_mode
Message construction,
"roleflip"(default) or"flat";NULLusesgetOption("LLMRagent.msg_mode"). Seeconversation().- quiet
FALSE prints the session live.
- ...
Passed to the underlying LLMR calls.
Value
An object of class agent_focus_group: a list with transcript
(tibble: turn, question_id, speaker, text), questions,
summary (the moderator's synthesis), and topic. as.data.frame()
returns the transcript.
Examples
if (FALSE) { # \dontrun{
cfg <- LLMR::llm_config("groq", "openai/gpt-oss-20b", temperature = 0.9)
fg <- focus_group(
moderator = agent("Moderator", cfg, persona = "A neutral focus-group moderator."),
participants = list(
agent("Maya", cfg, persona = "A 34-year-old nurse, prudent with money."),
agent("Tom", cfg, persona = "A 22-year-old gig worker, risk-tolerant."),
agent("Ines", cfg, persona = "A 58-year-old teacher nearing retirement.")
),
topic = "Attitudes toward a 4-day work week",
questions = c("What would a 4-day week change in your daily life?",
"What worries you about it?")
)
fg$summary
} # }