trustflow-companyx

trustflow-companyx

Enables natural language queries to be converted into policy-verified SQL, vector search, and knowledge graph plans, with evidence-backed answers and an audit log.

Category
访问服务器

README

TrustFlow MCP 데이터 에이전트

자연어 질문을 SQL·벡터 검색·지식그래프 실행계획으로 바꾸고, 내부 PolicyGraph가 실행 전에 검증·보정한 뒤 근거와 감사 기록까지 반환하는 온프레미스 MCP 데이터 에이전트입니다.

현재 버전 0.3.0은 corevalue 팀이 리원에이스 지정과제의 공식 Company-X 데이터로 검증한 대회 제출 후보입니다. 외부 공개용 프로젝트 코드는 Apache-2.0이며, 공식 데이터셋은 대회 참가 목적으로만 사용되므로 저장소에 포함하지 않습니다.

핵심 흐름

flowchart LR
    Q[자연어 질문] --> P[구조화 QueryPlan]
    P --> G{PolicyGraph PlanGate}
    G -->|ALLOW| X[실행]
    G -->|REPAIR| R[안전한 계획으로 보정]
    R --> X
    G -->|APPROVAL_REQUIRED| A[승인 대기]
    G -->|DENY| D[실행 차단]
    X --> S[NL2SQL]
    X --> V[Vector Search]
    X --> K[Knowledge Graph]
    S --> E[근거 연결 답변]
    V --> E
    K --> E
    E --> L[해시 체인 감사 원장]
    A --> L
    D --> L

PolicyGraph의 차별점은 “LLM이 만든 계획을 곧바로 실행하지 않는다”는 데 있습니다.

  • ALLOW: 정책을 만족하는 계획을 실행합니다.
  • REPAIR: SQL LIMIT, 벡터 topK, 그래프 탐색 깊이 등을 허용 범위로 보정한 뒤 실행합니다.
  • APPROVAL_REQUIRED: 연봉·연락처 등 제한 필드는 승인 전까지 실행하지 않습니다.
  • DENY: 쓰기 SQL, 다중 문장, 미등록 테이블·관계 등은 실행하지 않습니다.

현재 구현 범위

영역 구현 상태
공식 Company-X 데이터 체크섬 검증 설치 스크립트와 로컬 비공개 보관
NL2SQL 공식 10문항 계획·실행, SELECT 전용 정책, PostgreSQL 읽기 전용 계정
벡터 검색 재현용 로컬 768차원 기준선 + Ollama/pgvector 운영 어댑터
지식그래프 공식 133개 노드·354개 관계 탐색 및 관계 집계
MCP air 기반 nl2sql, vector_search, knowledge_graph 3개 도구
웹 데모 30개 질문, 서버 고정 역할, 정책·계획·근거 패널
로컬 LLM Ollama 계획 fallback·근거 제한 답변 어댑터, 기본 비활성
정책 그래프 ALLOW / REPAIR / APPROVAL_REQUIRED / DENY 판정
근거 표·문서·그래프 경로별 증거 ID와 답변 claim 연결
감사 HMAC 서명 JSONL 해시 체인 + 별도 서명 체크포인트
평가 공식 30문항, pgvector, Gemma 4, 내부 공격 시나리오 자동 평가

1. 빠른 시작: 완전 오프라인 기준선

요구 환경은 Node.js 24 이상과 npm입니다.

공식 데이터 받기

잠금 파일 그대로 의존성을 설치하고 로컬 비밀값을 생성한 뒤 공식 데이터를 받습니다.

npm ci
npm run setup:local
npm run fetch:data

스크립트는 리원에이스 공식 ZIP만 내려받고 SHA-256을 확인한 뒤 data/companyx에 풉니다.

3008476738D992857D738337B4882772E88288F7B314DA235D6A5D120827D772

이미 설치된 경우에는 원본을 덮어쓰지 않고 체크섬과 필수 파일만 확인합니다.

설치와 검증

npm run typecheck
npm test
npm run demo
npm run evaluate
npm run compliance

오프라인 모드는 공식 SQL 시드를 메모리 SQLite에 적재하고, 문서 검색은 의존성 없는 결정적 로컬 벡터 기준선을 사용합니다. 인터넷·Ollama·Docker 없이 정책, 3종 도구, 근거, 감사를 재현하기 위한 개발 모드입니다.

평가 결과는 artifacts/evaluation에 생성됩니다.

2. 실제 PostgreSQL 경로

Docker Desktop이 실행된 상태에서 다음을 실행합니다.

npm run setup:local
docker compose up -d --wait
docker compose ps
npm run smoke:postgres

Compose는 다음을 자동 수행합니다.

  • PostgreSQL 16 + pgvector 시작
  • 공식 8개 관계형 테이블과 document_chunks 생성
  • 공식 시드 데이터 적재
  • policygraph_reader 읽기 전용 역할 생성. DB 권한은 8개 업무 테이블과 내부 document_chunks에 부여하지만, NL2SQL은 8개 업무 테이블만 조회하며 document_chunks는 벡터 검색 어댑터에서만 사용
  • 문서 청크 고유 인덱스와 HNSW 벡터 인덱스 생성

Compose는 호스트의 loopback에만 바인딩되며 .env에 생성된 서로 다른 무작위 관리자·읽기 전용 비밀번호를 사용합니다. 스모크 테스트는 policygraph_reader로 접속합니다. 별도 환경의 데이터베이스를 사용할 때는 DATABASE_URL을 명시하십시오.

3. Ollama + pgvector 문서 검색과 선택형 로컬 LLM

이 단계는 임베딩 모델 다운로드와 로컬 Ollama 서버가 필요합니다.

ollama pull nomic-embed-text
ollama serve

다른 PowerShell 창에서 npm run setup:local이 생성한 .env의 관리자 연결 설정을 사용해 문서를 청킹·임베딩합니다. 실제 비밀번호가 들어간 연결 문자열은 문서나 저장소에 기록하지 않습니다.

npm run ingest

운영형 MCP 런타임도 같은 .env의 읽기 전용 연결로 시작합니다.

$env:POLICYGRAPH_RUNTIME = "postgres"
$env:VECTOR_MODE = "pgvector"
npm run dev:mcp

공식 예시 밖의 표현을 로컬 LLM이 계획 초안으로 만들고, 근거 제한 답변 합성을 사용하려면 Gemma 4 E2B를 별도로 준비한 뒤 선택형 모드를 켭니다.

ollama pull gemma4:e2b
$env:POLICYGRAPH_LLM_MODE = "assist"
$env:OLLAMA_CHAT_MODEL = "gemma4:e2b"
npm run dev:mcp

LLM이 만든 계획도 동일한 PlanGate를 통과해야 합니다. 각 claim은 하나의 원자적 근거 레코드만 인용할 수 있고, 해당 근거에 없는 식별자·정확한 수치·단위를 조합하거나 문서 발췌문에 없는 문장을 만들면 결정적 근거 포매터로 대체됩니다. 로컬 검증에는 gemma4:e2b 5.1B Q4_K_M과 nomic-embed-text 137M F16을 사용했습니다.

npm run smoke:ollama
npm run smoke:ollama:e2e
npm run evaluate:pgvector

검증 머신(32GB RAM, Intel Core Ultra 5 225H, CPU 추론)에서 새 표현 3건의 계획 생성은 각각 약 58.8초, 45.0초, 33.6초였습니다. 이는 품질 점수가 아니라 해당 하드웨어의 단일 실행 관측치입니다. 최종 보안 강화 후 새 E2E에서는 모델의 Product-C1 답변이 DOC-011 기반의 엄격한 claim 검증을 통과했고, 모델이 만든 viewer 급여 SQL은 POL-SQL-005/004로 실행 전에 차단됐습니다. claim 검증에 실패하는 모델 출력은 결정적 답변으로 안전하게 대체됩니다.

실제 비밀번호는 .env 파일이나 비밀 저장소로 관리하고 저장소에 커밋하지 마십시오. Compose 이미지는 재현성을 위해 pgvector 버전과 이미지 digest를 함께 고정합니다.

4. 웹 데모

npm run dev:web

브라우저에서 http://127.0.0.1:4173 을 열면 다음을 한 화면에서 확인할 수 있습니다.

  • SQL·Vector·Graph 공식 질문 30개
  • Typed QueryPlan
  • ALLOW / REPAIR / APPROVAL_REQUIRED / DENY 판정
  • 일치 정책, finding, repair
  • 검증된 답변과 evidence ledger
  • 쓰기 공격, 민감필드, 검색 예산 스트레스 시나리오

웹 역할은 POLICYGRAPH_ACTOR_ROLE로 서버에서 고정하며 요청 본문의 역할 값은 무시합니다. 웹 API는 loopback Host·same-origin·JSON·64 KiB 본문·질문 4,096바이트·요청률·동시 실행 제한을 적용합니다. MCP와 계획기에도 같은 질문 제한을 적용합니다. 외부 공개 전에는 별도의 인증·TLS 역프록시가 필요합니다.

5. MCP 도구

MCP 도구 입력 실행 경로
nl2sql Company-X 자연어 분석 질문 QueryPlan → SQL 정책 → 읽기 전용 SQL
vector_search 문서 질문, 선택 topK QueryPlan → 검색 예산 정책 → 문서 근거
knowledge_graph 관계형 자연어 질문 QueryPlan → 관계/홉 정책 → 그래프 경로

MCP 호스트 설정 예시는 다음과 같습니다.

{
  "mcpServers": {
    "trustflow-companyx": {
      "command": "node",
      "args": ["C:/absolute/path/to/trustflow-mcp-data-agent/src/mcp/server.ts"],
      "env": {
        "COMPANYX_DATA_DIR": "C:/absolute/path/to/trustflow-mcp-data-agent/data/companyx",
        "POLICYGRAPH_RUNTIME": "offline",
        "POLICYGRAPH_ACTOR_ROLE": "analyst"
      }
    }
  }
}

서버가 노출하는 역할은 호스트 환경에서 정하며 모델 입력으로 바꿀 수 없습니다. nl2sql의 선택형 approvalReceipt는 관리자만 발급할 수 있는 HMAC 서명값이며, 사용자·역할·정규화된 계획에 결합되고 5분 안에 한 번만 사용할 수 있습니다.

6. 평가 결과

현재 로컬 재현 실행 결과:

  • 공식 예시 질문: 30개
  • 자동 테스트: 37/37
  • 도구 라우팅: 30/30
  • 실행 성공: 30/30
  • 근거 연결 답변: 30/30
  • 내부 공격·경계 사례 정책 판정: 8/8
  • 오프라인 P95: 25.77ms
  • 실제 PostgreSQL P95: 173.12ms
  • pgvector 공식 문서 10문항: Hit@1 100%, Mean Recall@5 97.14%, MRR@10 1.0
  • pgvector warm P95: 215.02ms
  • Gemma 4 대표 의역 30건: 계획 스키마 100%, raw 도구 93.3%, 정책 정규화 후 도구·실행·의미 정답 100%
  • Gemma 4 적대적 회귀: 8/8

상세 결과는 평가 요약, PostgreSQL 요약, pgvector 요약에서 확인할 수 있습니다.

민감 필드가 포함된 공식 문항은 평가용으로 이름이 기록된 승인을 제공한 뒤 실행합니다. 표의 “근거 연결 답변”은 claim이 실제 evidenceId를 참조하는지 검사한 기본 지표이고, 모델 답변 경로는 여기에 원자적 단일 근거·정확한 수치와 단위·문서 발췌 일치 검사를 추가합니다. 의미적 정답률은 별도 공개 fixture 판정 결과입니다. 이 수치는 공개된 공식 예시 질문과 내부 공격 시나리오에 대한 개발 기준선으로, 대회 비공개 테스트 성능이나 범용 자연어 정확도를 의미하지 않습니다.

7. 보안 경계

PolicyGraph는 한 겹의 문자열 필터에만 의존하지 않습니다.

  1. 구조화된 QueryPlan만 실행기에 전달합니다.
  2. PostgreSQL AST 검사기가 단일 읽기 질의, 8개 업무 테이블·허용 열, 비재귀 CTE, 함수·잠금·whole-row projection을 검사하고 테이블 열 별칭 목록, JOIN ... USING, cross join과 과도한 관계 결합을 차단합니다.
  3. PlanGate가 질문 4,096바이트, 민감 필드·결과 예산·그래프 관계를 검사하고, SQL 결과는 외부 래퍼로 최대 100행을 강제합니다.
  4. PostgreSQL 실행 계정은 8개 업무 테이블과 내부 document_chunks에만 SELECT를 가지며, NL2SQL은 내부 문서 테이블에 접근할 수 없습니다. 실행에는 READ ONLY 트랜잭션과 5초 statement timeout을 함께 사용합니다.
  5. 승인은 사용자·서버 역할·정확한 계획에 결합한 단기 HMAC 영수증이며 재사용할 수 없습니다.
  6. 답변 claim은 원자적 근거 하나만 인용하고, 그 근거가 실제로 지지하는 식별자·정확한 수치와 단위·문서 발췌만 사용할 수 있습니다.
  7. 모든 런타임은 HMAC 서명 해시 체인과 별도 서명 체크포인트를 요구합니다. 원문 질문은 저장하지 않고 도메인 분리 SHA-256 digest만 기록하며, 체크포인트가 현재 원장 head와 정확히 일치하지 않으면 검증에 실패합니다.
  8. 데이터·제출 ZIP은 압축을 풀기 전에 경로, 중복 항목, 심볼릭 링크, 항목 수·크기·압축률을 검사합니다.
  9. MCP와 웹의 실패 응답은 상관 ID만 제공하고 내부 연결정보를 노출하지 않습니다.

8. 저장소 구조

src/
  adapters/        PostgreSQL, pgvector, Ollama 연결
  core/            QueryPlan, 정책 판정, 근거 계약
  evidence/        답변 구성과 해시 체인 감사 원장
  mcp/             air MCP 서버와 3개 공식 도구
  planner/         공식 질문용 결정적 계획기
  policy/          PlanGate와 정책 카탈로그
  tools/           SQL·벡터·그래프 실행기
  web/             로컬 evidence console
db/init/           읽기 전용 역할과 벡터 인덱스
policy/            RDF/SHACL 형태 정책 그래프
scripts/           데이터 설치, 데모, 평가, 적재, 스모크 검사
test/              단위·통합·공식 30문항 테스트
docs/              아키텍처와 개발 명세

9. 알려진 제한과 다음 단계

  1. 공식 30문항은 재현성을 위해 결정적 계획을 사용하며, 자유 표현은 Gemma 4 fallback의 구조화 출력 품질에 의존합니다.
  2. CPU 기반 Gemma 4는 수십 초가 걸리므로 실시간 운영에는 GPU·더 작은 모델·계획 캐시 중 하나가 필요합니다.
  3. 웹은 loopback 데모 경계이며 사용자 인증 시스템이 아닙니다. 외부 공개에는 OIDC/RBAC와 TLS 역프록시가 필요합니다.
  4. 감사 원장과 서명 체크포인트를 모두 지우고 서명 키까지 탈취할 수 있는 공격자는 로컬 파일 경계 밖입니다. 운영에서는 체크포인트를 독립 저장소나 WORM에 보관해야 합니다.
  5. 그래프는 133노드 규모의 메모리 구현입니다. 대규모 적용 시 영속 그래프 저장소와 부하 시험이 필요합니다.

10. 제출 자료

로컬 제출 후보 결과보고서 DOCX·PDF, 제출자 체크리스트와 무결성 목록은 artifacts/submission/에 있으며 개인정보·제출 작업물 혼입을 막기 위해 공개 저장소에서는 제외합니다. 공개 저장소에는 재현 가능한 소스, 평가 원자료, CycloneDX SBOM, 모델·데이터·AI 활용 고지를 포함합니다.

시연은 docs/DEMO_SCRIPT.md, 모델·데이터·AI 사용 범위는 docs/MODEL_CARD.md, docs/DATA_LICENSE.md, docs/AI_USAGE.md를 따릅니다.

라이선스

프로젝트 코드는 Apache License 2.0입니다. 공식 Company-X 데이터셋은 리원에이스가 명시한 대회 참가 목적 범위에서만 사용하며, 이 저장소에는 포함하지 않습니다.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选