图解Agent面试真题-deepseek-harness的最小核心是什么
- 2026-10-26 17:38:30
INTERVIEW · 源码图解 · 2026.10
架构还不成熟,所以先不看?
两块就能讲清的热插拔骨架
插件清单 · ReAct 循环 · 三种状态
deepseek-harness · 源码图解 · Cordis
目录
01 插件如何热插拔加载
02 agent-loop 怎么把 ReAct 跑起来
03 idle、running、maintenance
/// 写在最后
这篇只回答一个问题
最小核心 = 插件系统 + 主循环
有朋友在做 Agent 开发时,被面试官问到有没有看过 deepseek-harness 的源码,理不理解其中的最小核心。朋友之前知道 DeepSeek 走的是插件架构,又觉得这套架构还不成熟、性能不高,所以没有细看。
既然聊到了,我们就顺着这个问题往下看:deepseek-harness 的架构到底是什么,最小核心又是什么。
源码:https://github.com/deepseek-ai/deepseek-harness
论文:https://arxiv.org/abs/2608.25512
从论文和 README 可以知道,deepseek-harness 是基于 Cordis 搭建的 harness。因为这套框架,所有模块都是插件,可以热插拔。这也是为什么有些博主会说,这才是递归自我改进(RSI)的软件雏形。
01
插件系统
PLUGIN · SYSTEM
插件系统会在初始化时加载 package.json 和 cordis.yml,从里面找出这次启动需要加载的模块。



STEP 01
先看 web 这份清单
比如执行 dsh web 时,对应加载的是 web 这份 profile。清单里写明了需要加载 dsh-base 和 dsh-web-app 两个 bundle。之后会在 bundle 里找到这两个对应的 cordis.patch.yml。这些 yml 对应的,就是需要 load 的 Cordis 插件。

一次执行里可能会加载多个插件。dsh 采用的是先内置、后自定义。第一次打开内置 profile 时,PROFILE_TEMPLATES 会把这份清单写进去。
内置 dsh-base
先加载 @deepseek-ai/dsh-base
↓
对应的 app bundle
再加载 dsh-base 对应的应用包
↓
profile 自己的补丁
最后才是 cordis.patch.yml 和 --patch
web、headless、sdk、acp 都是这个顺序
STEP 02
每个模块调用 apply
每一个模块加载的时候,会主动调用 apply。这个函数用在模块初始化时,注册需要监听的消息。
— 启动链路
02
Agent 最小核心
AGENT · LOOP
主流 Agent 的核心都基于 ReAct 循环,deepseek-harness 也不例外。最核心的模块在 packages/core 下面的几个插件里。注意,这些模块理论上都可以热插拔。其中 agent-loop 实现了 ReAct 主循环。

最核心的代码如下。
private async kick(): Promise<void> {
try {
while (await this.turn()) {}
} catch (_error) {
// Reported failures and cancellation are contained at the driver boundary.
} finally {
/* v8 ignore next -- kick owns a running phase until this driver boundary */
if (this.phase.kind === 'running') {
const { turn, wakeRequested } = this.phase
this.setPhase({ kind: 'idle', lastTurn: turn })
if (wakeRequested && this.inbox.hasPending) this.wakeDriver()
}
}
}
在一次调用中,会不断调用 turn,判断还有没有需要执行的步骤。

Turn 里的三种状态
turn 的实现类似有限状态机,在不同 Agent 状态之间切换。主要有 idle、running、maintenance 三种运行状态。举例的状态转换可以看下面的状态图。


和主循环拆开的功能模块
在 core 里当然还有几块功能模块,它们和主循环是拆开的。
session
记录对话内容,也会记录 agent 的状态。
llm
大模型的抽象层,提供模型对话。
system-prompt
负责组装提示词。
tools
提供工具的注册和调用。
///
写在最后
LAST · TAKEAWAY
以上就是 deepseek-harness 最小核心的主要内容。从结构上可以看出,一旦模块和模块之间可以拆分,之后就可以让模型自己替换自己的模块,从而实现 RSI。
这也就是为什么 deepseek-harness 出来之后,大家普遍觉得它可能就是自进化软件的形态。
之后我还会对记忆这一块进行图解。如果大家感兴趣,欢迎私信沟通。
我是狐狸,一个热衷于分享AI知识的博主。既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。
点赞 · 在看 · 转发