【Demo】最小单元可运行Agent by Python

0 阅读3分钟

简单的说,这是一个“会自己决定是否调用工具(比如计算器)的智能体”。

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医疗影像、抠图