简单的说,这是一个“会自己决定是否调用工具(比如计算器)的智能体”。
1️⃣ 安装依赖
pip install openai
2️⃣ 代码
import os
from openai import OpenAI
# 🔑 设置你的 API Key
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# ====== 工具定义(Agent 可调用)======
def calculator(expression: str) -> str:
try:
result = eval(expression)
return str(result)
except Exception as e:
return f"Error: {e}"
tools = {
"calculator": calculator
}
# ====== Agent 核心 ======
def agent(user_input: str):
messages = [
# system prompt 用来定义 Agent 的行为规则和工具调用协议,使 LLM 在合适的时候输出符合约定格式的“调用指令”,从而让程序能够识别并执行工具。
{"role": "system", "content": """你是一个智能 Agent。
你可以使用工具来帮助用户。
当需要计算时,请使用如下格式:
TOOL: calculator
INPUT: 1+2*3
否则直接回答用户。
"""},
{"role": "user", "content": user_input}
]
for step in range(5): # 最多循环 5 步
response = client.chat.completions.create(
model="gpt-4.1-mini",
messages=messages
)
reply = response.choices[0].message.content
print(f"\n🤖 Agent: {reply}")
# ===== 判断是否调用工具 =====
if "TOOL:" in reply:
lines = reply.split("\n")
tool_name = None
tool_input = None
for line in lines:
if line.startswith("TOOL:"):
tool_name = line.split("TOOL:")[1].strip()
if line.startswith("INPUT:"):
tool_input = line.split("INPUT:")[1].strip()
if tool_name in tools:
print(f"🛠 调用工具: {tool_name}({tool_input})")
result = tools[tool_name](tool_input)
print(f"📦 工具返回: {result}")
# 把工具结果喂回去(Observation)
messages.append({"role": "assistant", "content": reply})
messages.append({
"role": "user",
"content": f"工具返回结果: {result}"
})
else:
print("❌ 未知工具")
break
else:
break
# ====== 运行 ======
if __name__ == "__main__":
while True:
user_input = input("\n👤 你: ")
agent(user_input)
🌰 示例运行
输入:
你: 帮我算一下 12 * (3 + 5)
输出:
🤖 Agent:
TOOL: calculator
INPUT: 12*(3+5)
🛠 调用工具: calculator(12*(3+5))
📦 工具返回: 96
🤖 Agent:
结果是 96
⭐️ Agent 设计”三要素“
- Prompt(行为规则)
{"role": "system", "content": """
你是一个智能 Agent,可以使用工具解决问题。
规则:
1. 能直接回答时,不要调用工具
2. 只有在需要精确计算时,才调用 calculator
3. 调用必须严格使用以下格式:
TOOL: calculator
INPUT: <数学表达式>
4. 工具返回后,你需要基于结果给出最终答案
5. 不要编造工具结果
"""}
- Skills(能力集合):
Skills 是 Agent 可以调用的“执行能力”,Skill = 对 Tool 的封装 + 命名 + 使用语义
Skills ≈
[
{
"name": "calculator",
"description": "用于精确数学计算"
},
{
"name": "translate",
"description": "翻译文本"
}
]
- Executor(执行器)
if tool_name == "translate":
result = translate(...)
elif tool_name == "calculator":
result = calculator(...)
常用模型汇总记录
| 模型类型 | 代表模型/技术 | 主要用途 | 输入 | 输出 | 典型应用场景 |
|---|---|---|---|---|---|
| 语言模型(LLM) | GPT、Claude | 理解和生成自然语言 | 文本 | 文本 | Chat、写代码、总结 |
| 视觉模型(CV) | ResNet、YOLO、SAM | 图像理解/识别 | 图片/视频 | 标签/坐标/分割 | 人脸识别、目标检测 |
| 语音识别(ASR) | Whisper | 语音 → 文本 | 音频 | 文本 | 语音转字幕、会议记录 |
| 语音合成(TTS) | Tacotron、VITS | 文本 → 语音 | 文本 | 音频 | AI配音、语音助手 |
| 多模态模型 | GPT-4o、Gemini | 融合多种输入 | 文本+图像+音频 | 文本/图像等 | 看图问答、语音助手 |
| 推荐模型 | 协同过滤、DeepFM | 用户兴趣预测 | 用户行为数据 | 推荐结果 | 抖音/淘宝推荐 |
| 排序模型(Ranking) | LambdaMART | 排序候选内容 | 候选列表 | 排序结果 | 搜索结果排序 |
| 搜索/检索模型(Embedding) | BERT embedding | 语义相似度计算 | 文本 | 向量 | RAG、相似搜索 |
| 生成模型(扩散/GAN) | Stable Diffusion | 内容生成 | 文本/噪声 | 图像/视频 | AI绘画 |
| 时间序列模型 | ARIMA、LSTM | 趋势预测 | 时间数据 | 数值预测 | 股票、流量预测 |
| 强化学习模型 | PPO、DQN | 决策优化 | 状态/奖励 | 动作 | 游戏AI、自动驾驶 |
| 图神经网络(GNN) | GCN、GraphSAGE | 图结构数据建模 | 图数据 | 节点/边预测 | 社交网络、推荐 |
| 异常检测模型 | Isolation Forest | 异常识别 | 数据 | 是否异常 | 风控、欺诈检测 |
| OCR 模型 | CRNN、PaddleOCR | 图片文字识别 | 图片 | 文本 | 发票识别、扫描件 |
| 分割模型 | U-Net、SAM | 图像区域划分 | 图片 | mask | 医疗影像、抠图 |