知识编排服务

MCP知识栈的编排门面,通过简洁的API整合多个运行时服务,提供事实、技能、配置文件、哲学和运维功能。

  • by app-appplayer
  • Dart
  • 本地部署
  • 更新于
在 GitHub 查看 app-appplayer/mcp_knowledge

使用说明

MCP知识

mcp_knowledge 是 编排外观 MakeMind知识库。它不拥有端口、网桥或业务逻辑,而是由另一个提供的运行时组成 mcp_* 封装,并通过一个干净的、基于工厂的API公开它们。

什么 mcp_knowledge 提供

  • KnowledgeSystem --单一入口点。拥有五个立面和活动巴士,可选择运行时间。
  • KnowledgePorts --32个容量的扁平集装箱,命名为标准端口 mcp_bundle。每个字段都是可选的。
  • KnowledgeConfig --具有三个预设的分层不可变配置(defaults, development, production).
  • 5薄立面 — FactFacade, SkillFacade, ProfileFacade, PhilosophyFacade, OpsFacade.
  • KnowledgeEventBus +13个用于反应式可观测性的类型化事件类。

什么 mcp_knowledge 不提供

  • ❌ 没有自己的端口抽象——标准端口存在于 mcp_bundle.
  • ❌ 没有网桥——跨域连接是主机在运行时构建时的责任。
  • ❌ 没有原始访问器适配器——运行时公开自己的适配器。
  • ❌ 无需解析捆绑包文件——捆绑包处理现在是一种 OpsRuntime 工作流程问题。
  • ❌ 没有内联管道实现——管道执行委托给 OpsRuntime 通过 system.ops.runPipeline.

快速启动

场景A——独立事实图

import 'package:mcp_knowledge/mcp_knowledge.dart';

void main() async {
  final factGraph = FactGraphRuntime.inMemory();
  await factGraph.initialize();

  final system = KnowledgeSystem(
    config: KnowledgeConfig.defaults,
    ports: KnowledgePorts(facts: factGraph.facts),
    factGraph: factGraph,
  );

  await system.facts.writeFacts([
    FactRecord(
      id: 'f1',
      workspaceId: 'default',
      type: 'observation',
      entityId: 'user-1',
      content: const {'value': 42},
      createdAt: DateTime.now(),
    ),
  ]);

  final results = await system.facts.queryFacts(
    const FactQuery(workspaceId: 'default', entityId: 'user-1'),
  );
  print('Found ${results.length} facts');

  await system.shutdown();
}

场景G——完整编排

final factGraph = FactGraphRuntime.inMemory();
await factGraph.initialize();

final skillRuntime = SkillRuntime(
  registry: MemorySkillRegistry(),
  ports: SkillPorts(
    llm: StubLlmPort(),
    mcp: const StubMcpPort(),
    facts: factGraph.facts,
    claims: factGraph.claims,
  ),
);

final profileRuntime = ProfileRuntime(
  registry: ProfileRegistry(),
  engines: EnginePorts.stub(),
);

final philosophyEngine = PhilosophyEngine(
  ethosStore: const StubEthosStorePort(),
  facts: factGraph.facts,
);

final opsRuntime = OpsRuntime.fromConsumedPorts(ConsumedOpsPorts(
  facts: factGraph.facts,
  claims: factGraph.claims,
  skillRuntime: const StubSkillRuntimePort(),
  appraisal: const StubAppraisalPort(),
  decision: const StubDecisionPort(),
  metrics: const StubMetricsPort(),
  mcp: const StubMcpPort(),
  llm: StubLlmPort(),
  philosophy: philosophyEngine,
  kvStorage: InMemoryKvStoragePort(),
));

final system = KnowledgeSystem(
  config: KnowledgeConfig.defaults,
  ports: KnowledgePorts(facts: factGraph.facts, claims: factGraph.claims),
  factGraph: factGraph,
  skillRuntime: skillRuntime,
  profileRuntime: profileRuntime,
  philosophyEngine: philosophyEngine,
  opsRuntime: opsRuntime,
);

// Every facade is now isAvailable.
final result = await system.skill.execute('my_skill', {'input': 'hello'});
final apply = await system.profile.apply('my_profile', entityId: 'e1');
final workflows = await system.ops.listWorkflows();

await system.shutdown();

场景H——部分编排

final system = KnowledgeSystem(
  config: KnowledgeConfig.defaults,
  factGraph: factGraph,
  profileRuntime: profileRuntime,
  // skillRuntime / philosophyEngine / opsRuntime intentionally omitted
);

print(system.profile.isAvailable);    // true
print(system.skill.isAvailable);      // false
print(system.philosophy.isAvailable); // false
print(system.ops.isAvailable);        // false

// Calling an unavailable facade method throws StateError eagerly:
try {
  await system.skill.execute('any', const {});
} on StateError catch (e) {
  print(e.message);  // "SkillRuntime not configured — pass `skillRuntime: ...` …"
}

立面

FactFacade

事实图标准端口上的薄包装。从解析每个功能端口 system.factGraph 首先,然后 system.ports.

await system.facts.writeFacts([fact]);
final facts = await system.facts.queryFacts(FactQuery(workspaceId: 'ws'));
await system.facts.confirmCandidate('c1');
await system.facts.refreshSummary('e1', 'overview');

技能立面

薄包装 mcp_skill.SkillRuntime.构建一个 SkillContext 代表们 runtime.run() 因此,整个7步管道运行。

final result = await system.skill.execute(
  'my_skill',
  {'input': 'hello'},
  entityId: 'user_123',
);

轮廓立面

薄包装 mcp_profile.ProfileRuntime.构建一个 RuntimeProfileContext 代表们 runtime.apply() 因此,完整的三支柱管道(评估→ 决定→ 表达式)运行。

final result = await system.profile.apply(
  'my_profile',
  entityId: 'user_123',
  rawContent: 'optional content to format',
);

哲学外观

薄包装 mcp_philosophy.PhilosophyEngine (或裸露的 PhilosophyPort 从 KnowledgePorts).尊重每一个干预点的大门 config.philosophy.

final guidance = await system.philosophy.evaluate(context);
final tensions = await system.philosophy.detectTensions(multiLayerContext);

手术费用

薄包装 mcp_knowledge_ops.OpsRuntime的工作流/管道/runbook端口。取代传统 BundleFacade 从0.1.0开始。

final workflows = await system.ops.listWorkflows();
final handle = await system.ops.runWorkflow('skill_build', input);
final pipelineHandle = await system.ops.runPipeline('curation_pipeline', input);
final runbookExecution = await system.ops.runRunbook('my_runbook', input);

事件总线

实时事件通知:

system.eventBus.on<SkillExecutedEvent>().listen((event) {
  print('Skill ${event.skillId} executed in ${event.duration}');
});

system.eventBus.on<ProfileAppliedEvent>().listen((event) {
  print('Profile ${event.profileId} applied → ${event.decision}');
});

有13个活动课程可供选择: FactConfirmedEvent, CandidateCreatedEvent, SummaryRefreshedEvent, SkillExecutedEvent, ClaimsRecordedEvent, ProfileAppliedEvent, BundleLoadedEvent, PipelineCompletedEvent, SystemShutdownEvent, PhilosophyEvaluatedEvent, TensionDetectedEvent, ProhibitionViolatedEvent, EvolutionProposedEvent.

配置

// Three presets
final defaults = KnowledgeConfig.defaults;
final dev = KnowledgeConfig.development;
final prod = KnowledgeConfig.production;

// Custom configuration via copyWith
final config = KnowledgeConfig.defaults.copyWith(
  workspaceId: 'tenant_42',
  philosophy: PhilosophyConfig(
    enabled: true,
    enableTensionDetection: true,
    minConfidenceThreshold: 0.7,
  ),
);

建筑

┌──────────────────────────────────────────────────────────────────────┐
│                        KnowledgeSystem                               │
├──────────────────────────────────────────────────────────────────────┤
│  ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌────────┐  │
│  │FactFacade │ │SkillFacade│ │ProfileFac.│ │Philosophy │ │OpsFac. │  │
│  └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └─────┬─────┘ └───┬────┘  │
│        │             │             │              │           │      │
│  ┌─────┴─────────────┴─────────────┴──────────────┴───────────┴────┐ │
│  │                       KnowledgeEventBus                        │ │
│  └────────────────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────────────────┤
│         Optional runtimes (host constructs and injects)              │
│  FactGraphRuntime │ SkillRuntime │ ProfileRuntime                    │
│  PhilosophyEngine │ OpsRuntime                                       │
├──────────────────────────────────────────────────────────────────────┤
│       KnowledgePorts — flat 32-field standard-port container         │
│  facts/claims/entities/candidates/evidence/patterns/summaries/...    │
│  skillRuntime/skillRegistry/mcp/llm                                  │
│  metrics/appraisal/decision/expression/profileSummaries              │
│  philosophy/ethosStore                                               │
│  workflow/pipeline/scheduler/audit/runbook                           │
│  kvStorage/approval/notification/event/metric                        │
└──────────────────────────────────────────────────────────────────────┘

支持

许可证

麻省理工学院——见 许可证.