导读
在 技术科普「Coding Agent」系列中,由 NebulaGraph GenAI Team @PsiACE 为大家带来多期 Coding Agent 实践经验,并分享 NebulaGraph GenAI 的最新工作。
本期,@PsiACE 和大家分享的是他开发的一个名为「agent has no secret」的单文件代理,你将在一个终端中看到:
1.直播活动流:每个活动agent.*都 huey.* 以清晰的样式打印出来。
TL;DL
Agent 不是新宗教。它依然是事件、队列、CRUD 的工程实践,再加一层模型协作。
-
共用一条 EventBus,把 agent.*与huey.*事件打通;每条事件立即打印;最后用 Cascade 树复盘因果与时间。 -
单文件 Demo,打开即跑:先看事件,后看因果,最后看结果。
为什么写这个(以及为什么写)
我不想再讨论"如何画出一个复杂的 Agent 架构图"。我更关心"如何让系统解释得清楚、失败得优雅、复盘得明白"。
-
这篇文章附带一个单文件 Demo:共享总线、严格 ReACT、因果与时间合并呈现、即时可观测。开箱即用。
我怎么做的
核心设计原则
-
共享 EventBus:Agent、ToolExecutor、Storage 都向同一条总线发事件。 -
严格 ReACT:Thought → Action → Action Input → Observation → Final Answer。 -
因果 + 时间:每轮用户输入推进 tick;每次 Observation 再推进tick;Action → huey.* → Observation通过 parent-child 串起来。 -
即时可观测:每条事件实时打印;最后用树形 Cascade Viewer 做分时复盘
The Agent Loop
这和“传统架构”有什么不同?
没有不同:事件、队列、CRUD,本来就在;只是把模型作为协作者接了进来。
也不浮夸:没有"智能"也不会失效的设计;它可靠、可解释,也更容易落地。
极简骨架(节选)
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
我遵循的几个原则
先闭环,后花活:先把"事件→队列→状态变化→ReACT"打通,再谈优化。
因果与时间是工程的一等公民:tick 表达更新周期;parent-child 表达触发链。
可观测性优先:当系统能解释自己,优化才有基础。
可替换:总线稳定,后端可换(内存→Redis),模型可换(供应商/版本)。
如何运行
请点击【阅读原文】跳转:
-
agent_has_no_secret.py -
README.md
运行步骤
-
配置 .env(OpenRouter 推荐;OpenAI 也可) -
python agent_has_no_secret.py
你将看到什么
-
实时事件流: user.input、agent.thought、agent.action、huey.data.*、agent.observation… -
绿色的 Final Answer 面板 -
按 tick 分组的树形 Cascade Viewer:在 agent.action下能看到huey.data.*与agent.observation的父子层级
写在最后
我更钦佩能把东西"说清楚、跑起来"的工程师。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直聘|金蝶征信|快手|青藤云安全
平台建设:博睿数据|携程|众安科技|微信|OPPO|vivo|美团|百度爱番番|携程金融|普适智能|BIGO
知识图谱:普适智能|中证数智|中医药大学|企查查|腾讯音乐|中科大脑|泰康在线|苏宁|微澜|同花顺|携程酒店
营销推荐:阿里妈妈
GraphRAG:中科数睿
✦
✦

