零基础搭建AI智能体:从LLM接入到工具调用的完整学习路径
想要让AI不仅会聊天,还能帮你查天气、算数学题甚至操作软件?这就是AI智能体(AI Agent)的核心能力。与传统对话机器人不同,智能体具备“思考-规划-行动”的闭环逻辑。通过本教程,你将使用Python和主流框架LangChain,在本地环境中搭建一个能调用外部工具的基础智能体,直观感受从静态模型到动态代理的转变。完成后的智能体可以根据用户问题,自主决定是使用计算器还是搜索网络,并返回准确结果。

AI智能体通过LLM进行规划,调用工具执行任务并反馈结果
智能体的本质是大语言模型(LLM)作为大脑,配合工具(Tools)作为手脚。LLM负责理解意图并生成执行计划,工具负责执行具体任务并将结果反馈给LLM。这种架构让AI突破了训练数据的时效性和知识边界。开始之前,请确保电脑已安装Python 3.8及以上版本,并准备好一个可用的大模型API密钥(如OpenAI、DeepSeek或国内其他兼容OpenAI格式的模型服务)。
1. 初始化项目环境与依赖
首先创建一个独立的项目文件夹,并在终端中初始化虚拟环境,以避免依赖冲突。接着安装核心库langchain和langchain-openai,前者提供智能体构建框架,后者用于连接兼容OpenAI接口的大模型。如果需要联网搜索功能,还需安装duckduckgo-search作为免费搜索工具源。
mkdir ai-agent-demo
cd ai-agent-demo
python -m venv venv
source venv/bin/activate # Windows用户请使用 venv\Scripts\activate
pip install langchain langchain-openai duckduckgo-search
安装完成后,在项目根目录创建.env文件,用于安全存储API密钥。在文件中写入OPENAI_API_KEY=你的实际密钥。注意,即使使用的是其他兼容OpenAI格式的国内模型,也通常沿用此环境变量名或通过代码指定Base URL。

1. 初始化项目环境与依赖
2. 连接大语言模型并测试响应
在代码中引入必要的模块,并初始化大语言模型实例。这里以OpenAI的gpt-3.5-turbo或gpt-4为例,若使用其他模型,只需修改model_name和base_url参数。编写一个简单的测试函数,发送一条指令并打印返回内容,确保网络连接和密钥配置正确。
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
load_dotenv()
# 初始化LLM
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0,
openai_api_key=os.getenv("OPENAI_API_KEY")
)
# 测试连接
response = llm.invoke("你好,请简单介绍一下你自己")
print(response.content)

在IDE中编写并运行LLM连接测试代码
运行上述代码,若终端输出了模型的自我介绍,说明基础连接已成功。这里的temperature=0设置是为了让模型输出更稳定,减少随机性,这对于后续智能体执行精确任务非常重要。
3. 定义智能体可调用的工具
智能体的强大之处在于能使用工具。我们需要定义两个基础工具:一个用于执行数学计算,另一个用于联网搜索。在LangChain中,可以使用@tool装饰器快速将Python函数转换为智能体可识别的工具对象。每个工具都需要清晰的名称和描述,因为LLM会根据描述来决定何时调用它。
from langchain.agents import tool
from duckduckgo_search import DDGS
@tool
def calculator(expression: str) -> str:
"""当需要执行数学计算时使用此工具。输入应为合法的数学表达式字符串,如 '2 + 2' 或 '5 * 10'。"""
try:
# 注意:生产环境请使用更安全的计算库,此处仅为演示
return str(eval(expression))
except Exception as e:
return f"计算错误: {str(e)}"
@tool
def web_search(query: str) -> str:
"""当需要获取实时新闻、天气或未知事实时使用此工具。输入应为搜索关键词。"""
try:
results = DDGS().text(query, max_results=3)
if not results:
return "未找到相关结果"
# 提取前三个结果的标题和摘要
snippets = [f"{r['title']}: {r['body']}" for r in results]
return "\n".join(snippets)
except Exception as e:
return f"搜索错误: {str(e)}"
tools = [calculator, web_search]
注意工具函数中的文档字符串(docstring),这是LLM理解工具用途的关键。例如,明确告诉模型“当需要执行数学计算时使用此工具”,能显著提高调用的准确率。将定义好的工具放入列表tools中,供后续智能体加载。
4. 组装智能体并执行任务
现在将LLM和工具组合成一个完整的智能体。使用LangChain提供的create_tool_calling_agent创建代理,并通过AgentExecutor管理执行循环。这个执行器会不断检查模型的输出:如果模型决定调用工具,执行器就运行工具并将结果返回给模型;如果模型认为信息已足够,则生成最终回答。
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
# 定义提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的AI助手。你可以使用提供的工具来回答问题。如果工具无法解决问题,请根据已有信息回答。"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}")
])
# 创建智能体
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 测试智能体
question = "今天北京的天气怎么样?另外,计算一下25乘以4的结果。"
result = agent_executor.invoke({"input": question})
print(result["output"])

智能体在终端中展示的思考与工具调用日志
运行代码后,观察终端输出。你会看到智能体的“思考过程”:它首先识别出两个需求,分别调用web_search查询天气,调用calculator计算乘法,最后整合信息输出。verbose=True参数让我们能看到中间的决策日志,这对于调试智能体行为非常有用。
5. 验证效果与优化方向
检查最终输出是否准确包含了天气信息和计算结果。如果智能体未能正确调用工具,通常是因为工具描述不够清晰或模型参数设置不当。你可以尝试修改问题,如询问“最近的人工智能新闻”,验证搜索工具的有效性;或提出复杂计算,验证计算工具的稳定性。

智能体整合工具结果后的最终自然语言回答
至此,一个基础的AI智能体已搭建完成。它不再是单纯的文本生成器,而是具备了感知环境和执行动作的能力。后续你可以在此基础上添加更多工具,如数据库查询、文件读写或API接口调用,逐步构建出能解决复杂工作流的专属智能体。保留好当前的代码结构,每新增一个功能,只需按照第3步的格式定义新工具并加入列表即可,无需重构核心逻辑。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









