AI Agent Skill Day 10:Code Generation技能实战——代码生成与自动修复能力落地TaoToken

发布时间:2026/10/4 21:32:53
AI Agent Skill Day 10:Code Generation技能实战——代码生成与自动修复能力落地TaoToken 1. 为什么你的 Agent 生成代码总在“跑不通”这一步翻车很多人第一次给 Agent 加 Code Generation 能力时都会经历同一个落差模型在对话框里生成的代码看着挺像样一旦丢进真实项目就报错改了两轮还是跑不起来。问题不在模型“不会写”而在于我们把“生成”当成了终点实际上它只是整条链路的第一步。一个能落地的 Code Generation 技能本质是「生成 → 校验 → 执行 → 修复」的闭环。LangChain 负责把这几步编排起来TaoToken 负责提供稳定的模型调用入口两者配合才能让 Agent 在注入错误代码后自己定位、自己改、自己验证。这篇就按这个思路把可复制的 Skill 定义、自动修复触发规则和验证动作完整走一遍。适合谁看已经在用 LangChain 搭 Agent、想让 Agent 具备“写完能自测、报错能自修”能力的开发者或者你正在做智能 IDE 插件、低代码平台、自动化脚本生成需要一套能直接抄的工程结构。全文代码可直接运行配置片段可直接粘贴重点放在“怎么让它真的跑通”而不是概念科普。核心检索词先明确AI Agent 的 Code Generation 技能指的是 Agent 根据自然语言或上下文生成代码并在执行失败后基于错误日志自动修复的能力。它和普通代码补全的区别在于——补全只给建议Code Generation 技能要对“能不能跑”负责。2. TaoToken 前置准备把模型入口和 Key 先理顺在写 Skill 之前先把模型调用这条线打通。LangChain 本身不绑定具体模型服务它通过ChatOpenAI这类封装去调兼容 OpenAI 协议的服务。TaoToken 提供的就是这样一个兼容入口你只需要把 Base URL 和 Key 配好LangChain 侧几乎不用改代码。先拿到 Key。打开控制台页面创建一个 API Key复制出来。地址是https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite拿到 Key 之后记住两个地址官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteAPI 基址https://taotoken.net/api这个不加 UTM直接用于代码里的 base_url。接下来是环境变量。我习惯把 Key 写进.env避免硬编码进代码# .env TAOTOKEN_API_KEYsk-你的key TAOTOKEN_BASE_URLhttps://taotoken.net/api然后在 Python 里读取。LangChain 的ChatOpenAI支持直接传base_url和api_key不需要额外装适配层import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI load_dotenv() llm ChatOpenAI( modelgpt-4o, temperature0.2, api_keyos.getenv(TAOTOKEN_API_KEY), base_urlos.getenv(TAOTOKEN_BASE_URL), )这里有个容易踩的点base_url结尾不要带/v1也不要带斜杠。TaoToken 的 API 基址就是https://taotoken.net/apiLangChain 内部会自己拼/chat/completions。如果你手动加了/v1很可能拿到 404。实测下来保持原样最稳。模型选择上代码生成和修复对推理能力要求偏高建议用gpt-4o或同级别模型如果只是做简单补全可以降到轻量模型省成本。temperature 设 0.2 左右太低会死板太高会乱改逻辑。如果你还想在接入前先验证模型是否正常响应可以打开模型对话页面手动发一条测试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite发一句“用 Python 写一个读取 CSV 并求和的函数”能正常返回就说明 Key 和入口都没问题。这一步别跳过后面 Skill 报错时你能快速判断是模型侧还是代码侧的问题。3. 可复制的 Skill 配置LangChain 编排 自动修复触发规则这一节是全文的核心直接给可粘贴的配置和代码。整体结构分三层Prompt 模板负责约束输出格式Pydantic 模型负责结构化解析修复循环负责在失败时自动触发第二轮生成。先定义输出结构。用with_structured_output让模型直接返回对象省去手动解析 JSON 的麻烦from pydantic import BaseModel, Field class CodeGenerationResult(BaseModel): generated_code: str Field(description生成的代码) explanation: str Field(description代码说明) has_safety_issue: bool Field(defaultFalse)然后是 Prompt 模板。这里的关键是把“错误日志”和“上下文代码”作为可选槽位生成模式和修复模式共用一套模板from langchain_core.prompts import ChatPromptTemplate PROMPT ChatPromptTemplate.from_messages([ (system, 你是一个专业的程序员助手。请根据用户需求生成安全、高效、可读的{language}代码。 如果提供了错误日志请分析原因并修复代码。 不要使用任何危险函数如 os.system、eval、exec。 只返回结构化结果包含 generated_code 和 explanation 字段。), (human, 任务描述: {task_description}\n 语言: {language}\n {context_section}\n {error_section}\n 要求: {requirements_str}) ])自动修复的触发规则我建议用“执行结果驱动”而不是“模型自评驱动”。也就是说只有当沙箱执行返回successFalse时才把error_log塞进 Prompt 触发修复。这样避免模型自己觉得“可能有问题”就反复改浪费 token。修复循环控制器长这样MAX_REPAIR_ROUNDS 2 def generate_with_repair(skill, task, language, context_codeNone, requirementsNone): resp skill.generate(task, language, context_codecontext_code, requirementsrequirements) if resp[status] failed: return resp for round_idx in range(MAX_REPAIR_ROUNDS): exec_result sandbox.execute(resp[generated_code]) if exec_result[success]: resp[execution_result] exec_result[result] return resp # 触发修复 resp skill.generate( task_descriptionf修复以下代码错误第{round_idx1}轮, languagelanguage, context_coderesp[generated_code], error_logexec_result[error], requirementsrequirements, ) return resp把MAX_REPAIR_ROUNDS设成 2 是有原因的第一轮修复能解决大部分语法和空值问题第二轮兜底处理边界情况再多就容易陷入“改了这里坏那里”的循环。实测两轮覆盖了绝大多数常见错误。如果你用的是 Cline MCP 或 Claude Code 这类工具做接入配置三件套要写全缺一个都连不上{ base_url: https://taotoken.net/api, api_key: sk-你的key, model_id: gpt-4o }Base URL、Key、Model ID 三个字段必须同时存在。我见过有人只填了 Key 和 Model结果一直报local proxy failed排查半天发现是 base_url 漏了。4. 验证请求注入错误代码看 Agent 自己定位并修复配置写完必须做一次端到端验证。我准备了一段带空值 bug 的代码故意让它跑崩然后观察 Agent 能不能自己修好。原始代码import pandas as pd df pd.read_csv(data.csv) total df[value].sum() print(total)错误日志是TypeError: unsupported operand type(s) for : int and NoneType。这个错误的根源是value列里有空值sum()遇到 None 就炸了。调用 Skillskill CodeGenerationSkill() repair_resp skill.generate( task_description修复以下代码中的空值错误, languagepython, context_codeoriginal_code, error_logerror_log, requirements[保留原有逻辑, 使用 pandas 方式处理] ) print(repair_resp[generated_code])预期输出应该类似import pandas as pd df pd.read_csv(data.csv) total df[value].fillna(0).sum() print(total)关键变化是加了.fillna(0)。Agent 从错误日志里识别出 NoneType 参与运算定位到value列然后给出 pandas 风格的修复。这就是“定位 修复”的完整链路。再验证一个 SQL 场景。给一个语法有问题的查询看它能不能在沙箱里跑通sql_resp skill.generate( task_description查询华东地区销售额大于1000的产品, languagesql, requirements[使用 WHERE 子句, 字段别名用中文] ) exec_result sandbox.execute(sql_resp[generated_code]) print(exec_result)如果第一次生成的 SQL 有语法错误exec_result[success]会是 False修复循环自动触发第二轮生成修正后的 SQL。整个过程你只需要调一次generate_with_repair剩下的交给控制器。验证成功的标志有三个status为success、execution_result里有正常返回、修复轮次不超过 2。三个都满足说明你的 Code Generation 技能已经能用了。5. 本篇常见报错排查401、local proxy failed、reading choices、OAuth这一节按真实报错来对遇到问题直接查表。401 Unauthorized最常见的原因是 Key 没读到。先确认.env里的TAOTOKEN_API_KEY有没有被load_dotenv()正确加载再确认 Key 本身没过期。如果是在 Docker 里跑环境变量可能没传进去用docker run -e TAOTOKEN_API_KEYxxx显式传入。还有一种情况是 Key 前后带了空格复制的时候容易带上strip 一下。local proxy failed这个报错通常出现在 Cline MCP 或 Claude Code 的配置里本质是 base_url 写错了。检查三件套base_url必须是https://taotoken.net/api不能带/v1不能带结尾斜杠api_key和model_id必须同时存在。三个字段缺一个或者格式不对都会报这个。Error reading choices这个报错说明请求发出去了但返回结构不符合预期。常见原因是模型名写错了比如把gpt-4o写成gpt4o服务端返回了错误结构LangChain 解析时找不到choices字段。另一个可能是 base_url 指向了错误的路径导致返回的是 HTML 而不是 JSON。用curl手动打一次接口确认返回结构curl https://taotoken.net/api/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d {model:gpt-4o,messages:[{role:user,content:hi}]}返回里有choices数组就说明入口正常问题在 LangChain 侧。OAuth 相关报错如果你用的是 Claude Code 或 Codex 这类带 OAuth 流程的工具报 OAuth 错误通常是因为认证方式冲突。这类工具要么走 OAuth要么走 API Key不能混用。如果你已经配了 API Key就把 OAuth 相关的配置清掉反之亦然。Codex 的auth.json里如果同时存在两种认证信息会优先走 OAuth 然后失败手动删掉多余字段即可。修复循环不触发检查sandbox.execute的返回值结构success字段必须是布尔值。如果沙箱返回的是字符串Falseif exec_result[success]会永远为真修复循环就不会启动。统一用布尔类型。生成代码被安全拦截如果status是partial_success且safety_issues非空说明代码里命中了危险模式比如eval、os.system。这是预期行为不是 bug。如果你确认代码安全可以调整DANGEROUS_PATTERNS白名单但生产环境不建议放开。6. 把这条链路接进你的 AgentCTA 与后续方向到这里一个能生成、能执行、能自修的 Code Generation 技能就跑通了。回顾一下关键点LangChain 负责编排TaoToken 提供模型入口沙箱负责执行验证修复循环负责兜底。四者缺一不可少任何一个都会让“自动修复”变成“手动重试”。如果你还没拿到 Key从这里进https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档在这里里面有完整的参数说明和示例https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你打算把这条链路长期跑在编码或 Agent 场景里Coding Plan 会更合适额度和稳定性都针对这类高频调用做过优化https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite后续可以往两个方向扩展一是把沙箱换成 Docker 隔离提升执行安全性二是接入 MCP 协议让这个 Skill 能被其他 Agent 复用。但那是下一步的事今天先把生成和修复这条闭环跑稳。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询