<!-- README.md는 README.Rmd에서 생성되었습니다. 해당 파일을 편집해 주세요 -->
mini007 <a><img src='https://raw.githubusercontent.com/feddelegrand7/mini007/HEAD/man/figures/mini007cute.png' align="right" height="200" /></a>
<!-- badges: start -->
CRAN
status
R
badge
metacran
downloads
metacran
downloads
<!-- badges: end -->
mini007은 다중 에이전트 AI 시스템을 구축하기 위한 경량의 확장 가능한 R 프레임워크입니다. 이 프레임워크를 사용하면 전문화된 LLM 기반(LLM-backed) 에이전트를 생성하고, 복잡한 작업을 분해하고 위임하는 리드 에이전트(lead agent)를 통해 이를 오케스트레이션(orchestrate)할 수 있으며, 최종적으로 Workflows라고 불리는 명시적인 순차 파이프라인으로 연결할 수 있습니다. 이 모든 것은 훌륭한 ellmer 패키지 위에 구축되었으며 해당 패키지가 지원하는 모든 채팅 모델과 호환됩니다.
주요 구성 요소 (Key components)
library(mini007)
retrieve_open_ai_credential <- function() {
...
Agent: 상태를 유지하는 LLM 기반 워커
Agent는 ellmer 채팅 객체를 래핑하고, 신원(identity), 영구적인 메시지 기록(persistent message history), 예산 추적(budget tracking), 그리고 도구 지원(tool support) 기능을 추가합니다.
researcher <- Agent$new(
name = "researcher",
instruction = "당신은 연구 조교입니다. 사실적인 질문에 간결하게 답변하세요.",
...
에이전트는 전체 대화 내용을 기억하므로, 후속 질문을 자연스럽게 수행할 수 있습니다:
researcher$invoke("그것의 인구는 무엇인가요?")
주요 기능:
- 지속 메모리 (Persistent memory):
$messages를 통해 전체 메시지 기록을 유지하며, $keep_last_n_messages()를 이용해 트리밍하고, $export_messages_history() / $load_messages_history()를 통해 내보내기/불러오기가 가능합니다.
- 컨텍스트 공유 (Context sharing):
$share_context_with(other_agent)를 사용하여 최근 메시지를 한 에이전트에서 다른 에이전트로 전달할 수 있습니다.
- 예산 제어 (Budget control):
$set_budget()을 통해 USD 지출 한도를 설정하고, $set_budget_policy()를 통해 정책("abort", "warn", 또는 "ask")을 선택할 수 있습니다.
- 도구 (Tools):
$register_tools()를 사용하여 ellmer 도구 객체를 등록하거나, 자연어 설명(natural-language description)을 이용해 $generate_and_register_tool()로 새로운 도구를 생성할 수 있습니다.
- R 코드 생성 (R code generation): 에이전트에게
$generate_execute_r_code()를 사용하여 R 코드를 작성하고, 검증하며, 선택적으로 실행하도록 요청할 수 있습니다.
- 응답 검증 (Response validation):
$validate_response()를 사용하여 에이전트의 출력을 특정 기준에 따라 검증합니다.
- 클로닝 (Cloning):
$clone_agent()를 사용하여 독립적인 복사본(새로운 UUID, 공유된 지침)을 가진 에이전트를 생성할 수 있습니다.
LeadAgent 다중 에이전트 오케스트레이션 (multi-agent orchestration)
LeadAgent는 Agent를 확장하여 복잡한 프롬프트를 하위 작업(subtasks)으로 분해하고, 각 작업을 가장 적합한 등록된 에이전트에게 자동으로 위임할 수 있는 기능을 제공합니다.
summariser <- Agent$new(
name = "summariser",
instruction = "Summarise text into three bullet points.",
...
주요 기능 (Key capabilities):
- 계획 생성 (Plan generation):
$generate_plan()을 실행하기 전에 어떤 에이전트가 어떤 하위 작업을 처리할지 미리 보여줍니다.
- 계획 시각화 (Plan visualisation):
$visualize_plan()을 사용하여 오케스트레이션(orchestration)을 방향성 그래프(directed graph)로 렌더링합니다.
- 브로드캐스팅 (Broadcasting): 등록된 모든 에이전트에게 동일한 프롬프트를 전송하고,
$broadcast()를 통해 모든 응답을 수집합니다.
- 판단/평가 (Judging): 리드 에이전트(lead agent)가 모든 등록된 에이전트로부터 가장 좋은 응답을 고르게 합니다. 이 기능은
$judge_and_choose_best_response()를 사용합니다.
- 에이전트 대화 (Agent dialog): 두 에이전트 간의 반복적인 협상(negotiation)을 수행하여 합의에 도달할 때까지 진행하며,
$agents_dialog()를 사용합니다.
- 인간 개입 루프 (Human In The Loop, HITL): 특정 단계에서 실행을 일시 중지시켜 사람이 응답을 검토하거나, 편집하거나, 또는 중단(abort)할 수 있게 합니다. 이 기능은
$set_hitl(steps)를 사용합니다.
Workflow 명시적 순차 파이프라인 (explicit sequential pipelines)
Workflow는 **스테이션(Stations)**들이 **경로(Routes)**로 연결된 미리 정의된 파이프라인을 구축할 수 있게 합니다. 각 스테이션의 출력은 다음 스테이션의 입력이 됩니다. LeadAgent와 달리, 실행 경로는 완전히 명시적이며(fully explicit), 사용자가 순서와 분기 논리(branching logic)를 제어합니다.
wf <- Workflow$new(name = "article-pipeline")
wf$add_station("research", Agent$new(
...
주요 기능:
- Mixed handlers: 스테이션은
Agent 객체, WorkflowAgent 객체 또는 일반 R function을 수용하여 LLM 호출과 결정론적 전처리/후처리 단계를 쉽게 혼합할 수 있습니다.
- Conditional routing:
add_route(from, to, condition)을 사용하면 이전 스테이션의 출력 함수에 따라 경로를 게이팅(gates) 할 수 있어 분기 파이프라인을 구현합니다.
- Caching:
use_cache = TRUE (기본값) 설정 시 각 스테이션의 결과는 (name, input)으로 저장됩니다. 동일한 입력을 다시 실행하면 캐시된 결과를 즉시 사용합니다. $clear_cache()를 사용하여 초기화할 수 있습니다.
- Human In The Loop (HITL):
$set_hitl(steps)는 지정된 단계에서 실행을 일시 중지하여, 인간이 출력을 검토하거나 편집하거나 다음 스테이션으로 흐르기 전에 중단할 수 있게 합니다.
- Wrapping as an agent:
$as_agent()는 모든 Workflow를 LeadAgent에 등록하거나 다른 Workflow 내의 스테이션으로 임베드될 수 있는 WorkflowAgent로 변환합니다.
- Visualisation:
$visualize()는 파이프라인을 DiagrammeR를 통해 대화형 방향 그래프로 렌더링합니다.
- Parallel execution:
$set_daemons() 및 $add_parallel_group()은 여러 독립적인 스테이션이 동시에 실행되도록 하여, 다중 에이전트 분석과 같은 독립적인 작업에 대해 2~4배의 속도 향상을 제공합니다.
스트리밍 (Streaming)
Agent, Workflow, 그리고 LeadAgent는 최종 답변이 준비될 때까지 차단(blocking)되는 대신 진행 상황을 모두 스트리밍할 수 있습니다. stream = TRUE는 토큰이 생성되는 즉시 출력하며, on_event 콜백은 중첩된 에이전트의 이벤트를 포함하여 유형화된 이벤트(토큰 델타, 도구 호출, 스테이션 및 작업 진행 상황, HITL 요청)를 받습니다. 반환 값은 스트리밍을 사용하지 않았을 때와 동일합니다.
researcher$invoke("Explain photosynthesis in two sentences.", stream = TRUE)
wf$run("The history of the printing press", on_event = function(event) {
...
on_event 내부에서 오류를 발생시키면 실행이 깔끔하게 취소됩니다. 전체 이벤트 참조는 Streaming article을 참고하십시오.
설치 (Installation)
mini007는 다음 명령어를 사용하여 CRAN에서 설치할 수 있습니다:
install.packages("mini007")
문서는 여기에서 확인할 수 있습니다.
행동 강령 (Code of Conduct)
mini007 프로젝트는 기여자 행동 강령 (Contributor Code of Conduct)과 함께 배포됩니다. 이 프로젝트에 기여하는 것은 해당 약관을 준수하는 것에 동의함을 의미합니다.