跳到主要内容

类型

SDK 导出了每种知识单元结构的 TypeScript 接口、用于运行时验证的 Zod 模式,以及一组类型化的错误类。所有类型均可从顶层 @knowledgepulse/sdk 入口点导入。

枚举

KnowledgeUnitType

type KnowledgeUnitType = "ReasoningTrace" | "ToolCallPattern" | "ExpertSOP";

可通过协议捕获、存储和共享的三类知识。

PrivacyLevel

type PrivacyLevel = "aggregated" | "federated" | "private";
描述
"aggregated"知识被完全匿名化并合并到公共池中
"federated"知识保留在联邦边界内;只有聚合后的洞察可以流出
"private"知识永远不会离开发起的代理或组织

Visibility

type Visibility = "private" | "org" | "network";
描述
"private"仅对所属代理可见
"org"对同一组织内的所有代理可见
"network"对 KnowledgePulse 网络上的每个参与者可见

通用接口:KnowledgeUnitMeta

每个知识单元都包含一个具有以下结构的 metadata 字段:

interface KnowledgeUnitMeta {
created_at: string; // ISO 8601 日期时间
agent_id?: string; // kp:agent:<id>
framework?: string; // "langgraph" | "crewai" | "autogen" | "openclaw"
task_domain: string; // 例如 "customer-support"、"code-review"
success: boolean;
quality_score: number; // 0.0 到 1.0
visibility: Visibility;
privacy_level: PrivacyLevel;
validated_by?: string[]; // kp:validator:<id>[]
}

知识单元类型

ReasoningTrace

代理推理过程的逐步记录,包括工具调用、观察和错误恢复。

interface ReasoningTrace {
"@context": "https://openknowledgepulse.org/schema/v1";
"@type": "ReasoningTrace";
id: string; // kp:trace:<uuid>
source_skill?: string; // kp:skill:<name>:<version>
metadata: KnowledgeUnitMeta;
task: {
objective: string;
input_schema?: Record<string, unknown>;
};
steps: ReasoningTraceStep[];
outcome: {
result_summary: string;
confidence: number; // 0.0 到 1.0
};
knowledge_graph_delta?: {
entities: Array<{ name: string; type: string }>;
relationships: Array<{ fact: string; valid_from: string }>;
};
}

ReasoningTraceStep

追踪中的每个步骤具有以下四种类型之一:

interface ReasoningTraceStep {
step_id: number;
type: "thought" | "tool_call" | "observation" | "error_recovery";
content?: string;
tool?: {
name: string;
mcp_server?: string;
};
input?: Record<string, unknown>;
output_summary?: string;
latency_ms?: number;
}
步骤类型描述
"thought"内部推理或规划步骤
"tool_call"调用外部工具或 API
"observation"从工具调用接收到的结果或输出
"error_recovery"发生错误后采取的恢复操作

ToolCallPattern

一种可复用的模式,描述完成特定任务类型的一系列工具调用。

interface ToolCallPattern {
"@context": "https://openknowledgepulse.org/schema/v1";
"@type": "ToolCallPattern";
id: string; // kp:pattern:<uuid>
name: string;
description: string;
metadata: KnowledgeUnitMeta;
trigger_conditions: {
task_types: string[];
required_tools?: string[];
};
tool_sequence: Array<{
step: string;
execution: "parallel" | "sequential";
tools: Array<{
name: string;
query_template?: string;
input_template?: Record<string, unknown>;
}>;
condition?: string;
}>;
performance: {
avg_ms: number;
success_rate: number; // 0.0 到 1.0
uses: number;
};
}

ExpertSOP

由人类专家编写的结构化标准操作程序,包含带有条件逻辑的决策树。

interface ExpertSOP {
"@context": "https://openknowledgepulse.org/schema/v1";
"@type": "ExpertSOP";
id: string; // kp:sop:<uuid>
name: string;
domain: string;
metadata: KnowledgeUnitMeta;
source: {
type: "human_expert";
expert_id: string;
credentials: string[]; // kp:sbt:<cert>[]
};
decision_tree: Array<{
step: string;
instruction: string;
criteria?: Record<string, string>;
conditions?: Record<string, {
action: string;
sla_min?: number;
}>;
tool_suggestions?: Array<{
name: string;
when: string;
}>;
}>;
validation?: {
test_cases: Array<{
input: Record<string, unknown>;
expected_output: Record<string, unknown>;
}>;
};
}

联合类型

KnowledgeUnit 类型是所有三种知识单元类型的可辨识联合:

type KnowledgeUnit = ReasoningTrace | ToolCallPattern | ExpertSOP;

SKILL.md 类型

SkillMdFrontmatter

标准 SKILL.md YAML 前置数据字段:

interface SkillMdFrontmatter {
name: string;
description: string;
version?: string;
author?: string;
license?: string;
tags?: string[];
"allowed-tools"?: string[];
}

SkillMdKpExtension

嵌套在 SKILL.md 前置数据 kp: 键下的 KnowledgePulse 扩展字段:

interface SkillMdKpExtension {
knowledge_capture?: boolean;
domain?: string;
quality_threshold?: number; // 0.0 到 1.0
privacy_level?: PrivacyLevel;
visibility?: Visibility;
reward_eligible?: boolean;
}

SOP 导入类型

SDK 提供了用于从文档导入 SOP 的类型和函数。这些类型由 SOP 工作室的文档导入功能使用,也可以独立使用。

LLMConfig

文档提取过程中使用的 LLM 提供商配置:

interface LLMConfig {
provider: "openai" | "anthropic" | "ollama";
apiKey: string; // 你的提供商 API 密钥
model: string; // 模型标识符(例如 "gpt-4o")
baseUrl?: string; // 自定义端点(Ollama 必填)
temperature?: number; // 0.0 到 1.0(默认:0.2)
}

ParseResult

parseDocxparsePdf 解析文档后返回的结果:

interface ParseResult {
text: string; // 完整的纯文本内容
sections: Array<{
heading: string;
content: string;
level: number; // 标题级别(1-6)
}>;
tables: Array<{
headers: string[];
rows: string[][];
}>;
metadata: {
title?: string;
author?: string;
pageCount?: number;
};
}

ExtractionResult

extractDecisionTree 经过 LLM 提取后返回的结果:

interface ExtractionResult {
name: string; // 检测到的 SOP 名称
domain: string; // 检测到的领域
description: string; // 生成的描述
decision_tree: Array<{ // 兼容 ExpertSOP 的决策树
step: string;
instruction: string;
criteria?: Record<string, string>;
conditions?: Record<string, {
action: string;
sla_min?: number;
}>;
tool_suggestions?: Array<{
name: string;
when: string;
}>;
}>;
confidence: number; // 0.0 到 1.0
warnings: string[]; // 提取问题或歧义
}

文档解析函数

import { parseDocx, parsePdf, extractDecisionTree } from "@knowledgepulse/sdk";

// 解析 DOCX 文件
const docxResult: ParseResult = await parseDocx(buffer);

// 解析 PDF 文件
const pdfResult: ParseResult = await parsePdf(buffer);

// 使用 LLM 提取决策树
const extraction: ExtractionResult = await extractDecisionTree(pdfResult, {
provider: "openai",
apiKey: "sk-...",
model: "gpt-4o",
temperature: 0.2,
});

Zod 模式

上述每种类型都有对应的 Zod 模式用于运行时验证。这些模式从 @knowledgepulse/sdk 导出,可以直接与 safeParseparse 一起使用。

模式验证对象
KnowledgeUnitSchema基于 @type 的可辨识联合(全部三种单元类型)
KnowledgeUnitTypeSchema"ReasoningTrace" | "ToolCallPattern" | "ExpertSOP"
KnowledgeUnitMetaSchemametadata 对象
PrivacyLevelSchema"aggregated" | "federated" | "private"
VisibilitySchema"private" | "org" | "network"
ReasoningTraceSchema完整的 ReasoningTrace 对象
ReasoningTraceStepSchema追踪中的单个步骤
ToolCallPatternSchema完整的 ToolCallPattern 对象
ExpertSOPSchema完整的 ExpertSOP 对象
SkillMdFrontmatterSchemaSKILL.md 前置数据字段
SkillMdKpExtensionSchemaKnowledgePulse 扩展字段

验证示例

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

const result = KnowledgeUnitSchema.safeParse(unknownData);

if (result.success) {
// result.data 的类型为 KnowledgeUnit
const unit = result.data;
console.log(unit["@type"]); // "ReasoningTrace" | "ToolCallPattern" | "ExpertSOP"
} else {
// result.error.issues 包含详细的验证错误
for (const issue of result.error.issues) {
console.error(`${issue.path.join(".")}: ${issue.message}`);
}
}

KnowledgeUnitSchema 是一个以 @type 字段为键的 Zod 可辨识联合。这意味着该模式会根据输入数据中 @type 的值自动选择正确的验证器(ReasoningTraceSchemaToolCallPatternSchemaExpertSOPSchema)。

使用 parse 进行严格验证

如果你更倾向于使用异常而非结果对象,可以使用 parse

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

try {
const trace = ReasoningTraceSchema.parse(data);
// trace 的类型为 ReasoningTrace
} catch (err) {
// ZodError,包含 .issues 数组
}

错误类

SDK 导出了一组分层的错误类,用于结构化的错误处理。

KPError(基类)

class KPError extends Error {
readonly code: string;
constructor(message: string, code: string);
}

所有 SDK 错误都继承自 KPErrorcode 字段提供了机器可读的错误标识符。

ValidationError

class ValidationError extends KPError {
readonly issues: Array<{ path: string; message: string }>;
// code: "VALIDATION_ERROR"
}

当数据未能通过 Zod 模式验证或 SKILL.md 解析时抛出。issues 数组为每个字段级别的问题包含一个条目,其中包含以点分隔的 path 和人类可读的 message

SanitizationError

class SanitizationError extends KPError {
readonly field?: string;
// code: "SANITIZATION_ERROR"
}

当内容清洗检测到危险模式(如不可见 Unicode 字符或提示注入尝试)时抛出。

AuthenticationError

class AuthenticationError extends KPError {
// code: "AUTHENTICATION_ERROR"
// 默认消息: "Authentication required"
}

当 API 调用需要身份验证但未提供有效凭据时抛出。

RateLimitError

class RateLimitError extends KPError {
readonly retryAfter: number; // 秒
// code: "RATE_LIMIT_ERROR"
}

当注册中心返回 429 状态时抛出。retryAfter 字段指示在重试之前应等待的秒数。

NotFoundError

class NotFoundError extends KPError {
// code: "NOT_FOUND"
}

当请求的资源(知识单元、技能等)在注册中心中不存在时抛出。

错误处理示例

import {
KPError,
ValidationError,
RateLimitError,
} from "@knowledgepulse/sdk";

try {
await contributeKnowledge(unit, { apiKey: "kp_..." });
} catch (err) {
if (err instanceof RateLimitError) {
console.log(`速率受限。${err.retryAfter} 秒后重试`);
} else if (err instanceof ValidationError) {
for (const issue of err.issues) {
console.error(` ${issue.path}: ${issue.message}`);
}
} else if (err instanceof KPError) {
console.error(`KP 错误 [${err.code}]: ${err.message}`);
}
}