11.2 KB · updated 2026-07-31 · md

engine-consolidation.ko.md

docs/i18n/engine-consolidation.ko.md

자동 통합 — 엔진의 수면 주기

<!-- translations:start -->

English · 한국어 · 中文 · 日本語 · Русский · Español · Français · Deutsch

<!-- translations:end -->

뇌는 휴식 중에 기억을 통합합니다. 잠을 자는 동안, 하루의 생생한 경험이 재조직되고, 압축되며, 통합됩니다 — 최근의 시끄러운 것들이 지속적인 구조로 접혀집니다. Tesserae의 엔진도 같은 방식으로 작동합니다. 프로젝트가 유휴 상태가 되면, 항상 켜져 있는 데몬은 다음 편집을 기다리는 것을 멈추고 조용한 시간에 이미 알고 있는 것들을 재조직합니다: 그것은 압축하고 잊으며 아무도 검색하지 않은 지식을 사용하지 않으므로 퇴색시키고, 생존하는 것들 사이의 새로운 연결을 발견합니다.

지금까지 그 패스는 당신이 요청했을 때만 실행되었습니다 — 메모리 압박 상태에서 tesserae refresh 또는 명시적 tesserae distill. 엔진은 모든 파일과 세션 이벤트에서 재컴파일했지만 절대 자동으로 통합되지 않았습니다. 수면 주기는 이 간격을 좁힙니다: tesserae engine을 계속 실행하면 휴식 중에 통합이 일어나고, 기억할 명령이 없습니다.

계층화된 메모리 시스템의 모든 것처럼, 이것은 당신이 선택하지 않는 한 no-op입니다 — 데몬은 유휴 상태에서 통합하지만, 그 아래의 증류는 TESSERAE_AGENT_DISTILL이 설정되었을 때만 작동합니다.

언제 발생하는가

전용 통합 스레드는 고정 체크 간격(기본값 30초)에서 깨어나고 단조 활동 시계에 대해 두 개의 독립적인 트리거를 평가합니다:

  • 유휴 트리거. 프로젝트가 적어도 --consolidate-idle 초 동안 트리거 이벤트나 파이프라인 실행을 보지 못했습니다(기본값 300s = 5분). 이것은 "휴식 중 통합" 경우입니다 — 엔진이 작업을 중단했음을 알아차렸고 휴지를 사용했습니다. 마지막 통합 이후의 바닥은 스래싱을 방지하므로, 방금 조용해진 바쁜 프로젝트는 민감한 트리거에서 통합되지 않습니다.
  • 상한 트리거. 마지막 통합 이후 활동 여부와 상관없이 적어도 --consolidate-every 초가 경과했습니다(기본값 21600s = 6h). 이는 계속해서 바쁜 프로젝트가 조용한 순간을 얻지 못하는 대신 주기적으로 통합되도록 보장합니다. 이를 0으로 설정하면 상한이 비활성화됩니다 — 그러면 유휴만 유일한 트리거입니다.

모든 편집, 세션 턴 또는 재컴파일은 활동 시계를 증가시키므로, 유휴 윈도우는 진정한 휴식 중에만 경과합니다. 두 시계 모두 단조적이고, 벽시계가 아니며, 어떤 아티팩트에도 지속되지 않습니다 — 통합 타이밍은 바이트 결정론적 그래프를 방해할 수 없습니다.

실행되는 것 — 세 가지 작업

각 발생은 .tesserae/graph.json에서 컴파일된 그래프를 로드하고(파일이 없으면 패스를 건너뜀) 세 가지 통합 작업을 순서대로 실행합니다. 함께 그들은 휴식 중인 뇌가 하는 것을 반영합니다: 최근의 시끄러운 것을 압축하고, 다시 방문하지 않은 것을 퇴색시키고, 생존하는 것들 사이의 새로운 연결을 연결합니다.

1. 압축 / 잊기 — 증류

tesserae refresh가 각 에이전트의 메모리를 재조직하고, 압축하고, 안전하게 잊기 위해 사용하는 동일한 maybe_distill_on_refresh 진입점을 호출합니다. 해당 함수는 내부적으로 삼중 게이트되고 에이전트별 실패로 인해 발생하지 않습니다:

  1. 옵트인 게이트TESSERAE_AGENT_DISTILL=1 (또는 config.json에서 {"agent_distill": {"enabled": true}}). 기본값 해제; 당신이 설정할 때까지 전체 주기는 안전한 no-op입니다.
  2. 에이전트별 수위 표시 — 마지막 증류 이후 결과가 변경되지 않은 에이전트는 건너뜁니다.
  3. 에이전트별 메모리 압박 — 증류되지 않은 결과가 더 이상 절반의 컨텍스트 읽기에 맞지 않는 에이전트만 통합됩니다(MemGPT 스타일 트리거).

따라서 통합이 일정에서 발생할 때도, 옵트인하고 실제로 충분한 새로운 메모리를 축적한 에이전트에 대해서만 작동합니다. 증류가 생성하는 것에 대해 계층화된 에이전트 메모리를 참조하십시오.

2. 사용 중지로 잊기 — 나이뿐 아니라 검색에 대한 LRU 감소

증류의 감소는 더 이상 생성 나이에만 의해 구동되지 않습니다. 모든 읽기 표면은 반환하는 결과에 대해 액세스를 기록합니다 — last_accessed_ataccess_countnode_memory 사이드카에 기록하고, graph.json에는 기록하지 않습니다. 증류 패스가 감소를 계산하기 전에, 그것은 그 라이브 액세스 상태를 작업 보기로 병합하므로, 생성된 이후 검색되지 않은 결과는 감소하고 흡수되거나 강등될 자격이 있는 반면, 최근에 읽은 결과는 나이에 관계없이 새로 유지됩니다. 이것은 검색 최근성이고, 메모리에 적용된 LRU(최소 최근 사용) 직관입니다: 계속 끌어오는 지식은 머물고, 아무도 요청하지 않은 지식은 먼저 퇴색됩니다. 빈 사이드카는 이전의 나이만 동작을 정확히 재현하므로, 완전히 역호환됩니다.

3. 연결 — 새로운 연결 발견

최종 작업은 생존한 것들 사이의 새로운 관계를 찾습니다. 증류된 노트를 임베드하고 의미가 가까운 쌍을 연결합니다 — 임베딩 게이트, 실제 임베딩 백엔드가 구성될 때만 실행됩니다(해시 스텁은 건너뛰고, 절대 노이즈 링크를 생성하지 않습니다). 발견은 프로젝트 내 및 에이전트 간으로 실행되며, 발견하는 연결은 federation_semantic 마커를 전달하는 shares_concept_with 에지로 생성됩니다.

중요하게도, 이 발견된 에지는 사이드카 오버레이.tesserae 아래에 기록되고, graph.json에는 절대 기록되지 않습니다. 오버레이는 사이클 전체에 누적됩니다 — 각 연결 패스는 이전 패스가 발견한 것에 대해 중복 제거 및 확장합니다. 읽기 시간(쿼리, PPR 확장, 연합 보기)에 오버레이는 메모리만에서 그래프로 병합되며, 에이전트별 보기 오버레이와 정확히 같습니다 — 그래서 바이트 결정론적 graph.json은 절대 건드려지지 않습니다. 전체 작업은 래핑되고 데몬 루프에 발생하지 않습니다.

안전성과 결정성

  • 컴파일 게이트 아래에서 실행합니다. 통합은 재컴파일과 동일한 잠금을 획득하므로, 컴파일과 직렬화되고 절대 겹치지 않습니다. 보류 중인 컴파일은 진행 중인 통합을 기다리고 그 반대도 마찬가지입니다 — 그래프는 절대 작성 중에 읽히지 않습니다.
  • 데몬 루프에 발생하지 않습니다. 전체 패스가 래핑되고, 오류는 기록되고 스레드는 루프를 유지합니다. 실패한 통합은 절대 엔진을 종료하지 않습니다.
  • 게이트가 꺼져 있을 때 no-op입니다. TESSERAE_AGENT_DISTILL 미설정 상태에서 패스는 비싼 것을 로드하지 않고 즉시 반환하므로, 수면 주기를 켜두는 것은 본질적으로 아무것도 비용이 들지 않습니다.
  • 결정론적 아티팩트, 변경 없음. 증류된 아티팩트는 입력이 주어지면 결정론적으로 유지됩니다; 수면 주기는 증류가 언제 실행되는지만 변경하고, 무엇을 생성하는지는 절대 변경하지 않습니다. 유휴 타이밍은 graph.json 또는 증류된 계층에 절대 유출되지 않습니다.
  • graph.json은 바이트 멱등성을 유지합니다. 새로운 작업은 그것을 쓰지 않습니다. 액세스 상태는 node_memory 사이드카에 있고 발견된 연결은 누적 오버레이에 있습니다 — 둘 다 .tesserae 아래, 둘 다 읽기 시간에 메모리만 병합됩니다. 권위 있는 그래프 바이트는 검색 이력이나 발견된 링크로 건드려지지 않습니다.
  • 깔끔한 종료. 통합 스레드는 데몬의 중지 이벤트를 관찰하고 Ctrl-C / 종료에서 신속하게 종료합니다. 그것은 장기 실행 모드 기능일 뿐입니다: tesserae engine ... --once은 절대 시작하지 않습니다.

CLI 플래그

플래그기본값효과
--consolidate / --no-consolidateon수면 주기를 완전히 활성화하거나 비활성화합니다. 기본값 활성화(증류 게이트가 설정되지 않으면 no-op).
--consolidate-idle SECONDS300휴식 윈도우: 활동이 없는 이 많은 초 후에 통합합니다.
--consolidate-every SECONDS21600상한: 활동 여부와 상관없이 최소한 이 자주 통합합니다. 0은 상한을 비활성화합니다.
--consolidate-check SECONDS30통합 스레드가 트리거를 재평가하기 위해 깨어나는 빈도.

함대 동작(--all)

tesserae engine --all은 한 프로세스에서 모든 등록된 프로젝트를 최신 상태로 유지합니다. 각 프로젝트 단위는 동일한 노브를 가진 자신의 통합 스레드를 받고, 모든 단위는 하나의 함대 전체 컴파일 게이트를 공유합니다 — 그래서 한 프로젝트의 통합은 전체 함대의 컴파일과 직렬화되고, 절대 겹치지 않습니다.

완성된 예

증류를 켠 다음, 더 빠른 수면 주기로 엔진을 실행합니다 — 60초 유휴 후 통합하고, 상관없이 최소한 30분마다:

export TESSERAE_AGENT_DISTILL=1
tesserae engine \
  --consolidate-idle 60 \
  --consolidate-every 1800 \
  --consolidate-check 15

평소대로 편집기와 에이전트에서 작업하십시오; 엔진이 관찰하고, 디바운스하고, 모든 변경을 재컴파일합니다. 1분 동안 멈추면 유휴 트리거가 발생합니다: 통합 스레드가 컴파일 게이트를 획득하고 메모리 압박 상태의 모든 에이전트를 증류합니다 — 재조직하고, 압축하고, 안전하게 잊은 다음 — 다시 잠듭니다. 절대 중단하지 않고 30분 마크를 지나 계속 작업하면 상한도 발생하므로, 무자비한 프로젝트는 여전히 통합됩니다.

엔진을 계속 실행하되 통합을 수동 tesserae distill 실행으로 남기려면 --no-consolidate를 전달합니다. 유휴 상태에서 실행하지만 고정 일정에서는 절대 실행하지 않으려면 --consolidate-every 0을 전달합니다.