当前位置: 代码网 > it编程>前端脚本>Python > Python实现简单AI Agent的两种方法详解

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

2026年09月05日 Python 我要评论
方案一:原生手写简易agent(无langchain,理解think‑act‑observe)原理:大模型输出要做什么动作 → 程序执行工具 → 把工具返回结果丢回大模型,循环直到

方案一:原生手写简易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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com