跳转到内容

开始组装

ASM 扩展目前位于此仓库的 asm/packages/ 目录,由 asm/ 独立 npm 工作区管理。以下名称来自各包的 package.json,示例用于源码集成;不要据此假定这些扩展已发布到 npm。

目录 import 名称
asm/packages/durable-pg @asm/durable-pg
asm/packages/durable-routine @asm/durable-routine
asm/packages/durable-trigger @asm/durable-trigger
asm/packages/extra-tools @asm/extra-tools
asm/packages/asm-mcp @asm/asm-mcp

五个包的版本均为 0.1.0,运行期 pi 依赖通过 peerDependencies 固定为 1.5.0,由宿主提供唯一实例。所有包均提供 dist 中的 JavaScript 和类型声明,source 条件供源码工具使用。先在仓库根目录安装并构建 pi,再在 asm/ 安装、构建和检查:

终端窗口
npm ci --ignore-scripts
npm run build
cd asm
npm ci --ignore-scripts
npm run build
npm run check
npm test
npm run test:e2e

fork 模式将 pi 依赖链接到父仓库;npm run pi:check 验证精确版本和实例唯一性。文档站是独立项目,不加载这些包。

下面的最小调用使用仓库提供的确定性模拟数据,不连接数据库或外部 API。在能够解析上述源码包的宿主中运行:

import {
AsmMcpServer,
generateAsmMultitenantSeed,
InMemoryAsmDataProvider,
} from "@asm/asm-mcp";
const seed = generateAsmMultitenantSeed();
const example = seed.knowledge[0];
if (example === undefined) throw new Error("示例知识条目缺失");
const server = new AsmMcpServer({
provider: new InMemoryAsmDataProvider(seed),
});
const result = await server.callTool(
"knowledge_search",
{ query: example.chapter, topK: 1 },
{
tenantContext: {
tenantId: example.tenantId,
scopeId: example.scopeId,
roles: ["store_manager"],
},
execution: { runId: "docs-demo", callId: "knowledge-1", mode: "direct" },
},
);
console.log(result.structuredContent);

实际应用必须从已认证的入口产生 tenantContext 和 execution。模型只提供业务参数,不能决定租户、权限或调用身份。

  1. 需要共享数据库时,用 durable-pg 建立租户与会话隔离,并由宿主维护 PostgreSQL、Redis 连接。
  2. 需要定时任务时,用 durable-routine 计算执行时刻,提供运行记录库、锁及 openHarness。
  3. 需要日历轮询或 Webhook 时,用 durable-trigger 将入口统一为事件,再交给 Routine 执行。
  4. 需要提问、子任务或技能时,安装 extra-tools 扩展;报告业务再选择 asm-mcp。

宿主负责认证、驱动适配、模型配置、轮询或 HTTP 服务,以及关闭资源。ASM 包提供组合接口,不会替宿主启动一整套服务。

源码依据:五个扩展包、模拟数据与 Provider。