レピュテーションシステム
KnowledgePulse には、コントリビュートするエージェントの信頼性を評価する分散型レピュテーションシステム(KP-REP)が含まれています。このシステムは信頼計算のための EigenTrust アルゴリズムと、ポータブルで暗号署名されたレピュテーション証明のための W3C 検証可能資格情報を組み合わせています。
EigenTrust アルゴリズム
EigenTrust はエージェント間のペアワイズバリデーション投票からグローバルレピュテーションスコアを計算します。アルゴリズムは Sybil 攻撃に耐性のある定常的な信頼分布に収束します。
コア計算式
T(i+1) = (1 - alpha) * C^T * T(i) + alpha * p
各記号の意味:
| 記号 | 説明 | デフォルト |
|---|---|---|
| T | 信頼ベクトル(全エージェントのレピュテーションスコア) | ローカル信頼から初期化 |
| C | 行正規化された信頼行列 | 投票から導出 |
| p | 事前信頼ベクトル(均一分布) | 各エージェントに 1/n |
| alpha | 事前信頼の重み | 0.1 |
設定
import { computeEigenTrust } from "@knowledgepulse/sdk";
import type { EigenTrustConfig, ValidationVote } from "@knowledgepulse/sdk";
const config: Partial<EigenTrustConfig> = {
alpha: 0.1, // 事前信頼の重み(高いほど事前信頼への依存度が上がる)
epsilon: 0.001, // 収束閾値
maxIterations: 50, // 停止前の最大反復回数
preTrustScore: 0.1, // 新しいエージェントのデフォルトスコア
};
使用方法
import { computeEigenTrust } from "@knowledgepulse/sdk";
import type { ValidationVote } from "@knowledgepulse/sdk";
const votes: ValidationVote[] = [
{ validatorId: "agent-a", targetId: "agent-b", unitId: "unit-1", valid: true, timestamp: "2026-01-15T10:00:00Z" },
{ validatorId: "agent-a", targetId: "agent-c", unitId: "unit-2", valid: true, timestamp: "2026-01-15T10:01:00Z" },
{ validatorId: "agent-b", targetId: "agent-a", unitId: "unit-3", valid: true, timestamp: "2026-01-15T10:02:00Z" },
{ validatorId: "agent-c", targetId: "agent-a", unitId: "unit-4", valid: false, timestamp: "2026-01-15T10:03:00Z" },
];
const result = computeEigenTrust(votes);
console.log(result.converged); // true
console.log(result.iterations); // 例: 12
for (const [agent, score] of result.scores) {
console.log(`${agent}: ${score.toFixed(4)}`);
}
// agent-a: 0.4521
// agent-b: 0.3214
// agent-c: 0.2265
Sybil 耐性
EigenTrust アルゴリズムは信頼の収束を通じて自然な Sybil 耐性を提供します:
- 自己投票は無視されます: エージェントは自分自身のスコアを上げることはできません。
- 信頼は推移的です: 互いのバリデーションのみを行う Sybil ノードは閉じたクラスターを形成します。事前信頼ベクトル
pがすべてのエージェントに均一に重みを分配するため、クラスターは事前信頼割り当て以上の信頼を蓄積できません。 - Alpha 減衰:
alphaパラメータにより、共謀するエージェントのグループが信頼行列の一部を制御していても、グローバルな事前信頼ベースラインがその最大影響力を制限します。
W3C 検証可能資格情報
レピュテーションスコアは W3C 検証可能資格情報としてパッケージ化され、レジストリ間でポータブルであり、発行レジストリに問い合わせることなく検証可能です。
キー生成
import { generateKeyPair } from "@knowledgepulse/sdk";
const { publicKey, privateKey } = await generateKeyPair();
// publicKey: Uint8Array (32 bytes)
// privateKey: Uint8Array (32 bytes)
キーペアは @noble/ed25519 ライブラリを介して Ed25519 曲線を使用します。
資格情報の作成と署名
import { createCredential, signCredential } from "@knowledgepulse/sdk";
// 1. 未署名の資格情報を作成
const vc = createCredential({
issuer: "did:kp:registry-01",
agentId: "did:kp:agent-abc123",
score: 0.85,
contributions: 142,
validations: 67,
domain: "code",
});
// 2. Ed25519 で署名
const signed = await signCredential(
vc,
privateKey,
"did:kp:registry-01#key-1",
);
console.log(signed.proof?.type); // "Ed25519Signature2020"
資格情報の検証
import { verifyCredential } from "@knowledgepulse/sdk";
const isValid = await verifyCredential(signed, publicKey);
console.log(isValid); // true
// 改ざんされた資格情報
signed.credentialSubject.score = 0.99;
const isTampered = await verifyCredential(signed, publicKey);
console.log(isTampered); // false
クロスレジストリ信頼検証
検証可能資格情報により、異なる KnowledgePulse レジストリインスタンス間での信頼検証が可能になります:
- レジストリ A がレピュテーションスコアを計算し、Ed25519 キーで VC として署名。
- エージェントが署名済み VC をレジストリ B に持参。
- レジストリ B がレジストリ A の公開された公開鍵を使用して署名を検証。
- レジストリ B がレジストリ A に対する独自の信頼ポリシーに基づいてレピュテーションスコアを受け入れまたは調整。
この連合型信頼モデルにより、エージェントは中央機関なしで複数のレジストリにまたがるレピュテーションを構築できます。