본문으로 건너뛰기

평가 알고리즘

KnowledgePulse 평가 엔진은 네 가지 독립적인 품질 차원을 결합하는 복합 공식을 사용하여 추론 추적을 평가합니다. Phase 2에서 엔진은 다양한 작업 도메인에 평가 강조점을 맞추는 도메인별 가중치 프로필을 도입하고, 평가당 100ms 성능 예산을 적용합니다.

복합 공식

전체 품질 점수는 네 가지 정규화된 차원의 가중 합으로 계산됩니다:

score = C x wC + N x wN + D x wD + O x wO

가중치(wC, wN, wD, wO)는 도메인에 따라 달라지며, 항상 합이 1.0입니다.

도메인별 가중치 프로필

사용 가능한 프로필

도메인wC (복잡도)wN (참신성)wD (도구 다양성)wO (결과)
default0.250.350.150.25
finance0.200.250.100.45
code0.200.300.300.20
medical0.150.200.100.55
customer_service0.200.300.200.30

설계 근거

  • Finance는 재무 분석이 정확하고 검증 가능한 결론을 요구하기 때문에 결과 신뢰도에 높은 가중치를 부여합니다.
  • Code는 효과적인 코딩 에이전트가 여러 도구(린터, 타입 체커, 테스트 러너)를 활용하기 때문에 도구 다양성에 높은 가중치를 부여합니다.
  • Medical은 의료 추론에서 정확성이 중요하므로 가장 높은 결과 신뢰도 가중치(0.55)를 가집니다.
  • Customer service는 창의적이면서도 효과적인 문제 해결을 보상하기 위해 참신성과 결과 신뢰도의 균형을 맞춥니다.

도메인 프로필 사용

도메인 선택은 추적 메타데이터를 통해 자동으로 이루어집니다:

import { evaluateValue } from "@knowledgepulse/sdk";
import type { ReasoningTrace } from "@knowledgepulse/sdk";

const trace: ReasoningTrace = {
"@context": "https://openknowledgepulse.org/schema/v1",
"@type": "ReasoningTrace",
id: "kp:trace:finance-demo-001",
metadata: {
created_at: new Date().toISOString(),
task_domain: "finance", // <- finance 가중치 프로필 선택
success: true,
quality_score: 0,
visibility: "network",
privacy_level: "aggregated",
},
task: { objective: "Analyze TSMC Q4 earnings report" },
steps: [
{ step_id: 0, type: "thought", content: "Extracting revenue and margin data" },
{ step_id: 1, type: "tool_call", tool: { name: "financial_data_api" }, input: { ticker: "TSM" } },
{ step_id: 2, type: "observation", content: "Revenue: $26.3B, up 14.3% YoY" },
{ step_id: 3, type: "tool_call", tool: { name: "comparison_tool" }, input: { metric: "gross_margin" } },
{ step_id: 4, type: "observation", content: "Gross margin 57.9%, above industry average" },
],
outcome: {
result_summary: "Strong quarterly performance driven by AI chip demand",
confidence: 0.92,
},
};

const score = await evaluateValue(trace);
// finance 가중치에서 높은 결과 신뢰도(0.92)가 더 많이 기여
console.log(score); // 예: 0.78

등록된 프로필과 일치하지 않는 도메인은 default 가중치를 사용합니다. 알 수 없는 도메인은 조용히 처리됩니다 -- 오류가 발생하지 않습니다.

규칙 기반 재정의

가중 복합 점수 계산 후, 세 가지 결정적 재정의가 순서대로 적용됩니다:

1. 단일 단계 벌점

if (steps.length === 1 && steps[0].type === "thought") score = 0.1;

2. 오류 복구 보너스

if (errorRecovery > 2 && metadata.success) score = Math.min(1.0, score + 0.1);

3. 제로 다양성 벌점

if (uniqueTools <= 1 && steps.some(s => s.tool)) score = Math.max(0.0, score - 0.1);

참신성을 위한 시간적 감쇠

참신성 차원은 로컬 벡터 캐시에 대한 임베딩 기반 유사성을 사용합니다. 벡터 캐시는 TTL 기반 제거를 지원하여 캐시된 항목이 구성 가능한 시간 후에 만료됩니다.

import { VectorCache } from "@knowledgepulse/sdk";

const cache = new VectorCache({
maxElements: 1000,
dimensions: 384,
ttlMs: 3600000, // 1시간 -- 항목이 이 시간 후 만료
});

성능 예산

평가 함수는 일반적인 추적에 대해 100ms 이내에 완료되도록 설계되었습니다:

구성 요소전략지연 시간
벡터 캐시1,000개 벡터에 대한 브루트포스 선형 스캔< 1ms
임베더지연 로드, 첫 호출 후 캐시~50ms 첫 호출, ~5ms 이후
복합 계산순수 산술, I/O 없음< 0.1ms
규칙 재정의세 가지 조건부 확인< 0.01ms

선택적 임베더(@huggingface/transformers)가 설치되지 않은 경우, 참신성이 0.5로 기본 설정되어 전체 평가가 1ms 미만에 실행됩니다.

예제: 도메인 프로필 비교

다른 도메인에서 평가된 동일한 추적은 가중치 차이로 인해 다른 점수를 생성합니다:

const domains = ["default", "finance", "code", "medical", "customer_service"];

for (const domain of domains) {
const trace = createTrace({ task_domain: domain });
const score = await evaluateValue(trace);
console.log(`${domain}: ${score.toFixed(3)}`);
}

// 예제 출력 (추적 내용에 따라 다름):
// default: 0.623
// finance: 0.714 (높은 신뢰도 보상)
// code: 0.598 (도구 다양성 강조)
// medical: 0.751 (신뢰도 우세)
// customer_service: 0.645 (균형)