1. 项目概述Agent Factory 是什么如果你和我一样对AI智能体AI Agent的潜力感到兴奋但又对部署一个功能完整、面向公众的专家级Agent感到头疼——需要配置身份、记忆、知识库、Web界面还要搞定网络穿透和后台服务——那么Agent Factory这个项目你绝对需要了解一下。简单来说它是一个“智能体工厂”旨在让你能在两分钟之内通过一个命令或一个简单的交互流程就部署好一个具备专业领域知识、拥有独立身份和记忆、并能通过网页对外提供服务的AI专家。它的核心价值在于极致的自动化和开箱即用。想象一下你想创建一个“泰国菜烹饪专家”AI助手。传统流程下你需要1. 设计Agent的Prompt和身份文件2. 准备菜谱文档并构建向量数据库RAG3. 编写一个后端API比如用FastAPI来调用Agent4. 开发一个前端聊天界面5. 配置系统服务确保后台运行6. 解决内网穿透让外部能访问。每一步都涉及不同的技术和配置耗时耗力。而Agent Factory把这一整套流程打包成了一个自动化的流水线你只需要回答几个关于Agent身份的问题或者提供一个简单的JSON配置文件它就能帮你把上述所有组件一键生成、配置并启动。这个项目构建在另一个优秀的开源项目 OpenClaw 之上。OpenClaw本身就是一个功能强大的AI Agent框架提供了持久化身份、记忆和多通道支持等核心能力。Agent Factory可以看作是OpenClaw的一个“超级部署工具”或“技能”它利用OpenClaw的底层能力并在此基础上封装了从创建到上线的一站式解决方案。最终产物是一个可以通过HTTPS网址直接访问的Web应用背后是一个有“灵魂”身份文件、有“知识”RAG库、能持续对话的AI专家。2. 核心架构与工作原理拆解要理解Agent Factory为何能如此高效我们需要深入其内部看看它到底自动创建了哪些东西以及它们是如何协同工作的。2.1 自动化创建的组件全景当你运行创建命令后Agent Factory会在你的系统上搭建起一个完整的微服务生态。下表清晰地展示了每个被创建的组件及其作用组件创建内容与作用智能体工作空间在OpenClaw框架内为Agent创建一个独立的工作目录。其中包含定义Agent核心的元数据文件SOUL.md核心行为准则、IDENTITY.md身份背景、USER.md用户画像、MEMORY.md记忆模板。这些文件共同塑造了Agent的“人格”和对话风格。领域技能一个专属于该Agent的OpenClaw技能Skill。这个技能集成了RAG检索能力当用户提问时它能自动从关联的知识库中查找相关资料并注入到对话上下文中使Agent的回答更具专业性和准确性。Web应用程序一个完整的、可对外提供服务的Web应用。后端基于FastAPI提供聊天API接口前端是一个简洁的、支持流式输出的聊天UI。这个应用充当了用户与底层OpenClaw Agent之间的桥梁。Systemd服务一个Linux systemd用户服务单元文件。它的作用是守护Web应用进程确保其在系统启动时自动运行并在进程意外退出时自动重启保障服务的稳定性。Cloudflare Tunnel一个配置好的Cloudflare Tunnel客户端连接。它会将本地的Web应用端口安全地暴露到公网并自动配置DNS生成一个固定的HTTPS网址如https://chef-ai.yourdomain.com。这完美解决了家庭宽带或无公网IP服务器的对外访问难题。RAG知识库一个基于ChromaDB的向量数据库集合。如果你在创建时提供了知识文档如PDF、TXT、CSVAgent Factory会自动调用OpenClaw的RAG工具将文档切片、向量化并存储到这个专属集合中供领域技能检索使用。2.2 工作流程与数据流转整个系统的运行遵循一个清晰的链条。下图展示了从用户访问到AI响应的完整数据流用户浏览器 - Cloudflare Tunnel (HTTPS) - FastAPI后端 (Port 808x) - OpenClaw Gateway (本地API) - Claude API ↓ 智能体工作空间 (身份 记忆 RAG技能)用户请求用户在浏览器中访问Agent Factory生成的HTTPS网址并发送聊天消息。隧道转发Cloudflare Tunnel接收到加密的HTTPS请求将其解密并通过安全的私有通道转发到你本地服务器上运行的FastAPI应用监听如8081端口。后端处理FastAPI应用接收到请求它并不直接处理AI逻辑而是作为一个代理。它将用户消息、对话历史以及从请求上下文中获取的Agent身份信息打包成一个符合OpenAI API格式的请求。网关调用这个请求被发送到本地运行的OpenClaw Gateway。Gateway是OpenClaw的核心组件它维护着所有已注册Agent的配置和状态。这里有一个关键设计API密钥如Claude的API Key只保存在Gateway端Web应用无需也不应该接触这些敏感信息这大大提升了安全性。Agent执行OpenClaw Gateway根据请求中的标识找到对应的Agent工作空间加载其身份、记忆和技能特别是RAG技能。RAG技能会先去向量库中检索相关文档然后将检索结果和用户问题一起构造成最终的Prompt调用底层的AI模型API如Claude。流式返回AI模型开始生成回答。OpenClaw Gateway以流Stream的形式返回生成的文本片段。FastAPI后端通过Server-Sent Events技术将这些片段实时推送给前端浏览器。前端渲染前端JavaScript接收到SSE流逐步将AI的回答显示在聊天界面上实现“打字机”效果体验更佳。这个架构的优势在于职责分离和安全可控。Web层只负责交互和代理核心的Agent逻辑和密钥管理由成熟的OpenClaw框架负责而复杂的网络穿透则由Cloudflare的专业服务解决。3. 环境准备与前置条件详解在享受一键部署的便利之前我们需要确保“工厂”的基石是稳固的。以下是在使用Agent Factory之前你必须准备好的环境和账户。请务必逐一核对很多后续问题都源于前置条件未满足。3.1 核心依赖OpenClaw框架Agent Factory是OpenClaw的上层应用因此OpenClaw必须先行正确安装并运行。这不仅仅是安装软件包而是要确保其网关服务处于活跃状态。安装请严格按照OpenClaw官方仓库的README进行安装。通常包括克隆仓库、安装Python依赖、配置环境变量尤其是ANTHROPIC_API_KEY或其他模型API密钥等步骤。验证运行安装后你需要启动OpenClaw Gateway。通常可以通过systemctl --user start openclaw-gateway来启动并使用systemctl --user status openclaw-gateway检查状态确认其处于active (running)状态。关键检查点运行curl http://localhost:8000/v1/models假设Gateway默认端口是8000。如果返回一个JSON格式的模型列表说明Gateway运行正常且API可用。这是Agent Factory能正常工作的生命线。注意请将OpenClaw理解为你本地的一个“AI模型路由与管理中心”。Agent Factory创建的每个Agent本质上都是在这个中心注册的一个特定配置的“路由规则”和“处理器”。3.2 网络穿透Cloudflare Tunnel配置这是实现公网访问的关键。你需要一个Cloudflare账户并将你的域名托管在Cloudflare上。安装cloudflared在你的服务器上安装Cloudflare的隧道客户端。对于Linux通常可以通过包管理器如apt install cloudflared或从官网下载二进制文件完成。登录与创建隧道运行cloudflared tunnel login这会打开浏览器让你授权Cloudflare管理你的域名。运行cloudflared tunnel create 隧道名称例如cloudflared tunnel create agent-tunnel。此命令会创建一个隧道并生成一个唯一的证书文件.json。配置路由你需要编辑Cloudflare Tunnel的配置文件通常位于~/.cloudflared/config.yml。Agent Factory的脚本会自动修改这个文件但前提是基础隧道存在。一个最简化的手动配置示例如下假设隧道名为agent-tunneltunnel: 你的隧道ID credentials-file: /home/yourusername/.cloudflared/隧道ID.json ingress: - hostname: your-subdomain.yourdomain.com service: http://localhost:8081 - service: http_status:404这里定义了一条规则将所有发送到your-subdomain.yourdomain.com的流量转发到本地的8081端口即你的Agent Web应用。配置DNS你需要在Cloudflare的DNS管理面板中为你计划使用的子域名如chef-ai.yourdomain.com添加一条CNAME记录指向你的隧道地址格式为隧道ID.cfargotunnel.com。Agent Factory的自动化脚本会尝试帮你完成这一步但了解原理有助于排查问题。3.3 系统与权限要求操作系统主要面向Linux系统且需要支持systemd用户服务。这是实现服务自启动和守护的核心。大多数现代Linux发行版如Ubuntu 20.04, CentOS 8都满足要求。Python版本需要Python 3.10或更高版本。确保你的默认python3命令指向正确的版本。用户权限整个过程应在你的普通用户目录下进行~/.openclaw,~/.cloudflared。你需要有权限在自家目录创建文件、安装Python虚拟环境以及管理自己的systemd用户服务通过systemctl --user。4. 两种部署方式交互式与声明式Agent Factory提供了两种使用方式分别适合不同的场景和用户习惯。4.1 交互式创建通过Claude Code技能这是最直观、最“魔法”的方式。你需要先将Agent Factory安装为一个Claude Code技能。安装技能# 创建技能目录如果不存在 mkdir -p ~/.claude/skills/agent-factory # 复制技能定义文件 cp /path/to/agent-factory/SKILL.md ~/.claude/skills/agent-factory/SKILL.md # 复制整个技能实现到OpenClaw工作空间 cp -r /path/to/agent-factory/ ~/.openclaw/workspace/skills/agent-factory/触发技能在Claude Code中你现在可以输入/agent-factory或者直接说“创建一个新的智能体”。Claude会启动一个交互式问答流程依次询问你以下关键信息领域你的Agent专精什么如“泰国菜烹饪与食谱”名称Agent叫什么如“Chef AI”ID用于URL和目录的简短标识符。如chef-ai表情符号代表Agent的Emoji。如‍个性对话风格。如“友好型”语言主要和次要服务语言。目标受众服务对象是谁如“想学习正宗泰国菜的家庭厨师”RAG数据路径提供知识文档的路径可选。是否自扩展是否允许Agent在知识不足时自动联网搜索建议新手先选No免责声明是否在回答中加入特定免责声明可选自动执行问答结束后Claude会开始执行背后的Python部署脚本你将在聊天窗口中看到实时的部署日志。大约两分钟后它会返回给你一个可访问的HTTPS链接。实操心得这种方式非常适合快速原型验证和一次性部署。其优势在于与Claude的自然语言交互你无需记忆任何参数。但缺点是如果你想微调参数或复现一个完全相同的Agent交互过程不易保存和复用。4.2 声明式创建通过配置文件对于需要重复部署、集成到CI/CD流水线、或者追求配置可版本化管理的情况直接使用配置文件是更佳选择。准备配置文件创建一个JSON文件例如my_agent_config.json按照参考格式填写所有参数。{ agent_id: python-tutor, agent_name: Python编程助手, agent_name_local: , emoji: , domain: Python编程语言教学与问题解答, language: Chinese, language_secondary: English, vibe: 耐心且鼓励型, audience: 从零开始学习Python的初学者, disclaimer: 本助手提供的代码示例仅供学习参考在生产环境中使用前请充分测试。, self_expand: false, rag_files: [/home/user/docs/python_tutorial.pdf, /home/user/docs/common_errors.txt] }运行部署脚本python3 /path/to/agent-factory/scripts/deploy.py --config /path/to/my_agent_config.json脚本会读取配置文件并开始执行10个步骤的自动化部署流程无需任何人工干预。注意事项agent_id必须是URL安全的只包含小写字母、数字和连字符因为它会被用于目录名、服务名和子域名。rag_files路径必须是绝对路径且脚本运行用户有读取权限。4.3 部署脚本的10个步骤详解了解这10个步骤能让你在出现问题时快速定位。当你运行脚本后它会依次执行创建工作空间在~/.openclaw/workspace-{agent_id}/目录下根据模板生成SOUL.md,IDENTITY.md等核心身份文件。创建领域技能在~/.openclaw/workspace/skills/{agent_id}/目录下生成一个集成了RAG检索逻辑的Skill文件SKILL.md。注册到OpenClaw更新OpenClaw的主配置文件如openclaw.json将新创建的Agent工作空间和技能注册进去使其被Gateway识别。重启OpenClaw网关执行systemctl --user restart openclaw-gateway让配置生效。创建Web应用目录在用户主目录下创建~/{agent_id}-app/目录作为Web应用的根目录。搭建Python环境在应用目录内创建Python虚拟环境venv并安装requirements.txt中的依赖主要是FastAPI、uvicorn等。创建并启用Systemd服务根据模板生成一个systemd用户服务文件如~/.config/systemd/user/python-tutor-app.service并执行systemctl --user enable --now命令来启动并设置开机自启。配置Cloudflare Tunnel修改~/.cloudflared/config.yml添加一条新的ingress规则将指定的子域名如python-tutor.yourdomain.com指向本应用占用的端口如8082。同时尝试通过Cloudflare API自动配置DNS的CNAME记录。注入RAG数据如果配置中提供了rag_files则调用OpenClaw的rag_tool.py脚本将指定文件的内容切片、向量化并存储到以agent_id命名的ChromaDB集合中。健康检查等待服务启动后向本地端口发送一个HTTP请求验证Web应用是否正常运行。同时可能会测试一次简单的对话确保整个链路Web App - OpenClaw Gateway - AI模型是通的。5. 核心配置文件与模板定制Agent Factory的强大之处在于其高度的可定制性。一切皆源于模板和配置。5.1 配置文件字段深度解析deploy.py脚本读取的JSON配置文件是控制Agent一切的蓝图。下面对关键字段进行补充说明字段类型必填详细说明与影响agent_id字符串是核心标识符。用于生成服务名({id}-app)、子域名、工作空间目录名(workspace-{id})、RAG集合名。请使用小写字母、数字和连字符。agent_name字符串是Agent的公开显示名称。会出现在网页标题、聊天欢迎语和OpenClaw的Agent列表中。domain字符串是定义Agent专业边界。这个描述会被写入IDENTITY.md是塑造Agent专家身份最重要的Prompt之一。应具体、清晰如“心血管疾病预防与康复指导”而非“医疗健康”。language字符串是主要服务语言。不仅影响Agent的回答语言还会自动本地化Web UI如按钮文字、占位符。必须使用项目支持的语言列表中的名称如“Chinese”。vibe字符串否Agent的“性格”。模板会将其融入系统Prompt影响措辞风格。例如“Friendly”会使用更多表情和鼓励性语言“Professional”则更正式、简洁。rag_files数组否知识库的来源。支持文本、PDF、CSV等格式。脚本会调用OpenClaw的RAG工具处理。重要提示确保文件路径绝对且可读。对于大型文件ingest过程可能需要较长时间。self_expand布尔值否高级功能开关。若为true当RAG知识库中找不到答案时Agent会尝试调用网络搜索技能如果已配置来获取最新信息。对于法律、医疗等严谨领域建议关闭。5.2 模板系统与自定义Agent Factory的所有产出物都基于templates/目录下的模板文件。它们使用简单的{{PLACEHOLDER}}语法进行变量替换。定制Agent身份如果你想为所有Agent统一添加某种行为准则可以修改templates/workspace/SOUL.md.tmpl。例如在所有Agent的“灵魂”中加入“始终以安全第一为原则回答”的指令。定制Web UI前端界面在templates/webapp/frontend/中。你可以修改index.html.tmpl来改变布局修改style.css来调整颜色和字体或者修改app.js来增加新的交互功能如支持上传图片。定制后端逻辑templates/webapp/server/app.py.tmpl是FastAPI后端。你可以在这里添加新的API端点、修改请求处理逻辑、或集成额外的中间件如身份验证。调整系统配置templates/systemd/service.tmpl是服务定义。你可以修改Restart策略、环境变量或资源限制如MemoryLimit。自定义流程直接修改Agent Factory项目templates/目录下的模板文件。或者更推荐的做法是将templates目录复制一份到你的配置管理目录修改后在运行deploy.py时通过--template-dir参数指定你的自定义模板目录。修改后新创建的Agent将全部采用你的自定义模板。踩坑记录修改模板时尤其是Python后端模板务必小心缩进和语法。一个错误的缩进可能导致生成的app.py无法运行。建议先基于模板手动生成一个文件测试无误后再反向更新模板。6. 日常管理与运维指南Agent部署成功后日常的启动、停止、监控和更新知识库是运维的基本功。6.1 服务状态管理所有Agent都以systemd用户服务的形式运行管理命令非常统一。# 查看某个Agent应用的状态 systemctl --user status chef-ai-app # 输出应显示 active (running)并包含最近的日志片段。 # 实时跟踪应用日志类似 tail -f journalctl --user -u chef-ai-app -f # 这是排查问题最常用的命令任何后端错误都会在这里显示。 # 重启应用例如在修改了后端代码或环境变量后 systemctl --user restart chef-ai-app # 停止应用 systemctl --user stop chef-ai-app # 禁用开机自启但不会停止当前运行的服务 systemctl --user disable chef-ai-app # 重新启用开机自启 systemctl --user enable chef-ai-app6.2 知识库RAG的更新与维护Agent的知识来源于创建时注入的文档但知识需要更新。# 向已存在的Agent知识库中添加新的文档 python3 ~/.openclaw/workspace/skills/rag/rag_tool.py ingest /path/to/new_document.pdf \ --collection chef-ai # 查看某个集合中有哪些文档片段了解知识库构成 python3 ~/.openclaw/workspace/skills/rag/rag_tool.py list-docs --collection chef-ai # 谨慎操作清空某个Agent的整个知识库集合 python3 ~/.openclaw/workspace/skills/rag/rag_tool.py clear --collection chef-ai重要提示ingest操作是追加而非替换。如果你更新了同一份文档的新版本直接再次ingest会导致重复和潜在冲突。最佳实践是先clear集合然后重新ingest所有需要的文档。请务必在业务低峰期进行。6.3 端口与域名管理Agent Factory默认使用8080-8099端口池。每个新Agent会占用第一个可用的端口。查看端口占用ss -tlnp | grep :808可以查看808x系列端口的占用情况。修改端口范围如果默认端口范围冲突可以直接编辑scripts/deploy.py文件找到PORT_RANGE变量进行修改。域名变更如果你想更换Agent的公网域名需要手动操作修改~/.cloudflared/config.yml更新对应服务的hostname。登录Cloudflare面板更新DNS记录。重启cloudflared服务systemctl --user restart cloudflared。注意Web应用本身不绑定域名所以无需修改。7. 故障排查与常见问题实录即使自动化程度很高在实际部署中仍可能遇到问题。下面是我在多次部署中总结的常见“坑位”及解决方法。7.1 Web应用相关问题问题访问网址返回404 Not Found或“无法连接”。排查思路1检查systemd服务状态systemctl --user status your-agent-id-app如果状态是inactive尝试启动它systemctl --user start your-agent-id-app。如果状态是failed查看详细日志journalctl --user -u your-agent-id-app -xe。常见原因是Python依赖未安装成功或端口被占用。排查思路2检查端口监听ss -tlnp | grep :端口号 # 例如如果Agent配置使用8081端口 ss -tlnp | grep :8081如果没有任何输出说明应用没在监听。回到思路1查日志。如果看到python进程在监听说明应用本身是好的问题可能出在隧道。排查思路3直接测试本地接口curl http://localhost:端口号/health如果部署脚本生成的app.py模板包含/health端点这个命令应该返回一个简单的JSON响应。如果能通说明Web应用运行正常。问题聊天界面能打开但发送消息后无反应或报错。排查思路1检查OpenClaw Gatewaysystemctl --user status openclaw-gateway curl http://localhost:8000/v1/modelsGateway必须运行且/v1/models端点能返回数据。如果Gateway挂了所有Agent都无法工作。排查思路2查看Web应用日志journalctl --user -u your-agent-id-app -f发送一条消息同时观察日志。常见的错误有连接Gateway超时、Gateway返回4xx/5xx错误可能是API密钥无效或额度不足、或者RAG检索过程出错。日志会给出明确的错误信息。7.2 Cloudflare Tunnel 问题问题隧道状态异常域名无法解析。排查思路1检查cloudflared服务systemctl --user status cloudflared排查思路2检查隧道配置cat ~/.cloudflared/config.yml确认文件中存在指向你Agent正确本地端口如http://localhost:8081的ingress规则并且hostname正确。排查思路3检查DNS记录登录Cloudflare仪表盘进入你的域名DNS设置确认是否存在指向隧道ID.cfargotunnel.com的CNAME记录。Agent Factory脚本可能因权限问题配置DNS失败需要手动补上。排查思路4查看隧道日志journalctl --user -u cloudflared -f7.3 RAG 知识库问题问题Agent的回答似乎没有用到我提供的知识文档。排查思路1确认ingest过程成功检查部署时的日志看是否有RAG导入成功的提示。或者手动运行rag_tool.py list-docs查看集合内是否有内容。排查思路2检查Skill配置查看生成的领域技能文件~/.openclaw/workspace/skills/{agent_id}/SKILL.md确认其中的collection_name参数是否正确设置为你的agent_id。排查思路3测试RAG检索你可以使用OpenClaw的RAG工具手动测试检索python3 ~/.openclaw/workspace/skills/rag/rag_tool.py query 你的测试问题 --collection {agent_id}看是否能返回相关的文档片段。如果不能说明向量库构建或检索有问题。7.4 性能与优化提示内存占用每个运行的Agent Web应用FastAPI和OpenClaw Gateway都会占用一定内存。如果部署多个Agent注意系统内存资源。可以在systemd服务模板service.tmpl中为每个服务添加内存限制如MemoryMax500M。启动顺序确保openclaw-gateway服务在Agent应用服务之前启动。虽然systemd可以配置依赖关系但Agent Factory的模板目前没有配置。一个稳妥的方法是先启动Gateway再启动各个Agent应用。日志轮转默认情况下journalctl的日志会持续增长。可以考虑为重要的服务配置日志轮转策略或者定期清理旧的日志。8. 进阶应用与扩展思路当你熟练掌握了基础部署后可以尝试以下进阶玩法让这个“工厂”发挥更大价值。8.1 构建多Agent协作系统既然可以快速部署多个专家Agent何不让它们协作例如你可以部署research-agent: 擅长根据主题进行网络搜索和资料汇总。writing-agent: 擅长将零散信息整合成结构清晰的文章。critique-agent: 擅长从逻辑、文笔等角度进行评审。然后你可以编写一个协调者AgentMaster Agent其技能就是根据用户任务调用上述不同的专家Agent。这可以通过OpenClaw框架内Agent间的技能调用机制来实现或者在上层用一个简单的Python脚本来编排任务流。这样你就拥有了一个功能强大的AI团队。8.2 集成外部工具与APIAgent Factory生成的Agent核心是OpenClaw Skill。OpenClaw的强大之处在于其工具调用能力。你可以在生成的领域技能模板SKILL.md.tmpl中预置一些工具调用指令。例如为“日程管理助手”Agent添加调用日历API的工具为“电商客服”Agent添加查询订单数据库的工具。你需要在OpenClaw中配置好相应的工具Tool。修改templates/skill/SKILL.md.tmpl在适当位置加入调用这些工具的指令描述和条件判断逻辑。这样新创建的Agent就具备了使用这些工具的能力。8.3 实现用户认证与多租户默认的Web应用是完全开放的。对于内部或敏感应用你需要添加认证。修改后端模板(app.py.tmpl)在FastAPI应用中集成认证中间件例如使用JWT或OAuth2。可以在请求头中验证Token。修改前端模板(index.html.tmpl,app.js)增加登录页面在发送聊天请求前将Token放入请求头。区分用户会话将前端传递的user_id或session_id通过某种方式例如放在请求的user字段或自定义header中传递给OpenClaw GatewayGateway可以据此区分不同用户的记忆如果OpenClaw配置了基于用户的记忆隔离。这是一个相对复杂的定制需要对FastAPI和前端开发有一定了解但它能极大地提升项目的实用性。8.4 自定义模型与参数目前Agent Factory默认使用OpenClaw Gateway配置的模型通常是Claude。你可以通过修改Agent工作空间中的配置文件或修改OpenClaw Gateway的全局配置来切换模型提供商如切换到GPT、DeepSeek等或调整温度temperature、最大令牌数等参数。路径~/.openclaw/workspace-{agent_id}/下的配置文件或者OpenClaw主配置中关于模型路由的部分。修改后需要重启OpenClaw Gateway生效。我个人在实践中发现对于知识问答类Agent使用较低的温度如0.2可以获得更稳定、准确的回答而对于创意写作类Agent较高的温度如0.8则能产生更多样化的内容。