dev.to

DecisionDebt: a company brain where every edge has a receipt (built on FalkorDB)

DecisionDebt: 모든 관계에 근거를 남기는 회사 지식 그래프

DecisionDebt는 FalkorDB에 회사의 서비스, 소유자, 프로젝트, 문서와 의사결정을 그래프로 연결해 변경 영향도를 미리 계산하는 도구입니다. 관계마다 근거가 된 문서의 정확한 문장과 버전을 기록하고, 불확실한 정보는 사람의 확인을 요청합니다.

에디터 노트

이 프로젝트에서 가장 설득력 있는 선택은 영향 경로와 근거 문장을 한 묶음으로 다루는 점입니다. 그래프의 관계마다 문서 버전과 정확한 원문 위치를 붙여 문서 수정 때 해당 근거만 철회하며, 별도 경로가 같은 관계를 지지하면 연결을 유지합니다. 영향 목록을 내놓는 데 그치지 않고 근거가 바뀌었을 때 그래프가 어떻게 달라지는지도 보여줍니다. 다만 정확도 1.0은 합성 자료와 그 자료를 만든 생성기를 기준으로 한 결과입니다. 원문도 실제 회사 문서에 대한 정확도를 입증하지 않았다고 명시합니다. 최대 다섯 단계 제한과 공개된 우선순위 공식은 결과의 범위와 산정 방식을 드러내지만, 실제 조직의 자료에서 문장 추출과 오래된 정보 분류가 얼마나 잘 맞는지는 남은 검증 과제입니다. 에이전트가 담당자를 임의 지정하지 않고 확인 작업을 남긴 사례는 설계한 제약이 작동한 예로 제시됩니다.

AI 요약

DecisionDebt는 회사 자료에 흩어진 서비스 의존 관계와 담당자, 프로젝트, 문서를 FalkorDB 그래프 하나로 연결해 의사결정의 영향을 미리 보여주는 프로젝트입니다. 예시에서는 기존 인증 서비스인 Auth Gateway를 OrionAuth로 바꾸려는 제안을 검토합니다. 변경 범위는 직접 연결된 서비스에 그치지 않습니다. Identity API를 거쳐 연결된 Session Broker와 세 단계 떨어진 Token Cache도 영향을 받습니다. 도구는 영향을 받는 서비스 12개와 프로젝트 12개, 담당자 공백 1건, 소유권 충돌 1건, 오래된 지식 관련 항목 5건을 제시합니다.

경로와 근거를 함께 반환하는 그래프

영향 분석은 FalkorDB의 Cypher 가변 길이 탐색으로 최대 다섯 단계까지 의존 관계를 역으로 따라갑니다. 결과에는 영향받는 서비스뿐 아니라 서비스 경로와 각 관계의 Claim ID도 담깁니다. 따라서 사용자는 어떤 경로로 영향 범위에 포함됐는지, 각 연결을 뒷받침하는 주장이 무엇인지 확인합니다. Session Broker처럼 여러 경로로 같은 서비스에 닿는 경우에는 정렬된 근거 경로를 최대 세 개까지 보여주며, 순환 관계는 탐색 단계 제한으로 제어합니다. 다섯 단계 너머에 소비자가 더 있으면 별도 경계 탐색으로 찾아 truncated 표시를 반환합니다.

그래프의 모든 관계에는 Claim이 필요합니다. Claim은 사실의 주어와 관계, 대상뿐 아니라 출처 ID와 문서 버전, 원문 내 정확한 시작·끝 위치, 발췌문, 추출 방식과 상태를 기록합니다. UI에서 관계를 선택하면 원문 문장을 강조하고 출처 버전의 SHA-256도 확인합니다. 문서를 수정하면 그 문서가 뒷받침했던 관계만 철회합니다. 다른 문서에도 같은 관계의 근거가 있다면 그 연결은 남습니다.

추출과 영향도 계산

추출기는 명시적이고 근거가 있는 문장만 활성 Claim으로 등록합니다. 가능성을 나타내는 표현이나 부정문, 해소되지 않은 별칭, 근거가 부족한 문장은 비활성 후보로 저장합니다. 초기 가져오기는 출처 94개에서 검증된 Claim과 의미 관계 315개, 비활성 후보 4개를 만들었습니다. 작성자는 합성 데이터로 만든 테스트 자료에서 독립 BFS 기준 프로그램과 비교해 precision과 recall이 모두 1.0이었다고 보고합니다. 다만 이 결과는 생성기에 맞게 파이프라인이 작동했음을 확인할 뿐, 임의의 실제 회사 문서에서 정확하다는 뜻은 아니라고 한계를 분명히 적었습니다.

영향받은 서비스마다 우선순위 점수를 계산합니다. 공개된 공식은 깊이가 가까울수록 점수를 높이고, 담당자 공백과 소유권 충돌, 오래된 지식의 등급도 반영합니다. 담당자가 없는 경우는 담당자 둘이 충돌하는 경우보다 더 높은 가중치를 받습니다. 점수 70 이상은 P0, 45 이상은 P1입니다. 예시의 Session Broker는 깊이 2이고 담당자 충돌이 있어 65점, P1을 받습니다. 점수 가중치는 공개되어 있어 사용자가 기준을 검토할 수 있습니다.

오래된 문서와 LLM 에이전트

변경으로 영향을 받을 수 있는 문서는 확실성에 따라 세 등급으로 나눕니다. T1은 교체되는 의사결정을 직접 인용한 문서입니다. T2는 기존 시스템을 언급하지만 결정과 연결되지 않은 문서로, FalkorDB의 전문 검색 뒤 원문을 다시 확인합니다. T3는 연결된 문서의 마지막 검토일이 제안 시점보다 90일 이상 앞선 경우입니다. 각 등급을 한 목록에 섞지 않아 직접 수정이 필요한 문서와 나중에 검토할 문서를 구분합니다.

질문 응답의 기본 경로에는 LLM을 쓰지 않습니다. 다섯 가지 파라미터화된 읽기 전용 Cypher 템플릿으로 소유자, 영향 서비스, 프로젝트, 검토자와 관련 문서를 조회합니다. 답변에는 실행한 쿼리와 파라미터, 결과 수, 처리 시간, 검증된 출처 문장 범위를 표시합니다. LLM 에이전트는 규칙만으로 판단하기 어려운 담당자 공백, 담당자 충돌, 연결되지 않은 언급을 처리합니다. 도구와 호출 횟수, 실행 시간을 제한하고 실제 그래프에 있는 ID만 도구 입력으로 허용합니다. 근거가 부족한 담당자 지정은 서버 검증 단계에서 거부합니다.

기록된 실행에서 에이전트는 Token Cache의 소유자를 임의로 정하지 않고 확인 작업을 제안했습니다. Session Broker의 두 담당자 충돌도 사람의 해결을 요청했습니다. OrionAuth라는 문구가 체크리스트에 있다는 사실만으로 의존 관계를 만들지 않고 문서 검토 작업으로 남겼습니다. 실행에는 8회 모델 턴과 11회 도구 호출이 들었고, 51.6초가 걸렸습니다. 비용 0달러는 해당 실행에서 제공자가 보고한 값입니다.

변경 이력과 운영 제약

미리보기 요청은 결과나 AgentRun을 저장하지 않습니다. 작업 승인과 새 의사결정 수락도 분리합니다. 새 결정이 실제로 승인된 뒤에야 이전 결정을 대체하는 관계를 그래프에 추가합니다. FalkorDB를 중단하는 배포 시험에서는 미리보기와 회사 요약, 에이전트 이력 조회가 모두 503 오류를 반환했습니다. 캐시나 Python 대체 탐색으로 결과를 꾸며내지 않으며, 재시작 뒤 그래프 버전이 유지되는지도 검사합니다.

공개 데모는 합성 데이터를 사용하고 읽기 전용으로 잠겨 있습니다. 추출 방식은 명시적 문장만 처리하며 실제 회사 문서로 평가하지 않았습니다. 서버는 단일 API 작업자와 프로세스 내부 잠금을 사용합니다. 최대 탐색 깊이는 다섯 단계이며, 공급자 가용성과 비용도 달라질 수 있습니다.

원문: dev.to / 번역·요약: Trawling