在这里插入图片描述

🎁个人主页:我滴老baby
🎉欢迎大家点赞👍评论📝收藏⭐文章
🔍系列专栏:AI

在这里插入图片描述
在这里插入图片描述

Python入门:从零开始写你的第一个AI智能体,30分钟搞定!

你是否想过,用不到100行Python代码,就能打造一个能自动思考、自主决策的AI智能体?这篇文章带你从零开始,一步步实现!
在这里插入图片描述

一、什么是AI智能体(Agent)?

在人工智能领域,Agent(智能体) 是一个能够感知环境、自主思考并采取行动的程序。与传统程序不同,Agent具备以下核心特征:

特征 传统程序 AI Agent
决策方式 预设规则 自主推理
环境感知 被动接收输入 主动获取信息
行动能力 固定流程 灵活调用工具
学习能力 可反馈优化
适应性 特定场景 通用任务

简单来说,如果说传统程序是一个"执行命令的士兵",那么AI Agent就是一个"能独立思考的将军"。

二、环境准备

在开始编码之前,请确保你的电脑已经安装好以下环境:

# 安装Python(建议3.10+)
python --version

# 创建虚拟环境
python -m venv agent_env
source agent_env/bin/activate  # Windows用: agent_env\Scripts\activate

# 安装必要的库
pip install openai

你需要一个OpenAI API Key(或其他兼容的大模型API),可以在 OpenAI官网 申请。

三、最小Agent架构:感知-思考-行动

一个最简单的Agent由三个核心部分组成:

┌─────────────┐
│   感知环境    │  ← 接收用户输入 / 获取外部信息
└──────┬──────┘
       ▼
┌─────────────┐
│   思考推理    │  ← 大模型分析、规划、决策
└──────┬──────┘
       ▼
┌─────────────┐
│   采取行动    │  ← 调用工具、返回结果
└─────────────┘

让我们用代码实现这个循环:

import json
from openai import OpenAI

class SimpleAgent:
    """一个最简的AI智能体"""

    def __init__(self, api_key: str, model: str = "gpt-4o-mini"):
        self.client = OpenAI(api_key=api_key)
        self.model = model
        self.messages = [
            {
                "role": "system",
                "content": "你是一个有用的AI助手。你可以帮助用户回答问题。"
            }
        ]

    def perceive(self, user_input: str) -> None:
        """感知:接收用户输入"""
        self.messages.append({"role": "user", "content": user_input})

    def think(self) -> str:
        """思考:调用大模型进行推理"""
        response = self.client.chat.completions.create(
            model=self.model,
            messages=self.messages,
            temperature=0.7
        )
        reply = response.choices[0].message.content
        self.messages.append({"role": "assistant", "content": reply})
        return reply

    def act(self, user_input: str) -> str:
        """行动:完整的感知-思考-行动循环"""
        self.perceive(user_input)
        return self.think()

# 使用示例
if __name__ == "__main__":
    agent = SimpleAgent(api_key="your-api-key-here")

    # 第一轮对话
    reply = agent.act("你好,请用一句话介绍什么是AI Agent")
    print(f"Agent: {reply}")

    # 第二轮对话(Agent有记忆)
    reply = agent.act("请展开详细解释你刚才说的内容")
    print(f"Agent: {reply}")

运行结果示例:

Agent: AI Agent(智能体)是一个能够自主感知环境、做出决策并采取行动以实现特定目标的人工智能系统。
Agent: 当然!刚才我提到AI Agent能感知环境、做决策、采取行动。具体来说...

四、给Agent装上"工具箱"

真正的Agent不仅仅是聊天,它还能调用工具。让我们给Agent添加计算器和天气查询功能:

import json
from openai import OpenAI

# 定义工具函数
def calculator(expression: str) -> str:
    """安全计算数学表达式"""
    try:
        allowed = set("0123456789+-*/.() ")
        if all(c in allowed for c in expression):
            return str(eval(expression))
        return "错误:表达式包含非法字符"
    except Exception as e:
        return f"计算错误:{e}"

def get_weather(city: str) -> str:
    """模拟天气查询(实际项目中调用真实API)"""
    weather_db = {
        "北京": "晴天,25°C",
        "上海": "多云,28°C",
        "深圳": "小雨,30°C",
        "成都": "阴天,22°C",
    }
    return weather_db.get(city, f"暂无{city}的天气数据")

# 工具定义(告诉大模型有哪些工具可用)
tools = [
    {
        "type": "function",
        "function": {
            "name": "calculator",
            "description": "计算数学表达式的结果,例如 '2 + 3 * 4'",
            "parameters": {
                "type": "object",
                "properties": {
                    "expression": {
                        "type": "string",
                        "description": "要计算的数学表达式"
                    }
                },
                "required": ["expression"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "查询指定城市的天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称"
                    }
                },
                "required": ["city"]
            }
        }
    }
]

# 工具映射
TOOL_MAP = {
    "calculator": calculator,
    "get_weather": get_weather,
}

class ToolAgent:
    """带工具调用能力的AI智能体"""

    def __init__(self, api_key: str, model: str = "gpt-4o-mini"):
        self.client = OpenAI(api_key=api_key)
        self.model = model
        self.messages = [
            {"role": "system", "content": "你是一个有用的AI助手,可以帮用户计算和查询天气。"}
        ]

    def run(self, user_input: str) -> str:
        """运行Agent主循环"""
        self.messages.append({"role": "user", "content": user_input})

        while True:
            # 思考:调用大模型
            response = self.client.chat.completions.create(
                model=self.model,
                messages=self.messages,
                tools=tools,
                tool_choice="auto"
            )
            msg = response.choices[0].message

            # 如果模型想调用工具
            if msg.tool_calls:
                self.messages.append(msg)
                for tool_call in msg.tool_calls:
                    func_name = tool_call.function.name
                    func_args = json.loads(tool_call.function.arguments)

                    print(f"  [工具调用] {func_name}({func_args})")

                    # 执行工具
                    result = TOOL_MAP[func_name](**func_args)
                    print(f"  [工具结果] {result}")

                    # 把结果告诉模型
                    self.messages.append({
                        "role": "tool",
                        "tool_call_id": tool_call.id,
                        "content": str(result)
                    })
                # 继续循环,让模型基于工具结果生成回复
            else:
                # 模型直接回复,结束循环
                self.messages.append(msg)
                return msg.content

# 运行示例
if __name__ == "__main__":
    agent = ToolAgent(api_key="your-api-key-here")

    # 测试计算
    print("用户: 帮我算一下 (128 + 256) * 3 的结果")
    reply = agent.run("帮我算一下 (128 + 256) * 3 的结果")
    print(f"Agent: {reply}\n")

    # 测试天气查询
    print("用户: 北京今天天气怎么样?适合出门吗?")
    reply = agent.run("北京今天天气怎么样?适合出门吗?")
    print(f"Agent: {reply}")

运行结果:

用户: 帮我算一下 (128 + 256) * 3 的结果
  [工具调用] calculator({'expression': '(128 + 256) * 3'})
  [工具结果] 1152
Agent: (128 + 256) × 3 的结果是 **1152**。

用户: 北京今天天气怎么样?适合出门吗?
  [工具调用] get_weather({'city': '北京'})
  [工具结果] 晴天,25°C
Agent: 北京今天是晴天,气温25°C,非常适合出门!

五、Agent核心循环总结

我们把Agent的运行机制总结成下面这张表:

阶段 说明 代码对应
感知(Perceive) 接收用户输入 self.messages.append(user_msg)
思考(Think) 调用LLM推理 client.chat.completions.create()
决策(Decide) 判断是否需要工具 msg.tool_calls 检查
行动(Act) 执行工具函数 TOOL_MAP[func_name](**args)
反馈(Feedback) 将结果返回模型 messages.append(tool_result)
输出(Output) 生成最终回复 return msg.content

六、下一步学习方向

恭喜你!你已经完成了一个完整的AI Agent。接下来可以探索的方向:

  1. 多轮对话记忆 — 添加长期记忆,让Agent记住之前的对话
  2. RAG检索增强 — 让Agent能查询你的私有文档
  3. 多Agent协作 — 多个Agent分工合作完成复杂任务
  4. ReAct模式 — 让Agent学会"推理-行动"交替循环

本文代码已在 Python 3.10+ 环境下测试通过。完整代码可在文末获取。
在这里插入图片描述
在这里插入图片描述

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐