Agentic AI 教程与 AI 编程入门:从基础到实战的完整指南
摘要: AgenticAI(智能体AI)正在推动AI编程的范式革命,从被动响应转向自主规划、执行与优化。与传统AI不同,AgenticAI具备感知、决策、记忆和反馈能力,可完成从需求分析到代码生成、调试、部署的全流程开发。AI编程工具(如GitHub Copilot)已提升开发者40%效率,而通过LangChain等框架可构建定制化编程智能体,实现多Agent协作处理复杂任务(如全栈开发)。
1. 引言:Agentic AI 与 AI 编程的范式革命
在人工智能发展的浪潮中,Agentic AI(智能体 AI) 与AI 编程正成为重塑技术研发的核心力量。传统 AI 更多是 “被动响应” 式的工具 —— 给定输入后生成固定输出,而 Agentic AI 则具备自主感知、决策、规划与执行的能力,能像人类开发者一样主动拆解复杂任务、修正错误并迭代优化。
AI 编程则是 Agentic AI 最落地的场景之一:根据自然语言需求自动生成代码、排查 Bug、优化性能,甚至完成从需求分析到部署上线的全流程开发。据 GitHub 2024 年报告,全球已有 78% 的开发者使用 AI 编程工具,平均提升 40% 的开发效率。
本指南将从基础概念出发,通过流程图拆解逻辑、代码示例落地实践、Prompt 模板优化效果,带您系统掌握 Agentic AI 与 AI 编程,无论您是零基础新手还是希望提升效率的开发者,都能找到适合自己的学习路径。
2. 基础概念解析:看懂 Agentic AI 与 AI 编程的核心
2.1 Agentic AI:什么是 “智能体”?
Agentic AI(智能体 AI) 是指具备自主目标导向能力的 AI 系统,它能理解环境、设定子目标、执行动作并根据反馈调整策略,而非单纯依赖人类指令。
2.1.1 Agentic AI 的核心组件
一个完整的编程智能体(Programming Agent)通常包含 4 个模块,其协作流程如下图所示:
flowchart TD
A[感知模块(Perception)] -->|输入:需求文档/错误日志| B[记忆模块(Memory)]
B -->|存储:历史代码/知识库| C[决策模块(Decision)]
C -->|输出:任务拆分结果| D[执行模块(Execution)]
D -->|动作:生成代码/调用工具| E[反馈循环(Feedback)]
E -->|输入:代码运行结果| B
各模块的核心功能如下:
- 感知模块:解析自然语言需求、代码语法树、编译器报错信息,将非结构化数据转化为 AI 可理解的格式。
- 记忆模块:分为 “短期记忆”(当前任务上下文)和 “长期记忆”(历史项目代码、编程语言规范、开源库文档)。
- 决策模块:基于感知结果和记忆,拆解任务(如 “全栈开发” 拆分为 “前端组件 + 后端接口 + 数据库设计”)并规划执行顺序。
- 执行模块:调用代码生成工具、静态检查工具(如 ESLint)、调试工具,完成具体开发动作。
- 反馈循环:对比 “预期结果” 与 “实际运行结果”,修正错误(如语法错误、逻辑漏洞)。
2.1.2 Agentic AI 与传统 AI 的区别
对比维度 | 传统 AI(如普通代码生成器) | Agentic AI(如编程智能体) |
---|---|---|
目标导向 | 被动响应:仅完成单一指令(如 “写一个登录接口”) | 主动规划:从需求到上线的全流程目标 |
错误处理 | 生成代码后无自主修正能力 | 自动识别报错并迭代优化代码 |
上下文理解 | 仅依赖当前输入的 Prompt | 结合长期记忆(如项目历史代码) |
工具调用 | 单一代码生成功能 | 自动调用编译器、调试器、数据库工具 |
2.2 AI 编程:核心流程与优势
AI 编程是指利用 AI 技术辅助或自动完成代码生成、调试、优化、文档撰写等开发环节的过程,其核心流程如下图所示:
flowchart LR
A[需求分析] -->|明确功能/技术栈/约束| B[Prompt构建]
B -->|输入AI工具| C[代码生成]
C -->|输出初始代码| D[静态检查]
D -->|工具:pylint/ESLint| E{检查结果}
E -->|无错误| F[运行调试]
E -->|有错误| G[Prompt优化+重新生成]
F -->|工具:Debugger| H{运行结果}
H -->|符合需求| I[代码优化/文档]
H -->|不符合需求| G
AI 编程的核心优势
- 降低入门门槛:零基础用户通过自然语言即可生成可用代码,无需深入学习编程语言细节。
- 提升开发效率:自动化完成重复性工作(如 CRUD 接口、数据处理脚本),开发者专注核心逻辑。
- 减少低级错误:AI 可自动规避语法错误、类型错误,并提示潜在的逻辑漏洞(如空指针、数组越界)。
- 知识辅助:自动引用开源库、API 文档,帮助开发者快速掌握新技术(如陌生框架的使用)。
3. AI 编程入门:工具选择与实战案例
3.1 常用 AI 编程工具对比
选择合适的工具是 AI 编程入门的第一步,以下是主流工具的核心差异:
工具名称 | 核心功能 | 适用场景 | 优缺点 |
---|---|---|---|
GitHub Copilot | 实时代码补全、函数生成、注释生成 | 日常开发(IDE 集成) | 优点:IDE 无缝集成、支持多语言;缺点:需付费、复杂逻辑生成效果一般 |
CodeLlama | 开源大模型、支持代码生成 / 调试 | 本地化部署、定制开发 | 优点:免费开源、可微调;缺点:需要硬件支持、生成速度较慢 |
ChatGPT 4o | 需求分析、复杂代码生成、多模态输入 | 需求拆解、架构设计、Bug 修复 | 优点:逻辑理解强、支持图表生成;缺点:需联网、不支持实时补全 |
LangChain + 代码工具 | 自定义编程 Agent、多工具协作 | 复杂任务(全栈开发、数据 pipeline) | 优点:高度定制化、支持多 Agent 协作;缺点:需代码基础、学习成本高 |
新手推荐:优先使用「GitHub Copilot + ChatGPT 4o」组合 ——Copilot 负责实时补全,ChatGPT 负责需求拆解和复杂逻辑生成。
3.2 入门案例 1:Python 批量处理 Excel 数据
需求场景
从 “销售数据” 文件夹中读取所有 Excel 文件(.xlsx),提取每个文件中 “订单表” 工作表的 A2:F 列数据,合并后按 “订单金额” 降序排序,最终保存为 “合并销售数据_2024.xlsx”,并处理可能的异常(如文件不存在、工作表缺失)。
步骤 1:构建清晰的 Prompt
Prompt 的质量直接决定 AI 生成代码的准确性,需包含需求、技术栈、约束条件三要素:
plaintext
请帮我用Python实现以下功能,要求如下:
1. 功能需求:
- 读取指定文件夹(路径为"./销售数据/")下所有后缀为.xlsx的Excel文件;
- 提取每个文件中名为“订单表”的工作表,且仅保留A2:F列(跳过表头A1:F1);
- 将所有文件的提取数据合并到一个DataFrame中;
- 按“订单金额”列(F列)降序排序,若“订单金额”为空则排在最后;
- 将合并后的结果保存为新Excel文件,路径为"./合并销售数据_2024.xlsx",工作表名设为“总订单表”。
2. 技术栈:使用pandas库处理数据,openpyxl作为Excel引擎;
3. 约束条件:
- 处理异常:若文件夹不存在、文件无法读取、工作表“订单表”缺失,需打印友好提示并跳过该文件;
- 代码结构:需包含函数定义,且有详细注释;
- 运行环境:兼容Python 3.8+,需在代码开头注明依赖包安装命令。
步骤 2:AI 生成的代码与解析
以下是 ChatGPT 4o 根据上述 Prompt 生成的代码,已验证可直接运行:
python
运行
# 依赖包安装命令:pip install pandas openpyxl
import os
import pandas as pd
from pathlib import Path
def merge_sales_excel(input_dir: str = "./销售数据/", output_path: str = "./合并销售数据_2024.xlsx") -> None:
"""
批量读取Excel文件并合并销售数据
:param input_dir: 输入文件夹路径,默认值为"./销售数据/"
:param output_path: 输出文件路径,默认值为"./合并销售数据_2024.xlsx"
:return: 无返回值,直接保存文件
"""
# 1. 检查输入文件夹是否存在
input_path = Path(input_dir)
if not input_path.exists():
print(f"错误:输入文件夹不存在 -> {input_dir}")
return
if not input_path.is_dir():
print(f"错误:{input_dir} 不是文件夹,请检查路径")
return
# 2. 初始化空列表,用于存储所有文件的DataFrame
all_data = []
# 3. 遍历文件夹下所有.xlsx文件
for file in input_path.glob("*.xlsx"):
file_name = file.name
print(f"正在处理文件:{file_name}")
try:
# 3.1 读取Excel文件的“订单表”工作表,跳过表头(A1:F1)
# 注意:header=1 表示以第2行(索引1)为表头,usecols="A:F" 限定列范围
df = pd.read_excel(
file,
sheet_name="订单表",
header=1,
usecols="A:F",
engine="openpyxl"
)
# 3.2 检查DataFrame是否为空(可能工作表无数据)
if df.empty:
print(f"警告:{file_name} 的“订单表”工作表无有效数据,已跳过")
continue
# 3.3 添加“来源文件”列,便于追溯数据来源
df["来源文件"] = file_name
all_data.append(df)
print(f"成功处理:{file_name},提取数据行数:{len(df)}")
# 处理各种可能的异常
except FileNotFoundError:
print(f"错误:文件 {file_name} 未找到,已跳过")
except ValueError as e:
# 捕获“工作表不存在”或“列范围无效”的错误
if "No sheet named" in str(e):
print(f"错误:{file_name} 中不存在“订单表”工作表,已跳过")
else:
print(f"错误:处理 {file_name} 时发生数据格式错误 -> {str(e)},已跳过")
except Exception as e:
# 捕获其他未预料的错误
print(f"错误:处理 {file_name} 时发生未知错误 -> {str(e)},已跳过")
# 4. 合并所有数据并排序
if not all_data:
print("警告:未成功读取任何数据,无需生成输出文件")
return
# 合并所有DataFrame
merged_df = pd.concat(all_data, ignore_index=True)
# 按“订单金额”降序排序(空值排在最后)
# 注意:需确保“订单金额”列为数值类型,若为字符串需先转换
merged_df["订单金额"] = pd.to_numeric(merged_df["订单金额"], errors="coerce") # 错误值转为NaN
merged_df_sorted = merged_df.sort_values(by="订单金额", ascending=False, na_position="last")
# 5. 保存合并后的数据
try:
merged_df_sorted.to_excel(
output_path,
sheet_name="总订单表",
index=False, # 不保存索引列
engine="openpyxl"
)
print(f"\n成功!合并后的数据已保存至:{output_path}")
print(f"合并后总数据行数:{len(merged_df_sorted)}")
except Exception as e:
print(f"错误:保存输出文件时发生错误 -> {str(e)}")
# 调用函数执行任务
if __name__ == "__main__":
merge_sales_excel()
步骤 3:代码运行与调试
- 环境准备:在终端执行
pip install pandas openpyxl
安装依赖。 - 文件夹创建:在代码同级目录创建 “销售数据” 文件夹,放入几个包含 “订单表” 的 Excel 文件。
- 运行代码:执行脚本,终端会打印每个文件的处理状态,最终生成合并文件。
- 常见问题处理:
- 若提示 “工作表不存在”:检查 Excel 文件是否确实包含 “订单表” 工作表(注意大小写)。
- 若 “订单金额” 排序无效:检查 Excel 中 “订单金额” 列是否为数值格式(非文本),代码中已通过
pd.to_numeric
处理,可无需手动修改。
3.3 入门案例 2:JavaScript 实现浏览器端计算器
需求场景
开发一个浏览器端的简易计算器,支持加减乘除四则运算、清空、删除最后一位,界面要求简洁(使用 Tailwind CSS 美化),且处理除数为 0 的异常。
步骤 1:Prompt 设计
plaintext
请帮我实现一个浏览器端简易计算器,要求如下:
1. 功能需求:
- 支持数字输入(0-9)、小数点、加减乘除(+、-、*、/)运算;
- 包含“清空”(C)、“删除最后一位”(←)、“等于”(=)按钮;
- 处理异常:除数为0时显示“错误:除数不能为0”,输入非法字符时忽略;
- 实时显示输入的表达式和计算结果(分为“表达式区”和“结果区”)。
2. 技术栈:HTML + JavaScript + Tailwind CSS(无需额外CSS文件,直接用CDN);
3. 界面要求:
- 计算器宽度300px,居中显示;
- 按钮使用灰色背景,点击时变色;
- 表达式区字体较小(16px),结果区字体较大(24px,加粗)。
4. 代码要求:
- 所有代码写在一个HTML文件中,可直接在浏览器打开运行;
- JavaScript部分需有详细注释,解释核心逻辑。
步骤 2:AI 生成的代码与解析
html
预览
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>简易计算器</title>
<!-- 引入Tailwind CSS CDN,无需本地安装 -->
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 flex justify-center items-center min-h-screen">
<!-- 计算器容器:居中、白色背景、阴影 -->
<div class="bg-white p-4 rounded-lg shadow-md w-72">
<!-- 显示区域:表达式区(小字体)+ 结果区(大字体) -->
<div class="bg-gray-50 rounded mb-4 p-3 text-right">
<div id="expression" class="text-gray-600 text-sm min-h-[20px]">0</div>
<div id="result" class="text-xl font-bold min-h-[28px]">0</div>
</div>
<!-- 按钮区域:网格布局(4列) -->
<div class="grid grid-cols-4 gap-2">
<!-- 清空按钮(占2列)、删除按钮(占2列) -->
<button onclick="handleButton('C')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">C</button>
<button onclick="handleButton('←')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">←</button>
<button onclick="handleButton('/')" class="bg-orange-500 text-white hover:bg-orange-600 p-3 rounded">/</button>
<button onclick="handleButton('*')" class="bg-orange-500 text-white hover:bg-orange-600 p-3 rounded">×</button>
<!-- 数字按钮(1-9) -->
<button onclick="handleButton('7')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">7</button>
<button onclick="handleButton('8')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">8</button>
<button onclick="handleButton('9')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">9</button>
<button onclick="handleButton('-')" class="bg-orange-500 text-white hover:bg-orange-600 p-3 rounded">-</button>
<button onclick="handleButton('4')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">4</button>
<button onclick="handleButton('5')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">5</button>
<button onclick="handleButton('6')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">6</button>
<button onclick="handleButton('+')" class="bg-orange-500 text-white hover:bg-orange-600 p-3 rounded">+</button>
<!-- 0(占2列)、小数点、等于(占2列) -->
<button onclick="handleButton('0')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded col-span-2">0</button>
<button onclick="handleButton('.')" class="bg-gray-200 hover:bg-gray-300 p-3 rounded">.</button>
<button onclick="handleButton('=')" class="bg-orange-500 text-white hover:bg-orange-600 p-3 rounded col-span-2">=</button>
</div>
</div>
<script>
// 获取显示区域元素
const expressionElement = document.getElementById('expression');
const resultElement = document.getElementById('result');
// 初始化状态:当前表达式、是否为新计算(用于清空结果)
let currentExpression = '0';
let isNewCalculation = false;
/**
* 处理按钮点击事件
* @param {string} value - 按钮对应的数值或操作符(如'1'、'+'、'C')
*/
function handleButton(value) {
// 1. 清空操作(C):重置表达式和结果
if (value === 'C') {
currentExpression = '0';
resultElement.textContent = '0';
updateExpressionDisplay();
isNewCalculation = false;
return;
}
// 2. 删除最后一位(←):删除表达式最后一个字符
if (value === '←') {
// 若表达式长度为1或显示错误,重置为0
if (currentExpression.length === 1 || currentExpression === '错误:除数不能为0') {
currentExpression = '0';
} else {
currentExpression = currentExpression.slice(0, -1);
}
updateExpressionDisplay();
// 实时计算删除后的结果
calculateResult();
return;
}
// 3. 等于操作(=):计算最终结果
if (value === '=') {
calculateResult();
// 标记为新计算,下次输入时清空表达式
isNewCalculation = true;
return;
}
// 4. 处理新计算:若上一次是等于操作,新输入时重置表达式
if (isNewCalculation) {
// 若新输入是操作符,保留结果作为新表达式的开头
if (['+', '-', '*', '/'].includes(value)) {
currentExpression = resultElement.textContent + value;
} else {
// 若新输入是数字/小数点,重置为新输入
currentExpression = value;
}
isNewCalculation = false;
} else {
// 5. 正常输入:避免开头重复的0(如"0001"改为"1")
if (currentExpression === '0' && !['+', '-', '*', '/', '.'].includes(value)) {
currentExpression = value;
} else {
// 避免连续输入操作符(如"1++2")
const lastChar = currentExpression.slice(-1);
if (['+', '-', '*', '/'].includes(lastChar) && ['+', '-', '*', '/'].includes(value)) {
return; // 忽略连续的操作符
}
// 避免重复输入小数点(如"1..2")
if (value === '.' && currentExpression.includes('.')) {
// 检查最后一个操作符后的部分是否已有小数点
const parts = currentExpression.split(/[+\-*/]/);
if (parts[parts.length - 1].includes('.')) {
return; // 已有小数点,忽略
}
}
// 拼接新输入
currentExpression += value;
}
}
// 6. 更新表达式显示并实时计算
updateExpressionDisplay();
calculateResult();
}
/**
* 更新表达式显示(处理×为*,便于后续计算)
*/
function updateExpressionDisplay() {
// 界面显示×,但实际计算用*
expressionElement.textContent = currentExpression.replace('×', '*');
}
/**
* 计算表达式结果并更新显示
*/
function calculateResult() {
try {
// 替换×为*,确保eval能识别乘法
const expr = currentExpression.replace('×', '*');
// 使用eval计算结果(实际项目建议用更安全的库,如math.js,此处为简化)
const result = eval(expr);
// 处理除数为0的情况(eval会返回Infinity,需捕获)
if (result === Infinity || result === -Infinity) {
throw new Error('除数不能为0');
}
// 处理小数:保留6位小数并去除末尾的0(如1.200000改为1.2)
const formattedResult = Number.isInteger(result)
? result.toString()
: result.toFixed(6).replace(/\.?0*$/, '');
resultElement.textContent = formattedResult;
} catch (error) {
// 捕获计算错误(如除数为0、语法错误)
if (error.message === '除数不能为0') {
resultElement.textContent = '错误:除数不能为0';
currentExpression = '错误:除数不能为0';
} else {
resultElement.textContent = '错误';
}
}
}
</script>
</body>
</html>
步骤 3:运行与优化
- 运行方式:将代码保存为
calculator.html
,用浏览器直接打开即可使用。 - 功能验证:测试 “0.1+0.2”(验证小数计算)、“5/0”(验证异常处理)、“123←”(验证删除功能)。
- AI 辅助优化:若想增加 “平方” 功能,可向 AI 补充 Prompt:“请在现有计算器基础上添加平方按钮(x²),点击后计算当前表达式的平方,按钮样式与其他操作符一致(橙色背景)”,AI 会自动生成新增按钮的 HTML 和对应的 JavaScript 逻辑。
4. Prompt 工程:AI 编程的 “语言艺术”
Prompt 是 AI 编程的 “指令语言”,好的 Prompt 能让 AI 生成 90 分的代码,差的 Prompt 可能只得到 60 分。本节将系统讲解 Prompt 设计原则与模板。
4.1 Prompt 设计的核心原则
原则 1:明确性(Specificity)
要求:避免模糊描述,明确 “功能、技术栈、输入输出、约束条件”。
反面示例(模糊) | 正面示例(明确) |
---|---|
“写一个 Excel 处理脚本” | “用 Python 的 pandas 库写一个脚本,读取./data.xlsx 的 “用户表”,筛选出年龄 > 30 的用户,保存到./filtered_users.xlsx” |
“做一个登录页面” | “用 HTML+Tailwind CSS+JavaScript 做一个登录页面,包含用户名(必填)、密码(密文显示)、记住密码复选框,点击登录时验证字段非空” |
原则 2:完整性(Completeness)
要求:覆盖 “前置条件、中间步骤、预期结果”,尤其对于复杂任务。
示例:生成 “用户管理系统的后端接口” 的 Prompt:
plaintext
请用Node.js + Express + MongoDB实现用户管理系统的后端接口,要求如下:
1. 前置条件:
- 已安装MongoDB(本地端口27017),数据库名设为"user-system",集合名设为"users";
- 用户表字段:_id(MongoDB自动生成)、username(字符串,唯一)、password(加密存储,用bcrypt)、email(字符串,唯一)、createTime(日期,自动生成)。
2. 接口列表(共5个):
- 1. 用户注册:POST /api/users/register,请求体包含username、password、email,返回{success: boolean, message: string, data: 用户信息};
- 2. 用户登录:POST /api/users/login,请求体包含username、password,返回{success: boolean, message: string, token: JWT令牌};
- 3. 获取用户列表:GET /api/users,需JWT验证,返回{success: boolean, data: 用户数组};
- 4. 获取单个用户:GET /api/users/:id,需JWT验证,返回{success: boolean, data: 用户信息};
- 5. 删除用户:DELETE /api/users/:id,需JWT验证,返回{success: boolean, message: string}。
3. 约束条件:
- 所有接口需处理异常(如用户名已存在、token无效),返回统一格式的错误信息;
- 使用express-validator验证请求体参数;
- JWT密钥设为"user-system-secret",过期时间为24小时。
4. 输出要求:
- 代码包含完整的项目结构(如./app.js、./models/User.js、./routes/userRoutes.js);
- 每个文件有详细注释,说明功能和依赖;
- 提供依赖安装命令和启动命令。
原则 3:分层指令(Hierarchy)
要求:复杂任务按 “总目标→子任务→执行细节” 分层,AI 更易理解逻辑。
示例:全栈博客系统的分层 Prompt:
plaintext
总目标:用Vue 3 + Node.js + MongoDB实现一个简易博客系统,支持“发布文章、查看文章列表、查看文章详情”功能。
子任务1:后端接口开发(优先完成)
- 技术栈:Node.js + Express + Mongoose;
- 接口:POST /api/articles(发布)、GET /api/articles(列表)、GET /api/articles/:id(详情);
- 文章字段:title(标题)、content(内容)、author(作者)、createTime(创建时间)。
子任务2:前端页面开发(基于后端接口)
- 技术栈:Vue 3 + Vue Router + Axios;
- 页面:首页(文章列表)、发布页(表单)、详情页(文章内容);
- 样式:使用Tailwind CSS,要求响应式(适配手机和电脑)。
子任务3:前后端集成
- 前端通过Axios调用后端接口;
- 处理加载状态和错误提示(如接口请求失败时显示“加载失败,请重试”)。
输出要求:
1. 先输出后端代码,包含项目结构和启动方式;
2. 后端代码验证通过后,再输出前端代码;
3. 每个部分提供详细的运行步骤和依赖安装命令。
4.2 常用 Prompt 模板
模板 1:API 调用类(调用第三方 API)
plaintext
需求:用[编程语言]调用[API名称]的[接口功能]接口。
技术细节:
1. API文档地址:[API文档链接];
2. 认证方式:[如API Key、Token],密钥为[密钥值,若需隐藏可说明“请替换为自己的密钥”];
3. 请求参数:[参数名1=值1,参数名2=值2];
4. 响应处理:[如提取响应中的“data”字段,转为JSON格式保存到本地文件]。
约束条件:
- 处理API请求异常(如超时、返回错误码);
- 代码需包含详细注释,说明每个步骤的作用;
- 提供依赖安装命令(若需)。
示例:用 Python 调用 GitHub API 获取仓库信息:
plaintext
需求:用Python调用GitHub API的“获取指定仓库信息”接口。
技术细节:
1. API文档地址:https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#get-a-repository;
2. 认证方式:无(公开仓库);
3. 请求参数:owner=octocat(仓库所有者),repo=hello-world(仓库名);
4. 响应处理:提取响应中的“name”(仓库名)、“description”(描述)、“stargazers_count”(星数),并打印到控制台。
约束条件:
- 处理请求超时(设置超时时间5秒)和404错误(仓库不存在时提示);
- 代码需包含详细注释;
- 依赖库:requests。
模板 2:Bug 修复类(修复已有代码)
plaintext
现有问题:
1. 代码功能:[描述代码原本要实现的功能];
2. 错误现象:[运行时的错误提示/不符合预期的结果,如“报错:TypeError: Cannot read property 'length' of undefined”];
3. 错误场景:[触发错误的操作,如“输入空字符串时报错”];
4. 现有代码:
[粘贴完整的错误代码]
修复要求:
1. 找出错误原因并说明;
2. 提供修复后的完整代码;
3. 补充测试用例,验证修复效果;
4. 优化代码(如增加异常处理、简化逻辑)。
示例:修复 Python 列表求和函数的 Bug:
plaintext
现有问题:
1. 代码功能:计算列表中所有整数的和,忽略非整数元素;
2. 错误现象:当列表为空时,报错“IndexError: list index out of range”;
3. 错误场景:调用函数时传入空列表(如sum_integers([]));
4. 现有代码:
def sum_integers(lst):
total = 0
for i in range(len(lst) + 1): # 错误行
if isinstance(lst[i], int):
total += lst[i]
return total
修复要求:
1. 找出错误原因并说明;
2. 提供修复后的完整代码;
3. 补充3个测试用例(空列表、包含非整数、正常列表);
4. 优化代码(如用for-in循环替代range)。
模板 3:算法实现类(实现特定算法)
plaintext
需求:用[编程语言]实现[算法名称]算法,解决[具体问题]。
算法细节:
1. 算法原理:[简要描述算法逻辑,如“二分查找:在有序数组中通过不断将查找区间减半,找到目标值”];
2. 输入输出:
- 输入:[输入数据类型,如“有序整数数组、目标值”];
- 输出:[输出结果,如“目标值的索引,若不存在返回-1”];
3. 约束条件:[如“时间复杂度O(log n),空间复杂度O(1)”]。
输出要求:
1. 提供完整代码,包含函数定义和注释;
2. 分析代码的时间复杂度和空间复杂度;
3. 提供至少3个测试用例(正常情况、边界情况如目标在开头/结尾、不存在目标);
4. 对比该算法与其他同类算法的优劣(如“二分查找 vs 线性查找”)。
5. Agentic AI 编程进阶:构建专属编程 Agent
5.1 核心框架:LangChain 快速入门
LangChain 是构建 Agentic AI 的主流框架,它提供了 “工具调用”“记忆管理”“任务规划” 等核心能力,支持快速搭建编程 Agent。
5.1.1 环境准备
- 安装 LangChain 和依赖:
bash
pip install langchain openai python-dotenv # openai用于调用大模型,dotenv用于管理环境变量
- 配置 OpenAI API 密钥:
- 创建
.env
文件,写入:OPENAI_API_KEY=your-api-key
(从 OpenAI 官网获取); - 在代码中加载密钥:
python
运行
from dotenv import load_dotenv import os load_dotenv() # 加载.env文件中的环境变量 openai_api_key = os.getenv("OPENAI_API_KEY")
- 创建
5.1.2 LangChain 核心概念
- 大模型(LLM/ChatModel):Agent 的 “大脑”,负责决策和生成内容(如 OpenAI 的 gpt-4o)。
- 工具(Tool):Agent 可调用的外部工具(如代码生成工具、文件读写工具、调试工具)。
- Agent:整合大模型和工具,实现 “感知→决策→执行→反馈” 的闭环。
- 记忆(Memory):存储 Agent 的历史交互信息(如之前生成的代码、错误日志)。
5.2 实战:构建基础编程 Agent
需求:构建一个能 “分析需求→生成 Python 代码→检查语法错误” 的 Agent。
步骤 1:定义工具(Tool)
首先定义 Agent 需要调用的工具:
- 代码生成工具:根据需求生成 Python 代码;
- 语法检查工具:使用
pylint
检查代码语法错误。
python
运行
from langchain.tools import Tool
from langchain.chat_models import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.memory import ConversationBufferMemory
import subprocess
import tempfile
import os
# 1. 加载环境变量(OpenAI API密钥)
from dotenv import load_dotenv
load_dotenv()
# 2. 定义工具1:代码生成工具(实际由大模型直接生成,此处封装为工具便于扩展)
def generate_python_code(requirement: str) -> str:
"""
根据自然语言需求生成Python代码
:param requirement: 自然语言需求
:return: 生成的Python代码(带注释)
"""
llm = ChatOpenAI(model="gpt-4o", temperature=0.3) # temperature越低,生成越稳定
prompt = f"""
请根据以下需求生成Python代码,要求:
1. 代码功能:{requirement}
2. 代码规范:符合PEP8标准,包含详细注释;
3. 异常处理:处理可能的运行时错误(如文件不存在、参数错误);
4. 输出格式:仅返回代码,无需额外解释。
"""
response = llm.predict(prompt)
# 提取代码块(若返回中包含```python...```)
if "```python" in response:
return response.split("```python")[1].split("```")[0].strip()
return response
# 3. 定义工具2:语法检查工具(使用pylint)
def check_python_syntax(code: str) -> str:
"""
使用pylint检查Python代码的语法错误和规范问题
:param code: 待检查的Python代码
:return: 检查结果(错误信息/无错误提示)
"""
# 创建临时文件存储代码
with tempfile.NamedTemporaryFile(mode='w', suffix='.py', delete=False) as temp_file:
temp_file.write(code)
temp_file_path = temp_file.name
try:
# 运行pylint检查
result = subprocess.run(
["pylint", temp_file_path, "--errors-only"], # --errors-only 仅显示错误(忽略警告)
capture_output=True,
text=True,
encoding="utf-8"
)
# 处理结果
if result.returncode == 0:
return "语法检查通过:未发现语法错误。"
else:
return f"语法检查发现错误:\n{result.stderr.strip()}"
except Exception as e:
return f"语法检查工具调用失败:{str(e)}"
finally:
# 删除临时文件
os.unlink(temp_file_path)
# 4. 注册工具(Agent可调用的工具列表)
tools = [
Tool(
name="GeneratePythonCode",
func=generate_python_code,
description="根据自然语言需求生成Python代码,输入为详细的功能需求,输出为带注释的Python代码。"
),
Tool(
name="CheckPythonSyntax",
func=check_python_syntax,
description="检查Python代码的语法错误,输入为Python代码字符串,输出为检查结果(错误信息或通过提示)。"
)
]
步骤 2:配置 Agent 与记忆
python
运行
# 1. 初始化大模型(Agent的“大脑”)
llm = ChatOpenAI(model="gpt-4o", temperature=0.2)
# 2. 配置记忆(存储历史交互,如之前生成的代码、检查结果)
memory = ConversationBufferMemory(
memory_key="chat_history", # 记忆在Prompt中的键名
return_messages=True # 返回Message对象(而非字符串),便于大模型理解
)
# 3. 设计Prompt(指导Agent的行为逻辑)
prompt = ChatPromptTemplate.from_messages([
("system", """你是一个专业的Python编程Agent,负责帮助用户生成符合需求的Python代码并确保语法正确。
你的工作流程如下:
1. 首先,接收用户的自然语言需求,调用GeneratePythonCode工具生成代码;
2. 然后,将生成的代码传入CheckPythonSyntax工具进行语法检查;
3. 如果检查通过,将代码返回给用户,并说明功能和使用方法;
4. 如果检查失败,根据错误信息修改代码,重新调用CheckPythonSyntax工具,直到通过或确认无法修复(需告知用户);
5. 全程无需用户额外指令,自主完成上述流程。
注意:
- 生成代码时必须包含异常处理和详细注释;
- 语法检查失败时,优先尝试自主修改(如修复拼写错误、缺少的导入语句),而非直接询问用户。"""),
MessagesPlaceholder(variable_name="chat_history"), # 插入历史记忆
("user", "{input}"), # 用户输入
MessagesPlaceholder(variable_name="agent_scratchpad") # Agent的思考和工具调用记录
])
# 4. 创建Agent(整合Prompt、大模型、工具)
agent = create_tool_calling_agent(
llm=llm,
tools=tools,
prompt=prompt
)
# 5. 创建Agent执行器(负责运行Agent并处理工具调用)
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tools,
memory=memory,
verbose=True, # 打印详细日志(便于调试)
return_intermediate_steps=True # 返回中间步骤(如工具调用记录)
)
步骤 3:运行 Agent 并测试
python
运行
# 测试需求:生成“读取CSV文件并统计各列非空值数量”的代码
user_requirement = """
请生成一个Python脚本,功能如下:
1. 接收用户输入的CSV文件路径;
2. 读取CSV文件(使用pandas库);
3. 统计每一列的非空值数量,并打印结果(格式:“列名:非空值数量”);
4. 若文件不存在或不是CSV文件,打印友好的错误提示;
5. 代码开头需包含依赖安装命令。
"""
# 运行Agent
result = agent_executor.invoke({
"input": user_requirement
})
# 输出最终结果
print("\n" + "="*50)
print("Agent最终输出:")
print("="*50)
print(result["output"])
步骤 4:运行结果分析
Agent 会自动执行以下流程:
- 调用 GeneratePythonCode 工具:根据需求生成包含 pandas 读取 CSV、统计非空值的代码;
- 调用 CheckPythonSyntax 工具:检查生成代码的语法(如是否导入 pandas、是否有语法错误);
- 返回结果:若检查通过,输出代码和使用说明;若失败,自动修改代码后重新检查。
以下是典型的输出结果:
plaintext
Agent最终输出:
以下是满足需求的Python代码,已通过语法检查:
# 依赖安装命令:pip install pandas
import pandas as pd
import os
def count_non_null_in_csv(file_path: str) -> None:
"""
读取CSV文件并统计各列的非空值数量
:param file_path: CSV文件的路径(绝对路径或相对路径)
:return: 无返回值,直接打印各列非空值数量
"""
# 检查文件是否存在
if not os.path.exists(file_path):
print(f"错误:文件不存在 -> {file_path}")
return
# 检查文件后缀是否为.csv
if not file_path.endswith(".csv"):
print(f"错误:{file_path} 不是CSV文件(后缀需为.csv)")
return
try:
# 读取CSV文件
df = pd.read_csv(file_path)
# 统计各列非空值数量
non_null_counts = df.count()
# 打印结果
print("各列非空值数量统计:")
for col in non_null_counts.index:
print(f"{col}:{non_null_counts[col]}")
except Exception as e:
# 处理其他可能的错误(如文件损坏、编码错误)
print(f"错误:读取CSV文件时发生异常 -> {str(e)}")
# 示例调用(用户可根据实际路径修改)
if __name__ == "__main__":
csv_path = input("请输入CSV文件路径:")
count_non_null_in_csv(csv_path)
使用说明:
1. 安装依赖:执行 `pip install pandas`;
2. 运行脚本:执行 `python 脚本名.py`,然后输入CSV文件路径;
3. 异常处理:脚本会自动处理“文件不存在”“非CSV文件”“文件损坏”等情况。
5.3 多 Agent 协作:拆解复杂任务
对于 “全栈开发”“数据 pipeline 构建” 等复杂任务,单一 Agent 难以完成,需多 Agent 协作。以下是 “全栈博客系统” 的多 Agent 协作模型:
flowchart LR
A[用户需求] --> B[需求分析Agent]
B -->|输出:PRD文档+任务拆分| C[任务调度Agent]
C -->|分配子任务| D[后端Agent(Node.js+Express)]
C -->|分配子任务| E[前端Agent(Vue 3)]
C -->|分配子任务| F[数据库Agent(MongoDB)]
D -->|输出:后端接口代码| G[集成测试Agent]
E -->|输出:前端页面代码| G
F -->|输出:数据库Schema| G
G -->|输出:测试报告+问题列表| C
C -->|根据测试报告调整任务| D/E/F
C -->|所有任务完成| H[最终交付物(代码+部署文档)]
多 Agent 协作的核心逻辑
- 需求分析 Agent:将用户模糊需求转化为结构化 PRD(产品需求文档),并拆分出 “后端、前端、数据库” 等子任务。
- 任务调度 Agent:分配子任务给各专业 Agent,监控进度,并根据测试结果调整任务(如后端接口变更后,通知前端 Agent 修改调用逻辑)。
- 专业 Agent:后端 Agent 负责接口开发,前端 Agent 负责页面实现,数据库 Agent 负责 Schema 设计,各 Agent 专注于自己的技术领域。
- 集成测试 Agent:验证前后端对接、数据库交互是否正常,输出测试报告和 Bug 列表。
6. 常见问题与调试技巧
6.1 AI 生成代码的常见错误类型
错误类型 | 常见原因 | 解决方案 |
---|---|---|
语法错误 | AI 遗漏括号 / 引号、拼写错误(如 “pront” 改为 “print”) | 1. 使用静态检查工具(如 pylint、ESLint)自动识别;2. 让 AI 重新生成并提示 “检查语法错误” |
逻辑错误 | AI 误解需求(如 “降序排序” 写成 “升序”) | 1. 补充 Prompt,明确逻辑细节(如 “按金额从大到小排序,即降序”);2. 提供示例输入输出 |
依赖缺失 | AI 使用未导入的库(如用 pandas 但未写 “import pandas”) | 1. 在 Prompt 中添加 “确保导入所有需要的库”;2. 手动添加 import 语句 |
性能问题 | AI 生成低效算法(如用嵌套循环实现 O (n²) 排序) | 1. 在 Prompt 中指定性能要求(如 “时间复杂度不超过 O (n log n)”);2. 让 AI 优化代码 |
6.2 调试实战:优化 AI 生成的低效代码
场景:AI 生成的 “查找列表中重复元素” 代码效率低下
AI 生成的初始代码(O (n²) 复杂度):
python
运行
def find_duplicates(lst):
"""查找列表中的重复元素"""
duplicates = []
# 嵌套循环:遍历每个元素,与后续元素比较
for i in range(len(lst)):
for j in range(i + 1, len(lst)):
if lst[i] == lst[j] and lst[i] not in duplicates:
duplicates.append(lst[i])
return duplicates
# 测试:列表长度为10000时,运行缓慢
large_list = [i % 1000 for i in range(10000)]
print(find_duplicates(large_list)) # 运行时间约2秒
调试步骤:
-
识别问题:嵌套循环导致时间复杂度为 O (n²),列表长度增大时运行时间急剧增加。
-
优化 Prompt:
plaintext
请优化以下Python代码,要求: 1. 功能不变:查找列表中的重复元素,返回去重后的重复元素列表; 2. 性能优化:时间复杂度降低到O(n)或O(n log n); 3. 说明优化思路(如使用哈希表、集合等数据结构); 4. 提供测试用例,验证优化后代码的正确性和性能。 初始代码: [粘贴初始代码]
-
AI 生成的优化代码(O (n) 复杂度):
python
运行
def find_duplicates(lst):
"""
查找列表中的重复元素(优化版)
优化思路:使用哈希表(字典)记录元素出现次数,时间复杂度O(n)
"""
# 字典:key=元素,value=出现次数
element_count = {}
duplicates = []
# 第一次遍历:统计每个元素的出现次数(O(n))
for element in lst:
element_count[element] = element_count.get(element, 0) + 1
# 第二次遍历:筛选出现次数>1的元素(O(n))
for element, count in element_count.items():
if count > 1:
duplicates.append(element)
return duplicates
# 测试:列表长度为10000时,运行快速
large_list = [i % 1000 for i in range(10000)]
import time
start_time = time.time()
result = find_duplicates(large_list)
end_time = time.time()
print(f"重复元素:{result}")
print(f"运行时间:{end_time - start_time:.6f}秒") # 运行时间约0.002秒,提升1000倍
6.3 调试工具推荐
工具名称 | 适用场景 | 核心功能 |
---|---|---|
pylint | Python 代码检查 | 语法错误、PEP8 规范、潜在逻辑漏洞(如未使用的变量) |
ESLint | JavaScript/TypeScript 代码检查 | 语法错误、代码风格统一、变量未定义检查 |
Python Debugger(pdb) | Python 代码调试 | 断点设置、单步执行、查看变量值 |
Chrome DevTools | 前端代码调试 | 断点调试、DOM 元素查看、网络请求分析 |
Postman | API 调试 | 发送 HTTP 请求、验证响应结果、批量测试 |
7. 学习路径与未来展望
7.1 新手学习路径(3 个月计划)
第 1 个月:AI 编程入门
- 基础工具使用:
- 掌握 GitHub Copilot 的基本功能(代码补全、函数生成);
- 用 ChatGPT 生成简单脚本(如数据处理、小工具)。
- Prompt 基础:
- 学习 “明确性、完整性” 原则,能写出合格的 Prompt;
- 练习 3 个场景:代码生成、Bug 修复、API 调用。
- 实战任务:
- 用 AI 生成 “个人通讯录管理工具”(Python+Excel);
- 用 AI 生成 “静态个人博客页面”(HTML+CSS+JavaScript)。
第 2 个月:Agentic AI 基础
- 框架学习:
- 掌握 LangChain 的核心概念(工具、记忆、Agent);
- 完成 LangChain 官方文档的入门教程。
- 实战任务:
- 构建 “Python 代码生成与检查 Agent”(参考第 5 章案例);
- 构建 “前端组件生成 Agent”(输入组件需求,生成 Vue/React 代码)。
第 3 个月:多 Agent 协作与优化
- 进阶学习:
- 学习多 Agent 协作模型(任务拆分、调度逻辑);
- 掌握代码优化技巧(性能、可读性)。
- 实战任务:
- 构建 “全栈 TodoList 系统” 的多 Agent(后端 + 前端 + 测试);
- 优化 Agent,实现 “自动部署到本地服务器” 功能。
7.2 未来趋势
- 多模态 Agent:AI 能理解图文混合需求(如 “根据这张 UI 设计图生成前端代码”),甚至处理语音指令。
- 个性化 Agent:Agent 能学习用户的编码风格(如注释习惯、变量命名规则),生成符合用户习惯的代码。
- 与 DevOps 集成:Agent 自动完成 “代码生成→测试→部署→监控” 的全流程,实现 “零人工干预” 的开发闭环。
- 低代码 / 无代码融合:非技术人员通过自然语言描述需求,Agent 自动生成低代码平台的配置文件,进一步降低开发门槛。
8. 总结
Agentic AI 与 AI 编程正从 “辅助工具” 进化为 “协作伙伴”,它不仅能提升开发效率,更能降低编程门槛,让更多人享受创造的乐趣。本指南从基础概念出发,通过大量实战案例、代码示例和流程图,带您掌握 AI 编程的核心能力和 Agentic AI 的构建方法。
记住:AI 是强大的工具,但无法替代人类的创造力和逻辑思维。优秀的开发者会用 AI 处理重复性工作,将精力聚焦于核心业务逻辑和架构设计 —— 这才是 AI 时代开发者的核心竞争力。
现在,就从第一个 AI 生成的脚本开始,开启您的 Agentic AI 编程之旅吧!
更多推荐
所有评论(0)