随着大语言模型(LLM)能力的增强,AI Agent 成为新一代应用的核心形态。Agent 能够理解用户意图、规划任务、调用外部工具并返回结果。本文将使用 LangChain + FastAPI + React 构建一个全栈智能助手,展示 Agent 开发的完整技术链路。
用户浏览器(React)
↓ HTTP/WebSocket
FastAPI 后端
↓ 调用
LangChain Agent(核心推理循环)
↓ 按需调用
工具(天气查询、计算器、数据库查询)前端负责交互界面,后端提供 API 并管理 Agent 生命周期,Agent 通过 LangChain 实现工具调用与多步推理。
首先安装依赖:
pip install langchain langchain-openai fastapi uvicorn python-dotenv定义工具(以天气查询和计算器为例):
from langchain.tools import Tool
from langchain_community.utilities import OpenWeatherMapAPIWrapper
import requests
# 自定义计算工具
def calculator(expression: str) -> str:
try:
result = eval(expression) # 生产环境应使用安全解析
return f"计算结果: {result}"
except Exception as e:
return f"计算错误: {str(e)}"
calculator_tool = Tool(
name="Calculator",
func=calculator,
description="当需要进行数学计算时使用,输入数学表达式字符串"
)
# 天气查询工具(需设置OPENWEATHERMAP_API_KEY)
weather = OpenWeatherMapAPIWrapper()
weather_tool = Tool(
name="Weather",
func=weather.run,
description="当询问天气时使用,输入城市名称"
)
tools = [calculator_tool, weather_tool]初始化 Agent:
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
import os
from dotenv import load_dotenv
load_dotenv()
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的智能助手,可以使用工具来回答问题。"),
("user", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
agent = create_openai_tools_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)创建 FastAPI 端点:
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_methods=["*"],
allow_headers=["*"],
)
class Query(BaseModel):
message: str
@app.post("/api/chat")
async def chat(query: Query):
try:
response = agent_executor.invoke({"input": query.message})
return {"reply": response["output"]}
except Exception as e:
return {"reply": f"出错了: {str(e)}"}启动后端:
uvicorn main:app --reload --port 8000使用 Vite 初始化 React 项目并安装 axios:
npm create vite@latest client -- --template react
cd client && npm install axios修改 App.jsx:
import React, { useState } from 'react';
import axios from 'axios';
function App() {
const [messages, setMessages] = useState([]);
const [input, setInput] = useState('');
const [loading, setLoading] = useState(false);
const sendMessage = async () => {
if (!input.trim()) return;
const userMsg = { role: 'user', content: input };
setMessages([...messages, userMsg]);
setInput('');
setLoading(true);
try {
const res = await axios.post('http://localhost:8000/api/chat', {
message: input
});
setMessages([...messages, userMsg, { role: 'assistant', content: res.data.reply }]);
} catch (err) {
setMessages([...messages, userMsg, { role: 'assistant', content: '请求失败,请稍后重试' }]);
}
setLoading(false);
};
return (
<div style={{ maxWidth: '600px', margin: '0 auto', padding: '20px' }}>
<h1>AI 智能助手</h1>
<div style={{ height: '400px', overflowY: 'auto', border: '1px solid #ccc', padding: '10px' }}>
{messages.map((msg, idx) => (
<div key={idx} style={{ textAlign: msg.role === 'user' ? 'right' : 'left', margin: '5px' }}>
<span style={{ background: msg.role === 'user' ? '#007bff' : '#f1f1f1', color: msg.role === 'user' ? '#fff' : '#000', padding: '8px', borderRadius: '8px', display: 'inline-block' }}>
{msg.content}
</span>
</div>
))}
{loading && <div>思考中...</div>}
</div>
<div style={{ display: 'flex', marginTop: '10px' }}>
<input
style={{ flex: 1, padding: '8px' }}
value={input}
onChange={(e) => setInput(e.target.value)}
onKeyPress={(e) => e.key === 'Enter' && sendMessage()}
placeholder="请输入问题..."
/>
<button onClick={sendMessage} style={{ padding: '8px 15px' }}>发送</button>
</div>
</div>
);
}
export default App;启动前端:
npm run dev访问 http://localhost:5173,即可与 Agent 对话。例如输入“北京今天天气怎么样?”Agent 会调用天气工具;输入“计算 25*4+10”,Agent 会调用计算器。
description 必须清晰说明何时使用、输入格式,否则 LLM 可能不调用或调用错误。numexpr 或自定义解析器),避免 eval 注入风险。ConversationBufferMemory 保存上下文。本文构建了一个完整的 AI Agent 全栈应用,从工具定义、Agent 推理到前后端交互,展示了核心开发模式。掌握这些技术后,开发者可以快速将 Agent 能力集成到自己的产品中,无论是智能客服、数据分析助手还是自动化办公工具。Agent 全栈开发正成为下一波应用开发的主流范式,值得深入实践。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。