当前位置:首页>python>用Python搭建一个简单的AI Agent

用Python搭建一个简单的AI Agent

  • 2026-10-11 06:07:37
用Python搭建一个简单的AI Agent

大家好,我是小董哥。

很多人使用大模型时,主要还是输入问题、等待回答。

但当任务涉及实时搜索、数学计算、文件读取或数据库查询时,仅靠大模型自身并不够。它还需要调用外部工具。这就是Agent最基本的工作方式:

接收任务 → 判断下一步 → 调用工具 → 获取结果 → 继续处理 → 输出答案

今天我们不用复杂框架,直接用Python实现一个可以搜索网页、完成计算的简单Agent。

一、先了解一下Agent的基本组成

一个简单Agent主要包括四部分:

  1. 模型:理解任务,决定是否调用工具;

  2. 记忆:用来保存用户问题、模型的工具调用以及工具返回的结果。

  3. 工具:负责搜索、计算或查询数据;

  4. 控制循环:把工具结果返回给模型,直到任务完成。

它的核心并不是像人一样思考,而是能够根据任务选择合适的工具,并连续完成多个步骤。

二、准备环境

假设你已经有自己的Python开发环境,我这里使用的是3.10版本。

首先,安装OpenAI Python SDK:

pip install -U openai

然后,配置API Key。API Key可以理解为程序调用大模型的身份凭证。我这里使用的是Open AI的,只需登录OpenAI API平台,在API Keys页面创建一个新的密钥。

密钥通常只会完整显示一次,创建后要及时保存。不建议把它直接写进代码,更不能上传到GitHub、网盘或发给其他人。更稳妥的做法是把它保存为系统环境变量,Python程序运行时再自动读取。

Windows平台下使用Windows PowerShell进行临时配置,只在当前PowerShell窗口中有效:

$env:OPENAI_API_KEY="你的API Key"

例如:

$env:OPENAI_API_KEY="sk-xxxxxxxxxxxxxxxx"

关闭这个PowerShell窗口后,环境变量会失效。需要长期保存,可以执行:

setx OPENAI_API_KEY "你的API Key"

执行完成后,要重新打开PowerShell或代码编辑器,新的环境变量才会生效。

可以用下面的命令检查是否配置成功:

echo $env:OPENAI_API_KEY

macOS或Linux进行临时配置:

export OPENAI_API_KEY="你的API Key"

检查是否配置成功:

echo $OPENAI_API_KEY

配置完成后,Python可以通过环境变量读取密钥:

import osfrom openai import OpenAIapi_key = os.getenv("OPENAI_API_KEY")if not api_key:    raise RuntimeError("未找到 OPENAI_API_KEY,请先配置环境变量")client = OpenAI(api_key=api_key)

如果运行时提示Incorrect API key,先检查密钥是否复制完整、前后是否带有空格,以及环境变量是否已经在当前终端中生效。

三、完整代码

下面的Agent包含两个工具:

  • 网页搜索:获取实时信息;

  • 计算器:完成精确计算。

import astimport jsonimport operatorimport osfrom openai import OpenAIclient = OpenAI(    api_key=os.getenv("OPENAI_API_KEY"))MODEL = "xxxx"# 允许使用的数学运算OPERATORS = {    ast.Add: operator.add,    ast.Sub: operator.sub,    ast.Mult: operator.mul,    ast.Div: operator.truediv,}def calculate(expression: str) -> str:    """安全计算简单数学表达式。"""    tree = ast.parse(expression, mode="eval")    def evaluate(node):        if isinstance(node, ast.Constant):            return node.value        if isinstance(node, ast.BinOp):            left = evaluate(node.left)            right = evaluate(node.right)            operation = OPERATORS.get(type(node.op))            if operation is None:                raise ValueError("不支持该运算")            return operation(left, right)        raise ValueError("表达式格式错误")    return str(evaluate(tree.body))TOOLS = [    {        "type": "web_search"    },    {        "type": "function",        "name": "calculate",        "description": "计算简单数学表达式",        "strict": True,        "parameters": {            "type": "object",            "properties": {                "expression": {                    "type": "string",                    "description": "例如:18 - 11"                }            },            "required": ["expression"],            "additionalProperties": False        }    }]INSTRUCTIONS = """你是一个可以调用工具完成任务的AI助手。遇到实时信息时使用网页搜索;遇到数学计算时使用计算器;不要编造工具结果;完成任务后直接给出答案。"""def run_agent(question: str, max_rounds: int = 5):    inputs = [        {            "role": "user",            "content": question        }    ]    for _ in range(max_rounds):        response = client.responses.create(            model=MODEL,            instructions=INSTRUCTIONS,            input=inputs,            tools=TOOLS        )        inputs.extend(response.output)        function_calls = [            item for item in response.output            if item.type == "function_call"        ]        if not function_calls:            return response.output_text        for call in function_calls:            arguments = json.loads(call.arguments)            if call.name == "calculate":                result = calculate(                    arguments["expression"]                )            else:                result = "未知工具"            inputs.append({                "type": "function_call_output",                "call_id": call.call_id,                "output": result            })    return "任务执行轮数过多,已停止。"question = (    "查询今天北京的最高气温和最低气温,"    "并计算两者的温差。")print(run_agent(question))

四、代码运行流程

当用户提出问题后,模型首先判断是否需要工具。以查询天气为例:

  1. 模型发现问题包含“今天”,先调用网页搜索;

  2. 从搜索结果中提取最高温和最低温;

  3. 调用计算器计算温差;

  4. 整理结果并返回给用户。

整个过程可能调用一次工具,也可能连续调用多个工具。

五、这个示例还能怎么扩展?

理解这个基本循环后,还可以继续加入:

  • 文件读取;

  • 数据库查询;

  • 邮件发送;

  • 知识库检索;

  • 代码执行;

  • 企业内部接口。

不过,涉及发送邮件、修改数据或删除文件时,最好增加人工确认,避免Agent直接执行高风险操作。

结语

Agent并不神秘。它的核心就是:模型负责判断,工具负责执行,程序负责控制流程。

先从一个模型、两三个工具开始,就能搭建出一个真正可以完成任务的简单Agent。

最新文章

随机文章