构建了一个 LLM 在结构上被禁止生成最终输出的 Agent,寻求反馈以及愿意尝试“攻破”它的人
摘要
作者描述了一个基于 LangGraph 构建的 AI Agent,旨在复现生产环境中的 Python 崩溃问题。其独特之处在于架构设计:LLM 负责规划行动,而确定性 Python 函数则生成最终测试代码,以确保可靠性。
在这里发帖是因为我最终确定的这种约束机制感觉有些奇特,我想知道是否有其他人做过类似的事情,或者认为我的想法有误。
**背景:** 我构建了一个用于复现生产环境 Python 崩溃的 Agent。你只需提供一个 Sentry URL,该 Agent 就会读取堆栈跟踪(stacktrace)和帧局部变量(frame locals),决定调用哪些工具(如仓库内省、依赖准备、沙箱执行等),并在 Docker 沙箱中运行所有操作。最终,它要么生成一个确定性的失败 pytest 测试(你可以直接粘贴到你的仓库中),要么在无法完全复现时提供一份结构化的调查报告。
**奇特之处:** LLM 在结构上不被允许编写最终的测试代码或审计工件(audit artifact)。这些字节数据来自一个纯确定性的 Python 函数,该函数仅以捕获的帧局部变量作为输入。Agent 可以进行规划、调用工具、从死胡同中恢复以及推理竞态条件,但当需要输出实际的测试/工件时,执行的是非 LLM 的代码路径。该工件始终标记为 llm_in_evidence_path: false。架构采用 LangGraph Supervisor 加上 11 个工具。Agent 的评估标准基于其确定性输出,而不仅仅是推理过程。
这种分离是否值得付出额外的复杂性,还是说我过度设计了?我目前大约有 800 个单元测试,但还没有真正的外部评估框架,我知道这才是真正的短板。如果你也在构建 Agent 并对这种架构有见解,我将真诚地感谢任何反馈。
另外:如果你手头有未解决的 Python Sentry 问题(尤其是涉及 Django/FastAPI/Celery/SQLAlchemy 的),我很乐意让它运行一遍,看看会发生什么。帧局部变量是关键,因此任何使用默认 Python SDK 设置的环境应该都能适用。请直接私信或留言,哪种方式方便用哪种。
相似文章
构建了一个代理工作站,让环境进行结构推理,从而减轻LLM的负担
Atlarix是一个桌面环境,它预先将代码库解析为节点/边图,使得编码代理能够通过查询来导航架构,而无需阅读原始文本,从而提高了较小本地模型的性能。
你的LLM不应该是你的编码智能体工作流
主张在编码智能体工作流中,LLM应仅用于推理,而由确定性基础设施处理队列、状态、重试和恢复,这样即使达到使用限制,流程也不会中断。
我们需要停止构建"Hope-and-Pray"式的AI代理。(为什么你的封装会崩溃。)
对仅依赖系统提示的简单AI代理架构的批评,认为概率性LLM需要自反思层和确定性门控以确保可靠的生产行为。作者介绍了Langoedge作为构建可信代理的解决方案。
我的代理悄悄地损坏了它自己的记忆图谱,而我正在尝试一些方法。
作者描述了一个问题:LLM 代理的记忆图谱因错误的边而损坏,并提议使用声明的本体来验证写入和遍历。对 120 条故意破坏的遍历进行的测试捕获了所有错误。
赋予LLMs exec()能力是一场安全噩梦。我构建了一个基于AST的开源防护机制来阻止恶意代理执行。
介绍ast-guard,一个开源的基于AST的安全工具,它通过将LLM生成的Python字符串解析为抽象语法树,并应用节点级白名单和上下文感知安全检查,防止恶意代码执行。