시그널 구동 ReAct Skill (SPEC §5, M4 — 도그푸딩 2표본에서 추출).
DocsAgent(Grounded Q&A)와 SummarizeAgent(Transform)의 공통 골격을 4개 파라미터로 추출한 것이다. 두 에이전트의 차이는 (라우트, 툴, 시스템 프롬프트, 입력 키)뿐이고 나머지(react 그래프, 비블로킹 실행, 직렬 큐, crash-only, 결과 리포팅)는 동일하다.
defmodule MyAgent do
use ElGraph.Skills.SignalReAct,
route: "question.*", # 이 패턴의 시그널만 처리
input_key: :question, # signal.data에서 사용자 텍스트를 꺼낼 키
tools: [MyApp.SearchAction], # Action 모듈 목록 (런타임 :tools로 MCP 추가 가능)
system: "너는 ...",
reply_tag: :answer, # reply_to에 {reply_tag, %{answer:, usage:}} 전송
budget: [tokens: 100_000]
end
{:ok, _} = MyAgent.start_link(llm: {ElGraph.LLM.OpenAI, api_key: key}, id: "a1",
reply_to: self(), rate_limiter: MyLimiter):thread(:per_request | {:fixed, id})와 :checkpointer는 ElGraph.Agent로 그대로 전달된다.
결과 reply가 usage를 포함하므로 비용 관측이 가능하다 (도그푸딩 마찰 3 해소).