Agent 可靠性工程实战(一):先给智能循环装一只不可失忆的黑匣子
📅 2026/7/30 15:57:31
👁️ 次浏览
很多 Agent 教程从模型、提示词和工具调用开始演示效果很热闹却跳过了最先该解决的问题一次任务失败以后我们能否准确回答模型看到了什么、调用了什么、工具返回了什么、为什么停止。普通文本日志只记录人类觉得重要的句子无法支撑确定性回放。这个系列从一个名为ProofLoop的本地代码修复执行器开始第一篇只建骨架和事件账本不接真实模型。整个项目遵守一个边界模型可以提出动作宿主程序决定是否执行裁判程序决定结果是否合格。三者不能共用一团可随意修改的内存状态。我们先把每一步写成追加式 JSONL 事件让后续九篇都把runs/run_id/events.jsonl当输入。一、事件不是调试字符串而是状态事实传统日志写“正在运行测试”但这句话没有稳定字段换一句措辞就无法统计。事件则包含序号、任务编号、事件类型、时间和结构化载荷。序号负责定义因果顺序任务编号隔离并发执行事件类型形成可版本化协议。时间只用于观察耗时不能决定业务顺序因为系统时钟会回拨多线程也可能在同一微秒写入。下面的ledger.py使用标准库实现最小账本。每次追加先序列化为单行 JSON再刷新并同步文件描述符。它不能让磁盘永不损坏却把“Python 返回成功但数据仍停在用户态缓冲区”的窗口缩小。载荷只允许 JSON 类型模型原始回答若包含敏感信息应在进入账本前脱敏。from__future__importannotationsimportjsonimportosfromdataclassesimportasdict,dataclassfromdatetimeimportdatetime,timezonefrompathlibimportPathfromtypingimportAnydataclass(frozenTrue)classEvent:seq:intrun_id:strkind:strat:strpayload:dict[str,Any]classLedger:def__init__(self,path:Path,run_id:str)-None:self.pathpath self.run_idrun_id self.path.parent.mkdir(parentsTrue,exist_okTrue)self.next_seqself._count_lines()1def_count_lines(self)-int:ifnotself.path.exists():return0withself.path.open(encodingutf-8)ashandle:returnsum(1forlineinhandleifline.strip())defappend(self,kind:str,payload:dict[str,Any])-Event:eventEvent(seqself.next_seq,run_idself.run_id,kindkind,atdatetime.now(timezone.utc).isoformat(),payloadpayload,)encodedjson.dumps(asdict(event),ensure_asciiFalse,separators(,,:))withself.path.open(a,encodingutf-8)ashandle:handle.write(encoded\n)handle.flush()os.fsync(handle.fileno())self.next_seq1returneventdefmain()-int:ledgerLedger(Path(runs/demo-001/events.jsonl),demo-001)ledger.append(run_started,{goal:修复折扣计算})ledger.append(model_proposed,{tool:read_file,path:price.py})print(fevents2 next_seq{ledger.next_seq}path{ledger.path})return0if__name____main__:raiseSystemExit(main())运行输出events2 next_seq3 pathruns/demo-001/events.jsonl二、为什么选择 JSONL 而不是一个大 JSON一个大数组只有在任务结束时才能完整关闭进程中断时尾部括号可能缺失整个文件无法解析。JSONL 每行是独立记录已经同步的前缀仍然有效。它还允许流式读取不必把长任务全部装进内存。代价是跨事件约束需要读取器自己检查因此我们必须验证序号连续、任务编号一致、每行都能解析。记住一句不太直觉的话时间戳用于观察序号才用于证明先后。如果把时间当顺序NTP 校时或虚拟机暂停恢复会让事件“穿越”如果只相信文件行号手工拼接文件又可能隐藏缺口。显式seq让缺失和重复都可检测。importjsonfrompathlibimportPathdefload_events(path:Path)-list[dict]:events[]withpath.open(encodingutf-8)ashandle:forline_no,lineinenumerate(handle,start1):try:eventjson.loads(line)exceptjson.JSONDecodeErrorasexc:raiseValueError(fbroken json at line{line_no})fromexc expectedlen(events)1ifevent[seq]!expected:raiseValueError(fexpected seq{expected}, got{event[seq]})events.append(event)returnevents eventsload_events(Path(runs/demo-001/events.jsonl))print([event[kind]foreventinevents])运行输出[run_started, model_proposed]三、追加式不等于绝对不可篡改文件以追加模式打开只能防止业务代码无意覆盖不能防止拥有同一文件权限的进程重写历史。后续会加入摘要链和只读裁判此时先把所有状态变化变成事件避免“内存里已经重试三次磁盘只看到最终成功”的选择性记忆。异常也必须写事件工具超时、权限拒绝和预算耗尽不是日志噪声而是任务结论的一部分。另一个坑是把完整提示词、令牌或客户源码直接塞进账本。审计需要的是可验证引用不一定是原文。可保存内容摘要、相对路径和脱敏片段把敏感正文留在权限更严格的工件目录。账本越完整泄漏后的影响也越大所以可审计与最小披露必须一起设计。四、首篇交付什么本篇产物是ledger.py和runs/demo-001/events.jsonl。验收不是看终端出现两行文字而是重新启动程序后序号从 3 继续读取器能发现截断行与跳号两个任务不会写进同一目录。下一篇将直接读取这份事件文件中的model_proposed用tools.json判断read_file是否被授权并把允许或拒绝结果继续追加到同一账本。参考来源Dev.toThe Dirty Secret Behind AI AgentsPython 文档json — JSON encoder and decoder 觉得有用就点个赞 收藏方便回头查阅有疑问直接在评论区留言我看到都会回。 本文属于《Agent可靠性工程实战》系列持续更新关注不迷路。 文章里的代码都能直接跑。想要可直接 clone 的完整工程 配套部署脚本 / 踩坑清单评论一声或发邮件到cj2664qq.com我免费发你。如果你正好在做类似系统、或有工程化难题想找人做也欢迎邮件聊一句——我按实际情况评估能落地的就接单或出方案。评论和邮件都能直接找到我不用跳别的平台。
1. 项目概述:当动漫数据遇上Python可视化 去年帮朋友工作室处理一批动漫评分数据时,我用了三周时间手工整理Excel表格。看着密密麻麻的数字,突然意识到:为什么不用Python把这些数据变成会说话的图表?于是诞生了这个结合…
📅 2026/7/30 15:57:31
你们有没有那种感觉?就是看到某个东西特别火,直播间里一晚上卖几千单,评论区清一色“绝了”“回购N次”,但自己买回来一尝……emmm,也就那样吧。或者更惨一点,味道还行,但一看配料表,…
📅 2026/7/30 15:57:31
5秒搞定麦克风静音:MicMute让你的Windows音频控制从未如此简单 【免费下载链接】MicMute Mute default mic clicking tray icon or shortcut 项目地址: https://gitcode.com/gh_mirrors/mi/MicMute
还在为视频会议中突然需要静音而手忙脚乱吗?或者…
📅 2026/7/30 15:57:31
git Update project 报错 9:17 Update failed remote: The project you were looking for could not be found.
repository ‘http://xxxx/xxxxxxxxx.git/’ not found
9:17 Update canceled
删除 origin 远程仓库
git remote remove origin
添加新的 origin 地址(替…
📅 2026/7/30 17:54:49
在今天的移动开发中,二维码扫描已经成为了常见的功能之一。Flutter作为一款跨平台的开发框架,提供了丰富的插件和功能,使得开发者可以轻松实现二维码扫描以及图像识别功能。本文将介绍如何在Flutter中通过结合 scan 插件、permission_handler…
📅 2026/7/30 17:54:49
# HarmonyOS PromptAction 弹窗不显示怎么办:UIContext、页面销毁和回调兜底怎么拆弹窗问题很容易被写成“接口没生效”,但我实际排查时更常见的是上下文已经不对了:按钮点击时页面还在,异步请求回来时页面可能已经返回࿱…
📅 2026/7/30 17:54:48
BetterJoy完整指南:3分钟让你的Switch手柄在PC上完美工作 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.c…
📅 2026/7/30 17:54:47
1、完全退出WorkBuddy,光点X没用,右下角图标右键,点击退出2、找到C盘中的文件路径,一般在C:\Users\用户名里3、先剪切这两个文件夹,粘贴到 D 盘目标位置,例如:D:\Workbuddy_related\.workbuddyD…
📅 2026/7/30 17:54:47
最近在 Windows 环境安装《动手学深度学习》配套库 d2l,先后尝试教材配套稳定版d2l0.17.6和新版d2l1.0.3,踩了大量 Windows 平台独有的坑:离线高版本 whl 依赖连锁冲突、pandas 源码编译 ssize_t 未定义、VC 编译工具失效、numpy 与 opencv 版…
📅 2026/7/30 17:53:46
本文关键词:geo2是共价化合物哎,说实话,每次看到化学题里那些弯弯绕绕的电子式,我就头大。特别是遇到那种非要让你判断是离子还是共价的,心里就发毛。今天咱不整那些虚头巴脑的定义,就聊聊二氧化硅,也就是大家常说的硅石、石英,很多人会误写成geo2,虽然化学式不对,但…
📅 2026/7/30 0:00:24
B4557 [GESP202606 四级] 扫雷 https://www.luogu.com.cn/problem/B4557 中国计算机学会(CCF)2026年6月C四级讲解——扫雷 https://www.bilibili.com/video/BV1MCMg6AEXR/ B4557 [GESP202606 四级] 扫雷 https://www.bilibili.com/video/BV1ZKTj6ZEVh/ 2…
📅 2026/7/30 0:00:26
Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer
您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…
📅 2026/7/30 0:00:26
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/30 1:16:07
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/30 1:16:07
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/30 1:16:07
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/30 7:16:27
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/30 17:17:14
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/30 5:16:22