ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI造AI实战:让Agent自主开发RAG问答机器人的全记录

AI造AI实战:让Agent自主开发RAG问答机器人的全记录 1. “AI造AI”到底在造什么1.1 先厘清概念AI造AI不等于AI自我进化最近半年“AI能不能自己造AI”这个问题在开发者圈子里被反复吵上热搜吵架的双方经常根本不是在聊同一件事。有人理解的“造AI”是“让AI设计出比自身更聪明的下一代AI”这是AGI层面的问题现阶段确实做不到而有人理解的“造AI”是“让AI去写AI应用、训练脚本、推理服务、部署配置”这个事不仅已经有人做出来了而且做出来的效果已经可以进生产环境用了。我自己最近就干了一件挺有仪式感的事扔给一个AI Agent一份任务简报让它从零开始开发一个“产品文档RAG问答机器人”——包含后端接口、向量检索、模型接入、前端页面、Docker部署最后Agent自己跑测试、自己修bug、自己把服务拉起来我用浏览器访问时发现页面都能正常出来。整个过程里我只做了三件事写清楚需求、盯着它别偏、最后做验收。所以你看如果我们把“AI造AI”定义成“AI作为工程师完成AI应用的设计、开发和部署”那这个标题没什么可吵的答案就是“能”。它不是科幻是工程效率的一次实实在在的突破。1.2 为什么争议这么大能力边界与想象力的错位争议大的核心原因是“造AI”这个词太容易被过度解读。网上讨论AI自我复制、AI自行进化天然自带流量但落到工程现场我们关心的其实是更具体的问题AI能不能把一份模糊需求变成可运行的代码能不能在编译报错时自己定位问题能不能把一个模型推理服务完整部署上线从我自己实操以及身边团队的使用情况看答案是明确的“能”只是有条件。条件是任务边界要清晰执行环境要给足反馈回路要完整人工审核不能缺位。AI Agent不是神仙它更像一个执行力极强但需要环境配合的初级工程师。给它一台能跑命令的电脑、一套能回传报错信息的工具链、一份够具体的需求说明它就能像人一样一个文件一个文件把项目搭起来再通过运行结果倒逼自己修正。这篇文章我就把自己做“AI自己造AI”的完整过程、技术选型、踩坑记录和边界思考全部摊开。适合谁看想用AI Agent提升开发效率的工程师、正在评估“AI能否承担部分研发工作”的技术管理者以及单纯好奇AI能力边界的产品和测试同学。2. 工具选型让AI“自己动手”需要怎样的底座2.1 核心组件大模型 Agent框架 执行环境想让AI Agent真正完成开发任务光有一个聊天窗口远远不够。你需要三个东西协同工作一个会思考的大模型、一套能调度工具的Agent框架、一个允许Agent动手操作的真实环境。大模型是“大脑”。最好选代码生成能力强的模型同时要求支持长上下文和工具调用。我这次的主力模型是支持Function Calling的版本规划任务时用它的强推理能力写代码时用它的代码补全能力。如果你的环境允许也可以考虑本地部署的开源模型比如用Ollama跑Qwen系列这样简单模块可以交给本地模型执行复杂规划和设计再交给云端模型成本会更可控。Agent框架是“手和脚”。常见的开源方案有LangGraph、AutoGPT也有偏应用层的DifyJava生态里还有Spring AI。它们本质都是给AI提供文件读写、终端执行、网页访问、工具调用等能力并维护“规划—执行—观察—再规划”的循环。如果你只是做一个快速验证用LangGraph搭一个最小循环就够了如果是企业内部落地我更推荐Dify或自研一套轻量框架便于控制权限和审计。这次演示我用的就是基于LangGraph改的极简Agent总共就两层主Agent负责任务拆解工具层负责读写文件和执行shell命令。执行环境是“工地”。这也是新手最容易低估的部分。AI Agent必须能真正跑在沙箱环境里能够执行pip install、运行pytest、读取报错输出才能形成“写代码—看结果—改代码”的闭环。我用的是一台带Docker的Linux服务器所有操作都在容器里进行宿主机只挂载了一个工作目录。这样既给了Agent足够的自由度又不至于让它碰到系统关键目录。注意给Agent的“工地”一定要隔离。它会在里面执行任意命令所以绝不能和生产环境、密钥文件混在一起。用容器隔离是底线不是可选项。2.2 为什么不是“一句提示词”就能完成现在很多人习惯在ChatGPT里发一句“帮我写一个RAG机器人”然后复制粘贴代码。这不算AI造AI这只是AI当百度用。真正的AI Agent开发要求AI自己管理整个项目生命周期它要知道该建哪些文件、依赖装什么、程序怎么跑、报错怎么修。我尝试过一个对比场景。同一个小型情感分析API让普通聊天模型“一次输出”和让Agent“自主迭代开发”是两种完全不同的结果。前者会给你一个看起来完整、但大概率跑不起来的代码片段后者会自己创建虚拟环境、安装依赖、启动服务、用curl打接口验证最后交付的是一个实际上线可用的服务。差别在哪差别就在于有没有“运行反馈”。所以我把这次实践的关键总结成一句话AI造AI的本质不是AI一口气写出完整程序而是AI在一个能自我验证的环境里通过多轮试错把程序改到能跑。这就意味着工程约束比模型本身的智商更重要。你得把任务目标量化、把验收标准写清楚、把迭代轮次卡住AI才能真正为你创造价值而不是给你制造一堆需要返工的半成品。3. 实操记录我是怎么让AI Agent从0到1做一个RAG问答机器人3.1 第一步给AI写一份“任务简报”这次我选了一个很典型的AI应用场景产品文档问答机器人。用户传入一段问题系统从本地文档库里检索相关资料然后让大模型基于检索结果生成回答。这类应用是RAG检索增强生成的经典落地形态也是AI应用开发里最有代表性的“AI工程”活。我先把任务简报写好简报里写明了技术栈、目标接口、验收标准和约束条件。如果你也想复现可以直接参考这份结构项目目标基于产品文档构建一个RAG问答API支持上传文档、检索、问答三个接口。技术栈要求Python 3.11、FastAPI、Chroma向量数据库、一个Embedding模型、一个LLM接口我用的是兼容OpenAI格式的本地模型服务。功能范围上传PDF/Markdown时自动切分问答接口先检索top-k相关片段再让大模型生成答案结果返回引用来源。明确“不要做”不要做用户登录、不要做前端复杂交互、不要做权限管理。验收标准/upload接口能上传并检索/ask接口能基于文档内容回答问题/health接口返回200每个模块都要有测试。运行约束所有命令必须在项目虚拟环境内执行目录结构遵循FastAPI官方最佳实践。你可能会问为什么非要写这么细因为AI Agent在面对模糊任务时最大的风险是自由发挥。它会给你加一堆花哨但没用的功能也会忽略你真正关心的细节。任务简报的价值就是给Agent划定边界让它把精力集中在核心交付上。这个步骤花了我大概半小时但它决定了后面几小时的输出质量。3.2 第二步Agent从规划到动手任务简报写好之后我把Agent启动它会先输出一份项目规划。这一步真的很有意思它产生了这样一个目录结构doc-qa/ ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI入口 │ ├── models.py # 数据模型 │ ├── ingest.py # 文档加载与切分 │ ├── retriever.py # 向量检索 │ ├── generator.py # LLM生成回答 │ └── config.py # 配置管理 ├── tests/ │ ├── test_health.py │ ├── test_ingest.py │ ├── test_retriever.py │ └── test_api.py ├── docs/ # 测试用文档 ├── requirements.txt └── README.md它没有问我任何问题直接按照任务简报给的约束搭好了骨架然后开始逐文件写代码。这里我截取一段它生成的检索模块核心代码# app/retriever.py import chromadb from app.config import settings class Retriever: def __init__(self) - None: self.client chromadb.PersistentClient(pathsettings.CHROMA_PATH) self.collection self.client.get_or_create_collection( namedoc_snippets, metadata{hnsw:space: cosine} ) def add_snippets(self, ids: list[str], documents: list[str], metadatas: list[dict]) - None: self.collection.upsert( idsids, documentsdocuments, metadatasmetadatas ) def search(self, query: str, top_k: int 4): result self.collection.query( query_texts[query], n_resultstop_k, include[documents, metadatas, distances] ) return result这段代码虽然不是多复杂但它用到了持久化向量存储、cosine距离、upsert操作基本是当前RAG工程的标准写法。Agent能够生成这种代码不稀奇稀奇的是它接下来知道自己要去跑测试而不是把代码丢给我就完事。3.3 第三步自主运行与调试Agent写完第一批文件后自动在终端里执行了这么一串命令cd /workspace/doc-qa python -m venv .venv source .venv/bin/activate pip install -r requirements.txt pytest tests/ -v --tbshort第一次运行不出意外地挂了。测试失败信息显示test_retriever.py里调用的get_or_create_collection和已安装的Chroma版本行为不一致旧版本需要传embedding_function参数新版本默认用了某个内置模型导致维度不匹配。这里我发现一个很关键的设计Agent能读取终端返回的完整输出流包括stderr里的红色traceback然后根据这些报错信息去改代码或调整依赖版本。它几秒后给出了解决方案把依赖版本锁定到兼容区间chromadb0.4.15,0.5然后重新执行了安装和测试。经过三轮“写代码—跑测试—看报错—改代码”的循环测试全部通过。我全程没有碰键盘。这个自主调试的过程说真的比看到它一次写出完美代码更令我震撼因为这才是真实工程开发的状态没有人能一次写对但能做到快速定位、快速修正就是生产力。3.4 第四步部署上线测试通过后Agent没有停。它自动生成了Dockerfile和docker-compose.yml把模型服务也编排了进去。最终部署后我用到这几个文件也没改Agent生成的docker-compose长这样services: embedding: image: ghcr.io/ollama/ollama:latest command: serve volumes: - ollama_data:/root/.ollama api: build: . ports: - 8000:8000 environment: - CHROMA_PATH/data/chroma - LLM_BASE_URLhttp://embedding:11434/v1 - LLM_MODELqwen2.5:7b volumes: - ./data:/data depends_on: - embedding部署完成后Agent自己执行了冒烟测试用curl请求了/health接口又向/ask接口提了一个和测试文档内容相关的问题验证返回结果里包含预期内容。我是在它全部完成之后才打开浏览器输入http://服务器IP:8000/docs看到了FastAPI自动生成的Swagger文档页面。那一刻我是真的有点恍惚这个应用虽然不算复杂但它是AI从零到一自己构建、自己调试、自己部署上线的这就是“有人做出来了”最直观的证明。4. 一路上踩过的坑与排查技巧实录4.1 AI“自嗨式开发”怎么防我实操中第一个遇到的坑是Agent很容易陷入“自嗨式开发”。什么意思就是它不停写代码、不停生成文件但从不主动运行验证最后交给你一堆根本跑不起来的东西。这在早期的Agent框架里特别常见OpenAI的Codex和AutoGPT都有这个问题。解决办法是在任务简报里写死循环规则每完成一个模块必须运行对应的测试不通过就不允许进入下一个模块所有命令必须在终端里真实执行不允许模拟任何依赖变更后都要重新跑全量测试。我后来就给Agent加了一个“强制验证”工具所有写文件操作之后都要跟着执行一个状态检查做不到就报错逼它遵守纪律。另一个细节是轮次上限。Agent一旦陷入反复改同一个bug的情况会无限消耗token。我会在框架里设定最大迭代次数比如20轮。超过之后Agent会被要求停下来输出“问题摘要”和“建议人工介入点”由我来决定是继续还是换思路。实测下来大多数问题在10轮内都能解决20轮基本是兜底。4.2 依赖地狱与版本飞镖RAG相关的Python生态版本冲突是重灾区。Chroma、pydantic、fastapi、embedding模型之间经常出现“明明前几天还能跑今天重新安装就报错”的情况。Agents自动装依赖时往往会选择最新版本结果往往触发各种兼容性问题。我踩过一个特别典型的坑Chroma对pydantic的版本要求很严格如果系统里已经装了一个较新的pydanticChroma导入时直接抛出“无法从pydantic导入字段”之类的错误。第一次跑的时候Agent傻傻地试了五六种解决方法最后才意识到应该用虚拟环境并锁定版本。这个坑我现在已经有了一套标准动作尽量用uv pip compile生成锁文件锁定所有传递依赖版本。所有依赖安装都在项目自己的虚拟环境或容器内进行绝不使用全局环境。涉及AI应用时优先让Agent参考项目模板里的requirements版本而不是自己盲猜最新版。遇到版本冲突先让Agent检查所有依赖的声明约束再决定升级还是降级不要一次改多个包。有个细节值得单独提一句chromadb在0.4.x和0.5.x之间的存储格式不兼容如果你中途升级了版本旧的持久化数据可能直接没法读取。所以一旦项目开始跑就不要频繁改向量库的主版本这个教训我帮大家踩过了。4.3 成本与时间失控AI Agent的token消耗非常惊人尤其是让它“想清楚了再干”的模式。有一次我扔给它一个中等复杂度的任务让它先做详细设计再写代码结果光设计阶段就花了接近两万token最后写代码反而只用了八千。这种消耗不完全是浪费但规划部分过长了确实是一种成本失控。我的控制策略是这样的把任务拆分不要一次性让Agent完成整个大项目而是分模块、分阶段提交。简单但重复的工作比如生成单元测试模板、写DTO类可以切到本地小模型执行复杂规划和重构才用云端大模型。在Agent框架的每次调用里都设置max_tokens上限防止一次生成超长但不必要的内容。监控token消耗设一个硬预算比如“整个任务最多消耗30万token”到了以后强制停止并输出阶段性成果。时间失控也值得注意。Agent在等待模型返回时如果遇到网络超时很多框架会直接判定失败导致整个任务反复从头开始。我一般会让Agent框架内置重试机制但重试次数不要超过3次避免在一个僵死的请求上无限等待。4.4 安全与合规底线现在市面上有一些打着“无限制”“无审核”旗号的AI工具我个人是不推荐把这类工具引入工程环境的。Agent本身就是高风险组件它既能写代码又能执行命令如果再用“无限制”的思路去使用跟把生产服务器的钥匙挂在门口没有区别。我在实践中总结出几条安全红线希望在工程化AI Agent时能守住Agent运行环境与生产环境严格隔离Agent只能操作指定的工作目录不能访问系统目录、密钥、数据库地址。所有Agent生成的代码在合并到主分支前必须有真人评审。这是流程底线不是效率问题。Agent执行任何安装类命令前要弹出“执行确认”钩子尤其是在非容器环境里。日志记录Agent的每一步操作方便事后审计。你永远不知道它会在第几轮迭代里做出什么奇怪操作。对接企业数据时要提前给Agent配置最小权限不能因为“它是AI”就让它接触所有数据。说得直接一点AI造AI要想进生产环境“有审核、有护栏”是基本前提这不应该成为妥协项。一个能自己跑代码的Agent必须有比人类员工更严格的权限管控因为我们还无法完全预测它在边界条件下的行为。5. 冷静看待“AI造AI”边界、收益与工程师的新角色5.1 现阶段能做什么、不能做什么这次实践跑通之后我并没有整天喊“AI要替代程序员了”反而对这件事的边界更清楚了。现阶段AI Agent能做的是那些需求明确、验证方式清晰、技术栈成熟的开发任务。比如开发一个CRUD管理后台、写一个模型推理服务、生成单元测试、修复编译错误、编写部署脚本这些事它做得又快又稳效率普遍是纯人工的好几倍。但它目前还做不好的事情也很明确。第一它不理解模糊的业务意图。你跟它说“给客户做一个更好的体验”它不知道“更好”具体指什么需要你把需求翻译成可验证的指标。第二它在做架构权衡时经常给出平庸的方案。它不是不会选型而是缺乏对业务生命周期的判断容易选择短期写着爽但长期维护困难的方案。第三它对自己的输出质量有过度自信如果不强制验证你拿到手的东西质量是完全不可控的。所以我的判断是AI造AI在工程层面已经是真命题但它造的更多是“能工作的AI应用”而不是“高瞻远瞩的AI架构”。工程师的价值不在于和AI比写代码速度快而在于定义边界、做出取舍、判断什么叫“足够好”。5.2 工程师如何与AI协同既然AI能承担越来越多的开发执行那工程师的新定位是什么我的观察是工程师正在从“实现者”变成“验收者架构师安全闸门”。我们不再需要把每个接口都手敲一遍但我们需要设计清楚系统边界、任务流程和验收标准。几个实战建议供参考任务拆解粒度要小。我建议把一个大项目拆成“每个子任务能在30分钟内验证结果”的粒度。任务越小AI的失控概率越低。验收标准一定要可执行。不要写“性能要好”这种话要写“首页接口在100并发下P95延迟低于300ms”。强制AI先生成测试再写实现。测试即需求说明书对AI的约束作用立竿见影。用Git管理AI的所有产出。每次Agent修改代码都生成独立分支方便回溯和评审。其中“先生成测试再写实现”这个技巧我特别想强调。让AI自己写测试实际上是逼它先思考“这段代码该怎么定义正确”而不是急着堆功能。实测下来用这个流程能让AI交付代码的通过率提升一半以上而且返工次数明显减少。5.3 下一步可以延伸的方向这次跑通的是单Agent完成一个小型AI应用。再往下延伸有几个方向我判断会很快成熟。第一个是多Agent协作。让一个Agent专门写代码另一个Agent专门做代码评审和测试设计两个Agent相互制约质量会明显高于单Agent。已经有团队用这种方式跑通了中等复杂度的项目效果很可观。第二个是AI Agent与AutoML的结合。现在的Agent能写训练脚本但超参搜索、模型选择、效果评估这些还是靠人工在管。如果把主动学习和Agent结合起来让AI自己去看指标曲线、自己调整训练参数那才是真正意义上的“AI训练AI”。第三个是Agent接入企业级AI应用开发平台。比如Spring AI目前已经在Java生态里提供了一套成熟的AI应用抽象如果你所在团队是Java技术栈可以基于Spring AI构建自己的AI服务再让Agent利用这些组件做开发。这比从零搭建一套Agent工具链要省事得多。第四个是把Agent用于AI测试。我们团队已经在用Agent自动生成AI应用的测试用例、生成badcase数据、做回归验证。这个方向非常实用因为AI应用的不确定性很高人工测试根本覆盖不过来让AI测试AI闭环刚好。我个人看法是AI Agent会先从“完成独立小任务”进化到“参与复杂项目的完整生命周期”但这个过程需要大量的工程注入不是模型越强就自动发生的。它需要工具链、流程、评估体系、安全机制一起跟上这也是接下来一两年AI infra方向最值得投入的地方。最后再分享一个我在这次实践里发现的小技巧如果条件允许让Agent在写代码之前先把项目的README写到一半只描述完项目定位和快速开始然后逼它自己把剩余部分补完。这个办法看似绕路但效果出奇的好因为它能倒逼AI在动手编码前就建立起项目整体的逻辑地图。你也不妨在自己团队的Agent工作流里试试这一手。
返回列表