Skip to content

Models and Metaprogramming

kimjooyoon edited this page Oct 4, 2026 · 5 revisions

작은 모델과 메타프로그래밍

업데이트: 2026-10-05.

Gooo가 조립할 수 있는 범위를 표현하고, 작은 모델이 그 안에서 다음 시도를 고르는 구조를 개발하고 있습니다. 모델 가중치는 Hugging Face, 실행 코드는 Go SDK, 비교 실험은 연구 저장소에 공개합니다.

최근 자체 필드 모델은 Gooo의 실제 후보식 전체와 한영 의도로 세 레코드 필드를 조립합니다. 새로운 초기값에서 GPU480회 학습했고, Go 판단·실행 및 같은 후보의 반대 의도 실패를 함께 공개했습니다. 작은 모델의 빠른 판단과 의도 표현의 한계를 실제 필드 충족 지표로 이어 보는 단계입니다.

한 번의 코드 조립을 따라가 보면

“값이 기준보다 작으면 보정하고, 마지막에 두 배로 만든다”는 함수를 생각해 봅시다. 계획에서 비교 조건, 보정 연산, 마지막 연산에 각각 두 대안을 주면 여덟 바디를 만들 수 있습니다. 아래는 동작을 설명하기 위한 예시입니다.

  1. Gooo 원본과 계획을 읽습니다. 원래 바디, 허용된 조건·변수·연산, 한국어 또는 영어 의도, 입출력 예시와 시도 예산을 받습니다.
  2. 모델이 경로에 순위를 줍니다. 원본에서 얻은 구조와 의도를 작은 배열로 표현하고, 여덟 조합 중 먼저 시도할 경로를 고릅니다.
  3. 컴파일러가 조립합니다. 변수의 범위와 타입을 확인하고 허용된 부품을 결합합니다.
  4. 유한 예시를 평가합니다. 실패한 입력·기대값·실제 결과가 다음 모델 판단에 들어갈 수 있습니다.
  5. 선택한 바디를 Go로 생성합니다. 실험 실행기가 곧바로 빌드하고 실행하며, 원본·모델·선택·결과를 연결해 기록합니다.
Gooo 원본 + 조립 계획 + 의도 + 입출력 예시
                    │
           작은 모델의 경로 순위
                    │
         타입 검사 → 바디 조립 → 예시 평가
                    ↑                  │
                    └──── 실패 문맥 ───┘
                    │
           생성 Go → 빌드 → 실행
                    │
          충족한 항목과 남은 작업 기록

활동의 assembling 선언에 본문 조립 계획과 의도·예시를 함께 적을 수 있습니다. 외부 JSON 계획도 받습니다. 자연어에서 조립 계획 자체를 찾아내는 기능은 다음 언어 연구에 포함되어 있습니다. 소스 안에 조립 의도 적기.

무엇을 세밀하게 선택할 수 있나

실험의 선택 공간에는 비교 연산, 피연산자 순서, 지역 변수 참조, 대입 대상, 조건 분기, 중첩 분기와 문장 순서가 있습니다. 정수 경로 모델과 함께 실제 레코드 필드 두 후보식의 조합을 고르는 모델도 별도로 학습·평가합니다.

일반 본문 생성은 Integer·Boolean·Text와 레코드 입력·결과, 순서가 있는 여러 입력, let, 지역 대입, 조건문과 return을 다룹니다. 레코드 생성·필드 읽기·전체 값 교체도 확인합니다. 일반 함수 호출·반복문·외부 효과의 실행 범위는 다음 언어 확장에 남아 있습니다. 기록값 작성 · 입력 순서.

Laya에서 자체 모델까지

단계 한 일 배운 점
Laya 경로 실험 의도와 선택지를 전달해 허용된 생성 경로 선택 응답 속도, 문맥 길이, 언어 라우팅과 실패 전달을 관측
코드 바디·TDD 실험 후보 바디를 평가하고 실패를 다음 시도에 전달 모델의 첫 선택과 탐색 후 결과를 따로 세는 구조 마련
자체 Gooo 모델 Gooo 자료로 새 가중치를 초기화·학습 작은 판단 단위와 고정 배열의 Go 실행 경로 확보
공유 소형 모델 256→8→2 판단망을 세 결정에 재사용 2,072개 파라미터로 여덟 경로의 순위 구성
전체 입력 표현 비교 위치 기반 표현·문장 조각 빈도, 원문·다양한 표현을 비교 의도 앞의 문구 민감도, 순서 손실, 양자화 후퇴 발견
SDK와 실제 생성 연결 계산 규칙을 명시하고 생성·빌드·실행 관측 플랫폼별 재현성과 전체 처리 비용을 각각 확인
전체 후보 판단기 4,096 파라미터·16 KiB로 실제 두 연산의 순서와 전체 한영 의도를 비교 64개 학습 요청, 컴파일러 내부 판단·즉시 실행, 동일 후보 재사용
실제 필드 후보식 모델 18,656 파라미터로 세 필드의 실제 후보와 한영 의도를 입력 480 GPU 학습, 192개 평가 소스, 100회 실제 조립과 반대 의도 실패 공개

현재 자체 모델의 계보는 Gooo 데이터와 새로 초기화한 가중치에서 시작합니다. Laya는 초기 구조화된 선택 실험에 사용했고, 그 경험이 지금의 선택 인터페이스를 설계하는 데 이어졌습니다.

모델 연결과 결정론적 진행

전체 후보 판단기

새 모델은 소스 조립 계획의 두 정수 연산과 세 이진 선택을 다룹니다. 모델 메타데이터와 weights.bin을 같은 폴더에 두고 다음처럼 연결합니다. 파일명은 사용할 소스와 계획에 맞춰 바꿉니다.

gooo body-codegen --json --activity Compose \
  --path-plan recipe.json --path-model model/model.json source.gooo

원본 소스를 확인한 뒤 모델을 한 번 호출하고, 그 순위대로 유한 예시를 평가해 Go를 생성합니다. 전체 후보 순위와 동일 구조 생략은 body_paths.whole_candidate_judgment에 기록됩니다. 이 초기 모델 경로에서는 시드·배치·피드백 옵션과 지원 범위를 벗어난 입력이 명시적 오류로 기록됩니다. 모델 옵션을 생략하면 결정론적으로 생성합니다. 지원 모양·입력 한도·호출 순서.

main 98701e47에 반영됐으며, 설치본에서 모델 사용·미사용 양쪽의 실제 실행을 확인했습니다. 한국어 예제의 소스·계획·명령을 그대로 실행할 수 있습니다.

기존 공유 판단기와 단계별 피드백

모델은 명시적으로 파일을 지정해 연결합니다. 다음 명령의 파일명은 호출 형태를 설명하는 자리표시자이며, 실제 파일 묶음과 소스 결속 조건은 사용 안내를 따릅니다.

gooo body-codegen --json \
  --path-plan plan.json --path-model model/model.json \
  --path-step-attempts 1 --path-feedback-rounds 7 \
  --activity ChoosePath source.gooo
  • 모델을 생략하면 선언된 결정론적 경로로 진행하며 모델 호출 수는 0입니다.
  • 지원하지 않는 선택 개수나 입력 길이 초과는 원문과 해시를 보존하고, 사유를 기록한 뒤 결정론적 진행을 사용합니다.
  • 시드가 있는 확률적 선택은 같은 원본·모델·기록된 분포에서 재현되도록 설계되어 있습니다.
  • 코드 생성 중 모델 가중치는 고정됩니다. 학습은 별도 단계에서 수행합니다.

장시간 사용하는 Go 실행기는 모델을 한 번 로드하고, 요청마다 작업 배열과 탐색 상태를 따로 둡니다. 현재 경로에서 모델 선택은 후보 평가 전에 호출됩니다. 생성이 끝나면 실험 실행기가 바로 빌드와 실행을 잇습니다. 더 많은 동시 요청에서의 지연과 메모리는 다음 관측 과제입니다.

성과와 현재의 어려움

첫 선택의 품질, 추가 탐색, 전체 생성 시간은 서로 다른 결과입니다. 전체 문장 조각을 쓰는 FP32 조건은 알려진 개발 입력 512개 중 368개에서 첫 바디가 모든 예시를 만족했고, 추가 후보 합계는 186개였습니다. 대조군은 113개와 1,469개였습니다.

작은 통합 과제 16개에서 해당 조건의 첫 경로는 16/16을 충족했습니다. 전체 통합 실험에서는 400회 생성과 800회 실행을 관측했습니다. compact FP32의 예측 중앙값은 8.33µs, 전체 코드 생성은 10.00ms였습니다. 모델을 끈 조건의 생성 중앙값은 9.80ms였습니다. 지금 확인한 이득은 후보 탐색 감소이며, 이 과제 크기에서 전체 지연은 비슷했습니다. 분모·환경·전체 변형 결과.

문장 조각의 빈도는 연산 순서를 잃을 수 있습니다. 한·영 두 표현이 같은 잘못된 경로를 고르기도 합니다. 삼진 저장으로 파일은 작아졌지만 일부 조건의 품질은 내려갔습니다. 이 관측들은 다음 표현·학습·언어 기능을 고르는 근거로 남깁니다.

언어가 어떻게 발전해야 하나

다음 작업은 모델의 정답률과 언어가 표현할 수 있는 범위를 함께 넓히는 것입니다.

  1. 순서를 표현하는 작은 입력 구조: “더하고 곱하기”와 “곱하고 더하기”를 구별하면서 메모리 비용을 유지합니다.
  2. 한국어·영어와 새 과제: 같은 오답과 양쪽 모두 유효한 선택을 분리하고, 기존에 관측한 과제 밖에서 평가합니다.
  3. 더 풍부한 조립 계획: 더 넓은 타입·조건·계산을 표현하고, 생성과 역관측의 규칙을 함께 늘립니다.
  4. 자연어에서 계획 찾기: 사용할 기능과 조립 후보를 발견하고 그 출처·실패·미해결 항목을 공통 기록으로 연결합니다.
  5. 성공한 구조 재사용: 반복되는 조립법을 설명 가능한 구성으로 축적해 새 작업의 탐색 비용을 측정합니다.

완전성은 작업 지시서의 체크 기록에 가깝습니다. 프로그램이 한 번에 완성되지 않아도, 무엇을 충족했고 무엇이 남았는지가 다음 시도로 이어질 수 있어야 합니다.

관련 연구와 감사 · 현재 상태 · 문서 홈

생성 직후 실행하고 같은 조립물을 다시 확인하기

body-path-stream --execute는 새 바디가 나오면 같은 요청 안에서 실제 실행으로 연결합니다. 요청마다 execution_cases로 독립 기대값을 전달합니다. 같은 조립물의 실행파일은 하나만 보관하고, 현재 소스·계획·부모 관측과 실행파일을 다시 확인한 뒤 현재 입력을 두 번 실행합니다. 다른 기대값을 주면 새로운 충족·미충족 결과가 남습니다. 모델 판단 기록과 실행 관측은 부모·자식 관계로 연결하며, 실제 새 빌드와 재사용한 원본 빌드를 구분합니다. 생성은 여러 작업으로 처리할 수 있고 실행 슬롯은 하나입니다.

Go 예제의 --retain-native가 이 경로를 사용합니다. --model을 빼도 같은 실행 관측을 결정론적으로 얻습니다. 기존 한영 소스의 512회 생성·1,024회 실행 비교에서 결과와 최초 실패를 유지하며 반복 실행 관측 비용을 줄였습니다. 원본·측정 범위와 실패. 현재 지원되는 순수 Integer→Integer 바디에 적용됩니다.

Gooo

배우기

직접 다뤄 보기

원리와 개발

공개 코드와 모델

Clone this wiki locally