文章总结: 本文介绍DeerFlow开源智能体框架的二次开发实践,重点解析其基于LangGraph的中间件架构、飞书集成方案及三层安全防御体系。核心展示如何通过13个中间件构建执行流水线,利用独立事件循环实现飞书WebSocket全双工交互,并通过权限网关和Guardrails机制保障AIAgent安全。文末提供源码链接及团队推广信息。 综合评分: 62 文章分类: 安全开发,解决方案,应用安全,安全工具,软文广告

油漆工 油漆工
C4安全
2026年4月3日 14:15 江苏
在小说阅读器读本章
去阅读
什么是deerflow?
DeerFlow 是字节跳动开源的一款超级智能体运行时框架,全称是 Deep Exploration and Efficient Research Flow(深度探索与高效研究流),可以说拥有Openclaw的绝大部分一模一样的功能。
他有预制、自定义的skill和配置,也可以设置多个子agent干不同的活。


现在来拆解它是如何基于 LangGraph 构建一个具备文件系统、长期记忆和安全沙箱的 Super Agent 运行时,并实现在飞书环境下的深度集成。
一、 架构核心
DeerFlow 2.0 放弃了简单的 Linear Chain 模式,转而采用了更灵活的 Middleware(中间件)管道架构。
- 13+ 中间件构成的执行流水线
在 DeerFlow 中,每一条用户指令都会经过一个严密的中间件链条(Pipeline)。这就像是 Web 开发中的拦截器,但针对的是 Agent 的生命周期。以 SandboxMiddleware 为例,它负责在 Agent 启动前挂载沙箱,在结束后释放资源:
class SandboxMiddleware(AgentMiddleware): @override def before_agent(self, state: SandboxMiddlewareState, runtime: Runtime) -> dict | None: # 在 Agent 运行前,根据 thread_id 获取或创建隔离的沙箱环境 if “sandbox” not in state or state[“sandbox”] is None: thread_id = (runtime.context or {}).get(“thread_id”) sandbox_id = self._acquire_sandbox(thread_id) return {“sandbox”: {“sandbox_id”: sandbox_id}} return None
@override def after_agent(self, state: SandboxMiddlewareState, runtime: Runtime) -> dict | None: # 任务结束后,确保沙箱资源被正确回收 sandbox = state.get(“sandbox”) if sandbox: get_sandbox_provider().release(sandbox[“sandbox_id”])
- 基于 LangGraph 的状态机编排
DeerFlow 的大脑由 LangGraph 驱动。通过 make_lead_agent 函数,我们将模型、工具集和中间件链条组装成一个健壮的 Compiled Graph:
def make_lead_agent(config: RunnableConfig): # 动态加载工具集与中间件 return create_agent( model=create_chat_model(name=model_name, thinking_enabled=thinking_enabled), tools=get_available_tools(subagent_enabled=subagent_enabled), middleware=_build_middlewares(config), system_prompt=apply_prompt_template(…), state_schema=ThreadState, )
二、 飞书集成:WebSocket 模式下的“全双工”交互
这里先简单带过一句,为了deerflow能隔离多用户,我在这里二开了登录系统,以及不同用户和ai之间的对话隔离,在开源版中是没有这一部分功能的。


为了让 Agent 进入企业办公场景,我尝试在deerflow2.0当中为飞书开发了深度的 WebSocket 连接器。
- 技术难点:异步事件循环的兼容
飞书的 lark-oapi 在 WebSocket 模式下对 Event Loop 的处理比较特殊。为了不阻塞主服务的 uvloop,我们在 feishu.py 中实现了一个巧妙的隔离方案:
def _run_ws(self, app_id: str, app_secret: str, domain: str) -> None: # 为飞书 WebSocket 客户端创建一个独立的事件循环 loop = asyncio.new_event_loop() asyncio.set_event_loop(loop)
# 关键:手动补丁 SDK 的模块级 loop 引用,避免与主线程冲突 import lark_oapi.ws.client as _ws_client_mod _ws_client_mod.loop = loop
ws_client = lark.ws.Client( app_id=app_id, app_secret=app_secret, event_handler=event_handler, domain=domain ) ws_client.start()
- 交互闭环:动态卡片更新
DeerFlow 不仅仅是发送消息,它会利用飞书的消息 ID(msg_id)作为线程锁,实时更新同一个互动卡片,让用户能看到 Agent 思考的每一步。
这里可以看下效果,对接飞书通道只需要你填入AppID以及AppSecret即可,自动配对。


在飞书创建机器人并开通权限,配对成功之后,我们直接可以在飞书中下发任务给deerflow。




可以看到完成的热点抓取任务很顺利,文章内容的完成度也不错。

三、 网络安全:AI Agent 的“防御纵深”
当 AI 获得代码执行权限时,安全就是生命线。DeerFlow 构建了三层防御体系:
- 严格的权限网关
在 security.py 中,我们定义了严苛的检查逻辑,防止 Agent 在非受信环境下执行宿主机指令:
def is_host_bash_allowed(config=None) -> bool: “”“只有在明确配置且非本地沙箱模式下,才允许执行 host bash”“” sandbox_cfg = getattr(config, “sandbox”, None) if not uses_local_sandbox_provider(config): return True # AioSandbox (Docker) 模式下默认安全 # 本地模式下必须显式开启 allow_host_bash return bool(getattr(sandbox_cfg, “allow_host_bash”, False))
- Guardrails:工具调用的“防火墙”
在工具真正执行前,中间件会拦截 tool_call 并比对预设的策略(Policy)。如果是敏感操作,会触发“人工介入确认”,用户在飞书里点击“同意”后,Agent 才会获得临时授权。
[探索 DeerFlow 源码]
GitHub – bytedance/deer-flow
感兴趣的师傅可以公众号私聊我进团队交流群,咨询问题,hvv简历投递,nisp和cisp考证都可以联系我
内部src培训视频,内部知识圈,可私聊领取优惠券,加入链接:https://wiki.freebuf.com/societyDetail?society_id=184 安全渗透感知大家族

(新人优惠券折扣20.0¥,扫码即可领取更多优惠)


加入团队、加入公开群等都可联系微信:yukikhq,搜索添加即可
END
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:C4安全 油漆工
油漆工《DeerFlow二次开发:构建自己的Openclaw企业级平台》
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/266350.html