협력적 연구 군체

협력적 연구 군체

협력적 연구 군체는 병렬로 연구를 진행하기 위한 아키텍처이다.

  • 독립적인 연구자들이 가설 그래프를 연구한다.
  • 작업자들은 군체우두머리가 관리하는 군체문헌으로 발견을 공유한다.
  • 작업자들은 우선순위가 매겨진 프론티어에서 일을 가져간다.

영감

Andrej Karpathy의 autoresearch에서 시작했다. Karpathy의 Autoresearch에서는 에이전트가 학습 코드를 고치고 5분짜리 실험을 돌리고 그 변경을 남기거나 버리고 다시 반복한다. 협력적 연구 군체는 그 루프 바깥에 경쟁적 가설, 병렬 연구실, 공유 지식, 전역 스케줄링과 같은 개선 사항들을 추가한다.

또한 OpenAI의 The Hugging Face incident and the road ahead (2026년 8월 26일)에서도 영감을 받았다. OpenAI는 평가 에이전트가 무단 게시판에 발견을 모아 두고 정보를 주고받고 일을 나누고 다른 에이전트가 시작한 조사를 이어갔다고 적었다.

공유 상태

공유 상태를 기록하는 것은 군체우두머리뿐이다. 작업자는 학계의 논문처럼 결과를 묶어 제출한다. 군체우두머리가 군체문헌을 작성하고 최종 연구 스케줄 우선순위를 정한다.

  • 연구 그래프란 가설, 출처, 방법, 결과, 증거, 부모 링크, 시작 가중치 링크, 실행 이력을 기록하는 그래프를 뜻한다.
  • 군체문헌이란 연구에서 발견된 과학적 특이사항들을의 집합체를 뜻한다.
  • 프론티어란 아직 가져가지 않았고 지금 돌릴 수 있는 일이 스케줄 순으로 쌓이는 곳을 뜻한다.
flowchart TD
    Goal["군체 목표"] --> O["군체우두머리"]
    O -->|"기록 반영"| Graph[("연구 그래프")]
    Graph -->|"이력과 증거"| O
    O -->|"버전 지식 발행"| Corpus[("군체문헌")]
    Corpus -->|"관련 발견"| O
    O -->|"편입과 재정렬"| Frontier[("프론티어")]
    Frontier -->|"가능한 후보"| Scheduler["스케줄러"]
    O -->|"실행 상태와 자원 정책"| Scheduler
    Scheduler -->|"적절한 작업 할당"| Context["맥락 컴파일러"]
    Goal --> Context
    Graph -->|"관련 기록"| Context
    Corpus -->|"지식 스냅샷"| Context
    Context --> Lab1["연구실 1"]
    Context --> Lab2["연구실 2"]
    Context --> Lab3["연구실 3"]
    Context --> Lab4["연구실 4"]
    Lab1 -->|"결과와 제안 0-3개"| O
    Lab2 -->|"결과와 제안 0-3개"| O
    Lab3 -->|"결과와 제안 0-3개"| O
    Lab4 -->|"결과와 제안 0-3개"| O
    Goal --> Judge["목표 판정"]
    Graph -->|"증거와 산출물"| Judge
    Corpus -->|"정리된 발견"| Judge
    Judge -->|"계속 또는 완료 확인"| O

연구실은 결과를 군체우두머리에게 제출한다. 군체우두머리가 그래프와 군체문헌을 개선하고, 스케줄러는 프론티어에서 할만한 작업을 찾아 작업자에게 할당하며, 맥락 컴파일러는 각 할당마다 관련 공유 지식을 붙인다. 목표 판정의 결론은 군체우두머리가 상태에 반영한다.

군체우두머리란 역할일 뿐이지, 반드시 프로그램이 하나일 필요는 없다 (프로그램이 여러 개여도 된다).

목표

목표란 무엇을 이루고 언제 성공인지를 정하는 것을 뜻한다. 연구 도중에 목표는 바꾸지 않는다. 바꾸면 앞선 연구실의 과학적 발견이 무효가 된다.

python
class GoalContract:
    """
    연구 또는 공학 목표의 초안.
    """
    objective: str
    success_criteria: str
    constraints: str
    evidence_requirements: str
    resource_budget: str
    permitted_tools_and_environments: str
    stopping_policy: str
    version: str

노드와 시도

연구 노드란 범위가 정해진 질문 하나를 뜻한다. 제안자와 얘기하지 않고도 실행할 수 있을 정도로 구체적이어야 한다.

python
class ResearchNode:
    """
    연구 노드의 대략적인 초안.
    """
    id: str
    goal_version: str
    question: str
    hypothesis: str
    rationale: str
    scope_and_assumptions: str
    predictions: str
    falsification_or_resolution_criteria: str
    origin_references: str
    related_node_ids: str
    evidence_references: str
    status: str
    notes: str
    conclusion: str
    conclusion_confidence: str
    proposed_followups: list  # 0-3
    scoring_history: str
    provenance: str
    starting_model_id: str  # 또는 가중치

실행 시도는 노드에 속하되 따로 기록한다. 외부적 요인으로 실패하면 (예: 환경설정 실패), 실행 실패로 유지하되 가설은 미검증 상태로 유지한다. 다시 하면 같은 노드에 시도가 하나 더 생긴다.

python
class ResearchAttempt:
    """
    실행 시도 하나의 대략적인 초안.
    """
    id: str
    node_id: str
    worker_id: str
    methodology: str
    input_artifacts: str
    environment_version: str
    context_snapshot: str
    lease: str
    status: str
    observations: str
    output_artifacts: str
    resource_usage: str

결론이란 증거가 가설에 맞는지, 어긋나는지, 아직 판단이 안 되는지, 범위가 좁은지 등등을 말하는 것을 뜻한다. 확신이란 그 주장과 증거를 얼마나 믿느냐를 수치화하거나 근거화한 것이다.

후속과 편입

끝나면 작업자는 후속 가설을 최대 세 개까지 제안할 수 있다 (없어도 된다). 각 제안에는 근거, 쓸모 있는 이유, 확신, 제안 중요도, 추정 비용을 적는다.

가설이 틀리면 그 가지를 닫을 수 있다. 실패한 발견도 검색은 돼야한다(실패가 다른 영감을 줄 수도 있다). 한 노드에서 후속은 세 개를 넘지 않는다. 일부러 만든 제약으로, 가끔 억지로 수십개의 가설을 싸지르는 노드들이 있어서 그렇다.

모든 제안은 새 노드가 되거나 프론티어에 들어가기 전에 진행 중, 완료, 보류, 종료 연구와 비교된다. 군체우두머리는 데이터셋, 개입, 조건, 결과 등을 종합적으로 맞춰 보고 두 노드가 동일하면 노드를 수정한다.

  • 같음: 기존 노드가 정본으로 남고 제안은 그걸 가리키는 참조만 남긴다. 실행 중인 노드는 그대로 돌린다. 끝난 노드는 이미 기록된 결과를 링크한다.
  • 일부만 겹침: 아직 구분이 남은 차이는 남긴다. 맞는 맥락은 정본 기록에 합치거나 더 좁은 후속 연구를 받을 수 있다. 합치기도 평가를 거친다.
  • 새로움: 중요도, 쓸모, 비용을 점수 매긴다. 근거를 붙여 받아들이거나 미루거나 거절한다.

의도적 재현이란 같은 가설에 대한 새 시도이거나 목적과 비용을 적어 둔 재현 과제를 뜻한다. 이 때, 이 계보는 순환하지 않는다. 같음, 지지, 모순 링크는 그래프를 더 촘촘하게 만들 수 있다. 조상을 다시 써도 부모-자식 이력은 순환하지 않는다.

군체문헌과 맥락

군체문헌이란 다시 쓸 발견, 한계, 방법, 산출물, 실패한 접근, 열린 불일치를 모아 두고 고치는 기록을 뜻한다. 결과는 나온 데이터셋과 조건에 한정된다.

python
class KnowledgeEntry:
    """
    군체문헌 항목의 초안.
    """
    id: str
    version: str
    statement: str
    scope_and_conditions: str
    status: str
    confidence_assessment: str
    supporting_evidence: str
    contradicting_evidence: str
    source_node_ids: str
    artifact_references: str
    supersedes: str
    created_at: str
    updated_at: str

상태는 잠정, 명시한 범위에서 지지됨, 논쟁 중, 대체됨, 무효일 수 있다. 그 표시는 그 범위 안에서만 유효하다.

군체우두머리는 제출된 결과를 증거와 기존 군체문헌과 대조한 뒤 버전이 붙은 업데이트를 만든다. 대충 깃 컨트롤된 위키피디아 같은 느낌이다. 가공 전 관찰과 이전 버전도 유지한다. 새 요약이 나와도 충돌하는 증거는 그대로 둔다. 작업자는 해석을 제출한다. 군체우두머리는 그래프를 정리한 설명을 낸다. 뒤이은 연구실이 따로 검증한다.

연구실끼리 발견을 주고받을때는, 이렇다. A가 군체우두머리에게 제출하면 군체문헌에 등록되고, B는 update 메시지를 수령한다.

과제가 시작되기 전에 컴파일러는 목표, 가설, 관련 계보, 관련 실험, 적용할 군체문헌 항목, 모순, 도구, 한계를 모은다. 어떤 문헌 버전을 넣었는지도 적는다. 나중에 작업자에게 그 발견이 없었는지, 무시했는지, 이후 바뀐 결론을 썼는지 볼 수 있다. 그래야 당시 문헌에 없어서 맥락이 배제됐는지 아니면 실제로 무관하다고 판단된건지 구별이 된다.

새 지식은 이후 맥락 요청에서 쓸 수 있다. 이미 돌아가는 작업자는 시작할 때 받은 스냅샷을 유지하되, 언제든지 최신 군체문헌을 read-only로 접근할 수 있다. 발견이 가정을 무효로 만들거나 질문에 답하거나 실행을 바꾸면 군체우두머리는 영향받는 과제에 알린다. 알림은 로그에 남는다. 긴 실험은 군체우두머리가 취소나 새 시도를 남기지 않는 한 시작할 때 고른 방법을 유지한다.

우선순위와 스케줄

작업자가 붙인 중요도와 확신은 특정 제안에서만 유효하다. 군체우두머리는 작업자의 말을 곧이곧대로 믿는게 아니라, 결과, 후속 근거, 그래프, 목표를 보고 스스로 평가한다.

  • 확신이란 그 주장을 얼마나 믿느냐를 뜻한다.
  • 중요도란 그걸 풀면 무엇이 달라지는지를 뜻한다.
  • 우선순위란 지금 그 일을 하는 게 맞느냐를 뜻한다.

어떤 연구가 패러다임을 본질적으로 바꾼다면 싸고 확신 낮은 가설을 먼저 실험한다. 확신만 높고 급하지 않은 일은 뒤로 미룬다.

python
class ResearchEvaluation:
    """
    편입 점수의 초안.
    """
    proposed_importance: str
    judged_importance: str
    confidence_assessment: str
    goal_relevance: str
    expected_information_value: str
    estimated_cost: str
    downstream_value: str
    redundancy_assessment: str
    scheduling_priority: str
    rationale: str
    evaluated_against_state_version: str

스케줄러는 규칙이 드러난 아무 휴리스틱이면 된다. 스케줄러는 연구의 진척에 따라 지속적으로 업데이트될 수 있다.

조건이 맞는 연구실 넷은 과제 넷을 동시에 돌릴 수 있다. 끝난 연구실은 돌릴 수 있는 다음 과제가 비는 즉시 가져간다. 과제는 필요한 가속기, 데이터셋, 엔진, 도구가 있는 연구실로 간다.

가져가기는 한 번에 하나만 된다. 할당에는 작업자, 과제, 만료 시각을 적는다. 하트비트로 살아 있는 일과 버려진 시도를 가른다. 만료된 할당은 다시 시도할 수 있다. 낡은 시도의 늦은 결과는 저장하고 더 새로 받아들인 결과가 최신이다.

결과 제출은 멱등적이어야 한다.

완료, 군체문헌 추출, 제안 평가, 큐 갱신의 순서는 논리로 맞춘다. 이 단계는 다시 재생할 수 있는 기록으로 남긴다 (durable). 같은 이벤트를 반복해도 그래프는 그대로다.

불일치

믿을 만한 결과가 어긋나면 그 불일치는 나중에 해소될 때까지 군체문헌에 명시적으로 기록된다 군체우두머리는 재현, 방법 검토, 엄밀성 경계 조건 등을 받을 수 있다.

실패한 발견에는 그때의 조건이 첨부돼야 한다. 한 환경에서 효과가 없어도 다른 환경에서는 그 기법을 열어두기 위함이다.

닫힌 갈래도 검색돼야 한다.. 이후 증거가 다른 조건에서 같은 질문을 재검증해볼 수 있다. 다시 열려면 근거를 남기고 평가를 새로 한다. 익숙한 가설은 그래프에 남는다. 다시 돌리려면 그 평가가 있어야 한다.

무효가 된 가정을 전제로 한 갈래는 멈춰야 할 수 있다. 그래프는 그 의존을 보여 줘야 한다. 영향받는 일만 우선순위를 다시 매긴다.

중단

목표 판정은 증거를 목표와 대조한다. 군체문헌 요약이 관련 결과를 가리킬 수 있다. 다만 완료하려면 측정, 증명, 산출물처럼 요구한 증거까지 닿아야 한다.

유망한 결과는 검증 후보가 된다. 완료하려면 필수 재현, 홀드아웃 평가, 제약 검사, 남은 일처럼 모든 조건을 끝내야 한다.

완료가 확인되면 군체우두머리는 새 할당을 멈추고 정해 둔 대로 취소하거나 남은 일만 비운다. 늦은 결과는 받아 둘 수 있다. 끝난 프로그램은 끝난 채로 둔다.

예산이 바닥나거나 운영자가 취소하거나 프론티어가 비는 것은 서로 다른 중단 이유이다. 프론티어가 비었다고 보려면 작업자도, 제안 평가도, 의존 해제도 다 멈추고, 어떤 연구도 할 가치가 없는 상태여야 한다 (완전히 종료되거나, 목표 자체가 완수/검증됐거나, 목표 자체가 논파됨)

Backlinks1