Python实现简单AI Agent的两种方法详解

 更新时间:2026年09月05日 09:06:31   作者:爱吃提升  
这篇文章主要为大家详细介绍了使用Python实现简单AI Agent的两种方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下

方案一:原生手写简易Agent(无LangChain,理解Think‑Act‑Observe)

原理:大模型输出要做什么动作 → 程序执行工具 → 把工具返回结果丢回大模型,循环直到输出最终答案。

依赖:只需要 openai 库,兼容 Ollama / 通义 / DeepSeek 等OpenAI兼容接口。

安装

pip install openai python-dotenv

.env文件

API_KEY=sk-xxx
BASE_URL=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat

示例代码 

import os
from dotenv import load_dotenv
from openai import OpenAI
import time
import math

load_dotenv()
client = OpenAI(api_key=os.getenv("API_KEY"), base_url=os.getenv("BASE_URL"))
MODEL = os.getenv("MODEL_NAME")

# ---------------------- 1、定义可用工具 ----------------------
def calculator(expr: str) -> str:
    """数学计算工具,输入数学表达式,例如 '2500 * 1.08' """
    try:
        return str(eval(expr, {"__builtins__": None}, {"math": math}))
    except Exception as e:
        return f"计算错误:{str(e)}"

def get_current_time() -> str:
    """获取当前时间"""
    return time.strftime("%Y‑%m‑%d %H:%M:%S")

# 工具注册表
tools = {
    "calculator": calculator,
    "get_current_time": get_current_time
}

# system提示词:告诉模型可用工具,输出格式要求
SYSTEM_PROMPT = """
你是AI Agent。你可以使用工具完成任务。
可用工具:
1. calculator(expr): 数学计算
2. get_current_time(): 获取当前时间

输出规则:
- 需要调用工具时严格输出格式:
ACTION:工具名|参数
示例:ACTION:calculator|1250*1.15
- 不需要工具,直接输出最终答案:ANSWER:你的最终回答
"""

def run_agent(user_query: str, max_loop=5):
    messages = [
        {"role":"system", "content": SYSTEM_PROMPT},
        {"role":"user", "content": user_query}
    ]
    for _ in range(max_loop):
        resp = client.chat.completions.create(model=MODEL, messages=messages, temperature=0)
        reply = resp.choices[0].message.content.strip()
        print(f"\n【模型输出】{reply}")

        if reply.startswith("ANSWER:"):
            return reply.replace("ANSWER:", "").strip()

        if reply.startswith("ACTION:"):
            # 解析动作
            parts = reply.replace("ACTION:", "").split("|", 1)
            tool_name, tool_arg = parts[0].strip(), parts[1].strip()
            print(f"【调用工具】{tool_name} 参数:{tool_arg}")
            func = tools[tool_name]
            tool_result = func(tool_arg) if tool_arg else func()
            print(f"【工具返回】{tool_result}")
            # 将工具观察结果放回对话,继续循环
            messages.append({"role":"assistant", "content": reply})
            messages.append({"role":"user", "content": f"OBSERVATION:{tool_result}"})
    return "达到最大循环次数,任务终止"

# 测试
if __name__ == "__main__":
    res = run_agent("现在时间是多少?365乘以47等于多少?")
    print("\n✅最终结果:", res)

运行流程演示:

  1. 用户提问:现在时间是多少?365乘以47等于多少?
  2. 模型输出:ACTION:get_current_time|
  3. 代码执行工具拿到时间,把OBSERVATION:xxxx塞回对话
  4. 模型下一步输出:ACTION:calculator|365*47
  5. 拿到计算结果,模型输出 ANSWER:xxx,任务结束

这就是Agent最核心:思考 → 执行工具 → 观察结果 → 继续思考

方案二:LangChain快速搭建Agent(项目常用)

封装好工具解析、循环逻辑,还可以结合RAG知识库。

安装依赖

pip install langchain langchain-openai python-dotenv

示例代码 

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain.agents import create_openai_tools_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate

load_dotenv()

llm = ChatOpenAI(
    model=os.getenv("MODEL_NAME"),
    api_key=os.getenv("API_KEY"),
    base_url=os.getenv("BASE_URL"),
    temperature=0
)

# 定义工具
@tool
def calculator_tool(expression: str) -> str:
    """用于数学运算,输入数学表达式字符串"""
    return str(eval(expression))

@tool
def time_tool() -> str:
    """获取当前系统时间"""
    import time
    return time.strftime("%Y‑%m‑%d %H:%M:%S")

tools = [calculator_tool, time_tool]

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是AI智能助手,合理调用工具完成用户任务。"),
    ("user", "{input}"),
    ("agent_scratchpad", "{agent_scratchpad}")
])

agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

if __name__ == "__main__":
    output = agent_executor.invoke({"input":"现在几点,1245除以7等于多少"})
    print("输出:", output["output"])

到此这篇关于Python实现简单AI Agent的两种方法详解的文章就介绍到这了,更多相关Python实现AI Agent内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 通过可变参数计算n个数的乘积方法

    python 通过可变参数计算n个数的乘积方法

    今天小编就为大家分享一篇python 通过可变参数计算n个数的乘积方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • 一文详解Python中pip安装的提速全攻略

    一文详解Python中pip安装的提速全攻略

    在Python开发过程中,使用pip安装第三方包是最常见的操作之一,本文将为你详细介绍多种有效的pip安装提速方法,大家可以根据需要进行选择
    2025-08-08
  • Python实现一键下载并整合统计年鉴Excel文件

    Python实现一键下载并整合统计年鉴Excel文件

    这篇文章主要为大家详细介绍了如何使用Python实现一键下载并整合统计年鉴Excel文件,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-04-04
  • Python如何通过地址获取变量

    Python如何通过地址获取变量

    这篇文章主要介绍了Python如何通过地址获取变量,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 在服务器上运行python文件详细步骤

    在服务器上运行python文件详细步骤

    很多小伙伴想知道如何在服务器上跑python程序的方法,那么这篇文章主要给大家介绍了关于在服务器上运行python文件的详细步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-02-02
  • Python实现求解最大公约数的五种方法总结

    Python实现求解最大公约数的五种方法总结

    求最大公约数是习题中比较常见的类型,本文小编将给大家提供五种比较常见的算法,都是用Python语言实现的,感兴趣的小伙伴可以了解一下
    2022-07-07
  • 运行python脚本更改Windows背景

    运行python脚本更改Windows背景

    这篇文章主要介绍了运行python脚本更改Windows背景,使用常用的命令更改桌面背景,以更改ctype中的系统参数,下面来看看具体得更改过程吧
    2022-01-01
  • 举例讲解Python设计模式编程中对抽象工厂模式的运用

    举例讲解Python设计模式编程中对抽象工厂模式的运用

    这篇文章主要介绍了Python设计模式编程中对抽象工厂模式的运用,文中的例子体现了抽象工厂模式程序的一些设计优化点,需要的朋友可以参考下
    2016-03-03
  • Python比较两个图片相似度的方法

    Python比较两个图片相似度的方法

    这篇文章主要介绍了Python比较两个图片相似度的方法,涉及Python操作pil模块实现图片比较的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python文件打开读取写入方法实用案例

    Python文件打开读取写入方法实用案例

    我们在工作中经常需要用python对文本文件进行内容的读取和写入,下面这篇文章主要给大家介绍了关于Python文件打开读取写入方法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05

最新评论