跳转到正文

可类型检查的 Worker API 示例 ​

学习目录见 examples。完整入口参见接入指南、Runtime 和数据库接入。

graph-loop-worker.ts、runtime/graph-loop.ts、runtime/placement.ts 在导入时执行。下表逐 API 文件只导出示例函数,导入不发起请求。模型、数据库与 MCP 参数都是应用提供的已配置资源;按需调用函数,模型可能消耗供应商额度,写入/更新/删除会执行实际操作。

文件参考所需资源
context.tsCONTEXT显式 Context、Redis 或 ContextStateStore
memory.tsMEMORYMemoryResources;过滤、游标与排序由插件定义
infer.tsINFER · ProviderInferClient/ModelConfig 或 setupInfer 加载的配置
interaction.tsINTERACTION工作目录权限;MCP 使用已连接客户端与允许的绝对路径
retrieval.tsRETRIEVAL · Provider搜索、embedding、rerank 后端;完整 MemoryItem 或 mapOutput

在仓库根目录运行 npm run typecheck。tsconfig 包含这些文件,但发布构建不包含它们。这些是 API 调用示例,不是另一套 SDK,也不会自动执行真实集成测试。// example: 区域会出现在对应 API 文档,修改签名时需保持两者一致。

完整本地任务可用 npm run example:agent 或 npm run example:tools。MCP 配置见接入指南。使用 Node --env-file=.env 或应用加载器显式读取环境文件;loadRuntimeConfigFile 读取 YAML 并使用传入的环境,不自行读取 .env。

函数说明 ​

对象和构造函数不会自动运行 Graph。调用者按签名注入已经配置好的资源。

memory.ts ​

函数 / 对象用途与实际行为
setupMemory加载配置,同时创建 MEMORY Worker/Runtime 与直接 SDK;两者使用应用提供的存储与检索资源。
getMemory按 ID 和 key 精确读取,展示重复 ID 去重与 NodeResult 成功检查。
queryMemory按 id 排序读取最多两页,传递 nextCursor 并合并 items;插件须支持示例排序字段。
searchMemory使用数据库插件的默认检索策略,读取完整记忆及可选 score。
writeMemory写入一条语言偏好,返回数据库分配的 id;重复 key 的行为由插件决定。
updateMemory按已有 id 替换内容并清空 metadata,展示 partial update 的字段语义。
deleteMemory删除指定 id,查看实际删除列表;重复 id 不会重复报告。
executeMemory用统一 execute 入口调用 MEMORY.QUERY。
adaptDatabase将已符合 Memory 契约的应用数据库适配器包装为 store/search,保留方法的 this 绑定。
memoryErrors演示非法 limit 与应用 MemoryError 如何返回结构化失败。
memoryGraph将 MEMORY.GET 放入 Graph,通过 Runtime 执行后关闭。
customGet通过节点描述符定义一个显式 NOT_CONFIGURED 失败处理器;展示 define 用法,不读数据库。

infer.ts ​

函数 / 对象用途与实际行为
setupInfer加载 YAML/env 配置,创建共享缓存的 Worker、Runtime 与直接 SDK。
sample单次模型采样,读取 Message、finishReason 和 usage。
sampleActions向模型声明 read_text 动作;只生成动作请求,不实际执行文件读取。
trajectory执行 CoT 轨迹,同时检查外层 success 与内层 completed。
strategyRequests只构造 CoT、Long CoT、ToT、GoT、Self-consistency 五种请求,不调用模型。
reflectModes根据传入的 critique/verify/revise 模式评估或修正候选答案。
deliberateModes根据 select/merge/consensus/debate 模式处理候选;只有 select 设置 selectCount。
cacheApis演示缓存写入、命中读取,以及按 key/tag/namespace 失效。
executeInfer通过统一 execute 入口采样,并设置单次调用 timeoutMs。
streamApis依次消费四类 reasoning 流,展示各自终态输出;运行该函数会发起多次模型调用。
cancelInfer传入预先取消的 AbortSignal,演示不发起模型请求的 cancelled 返回。
cacheProviderApi直接调用缓存后端的 write/lookup/invalidate;返回原始输出,不套 NodeResult。
refineStrategy自定义策略函数:生成初稿、修订、审议选择,再记录公开决策步骤;注入后才能按名称使用。
providerRegistryApis注册模型 Provider、按名称解析、调用原始 invoke,并在结束时注销。
providerStream直接消费 Provider 流;不支持 stream 时回退到 invoke。
httpModelProvider按传入配置创建 HTTP 模型适配器;构造本身不发请求。
sampleDescriptor将现有 SDK 的 sample 方法包装为一个 NodeDefinition,不自动注册或执行。

interaction.ts ​

函数 / 对象用途与实际行为
readTextTool定义读取工作区文件的工具,包括参数校验、能力描述和 Sandbox 文件读取。
consoleSink定义控制台输出接收端,打印消息并返回 accepted 回执。
setupInteraction将文件工具、已连接 MCP 客户端和输出接收端注册进同一个 Worker/Runtime。
interactionNodes使用注册表、createInteractionNodes 与 defineWorker 组装 Worker。
interactionHandlers分别用各 handler 工厂组装四个 Interaction 节点。
toolRegistryApis在真实 WorkerContext 中注册工具、列出允许的定义、调用工具并注销。
invokeTool通过 Runtime 真实读取 README.md,展示 ExternalResult 不含 output 包装。
mcpRegistryApis直接使用 McpRegistry 发现工具、调用 read_text_file,并注销客户端绑定。
invokeMcp通过 Runtime 调用 MCP 发现与文件读取,区分两种响应形状。
observeApis对比纯函数与 OBSERVE 节点的标准化结果;使用本地给定结果,不调用外部服务。
outputApi向控制台接收端提交结构化消息与 artifact 引用,返回交付回执;不创建 artifact 文件。
missingRecordTool定义返回 NOT_FOUND 的示例工具,用于说明业务失败结果。
rejectedSink定义返回 rejected 的接收端,用于说明交付失败回执。
interactionGraph通过 Graph + Loop 读取 README.md 和 package.json,并输出两次观察结果。
observationDefinition用节点描述符定义 OBSERVE handler,不自动注册或执行。
mcpClientAdapter包装中立 MCP 客户端,保留方法的 this 绑定和可选响应字段。

retrieval.ts ​

函数 / 对象用途与实际行为
request公共示例请求:查询 agent memory、逻辑目标 kb、limit=5;只是数据。
setupRetrieval显式注册可选 Worker 与逻辑 target/strategy,并创建直接检索 SDK。
retrievalSearch用同一个后端分别执行 SDK 和 Runtime 检索,展示候选输出。
registryResolve按目标选择默认策略 Provider,直接读取原始结果。
cancelRetrieval演示 search 第三个参数中的 AbortSignal,以及第二个参数的后备默认值。
embeddingApis比较直接 embed 与分批 embedContents,并用 validateVector 检查维度。
httpEmbedding从 env 创建真实 HTTP embedding Provider,使用 YAML 批次配置生成查询向量。
externalVector先调用外部 embedding,再将向量交给数据库后端检索。
nativeVector将原始查询交给具备内置 embedding 的数据库后端。
precomputedVector直接使用已有向量检索,并校验向量维度。
textSearch包装数据库的原生文本检索,不进行 embedding。
hybridSearch并行调用 vector 与 keyword 分支,再通过加权 RRF 融合候选。
rerankApis使用 embedding 创建 cosine 重排器,对比原始 index/score 与映射后的候选结果。
rerankSearch扩大召回池后使用注入的 reranker 重排,截取请求数量。
sqlSearch创建使用 PostgreSQL 全文 SQL 的检索适配器;注入 query 回调,绑定文本和租户参数。
milvusSearch创建 Milvus 请求/响应适配器;注入 SDK search,映射 namespace 与完整 MemoryItem。
nativeMemoryInRetrieval把数据库原生 MemorySearchProvider 转成 Retrieval Provider,再映射回 Memory 结果。
nativeMemoryWithNamespace将 Retrieval namespace 显式转换为插件的 tenant filter;不替代鉴权。
localMemoryPipeline在 MEMORY 内直接复用检索 pipeline,不启动 RETRIEVAL Worker。
delegatedMemory将 MEMORY.SEARCH 委托给 Runtime 中的 RETRIEVAL.SEARCH;示例采用同进程路由。
mapTextCandidates把候选中的完整业务内容映射为 MemoryItem;片段/ID 索引需要改成批量补全。
retrievalDescriptor将检索 SDK 包装为单个 NodeDefinition,保留 SDK 校验与 NodeResult。

context.ts ​

函数 / 对象用途与实际行为
setupContext创建 SDK 与 Worker;详见 CONTEXT。
loadContextLOAD:消息、条目与引用;详见 CONTEXT。
selectContextSELECT:推理与记忆用途;详见 CONTEXT。
updateContextUPDATE:增量与来源;详见 CONTEXT。
compressContextCOMPRESS:预算;详见 CONTEXT。
executeContextexecute:通用调用;详见 CONTEXT。
cachedContext四个节点的缓存调用;详见 CONTEXT。
redisStoreRedis 存储与显式版本;详见 CONTEXT。
contextServices注入自定义服务;详见 CONTEXT。
ragContextRAG 策略;详见 CONTEXT。
contextRetrieval复用 RETRIEVAL Provider;详见 CONTEXT。
contextToInfer传入 INFER;详见 CONTEXT。
memoryToContextMEMORY 与 Context Graph;详见 CONTEXT。
contextFlowsRAG 与 Skill 流程;详见 CONTEXT。
contextErrors错误分支;详见 CONTEXT。
directStrategies复用内置策略;详见 CONTEXT。
customContextLoad自定义节点描述符;详见 CONTEXT。
contextToMemory写入长期 MEMORY。
toolToCachedContext工具观察写入缓存。
remoteContextRetrieval委托独立 RETRIEVAL。

建议顺序 ​

  1. 无外部依赖时先运行完整入门示例。
  2. 按 Worker 选择函数、注入资源。setupMemory/setupInfer/setupInteraction/setupRetrieval 返回的 Runtime 由调用者关闭。
  3. 修改后运行 npm run typecheck;仅运行 node docs/worker-api/examples/memory.ts 不会执行导出的函数。

数据库接入提供 Redis Context 和 SQL/Milvus Memory。Runtime 示例涵盖首次 Graph、自定义 Worker、事件、Artifact、资源关闭以及 RAG/Skill/Tool/MCP/ReAct;各目录说明区分直接执行入口和可安全导入的函数模块。

Ditto · @codesoul-co/ditto · Node.js 24+