系统提示词组装
AssembleContext 标识一次组装所解析的作用域层,并可携带该请求的显式控制信号。它可合并扩展:dsh-agent 添加可选字段 agent,用于携带当前的 agent(智能体)实例;assembleContextFor(agent, signal) 则一起设置这些显式字段。裸组装既没有作用域,也没有信号。
/** Merge-extensible context for one prompt assembly. */interface AssembleContext { /** * Scope whose providers and waterfall listeners participate. When absent, * only global providers and subject-less listeners participate. */ scope?: ScopeKey /** Explicit control signal for the turn that requested this assembly, when any. */ signal?: AbortSignal}工具提供方结果
Section titled “工具提供方结果”ToolProviderResult.schemas 是当前组装中对模型可见的工具 schema 集合。knownNames 是提供方在限制前的名称全集,用于区分「配置名拼写错误」与「已知工具在此作用域中被有意隐藏」。
/** Tool schemas visible in one assembly and their pre-restriction name set. */interface ToolProviderResult { /** The schemas this provider contributes to THIS assembly. */ readonly schemas: readonly ToolSchema[] /** The pre-restriction name universe for config validation (defaults to `schemas`' names). */ readonly knownNames?: readonly string[]}PromptSection 是一份只读的同进程注册约定。其文本可以是静态的,也可以从当前组装上下文动态解析。协作式组装完成后,一个有效的 complete 段会成为唯一的提示词段落。
/** One contributed section of the system prompt (registry input). */interface PromptSection { /** Unique name — a duplicate registration throws (see {@link SystemPrompt.section}). */ readonly name: string /** * Sections are concatenated in ascending order. Convention: `-100` is the * harness identity, `0` the deployment persona, tool guidance uses 100–199; * other negative orders also render before the persona. */ readonly order: number /** * Static text or a provider evaluated at each assembly with that assembly's * {@link AssembleContext}. The text may reference `{{variable}}`s — they are * interpolated later, by {@link renderPrompt}. */ readonly text: string | ((context: AssembleContext) => string) /** * Treat this contribution as the complete system prompt. Assembly still * runs the cooperative waterfall so tools, contexts, and variables can be * resolved, then restores this exact section as the sole prompt section. * More than one effective complete section makes assembly fail. */ readonly complete?: boolean}动态提示词上下文
Section titled “动态提示词上下文”PromptContext 是与 PromptSection 对应的缓存安全结构。组装会解析这些贡献并排序;agent loop(智能体循环)仅在完整当前快照发生变化或被压缩(compaction)移除时,才会将其记录在保留的模型历史之后。
/** Dynamic model context materialized as a durable user-role snapshot. */interface PromptContext { /** Unique name — a duplicate registration throws (see {@link SystemPrompt.context}). */ readonly name: string /** Contexts are joined in ascending order. */ readonly order: number /** Static text or a provider evaluated for each assembly. Empty text contributes nothing. */ readonly text: string | ((context: AssembleContext) => string)}Cordis API
Section titled “Cordis API”Generated from source by scripts/gen-cordis-catalog.ts (verified fresh by pnpm run verify-cordis-catalog in doc-sync; regenerate with pnpm run gen-cordis-catalog) — this section is byte-identical in both language sides of the page. Signature blocks use a ts cordis-catalog fence and keep the original source JSDoc; dispatch modes are defined in the primer, and the framework-inherited ctx API lives in cordis-api/inherited.md.
ctx.systemPrompt — SystemPrompt
Section titled “ctx.systemPrompt — SystemPrompt”Registry service for the prompt inputs assembled before each model step.
/** * Register an ordered prompt section in the calling context's scope. A scoped * section shadows a global section with the same name; duplicates within one * layer and non-finite orders throw. Registration and disposal emit * `system-prompt/change`. * @param section - the section to register. * @returns the exact Cordis effect disposer. */section(section: PromptSection): () => void
/** * Register ordered dynamic context in the calling context's scope. Scoped * entries shadow global entries with the same name. * @param context - the context contribution to register. * @returns the exact Cordis effect disposer. */context(context: PromptContext): () => void
/** * Suppress every dynamic runtime-context contribution in the calling * context's scope without changing the services that own or enforce those * facts. Multiple suppressors remain independently disposable. * @returns the exact Cordis effect disposer. */suppressRuntimeContext(): () => void
/** * Register a tool-schema provider in the calling context's scope. Global and * matching scoped providers both contribute; returning the reserved * {@link TOOL_ORDER_REST} name makes assembly fail. * @param provider - evaluated for each assembly with its context. * @returns the exact Cordis effect disposer. */tools(provider: (context: AssembleContext) => ToolProviderResult): () => void
/** * Register a prompt variable in the calling context's scope. Scoped values * shadow globals; invalid or duplicate names throw. A provider may return * `undefined`, but rendering a section that references that value then fails. * @param name - the `[a-z][a-z0-9_]*` reference name. * @param provider - evaluated for each assembly. * @returns the exact Cordis effect disposer. */variable(name: string, provider: (context: AssembleContext) => string | undefined): () => void
/** * Assemble global and scoped providers, detach tool parameters, apply * canonical ordering, then run the assembly waterfall. Scoped sections and * variables shadow globals. The returned waterfall value is authoritative * except that an effective complete section is restored afterwards as the * sole prompt section. * @param context - the optional scope and plugin-defined assembly fields. * @returns the post-waterfall assembly with any complete prompt enforced. */async assemble(context: AssembleContext = {}): Promise<PromptAssembly>Source: packages/core/system-prompt/src/index.ts:338
system-prompt/* events
Section titled “system-prompt/* events”system-prompt/assemble — waterfall
Section titled “system-prompt/assemble — waterfall”Expert waterfall over the assembled sections, contexts, tools, and variables. Scope-filtered dispatch (@deepseek-ai/dsh-scope): scoped listeners receive only that scope’s assemblies. The returned value is authoritative. A supplied signal controls only this explicit assembly request and must not be retained to control later turns. A registered complete section is restored after this waterfall, so listeners cannot add to or replace that scope’s system prompt.
/** * Expert waterfall over the assembled sections, contexts, tools, and variables. * Scope-filtered dispatch (`@deepseek-ai/dsh-scope`): scoped listeners * receive only that scope's assemblies. The returned value is authoritative. * A supplied signal controls only this explicit assembly request and must not * be retained to control later turns. A registered complete section is * restored after this waterfall, so listeners cannot add to or replace * that scope's system prompt. * @param assembly - the mutable assembly built from registered providers. * @param context - the caller's per-assembly context. * @mode waterfall */'system-prompt/assemble'(this: Scoped<SystemPrompt>, assembly: PromptAssembly, context: AssembleContext, next: () => Promise<PromptAssembly>): Promise<PromptAssembly>Types: Scoped
Source: packages/core/system-prompt/src/index.ts:31
system-prompt/change — emit
Section titled “system-prompt/change — emit”Emitted when any prompt provider changes. This registry notification is unfiltered because a global change affects every scope.
/** * Emitted when any prompt provider changes. This registry notification is * unfiltered because a global change affects every scope. * @mode emit */'system-prompt/change'(): void