description: "面向让进程外 SDK 客户端在 DeepSeek Harness 运行时中打开会话并驱动 agent 的部署的 stdio JSON-RPC 服务插件。"
English | 中文
dsh-sdk-jsonrpc-server 通过 stdio 服务 SDK 协议格式(wire format),使进程外客户端能够驱动 harness agent(智能体):它为每个 sessionId 打开一个会话、把用户提示词排入队列,并把每个会话事件与 agent 状态转换流式发回客户端。把它作为 jsonrpc 插件挂载到 Loader 组合中;外围插件树提供其余一切——agent、模型适配器、持久化与工具。Stdout 只承载 JSON-RPC 帧,因此部署不得组合 stdout logger。它通过 dispose(资源释放)根运行时并以 0 退出应答 shutdown;EOF 与信号退出归 app bin 负责。
当运行时必须服务 SDK 客户端时挂载本插件:把它加入组合了 agent 服务的 cordis.yml,启动运行时,客户端即可通过 stdio 连接。常用路径是显式的——插件需要 agents 服务;其余每个能力都来自外围插件树。
插件在首次使用时为每个 sessionId 创建一个 agent。已注册的模型适配器优先用于该路由;尚无适配器负责的 deepseek-official 路由会挂载 DeepSeek 适配器,任何其他尚无适配器负责的提供方都会导致初始化失败。初始化成功前,所选适配器会解析确切模型与可选推理强度。
| 字段 | 默认值 | 含义 |
|---|---|---|
maxTokensAsSuccess |
false |
把 max-token 轮次或 subagent 终止报告为成功的 SDK 结果 |
profile 组合拥有每个根 agent 的工具。input、output 与 exit 是仅供测试的运行时传输钩子;生产环境使用进程 stdio 与 process.exit。生成的配置目录是每个受支持字段的穷尽式真源。
Stdout 只承载 JSON-RPC 帧,客户端可以逐字节解析;诊断信息应写入 stderr。请勿在组合的插件树中加入 stdout logger。
initialize 是运行时就绪边界:服务器由 Loader 组合挂载时,会等待当前插件树完成所有加载任务后再响应,因此首次提示词能够看到 MCP 初始工具发现等异步同级能力。握手返回协议稳定标识 deepseek-harness-sdk-runtime。服务器会通过所选适配器校验提供方/模型路由与可选的非空 reasoningEffort,再保存这些值;省略时不会保存推理强度,因此模型保留自身默认值。可选的正整数 maxTokens 会成为每个 SDK 创建的 agent 及其进程内后代的请求输出上限,省略时则应用所选适配器或提供方路由的默认值。JSON-RPC 请求可能并发分派,因此在一次 initialize 成功完成之前,session/prompt 会拒绝;客户端必须等待握手完成后再发送提示词。已接受的提示词会把一条带标识的用户消息排入队列,并立即返回 { messageId };服务器随后把每个持久事实作为 session.event、把整个 agent 生命周期的每次状态转换作为 session.status 流式发出。它不会把某条助手消息或 turn/end 归属于某个提示词,同一会话上的独立请求可以继续排入更多工作。持久化根目录与 persona 来自外围组合。
插件应答 shutdown,刷新响应并 dispose 根上下文,使 SDK 持有的 agent、订阅与持久化达到完全停稳,然后以 0 退出。EOF 与信号退出归 app bin 负责,后者也会 dispose 根上下文。仅卸载此插件会停止服务,但不会退出进程。
当插件约定不够用时阅读以下页面。它们从协议格式进入客户端与可运行应用。
dsh --profile sdk 应用。对于每个已接受的 session/prompt,文本和持久内容引用会原样进入一条用户消息。内联 SdkEncodedImageBlock 会先通过组合中的附件存储完成校验与提交,因此会话日志保留内容寻址的图片引用而不是 base64 字节。此包不会添加系统提示词文本或工具 schema;这些内容来自组合中的其他插件。
依数据而定的用户消息 token 会进入保留的会话历史,并在后续轮次中重复发送,直至另一个包将其压缩(compaction)。JSON-RPC 帧、会话通知与服务器内部记录不会增加模型上下文 token。
仅追加;新可见内容位于可复用请求前缀之后,不会使现有 KV Cache 条目失效。
这些限制说明本插件何时需要特别的运维注意。它们是当前包约束,不是与其他服务方式的对比或任务积压。
MessageId 只标识 inbox 准入;拥有自动化活动区间的客户端必须自行定义并观察该区间。initialize 可以复用任何预先注册的模型适配器,但唯一的回退行为是挂载 DeepSeek 适配器。