大数跨境
0
0

技术科普|Agent 没有秘密可言

技术科普|Agent 没有秘密可言 NebulaGraph
2025-11-04
0
导读:把闭环跑通,比谈玄学更有价值

导读


在 技术科普「Coding Agent」系列中,由 NebulaGraph GenAI Team @PsiACE 为大家带来多期 Coding Agent 实践经验,并分享 NebulaGraph GenAI 的最新工作。

本期,@PsiACE 和大家分享的是他开发的一个名为「agent has no secret」的单文件代理,你将在一个终端中看到:

1.直播活动流:每个活动 agent.*都 huey.* 以清晰的样式打印出来。
2.React 循环:思考 → 行动 → 行动输入 → 观察 → 最终答案
3.一个树状的级联查看器,按事件分组并显示父子因果关系。


01

TL;DL

  • Agent 不是新宗教。它依然是事件、队列、CRUD 的工程实践,再加一层模型协作。

  • 共用一条 EventBus,把 agent.*与 huey.*事件打通;每条事件立即打印;最后用 Cascade 树复盘因果与时间。
  • 单文件 Demo,打开即跑:先看事件,后看因果,最后看结果。
Cascade Viewer
Cascade Viewer

02

为什么写这个(以及为什么写)

  • 我不想再讨论"如何画出一个复杂的 Agent 架构图"。我更关心"如何让系统解释得清楚、失败得优雅、复盘得明白"。

  • 这篇文章附带一个单文件 Demo:共享总线、严格 ReACT、因果与时间合并呈现、即时可观测。开箱即用

03

我怎么做的

核心设计原则

  • 共享 EventBus:Agent、ToolExecutor、Storage 都向同一条总线发事件。
  • 严格 ReACTThought → Action → Action Input → Observation → Final Answer。
  • 因果 + 时间每轮用户输入推进 tick;每次 Observation 再推进 tickAction → huey.* → Observation 通过 parent-child 串起来。
  • 即时可观测每条事件实时打印;最后用树形 Cascade Viewer 做分时复盘
事件流(概览)
The Agent Loop

The Agent Loop

04

这和“传统架构”有什么不同?

  • 没有不同:事件、队列、CRUD,本来就在;只是把模型作为协作者接了进来。

  • 也不浮夸没有"智能"也不会失效的设计;它可靠、可解释,也更容易落地。


05

极简骨架(节选)

Event-driven storage wrapper

classEventureMemoryStorage(MemoryStorage):
    def__init__(self, event_bus: EventBus):
        super().__init__("huey")
        self.bus = event_bus

    defenqueue(self, data, priority=None):
        super().enqueue(data, priority=priority)
        self.bus.publish("huey.queue.enqueue", {
            "data": data,
            "priority": priority
        })

Tool with self-description

deftool_echo(params: dict) -> dict:
    """Echo back text. Args: {"text": string} Returns: {"ok": bool, "echo": string}"""
    return {"ok"True"echo": str(params.get("text"""))}

ReACT loop(核心思想)

whileTrue:
    resp = client.chat.completions.create(model=model, messages=history)
    assistant = resp.choices[0].message.content or""
    call = extract(assistant)

    if call:
        action_id = uuid4()
        bus.publish("agent.action", {"id": action_id, **call})
        # wait for agent.observation(id==action_id) and append as Observation
        continue

    return assistant

06

我遵循的几个原则

  • 先闭环,后花活:先把"事件→队列→状态变化→ReACT"打通,再谈优化。

  • 因果与时间是工程的一等公民:tick 表达更新周期;parent-child 表达触发链。

  • 可观测性优先:当系统能解释自己,优化才有基础。

  • 可替换:总线稳定,后端可换(内存→Redis),模型可换(供应商/版本)。


07

如何运行

    代码位置

    请点击【阅读原文】跳转:

    • agent_has_no_secret.py
    • README.md

    运行步骤

    1. 配置 .env(OpenRouter 推荐;OpenAI 也可)
    2. python agent_has_no_secret.py

    你将看到什么

    • 实时事件流user.inputagent.thoughtagent.actionhuey.data.*agent.observation
    • 绿色的 Final Answer 面板
    • 按 tick 分组的树形 Cascade Viewer:在 agent.action下能看到 huey.data.*与 agent.observation 的父子层级

    08

    写在最后

    我更钦佩能把东西"说清楚、跑起来"的工程师。Agent 没有秘密可言:

    • 先把闭环打通,再考虑花活;
    • 先让因果与代价可见,再谈"更聪明"。

    星云仔号外:分享最近看到的一则图片,欢迎对号入座(手动狗头)



    欢迎关注 @PsiACE 的公众号⬇️

    📧来论坛,GraphRAG 产品反馈一键直达 NebulaGraph 产品团队。

    https://discuss.nebula-graph.com.cn/t/topic/17256


    如果你觉得 NebulaGraph 能帮到你,或者你只是单纯支持开源精神,可以在 GitHub 上为 NebulaGraph 点个 Star!

    每一个 Star 都是对我们的支持和鼓励✨

    GitHub:https://github.com/vesoft-inc/nebula

    官网:https://www.nebula-graph.com.cn/

    论坛:https://discuss.nebula-graph.com.cn/



    扫码添加

     可爱星云

    技术交流

    资料分享


    NebulaGraph 用户案例

    Why Graph Database?⬇️

    复杂关系场景,图数据库为何是首选?

    风控场普适智能|中证数智BlockSec携程Airwallex众安保险中国移动Akulaku邦盛科技360数科BOSS直聘金蝶征信快手青藤云安全

    平台建设:博睿数据携程众安科技微信OPPOvivo美团百度爱番番携程金融普适智能BIGO

    知识图谱:普适智能|中证数智中医药大学企查查腾讯音乐中科大脑泰康在线苏宁微澜同花顺携程酒店

    数据血缘:波克城市微众银行携程金融

    智能运维BOSS直聘|58同城中亦安图

    供应链:京东物流震坤行

    营销推荐:阿里妈妈

    GraphRAG:中科数睿

    ✨ NebulaGraph 推荐阅读

    【声明】内容源于网络
    0
    0
    NebulaGraph
    一个开源的分布式图数据库
    内容 731
    粉丝 0
    NebulaGraph 一个开源的分布式图数据库
    总阅读619
    粉丝0
    内容731