
在实际软件开发项目中我们经常面临两类挑战一类是重复性的、模式固定的编码任务例如根据接口文档生成DTO、编写CRUD代码或填充单元测试模板另一类是复杂的、需要多步骤决策和长期运行的任务例如分析一个遗留系统的模块依赖、制定重构计划并分步执行或者为一个新需求从零开始设计并实现一个微服务。传统的人工编码或简单的代码补全工具如IDE插件难以高效、连贯地处理后者。近年来基于大型语言模型LLM的智能体Agent技术为解决这类问题提供了新的思路。一个能够自我改进Self-improving的强化学习RLM智能体专门为编码工作流和长期自主任务而设计正是这个领域的前沿探索方向。这种智能体的核心目标不是替代开发者而是成为一个高度协同的“超级副驾驶”。它能够理解复杂的、模糊的指令将其分解为可执行的子任务序列调用合适的工具如代码编辑器、终端、版本控制系统、API文档查询器来执行并根据执行结果如编译错误、测试失败、代码评审反馈进行反思和学习动态调整后续策略。其“自我改进”能力体现在它可以通过与环境的交互即编码过程本身积累经验优化其任务分解、工具调用和代码生成的策略从而在未来的类似任务中表现更好。本文将深入探讨构建这样一个智能体的核心概念、技术架构、实现路径以及在实际工程中落地所面临的挑战与最佳实践。1. 理解自我改进型编码智能体的核心机制要构建一个有效的智能体首先需要厘清几个关键概念智能体Agent、工作流Workflow、长期任务Long-running Task以及自我改进Self-improving在此上下文中的具体含义。1.1 智能体 vs. 简单代码生成器普通的代码生成器或补全工具如GitHub Copilot本质上是“下一次词元预测”模型。它们根据上下文提示Prompt生成一段最可能的代码但缺乏任务规划、执行和验证的闭环能力。一个编码智能体则是一个更复杂的系统它通常包含以下核心组件规划器Planner负责将高层目标如“为订单服务添加库存检查功能”分解为一系列具体的、可操作的步骤如“1. 定位OrderService类2. 分析现有下单逻辑3. 查询InventoryService API4. 在扣减库存前插入检查逻辑5. 编写单元测试”。工具调用Tool Use智能体可以访问并调用一系列外部工具。对于编码任务关键工具包括文件系统读/写代码文件、编译器/解释器检查语法、测试运行器验证功能、版本控制git commit/push、命令行执行构建脚本、网络搜索查询文档等。记忆Memory智能体需要短期记忆来跟踪当前任务的上下文和已执行的步骤也需要长期记忆来存储从过往任务中学到的经验例如“项目A中处理数据库连接池的常用模式是X”。执行器Executor负责协调规划步骤调用相应工具并收集工具执行后的反馈如终端输出、文件内容、错误信息。反思与学习Reflection Learning这是实现“自我改进”的关键。智能体需要能够评估当前步骤或整体任务的成功与否。如果失败如编译错误它能分析原因调整计划或生成新的代码。更重要的是它能将这些成功或失败的经验结构化地存储起来用于优化未来的决策这个过程可以类比于强化学习中的策略更新。1.2 “自我改进”的实现路径从强化学习到经验回放“自我改进”并非让模型在运行时动态调整其数十亿的神经网络参数这在实际中几乎不可行。更实用的工程化路径是通过以下方式实现基于反馈的策略优化智能体在环境中行动编码获得奖励信号如代码通过编译1通过单元测试5被人工接受10。这些奖励可以用于训练一个独立的、轻量级的“策略网络”或“价值函数”来指导规划器做出更好的决策。这就是强化学习RL的核心思想。经验库Experience Replay将成功完成的任务轨迹从用户指令到最终可运行代码的所有步骤、工具调用和结果保存到一个向量数据库中。当遇到新任务时智能体可以首先从这个经验库中检索相似的成功案例作为规划参考这大大提高了起点的质量。提示工程Prompt Engineering的迭代将智能体运行过程中暴露的常见失败模式如特定类型的逻辑错误、对项目架构的误解总结成新的规则或示例反哺到系统提示词System Prompt中从而在模型层面进行软性改进。工具链的扩展与优化根据任务执行情况发现现有工具集的不足例如缺少某个静态分析工具然后由开发人员扩展工具集这也是一种系统层面的改进。1.3 长期自主任务的挑战与应对“长期运行”意味着任务可能持续数小时甚至数天涉及数百个步骤。这带来了独特挑战状态保持与恢复智能体进程可能崩溃服务器可能重启。智能体必须能够将其当前状态任务目标、已完成步骤、中间结果、上下文持久化并能从中断点恢复。上下文长度限制LLM有有限的上下文窗口。长期任务会产生海量的中间日志、代码变更和工具输出。智能体需要具备“摘要”能力将冗长的历史压缩成精炼的上下文或采用分层记忆机制。不确定性处理外部环境会变化如依赖库更新、API响应改变。智能体的计划需要具备一定的鲁棒性和适应性能够检测到意外情况并重新规划。2. 构建智能体的技术栈与环境准备构建一个原型级别的自我改进编码智能体需要整合多个层面的技术。以下是一个推荐的技术栈和初始环境配置。2.1 核心组件与技术选型组件可选技术说明与选型建议核心大语言模型GPT-4/4o, Claude 3, DeepSeek-Coder, Qwen-Coder需要强大的代码理解和生成能力。云端API如OpenAI方便但可能有延迟和成本问题本地部署模型如Qwen2.5-Coder可控性强但对硬件要求高。初期建议从云端API开始。智能体框架LangChain, LlamaIndex, AutoGen, CrewAI这些框架提供了构建智能体所需的基础抽象如Agent、Tool、Memory。LangChain生态丰富LlamaIndex长于检索AutoGen支持多智能体协作。根据复杂度选择。工具执行环境Docker容器, 轻量级虚拟机MicroVM, 严格沙箱安全是重中之重。绝不能让智能体直接在宿主机器上执行任意命令。必须在一个隔离的、资源受限的容器或沙箱中运行并且工具权限要最小化例如不能直接rm -rf /。记忆存储向量数据库Chroma, Pinecone, Weaviate, SQL数据库PostgreSQL, 文件系统短期记忆和对话上下文可用内存或Redis长期经验存储和检索推荐使用向量数据库便于语义搜索相似任务。状态管理与编排工作流引擎Prefect, Airflow, 自定义状态机, 数据库对于长期任务需要一个可靠的状态机来跟踪进度、处理失败和重试。简单任务可用框架内状态管理复杂任务可集成轻量级工作流引擎。前端/交互界面命令行界面CLI, Web界面Gradio, Streamlit, IDE插件初期用CLI快速验证核心逻辑后期可构建Web界面方便任务提交和监控。2.2 初始开发环境搭建我们以一个基于Python、LangChain和OpenAI API的简化原型为例展示环境准备步骤。首先创建项目目录并初始化虚拟环境mkdir self-improving-coding-agent cd self-improving-coding-agent python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate安装核心依赖pip install langchain langchain-openai chromadb # 智能体框架、模型接口、向量数据库 pip install docker # 用于管理工具执行容器可选但强烈建议 pip install pytest # 用于智能体运行测试创建基础项目结构. ├── agent_core/ # 智能体核心逻辑 │ ├── __init__.py │ ├── planner.py # 任务规划模块 │ ├── executor.py # 工具执行与协调模块 │ ├── memory.py # 记忆管理模块 │ └── reflector.py # 反思与学习模块 ├── tools/ # 工具定义 │ ├── __init__.py │ ├── code_editor.py # 读写代码文件 │ ├── shell_tool.py # 执行安全shell命令在容器内 │ └── test_runner.py # 运行测试 ├── environments/ # 执行环境如Docker配置 │ └── sandbox.Dockerfile ├── experience_db/ # 经验库数据 ├── config.yaml # 配置文件API密钥、模型参数等 ├── requirements.txt └── main.py # 主入口配置环境变量和密钥切勿提交到版本库# 在 .env 文件中 OPENAI_API_KEYsk-你的密钥 # 其他配置如数据库连接、Docker配置等3. 实现一个最小可行智能体从任务分解到代码执行本节将实现一个能够接收简单编码指令、分解任务、调用基础工具并执行的最小可行智能体MVP。这个智能体尚不具备“自我改进”能力但构成了整个系统的工作闭环。3.1 定义核心工具安全第一所有工具的执行必须在受控环境中。我们首先定义一个在Docker容器内执行Shell命令的工具。# tools/safe_shell_tool.py import docker from langchain.tools import BaseTool from pydantic import Field import subprocess import os class SafeShellTool(BaseTool): name safe_shell_tool description Execute a shell command inside a secure, ephemeral Docker container. Use for compiling, running tests, or installing dependencies. NEVER use for destructive operations. command: str Field(..., descriptionThe shell command to execute.) def _run(self, command: str) - str: client docker.from_env() # 使用一个轻量级、无特权的镜像 image_name python:3.11-slim # 将当前工作目录或特定项目目录挂载到容器内 current_dir os.getcwd() try: container client.containers.run( image_name, commandfsh -c {command}, volumes{current_dir: {bind: /workspace, mode: rw}}, working_dir/workspace, removeTrue, # 执行后自动删除容器 stdoutTrue, stderrTrue, detachFalse, usernobody # 以非root用户运行 ) # 容器输出是bytes需要解码 if isinstance(container, bytes): output container.decode(utf-8) else: output container return fCommand executed successfully. Output:\n{output} except docker.errors.ContainerError as e: return fCommand failed with exit code {e.exit_status}. Stderr:\n{e.stderr.decode(utf-8) if e.stderr else None} except Exception as e: return fFailed to execute command in container: {str(e)}接下来定义读写文件的工具# tools/code_editor_tool.py from langchain.tools import BaseTool from pydantic import Field import os class CodeEditorTool(BaseTool): name code_editor description Read or write content to a file. Use to view existing code or save generated code. action: str Field(..., descriptionAction to perform: read or write.) file_path: str Field(..., descriptionRelative path to the file from project root.) content: str Field(None, descriptionContent to write (required if action is write).) def _run(self, action: str, file_path: str, content: str None) - str: abs_path os.path.join(os.getcwd(), file_path) if action read: try: with open(abs_path, r, encodingutf-8) as f: return f.read() except FileNotFoundError: return fError: File not found at {file_path} except Exception as e: return fError reading file: {str(e)} elif action write: try: os.makedirs(os.path.dirname(abs_path), exist_okTrue) with open(abs_path, w, encodingutf-8) as f: f.write(content) return fSuccessfully wrote to {file_path} except Exception as e: return fError writing file: {str(e)} else: return fError: Unknown action {action}. Use read or write.3.2 构建规划与执行循环智能体的核心是一个循环规划 - 执行 - 观察 - 再规划。# agent_core/simple_agent.py from langchain_openai import ChatOpenAI from langchain.agents import initialize_agent, AgentType from langchain.memory import ConversationBufferMemory from tools.safe_shell_tool import SafeShellTool from tools.code_editor_tool import CodeEditorTool import os class SimpleCodingAgent: def __init__(self, model_namegpt-4): self.llm ChatOpenAI(modelmodel_name, temperature0.1) # 低温度保证确定性 self.tools [SafeShellTool(), CodeEditorTool()] # 记忆用于保持对话上下文 self.memory ConversationBufferMemory(memory_keychat_history, return_messagesTrue) # 初始化一个LangChain智能体 self.agent initialize_agent( toolsself.tools, llmself.llm, agentAgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION, # 适合多轮对话和工具调用 memoryself.memory, verboseTrue, # 打印详细思考过程便于调试 handle_parsing_errorsTrue ) def run(self, task_description: str): 运行智能体处理一个任务 # 构造一个清晰的系统提示引导智能体扮演代码助手角色 system_prompt You are an expert software engineer AI assistant. Your goal is to complete coding tasks by planning, using tools, and iterating. You have access to the following tools: 1. safe_shell_tool: To run commands in a safe container. Use it to compile, run tests, install packages, etc. 2. code_editor: To read existing code or write new code to files. Workflow: 1. Understand the users request. 2. Plan the steps needed (e.g., read relevant files, write new code, run tests). 3. Use the tools to execute each step. 4. If you encounter errors, analyze them and adjust your plan. 5. Confirm completion by running relevant tests or checks. Be precise and careful. Always check the results of your actions before proceeding. full_prompt system_prompt f\n\nUser Task: {task_description} try: response self.agent.run(full_prompt) return response except Exception as e: return fAgent execution failed: {str(e)} # 主入口示例 if __name__ __main__: agent SimpleCodingAgent() # 一个简单的测试任务创建一个Python文件并运行它 task Please create a Python script named hello_agent.py in the current directory. The script should define a function greet(name) that returns a greeting string like Hello, {name}!. Then, write a small test in the same file under if __name__ __main__: that calls greet(World) and prints the result. Finally, execute the script using the shell tool to verify it works. result agent.run(task) print(\n Final Agent Response ) print(result)3.3 运行验证与观察运行上述main.py脚本。由于设置了verboseTrue你将在控制台看到类似以下的详细输出这揭示了智能体的“思考”过程 Entering new AgentExecutor chain... Thought: The user wants me to create a Python script, write a function and a test, then run it. I should first check the current directory, then create the file, then run it. Action: { action: code_editor, action_input: { action: write, file_path: hello_agent.py, content: def greet(name):\n return fHello, {name}!\n\nif __name__ __main__:\n result greet(World)\n print(result) } } Observation: Successfully wrote to hello_agent.py Thought: Now I need to run the script to verify it works. Action: { action: safe_shell_tool, action_input: { command: python hello_agent.py } } Observation: Command executed successfully. Output: Hello, World! Thought: The script ran successfully and produced the expected output. The task is complete. Finished chain. Final Agent Response I have successfully created the hello_agent.py file with the greet function and a test section. The script has been executed and it printed Hello, World!, confirming it works as expected.这个简单的闭环验证了智能体能够理解任务、规划步骤写文件-执行、调用工具并最终完成任务。这是构建更复杂能力的基础。4. 引入自我改进机制经验回放与反思学习一个只会执行固定流程的智能体是脆弱的。我们需要为其添加从错误中学习和利用历史经验的能力。4.1 构建经验库我们将成功完成的任务轨迹存储到向量数据库以便后续检索。一个任务轨迹包含原始指令、最终成功的步骤序列规划-行动-观察链、以及最终产出如创建的代码文件哈希。# agent_core/memory/experience_store.py from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.schema import Document import json class ExperienceStore: def __init__(self, persist_directory./experience_db): self.embeddings OpenAIEmbeddings() self.vectorstore Chroma( collection_namecoding_experiences, embedding_functionself.embeddings, persist_directorypersist_directory ) def save_experience(self, task_description: str, execution_trace: list, final_output: str): 保存一次成功的任务经验 # execution_trace 是一个字典列表记录每一步的思考、行动和观察 metadata { task: task_description, steps: json.dumps(execution_trace), # 序列化步骤 output_summary: final_output[:500] # 摘要 } doc Document(page_contenttask_description, metadatametadata) self.vectorstore.add_documents([doc]) self.vectorstore.persist() def retrieve_similar_experiences(self, query: str, k3): 检索与当前任务相似的历史经验 docs self.vectorstore.similarity_search(query, kk) experiences [] for doc in docs: exp { task: doc.metadata.get(task), steps: json.loads(doc.metadata.get(steps, [])), output_summary: doc.metadata.get(output_summary) } experiences.append(exp) return experiences4.2 增强规划器基于经验的检索增强生成在规划阶段我们首先从经验库中寻找类似任务的解决方案作为参考。# agent_core/planner.py class ExperienceAwarePlanner: def __init__(self, llm, experience_store): self.llm llm self.experience_store experience_store def plan(self, current_task: str) - str: # 1. 检索相似经验 similar_exps self.experience_store.retrieve_similar_experiences(current_task, k2) experience_context if similar_exps: experience_context \n\n## Similar Past Successful Tasks:\n for i, exp in enumerate(similar_exps): experience_context f{i1}. Task: {exp[task][:100]}...\n Key Steps: {self._summarize_steps(exp[steps])}\n # 2. 结合经验和当前任务生成规划 planning_prompt f You are a planning module for a coding AI agent. Your job is to create a step-by-step plan. {experience_context} ## Current New Task: {current_task} Based on the current task and any relevant past experiences above, generate a concise, actionable plan. The plan should be a numbered list of clear steps. Each step should be something the agent can do using its tools (read file, write file, run command). plan self.llm.invoke(planning_prompt).content return plan def _summarize_steps(self, steps): # 简化步骤显示 action_types [step.get(action, ) for step in steps[:3]] return , .join([a for a in action_types if a])4.3 实现反思器从失败中学习在执行每个主要步骤或任务最终失败后触发反思过程分析原因并生成可供学习的“教训”。# agent_core/reflector.py class TaskReflector: def __init__(self, llm): self.llm llm def analyze_failure(self, task: str, plan: str, execution_history: list, error: str) - dict: 分析任务失败原因并生成改进建议 reflection_prompt f The AI agent failed to complete the following task: TASK: {task} ORIGINAL PLAN: {plan} EXECUTION HISTORY (last few steps): {execution_history[-3:]} FINAL ERROR: {error} Please analyze the root cause of the failure. Was it: a) A flawed plan (e.g., missing step, wrong order)? b) An incorrect tool usage (e.g., wrong command, file path)? c) A misunderstanding of the requirement? d) An environmental issue (e.g., missing dependency, permission)? Provide a brief analysis and, most importantly, a concrete lesson or rule that the agent should remember for future similar tasks. Format the lesson as: When [situation], remember to [action]. analysis self.llm.invoke(reflection_prompt).content # 将教训结构化存储可以用于更新系统提示或经验库的元数据 lesson { task_snippet: task[:150], error_type: self._extract_error_type(error), analysis: analysis, timestamp: datetime.now().isoformat() } return lesson def _extract_error_type(self, error_msg): if FileNotFoundError in error_msg: return FileNotFound elif SyntaxError in error_msg or Compilation failed in error_msg: return Syntax/Compilation elif ImportError in error_msg or ModuleNotFoundError in error_msg: return DependencyMissing elif permission denied in error_msg.lower(): return PermissionError else: return OtherRuntimeError将这些模块集成到主智能体循环中就形成了一个具备初步学习和记忆能力的系统规划时参考过去失败时总结教训。这些教训可以定期由人工审核并提炼成规则注入到系统提示词中实现“提示词层面”的自我改进。5. 工程化挑战、常见问题与排查路径将一个研究原型转化为稳定、可用的工程系统面临诸多挑战。以下是关键问题及应对思路。5.1 常见问题与解决方案问题现象可能原因检查与排查路径处理建议与预防措施智能体陷入循环或执行无关操作1. 提示词引导性不足。2. 任务过于模糊智能体无法确定完成条件。3. 工具返回结果未能有效推动状态前进。1. 查看verbose日志观察智能体的“Thought”是否在重复。2. 检查最后几次工具调用的输入输出是否有效。1. 在系统提示词中明确“完成标准”。2. 为任务设置最大步骤限制如50步超时则终止并反思。3. 设计工具使其返回更结构化、可判断的信息。工具调用失败如容器错误、权限错误1. Docker守护进程未运行或客户端无法连接。2. 容器镜像拉取失败。3. 挂载目录权限问题。4. 执行的命令本身在容器环境中不存在。1. 运行docker ps测试Docker可用性。2. 检查工具类中捕获的异常信息。3. 手动在目标容器中执行相同命令进行验证。1. 在工具实现中加入更健壮的错误处理和清晰的错误信息返回。2. 使用更稳定、通用的基础镜像如alpine。3. 实现工具调用的重试机制。智能体生成代码质量低或不符合项目规范1. LLM缺乏对特定项目代码风格、框架和库的上下文。2. 提示词未包含足够的约束条件。1. 检查生成的代码看是逻辑错误还是风格问题。2. 对比智能体使用的上下文和项目实际文档。1. 在任务开始前让智能体先“阅读”项目关键文件如README.md,pom.xml,requirements.txt, 主要目录结构。2. 将项目编码规范、框架约定作为上下文提供给LLM。3. 引入代码静态分析工具如linter作为验证步骤并将错误反馈给智能体进行修正。长期任务状态丢失1. 进程崩溃或重启。2. 内存中的状态未持久化。1. 检查是否有持久化存储数据库、文件记录任务状态。2. 查看系统日志是否有异常退出记录。1.必须实现状态持久化。将任务ID、当前步骤、已完成步骤结果、上下文摘要等定期保存到数据库。2. 设计任务为可重入的每个步骤的结果应独立且可重复。成本失控使用云端API时1. 智能体陷入长循环产生大量API调用。2. 任务分解过细步骤太多。1. 监控API调用次数和Token消耗。2. 分析日志统计平均任务所需的调用次数。1. 设置严格的预算和用量告警。2. 实现步骤数限制和单次任务Token消耗限制。3. 对简单、重复性子任务考虑用规则或小模型处理减少对大模型的调用。5.2 安全与权限管控清单这是生产部署前必须严格审查的领域。执行隔离所有代码执行、命令运行必须在Docker容器或更严格的沙箱如gVisor, Firecracker中进行。容器配置应为只读根文件系统并禁用特权模式。网络隔离执行环境默认不应访问外网。如需访问应通过白名单机制控制并避免访问内部生产网络。文件系统访问严格限定智能体可读写的目录范围。最好提供一个独立的“工作区”目录而不是整个项目根目录。工具权限最小化仔细审查每个工具的能力。shell_tool应禁止执行rm,format,chmod等危险命令或对其参数进行严格过滤。输入验证与过滤对用户输入的初始任务描述进行基础的安全扫描防止注入恶意指令。审计日志记录智能体的每一个思考、决策、工具调用及其参数和结果用于事后审查和问题排查。5.3 性能优化方向缓存对常见的、确定的子任务结果如“读取项目pom.xml文件”进行缓存避免重复调用LLM和工具。分层规划不要让LLM规划每一个微操作。可以设计一个高层规划器分解为模块级任务和多个底层执行器处理具体代码生成。本地小模型对于语法检查、简单代码补全、固定模式生成等任务使用本地运行的较小代码模型如StarCoder, CodeLlama降低对昂贵大模型的依赖。异步执行对于I/O密集型的工具调用如运行耗时测试采用异步非阻塞方式避免智能体空等。6. 从原型到生产最佳实践与扩展方向构建一个真正能在团队开发流程中创造价值的自我改进编码智能体远不止实现核心循环。以下是走向生产环境的关键考量。6.1 集成到现有开发工作流智能体不应是一个孤立的玩具而应融入CI/CD和团队协作流程。代码评审助手智能体可以预先对提交的代码进行自动化评审检查常见bug、风格不符、性能隐患并将评论以GitHub/GitLab评论的形式提交。自动化测试生成与维护针对新增或修改的代码智能体可以分析变更尝试生成或更新相应的单元测试、集成测试。遗留代码文档化智能体可以定期扫描代码库中缺乏注释或文档的复杂模块自动生成初步的文档或注释。CI/CD流程中的质量门禁在合并请求Merge Request流程中智能体可以作为一道自动检查确保变更符合团队约定否则阻塞合并。6.2 建立有效的评估与改进循环“自我改进”需要可衡量的标准和反馈。定义成功指标对于不同任务类型定义清晰的成功标准。例如生成API接口代码的成功率、通过单元测试的比例、人工采纳率、平均节省的开发时间。收集人工反馈提供简单的“ thumbs up/down”机制让开发者对智能体的产出进行评分。这是最宝贵的强化学习信号。A/B测试当对智能体的提示词、规划策略或模型进行更新时可以采用A/B测试在小流量任务上对比新旧版本的效果。定期复盘经验库由资深工程师定期审查经验库中存储的“教训”和成功轨迹进行归纳和清洗确保学习到的知识是高质量且通用的。6.3 扩展智能体的能力边界基础编码能力之上可以朝着更自主、更理解业务的方向演进。多智能体协作引入角色分工。例如一个“架构师”智能体负责高层设计一个“开发”智能体负责实现一个“测试”智能体负责验证。它们通过共享的工作区和消息机制进行协作。集成外部知识让智能体能够实时查询官方文档、Stack Overflow、内部Wiki获取最新的、项目特定的知识弥补训练数据的滞后性。理解业务逻辑通过让智能体阅读产品需求文档PRD、用户故事和会议纪要尝试将模糊的业务需求直接转化为技术任务清单和初步实现。处理模糊和探索性任务对于“优化系统性能”这类模糊任务智能体需要先制定探索计划如分析日志、进行压测、定位瓶颈再根据发现的问题制定具体的代码修改方案。构建一个实用的自我改进编码智能体是一个持续迭代的工程。它始于一个能安全运行代码的最小闭环成长于与真实开发环境的不断交互和反馈学习中。其最终价值不在于完全自动化开发而在于成为开发者手中一个能理解意图、承担琐碎工作、并从历史中不断学习的强大协同伙伴。启动这样一个项目最好的方式是从一个非常具体、边界清晰的子问题开始例如“自动为Java Bean生成单元测试”验证其可行性并积累经验再逐步扩展其能力和应用范围。