#自动化测试

meng shao
1个月前
[Anthropic 工程博客] 构建长运行智能体的高效框架 Anthropic 最新工程博客探讨了如何为长运行智能体设计有效的“框架”,以应对复杂任务在多会话间的持续执行挑战。基于 Claude Agent SDK 实际经验,强调通过结构化环境和渐进式工作流程,让智能体像人类软件工程师一样,逐步推进项目,而非试图一蹴而就。 长运行智能体的核心挑战 长运行智能体目标是处理跨小时或数天的复杂任务,例如构建一个完整复杂的软件项目。但由于上下文窗口的容量限制,每个会话都像从零开始:智能体缺乏先前记忆,容易陷入“一次性完成”的陷阱——试图在单一会话中搞定整个项目,导致上下文耗尽、代码杂乱或文档缺失。其他常见问题包括: · 过早宣告完成:后续智能体看到部分进展,就错误地标记任务结束。 · 状态恢复困难:智能体花大量时间猜测未完成工作,或在 buggy 环境中挣扎。 · 测试缺失:功能看似就位,但未通过端到端验证,隐藏潜在问题。 通过实验(如构建 200+ 功能的网页克隆项目)总结这些失败模式,并提供针对性解决方案,借鉴软件工程最佳实践,如 Git 版本控制和自动化测试。 提出的解决方案:双智能体框架与结构化环境 解决方案是引入“框架”——一个由提示、脚本和文件组成的系统,确保会话间状态持久化和干净交接。具体分为两个角色: 1. 初始化智能体(Initializer Agent):仅用于首轮会话,负责搭建初始环境。生成关键文件,包括: · feature_list.json:一个JSON格式的功能清单,列出所有任务(如“创建新聊天”),每个包含描述、步骤和初始“passes”状态(false)。JSON格式确保不可变性,防止后续编辑。 · claude-progress.txt:日志文件,记录动作和进展。 · init. sh:启动脚本,用于运行开发服务器、测试基础功能,减少后续设置开销。 初始化后,进行首次 Git 提交,形成干净基线。 2. 编码智能体(Coding Agent):后续会话专用,专注于渐进式进展。每个会话仅处理一个功能: · 会话启动例程:检查目录(pwd)、审阅 Git 日志和进展文件、运行 init. sh 启动环境、验证核心测试。 · 工作流程:从 JSON 清单选一未完成功能,编码、提交描述性 Git 变更、更新 “passes” 状态(仅在通过测试后),并记录日志。 · 强调“干净状态”(clean state):结束时,代码须无bug、文档齐全、可直接合并到主分支。 关键实践与工具集成 · 功能清单与 Git:JSON 清单防止“过早完成”,Git 提供回滚和历史追踪。实验显示,相比 Markdown,JSON 减少了不当修改。 · 端到端测试:集成浏览器自动化工具(如 Puppeteer MCP 服务器),模拟人类操作(如点击模态框、截图验证)。这捕捉代码审查忽略的交互 bug,但文章也指出局限,如原生浏览器元素的处理。 · 提示策略:初始化和编码提示不同——前者聚焦搭建,后者强调单一功能和验证。使用强约束语言(如“绝不编辑测试”)规避失败。 · 失败模式表格:文章附表总结问题(如“设置混淆”)及应对(如标准化脚本),便于实际应用。 结论与展望 Anthropic 的经验证明,这种框架能显著提升长运行智能体的可靠性:从混乱的“一击即溃”转向工程化的持续迭代。关键启示是借用人类工程实践(如版本控制、测试驱动开发),结合 AI 的自动化潜力。从简单项目起步,审视失败模式,并扩展到多智能体系统(如专职测试智能体)。未来方向可以泛化到其他领域,如科学研究或财务建模,探索更复杂的协作架构。 博客地址:
的安全加固来了,辛苦帮忙转发通知,使用最新 next 分支 1. 安全性审查 (Security - CRITICAL) JWT 密钥验证 - 实现: main.go 中的 validateJWTSecret 逻辑严密。它强制检查密钥是否为空、是否为已知默认值、以及长度是否达到32字节。如果不满足,main 函数会直接 log.Fatalf 退出,有效阻断了不安全启动。 - 测试: main_jwt_test.go 覆盖了所有边界情况(空、默认、短、有效),验证结果通过。 静态文件泄露防护 - 实现: api/server.go 中的 serveFrontend 明确指定了静态资源路由 (/assets, /icons, /images),其余请求通过 NoRoute 回退到 index.html。这种白名单机制天然防止了路径遍历。 - 测试: api/security_test.go 中的 TestStaticFileSecurity_RootLeakage 是一个高质量的安全测试。它模拟了根目录下的敏感文件 (config.json, .env),并发起 HTTP 请求。测试断言返回的内容是 SPA 的 index.html 而不是文件原始内容,有力证明了根目录文件不会泄露。 CORS (跨域资源共享) - 实现: api/server.go 的 corsMiddleware 现已基于配置驱动。它读取 Server 结构体中的 corsOrigins 列表,仅对匹配的 Origin 返回允许头。 - 配置: main.go 负责从 config.json 读取 cors_allowed_origins 并传递给 Server。 - 测试: api/cors_test.go 验证了白名单匹配、拒绝未授权 Origin 以及通配符 * 的逻辑,覆盖全面。 2. 独立运行与跨平台支持 (Standalone Execution) 路径处理 - Config: main.go 在当前工作目录查找 config.json,这是标准且正确的做法。 - Prompts: decision/prompt_manager.go 优先检查当前目录下的 prompts/,其次是环境变量,最后才是 Docker 默认路径。这种优先级设计完美支持了 Windows/Linux 下的独立运行(只要文件夹在旁边)。 - Logs: trader/auto_trader.go 使用相对路径 decision_logs/ 创建日志目录,这确保了日志会生成在可执行文件所在的目录下,而不是系统根目录。 - Web: 前端资源通过相对路径 web/dist 加载,只要部署时包含此目录即可。 启动体验 - 配置缺失: main.go 增加了友好的错误提示。如果 config.json 不存在,它会告诉用户从 example 复制,而不是抛出晦涩的 panic,提升了用户体验。 3. 业务逻辑与契约 - 前后端契约: 静态文件服务逻辑正确映射了前端 SPA 的路由需求(History API fallback)。 - 配置同步: cors_allowed_origins 正确地从文件同步到了内存中的 Server 配置。 4. 建议 - 部署文档: 虽然代码已就绪,建议在 或发布说明中强调:在 Windows/Linux 部署时,必须将 nofx (二进制)、config.json、prompts/ 文件夹和 web/dist/ 文件夹放在同一级目录下。 结论 代码修改在安全性、正确性和架构合理性上均达到要求。Nofx 现在可以作为一个安全、独立的二进制文件在 Windows 和 Linux 上运行,无需依赖 Docker。所有关键路径均有自动化测试保障。