从0到1用Python开发第一个智能体

1. 引言

智能体(Agent)是当前 AI 领域最热门的话题之一。简单来说,智能体是一个能够感知环境、做出决策并执行动作的程序。它不只是被动地回答问题,而是能够主动调用工具、规划步骤、完成任务。

本文将从零开始,用 Python 带你开发第一个智能体。我们会从一个最简单的"问答机器人"开始,逐步加入工具调用、记忆和规划能力,最终构建一个能完成实际任务的智能体。

2. 准备工作

2.1 环境要求

  • Python 3.9 及以上版本
  • 一个 OpenAI 兼容的 API Key(可以是 OpenAI、DeepSeek、通义千问等)

2.2 安装依赖

我们使用 openai 官方 SDK 来调用大模型接口:

bash 复制代码
pip install openai

如果你希望后续支持更多功能,还可以安装:

bash 复制代码
pip install python-dotenv

2.3 配置 API Key

在项目根目录创建 .env 文件:

bash 复制代码
OPENAI_API_KEY=你的API密钥
OPENAI_BASE_URL=https://api.openai.com/v1

然后在代码中加载:

python 复制代码
import os
from dotenv import load_dotenv

load_dotenv()

api_key = os.getenv("OPENAI_API_KEY")
base_url = os.getenv("OPENAI_BASE_URL", "https://api.openai.com/v1")

3. 第一个智能体:最简单的问答机器人

我们先实现一个最基础的版本:接收用户输入,调用大模型,返回回答。

python 复制代码
from openai import OpenAI

client = OpenAI(
    api_key=api_key,
    base_url=base_url,
)

def chat(user_input: str) -> str:
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "你是一个乐于助人的智能助手。"},
            {"role": "user", "content": user_input},
        ],
    )
    return response.choices[0].message.content

if __name__ == "__main__":
    while True:
        user_input = input("你:")
        if user_input.lower() in ("exit", "quit"):
            break
        print("智能体:", chat(user_input))

运行这个脚本,你就拥有了第一个能对话的智能体。但这还只是一个"聊天机器人",它没有记忆,也不能调用工具。

4. 给智能体加上记忆

真正的智能体需要记住上下文。我们通过维护 messages 列表来实现多轮对话记忆:

python 复制代码
messages = [
    {"role": "system", "content": "你是一个乐于助人的智能助手。"},
]

def chat_with_memory(user_input: str) -> str:
    messages.append({"role": "user", "content": user_input})
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
    )
    reply = response.choices[0].message.content
    messages.append({"role": "assistant", "content": reply})
    return reply

这样智能体就能记住之前的对话内容了。

5. 让智能体学会调用工具

这是智能体与普通聊天机器人的关键区别:工具调用(Function Calling)。智能体可以根据用户需求,自主决定调用哪个函数。

5.1 定义一个工具函数

我们以"查询天气"为例:

python 复制代码
def get_weather(city: str) -> str:
    """模拟查询天气"""
    weather_data = {
        "北京": "晴,25°C",
        "上海": "多云,28°C",
        "广州": "小雨,30°C",
    }
    return weather_data.get(city, f"暂无{city}的天气数据")

5.2 声明工具

python 复制代码
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "查询指定城市的天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称",
                    }
                },
                "required": ["city"],
            },
        },
    }
]

5.3 实现工具调用循环

python 复制代码
def run_agent(user_input: str) -> str:
    messages.append({"role": "user", "content": user_input})

    # 第一步:让模型决定是否调用工具
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=messages,
        tools=tools,
    )

    message = response.choices[0].message

    # 第二步:如果模型要求调用工具
    if message.tool_calls:
        for tool_call in message.tool_calls:
            function_name = tool_call.function.name
            arguments = eval(tool_call.function.arguments)

            if function_name == "get_weather":
                result = get_weather(**arguments)

            # 把工具结果返回给模型
            messages.append(message)
            messages.append({
                "role": "tool",
                "tool_call_id": tool_call.id,
                "content": str(result),
            })

        # 第三步:让模型基于工具结果生成最终回答
        final_response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=messages,
            tools=tools,
        )
        return final_response.choices[0].message.content

    return message.content

现在,当你问"北京天气怎么样"时,智能体会自动调用 get_weather 工具,再基于结果回答你。

6. 完整智能体框架

把以上能力整合成一个类,方便扩展:

python 复制代码
class Agent:
    def __init__(self, system_prompt: str, tools: list):
        self.messages = [{"role": "system", "content": system_prompt}]
        self.tools = tools
        self.tool_map = {}

    def register_tool(self, name: str, func):
        self.tool_map[name] = func

    def run(self, user_input: str) -> str:
        self.messages.append({"role": "user", "content": user_input})

        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=self.messages,
            tools=self.tools,
        )
        message = response.choices[0].message

        if message.tool_calls:
            for tool_call in message.tool_calls:
                func = self.tool_map.get(tool_call.function.name)
                if func:
                    args = eval(tool_call.function.arguments)
                    result = func(**args)
                    self.messages.append(message)
                    self.messages.append({
                        "role": "tool",
                        "tool_call_id": tool_call.id,
                        "content": str(result),
                    })

            final_response = client.chat.completions.create(
                model="gpt-4o-mini",
                messages=self.messages,
                tools=self.tools,
            )
            return final_response.choices[0].message.content

        return message.content

使用示例:

python 复制代码
agent = Agent(
    system_prompt="你是一个智能助手,可以查询天气。",
    tools=tools,
)
agent.register_tool("get_weather", get_weather)

print(agent.run("北京今天天气怎么样?"))

7. 进阶方向

到这里,你已经拥有了一个具备记忆和工具调用能力的智能体。接下来可以继续探索:

  • 多工具编排:注册更多工具,让智能体自主选择。
  • 规划能力:让智能体先拆解任务,再逐步执行(ReAct 模式)。
  • 长期记忆:使用向量数据库存储历史对话。
  • 多智能体协作:让多个智能体分工合作完成复杂任务。

8. 总结

本文从零开始,用 Python 实现了第一个智能体:

  1. 基础对话能力
  2. 多轮对话记忆
  3. 工具调用能力
  4. 可扩展的 Agent 类封装

智能体的核心思想并不复杂:大模型 + 记忆 + 工具。掌握了这个框架,你就可以在此基础上构建各种强大的应用。

相关推荐
天一生水water2 小时前
变分模态分解(VMD)的教程
人工智能
荆棘鸟智能2 小时前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
代码方舟2 小时前
数据科学风控实战:基于天远全能消金报告构建自动化信用评估网关
运维·人工智能·自动化
Yan-英杰2 小时前
2026年数据采集服务怎么选?4大主流平台(亮数据 Bright Data、Apify、ScrapingBee、Zyte)深度对比
人工智能·神经网络·microsoft·机器学习·ai开发工具
xiaoqi01952 小时前
机器学习因子分析实战:从量化特征到可视化决策
人工智能·python·机器学习
代码AI弗森2 小时前
Twilio 与 OpenAI 合作调研:从验证码客户到实时语音分发层
人工智能
m0_587383002 小时前
深度解析24小时自助健身房系统开发:从架构设计到落地部署
人工智能·小程序·数据挖掘·系统架构·需求分析
Escalating_xu2 小时前
【Python】基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
zhiyouTech2 小时前
实体基因做底座:新港智优科技旗下机灵AI的GEO增长服务体系观察
人工智能·科技