跳到内容
当前位置:首页>面试真题>图解Agent面试真题-deepseek-harness的最小核心是什么

图解Agent面试真题-deepseek-harness的最小核心是什么

  • 2026-10-26 17:38:30
图解Agent面试真题-deepseek-harness的最小核心是什么

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 主循环。

最核心的代码如下。

...typescript

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知识的博主。

既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。

点赞 · 在看 · 转发