🌐 AI核心概念解析:Agent、Prompt、Skill 及生态关系
一、关键名词正确定义与原理
1. Agent(智能体)
指具备感知---决策---行动 闭环能力的自主软件实体。它不是单个模型,而是一个系统架构:接收输入(如用户指令)、调用工具(API/代码/检索)、推理规划(常基于LLM)、执行并迭代反馈。
✅ 正确理解:Agent = LLM(大脑) + Tool Use(手脚) + Memory(记忆) + Planner(导航仪)
2. Prompt(提示)
是向大语言模型(LLM)传递任务意图的结构化文本输入。它不改变模型权重,但显著影响输出质量与可控性。高级 Prompt 技术包括:
- Zero-shot / Few-shot prompting
- Chain-of-Thought (CoT) :激发逻辑推理链,如" 135 ÷ 9 = ? 135 \div 9 = ? 135÷9=? → 先想 9 × 15 = 135 9 \times 15 = 135 9×15=135,所以答案是 15 15 15"
- ReAct(Reason + Act):交替生成推理步骤与工具调用动作。
3. Skill(技能)
在 Agent 架构中,Skill 指可复用、可组合的原子能力模块,例如:
web_search(query: str) → List[str]python_interpreter(code: str) → strsend_email(to, subject, body)
Skill 是 Agent 实现"做事情"的工程载体,通常封装为函数或工具接口。
4. OpenDevin
- OpenDevin / OpenHands :开源的自主软件工程师 Agent 框架,支持代码仓库级任务执行;
✅ 本文后续示例将采用 OpenDevin(活跃、文档完善、支持Skill抽象)作为 Agent 生态代表,兼顾教学性与真实性。
二、关系图谱
触发与引导
生成规划与调用指令
按需调度
按需调度
按需调度
返回结果
返回结果
返回结果
整合结果→生成自然语言响应
Prompt
LLM
Agent
Skill 1
web_search
Skill 2
code_exec
Skill 3
file_read
🔑 核心关系:
- Prompt 是 Agent 的"启动钥匙"和"操作手册";
- Agent 是 Skill 的"指挥官"与"编排引擎";
- Skill 是 Agent 能力的物理落地,Prompt 决定 Agent 如何调用它们。
三、实战示例:用 Python 模拟简易 Agent + Skill 工作流
以下代码实现一个能自动解数学题并验证答案的轻量 Agent(无需外部依赖,纯 Python):
python
import re
import ast
# 🔹 Skill 1:执行安全 Python 表达式(仅计算)
def safe_eval(expr: str) -> float:
"""白名单限制的 eval,防注入"""
allowed_nodes = (ast.Expression, ast.BinOp, ast.UnaryOp, ast.Num,
ast.Constant, ast.USub, ast.UAdd, ast.Add, ast.Sub,
ast.Mult, ast.Div, ast.Mod)
try:
node = ast.parse(expr, mode='eval')
if not all(isinstance(n, allowed_nodes) for n in ast.walk(node)):
raise ValueError("Unsafe expression")
return float(eval(compile(node, '<string>', 'eval')))
except:
raise ValueError(f"Cannot evaluate: {expr}")
# 🔹 Skill 2:从 Prompt 中提取数学表达式(正则)
def extract_expression(prompt: str) -> str:
# 匹配类似 "计算 3 * (7 + 2)" 或 "求 150 ÷ 6 的值"
patterns = [
r'计算\s+([^\。\n]+?)[。\n]',
r'求\s+([^\。\n]+?)\s+的值',
r'(\d+\s*[\+\-\*\/\%]\s*\d+(?:\s*[\+\-\*\/\%]\s*\d+)*)'
]
for p in patterns:
m = re.search(p, prompt)
if m:
expr = m.group(1).replace('×', '*').replace('÷', '/').replace(' ', '')
return expr
return ""
# 🔹 Agent 主流程(模拟 LLM 规划 + Skill 调用)
def math_agent(prompt: str) -> str:
try:
expr = extract_expression(prompt)
if not expr:
return "❌ 未识别出数学表达式,请使用如'计算 12 + 8'格式。"
result = safe_eval(expr)
# 模拟 LLM 生成自然语言回答(即 Prompt 的"输出端")
answer_prompt = f"用户问:{prompt}\n计算得:${result}$。请用中文完整回答。"
# 简化版------直接构造回复(真实 Agent 会调用 LLM API)
return f"✅ 我帮您计算了:{expr} = ${result}$"
except Exception as e:
return f"⚠️ 计算失败:{str(e)}"
# ✅ 测试用例
if __name__ == "__main__":
print(math_agent("计算 3 × (7 + 2)")) # ✅ 输出:3 × (7 + 2) = $27.0$
print(math_agent("求 135 ÷ 9 的值")) # ✅ 输出:135 ÷ 9 = $15.0$
print(math_agent("今天的天气如何?")) # ❌ 不含表达式
💡 运行效果:
✅ 我帮您计算了:3*(7+2) = $27.0$
✅ 我帮您计算了:135/9 = $15.0$
❌ 未识别出数学表达式,请使用如'计算 12 + 8'格式。
📌 关键设计解析:
- Prompt 是输入字符串(如
"计算 3 × (7 + 2)"),驱动整个流程; - Agent 是
math_agent()函数------它解析 Prompt、决策调用哪个 Skill、整合结果; - Skills 是
extract_expression和safe_eval------专注单一职责、可独立测试与替换; - 若升级为真实系统,
math_agent内部会调用 OpenAI API 或本地 Llama3,用 ReAct 格式让 LLM 输出 JSON 规划(如{"action": "safe_eval", "value": "3*(7+2)"}),再由 Agent 解析并 dispatch。
四、延伸建议(进阶学习路径)
| 方向 | 推荐资源 |
|---|---|
| 🔧 动手构建 Agent | OpenDevin GitHub(支持 VS Code 插件,真跑 GitHub 仓库级任务) |
| 📚 Prompt 工程 | 《Prompt Engineering Guide》(lamini.ai 免费开源)+ HuggingFace transformers pipeline() 高级用法 |
| ⚙️ Skill 封装规范 | LangChain Tools / LlamaIndex Function Calling / MCP(Model Context Protocol)标准草案 |