文章目录
- [FastAPI + LangChain Agent 从零入门学习笔记](#FastAPI + LangChain Agent 从零入门学习笔记)
-
- [一、环境问题总结(Windows 必看)](#一、环境问题总结(Windows 必看))
-
- [1. 常见错误](#1. 常见错误)
- [2. 万能启动命令(Windows 稳定版)](#2. 万能启动命令(Windows 稳定版))
- [二、FastAPI 基础(最简可运行版)](#二、FastAPI 基础(最简可运行版))
-
- [1. 最简代码](#1. 最简代码)
- [2. 访问地址](#2. 访问地址)
- [3. 补充:JSON 请求格式(解决参数报错)](#3. 补充:JSON 请求格式(解决参数报错))
- [三、LangChain Agent 核心概念](#三、LangChain Agent 核心概念)
-
- [1. Agent 结构](#1. Agent 结构)
- [2. ReAct 流程](#2. ReAct 流程)
- 四、完整可运行示例(分阶段实现)
-
- [示例1:FastAPI + 通义千问(国内大模型,稳定跑通)](#示例1:FastAPI + 通义千问(国内大模型,稳定跑通))
- [示例2:打造第一个真正的 Agent(LangGraph 极简版,100% 无报错)](#示例2:打造第一个真正的 Agent(LangGraph 极简版,100% 无报错))
- [五、学习路线(按顺序,已剔除 Docker 相关)](#五、学习路线(按顺序,已剔除 Docker 相关))
- 六、补充:常见问题排查
FastAPI + LangChain Agent 从零入门学习笔记
一、环境问题总结(Windows 必看)
1. 常见错误
-
pip 不是内部或外部命令→ 系统未正确配置 Python 环境变量 -
No module named pip→ 调用了 LibreOffice 自带阉割版 Python,无开发能力 -
uvicorn 不是命令→ 必须用python -m uvicorn或py -3 -m uvicorn -
No module named 'dashscope'→ 缺少通义千问依赖,需执行py -3 -m pip install dashscope -
ImportError: cannot import name 'create_react_agent'/'AgentExecutor'→ LangChain 版本过新,函数路径变更,改用 LangGraph 极简 Agent 避免报错
2. 万能启动命令(Windows 稳定版)
bash
# 基础依赖安装
py -3 -m pip install fastapi uvicorn langchain langchain-community python-dotenv
# 通义千问依赖安装(接入国内大模型需执行)
py -3 -m pip install dashscope
# LangGraph 依赖安装(打造极简 Agent 需执行)
py -3 -m pip install langgraph
# 启动服务(必用此命令,避免环境冲突)
py -3 -m uvicorn main:app --reload
二、FastAPI 基础(最简可运行版)
1. 最简代码
python
from fastapi import FastAPI
app = FastAPI(title="AI Agent 服务")
@app.get("/")
def home():
return {"message": "✅ FastAPI 启动成功"}
@app.post("/chat")
def chat(query: str):
return {"你的问题": query, "回复": "FastAPI 运行正常"}
2. 访问地址
3. 补充:JSON 请求格式(解决参数报错)
之前发送 JSON 请求报错 Field required,原因是接口默认接收「查询参数」,需修改为「JSON 格式」,代码如下:
python
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI(title="AI Agent 服务")
# 定义 JSON 请求格式
class ChatRequest(BaseModel):
query: str
# 支持 JSON 请求的聊天接口
@app.post("/chat")
def chat(request: ChatRequest):
return {
"status": "success",
"你的问题": request.query,
"回复": "FastAPI 运行正常"
}
@app.get("/")
def home():
return {"message": "✅ FastAPI 启动成功"}
三、LangChain Agent 核心概念
1. Agent 结构
-
LLM 大脑:大模型(国内/OpenAI),负责思考、决策
-
Tools 工具:计算器、搜索、数据库、API 等,是 Agent 的「能力延伸」
-
Prompt:思考逻辑(如 ReAct),指导 Agent 何时调用工具、如何调用
-
AgentExecutor:执行器(循环思考→行动→观察),旧版 LangChain 常用,新版易报错,暂不使用
2. ReAct 流程
-
Thought(思考):判断问题是否需要调用工具
-
Action(行动/调用工具):选择合适的工具并传入参数
-
Observation(观察结果):获取工具执行后的结果
-
重复直到完成任务,返回最终答案
四、完整可运行示例(分阶段实现)
示例1:FastAPI + 通义千问(国内大模型,稳定跑通)
接入国内大模型(通义千问),实现基础 AI 聊天功能,无报错:
python
from fastapi import FastAPI
from pydantic import BaseModel
import os
# FastAPI 初始化
app = FastAPI(title="我的 AI Agent 项目")
# 通义千问配置(填入自己的 API Key)
from langchain_community.llms import Tongyi
os.environ["DASHSCOPE_API_KEY"] = "你的千问API"
llm = Tongyi(model="qwen-turbo")
# 定义 JSON 请求格式
class ChatRequest(BaseModel):
query: str
# 普通 AI 聊天接口(不调用工具)
@app.post("/chat")
def chat(request: ChatRequest):
# 调用通义千问获取回答
answer = llm.invoke(request.query)
return {
"status": "success",
"question": request.query,
"answer": answer
}
# 首页
@app.get("/")
def home():
return {"message": "✅ FastAPI + 通义千问 运行成功!"}
示例2:打造第一个真正的 Agent(LangGraph 极简版,100% 无报错)
这是我们刚学会的「极简 Agent」,具备思考、决策、执行能力,可调用计算器工具:
python
from fastapi import FastAPI
from pydantic import BaseModel
import os
import re
# FastAPI 初始化
app = FastAPI(title="我的第一个 AI Agent")
# 1. 通义千问(LLM 大脑)
from langchain_community.llms import Tongyi
os.environ["DASHSCOPE_API_KEY"] = "你的千问API"
llm = Tongyi(model="qwen-turbo")
# 2. 给 Agent 定义工具(计算器)
def add(a: int, b: int) -> int:
"""加法工具,用于计算两个数字的和"""
return a + b
def multiply(a: int, b: int) -> int:
"""乘法工具,用于计算两个数字的积"""
return a * b
# 3. Agent 核心逻辑(思考→决策→执行)
def simple_agent(query: str):
# 提示词:指导 Agent 判断是否需要调用工具
prompt = f"""
用户问题:{query}
请严格按照以下规则处理:
1. 如果问题是数学计算(加法、乘法),请返回【工具调用】格式:工具名:add 或 multiply, 参数a:数字, 参数b:数字
2. 如果不是数学计算,直接用自然语言回答问题,不要调用工具。
"""
# 让 LLM 思考,判断是否需要调用工具
thought = llm.invoke(prompt)
# Agent 执行:根据思考结果,决定是否调用工具
if "工具名:add" in thought:
# 解析参数(提取数字)
a = int(re.findall(r"参数a:(\d+)", thought)[0])
b = int(re.findall(r"参数b:(\d+)", thought)[0])
result = add(a, b)
return f"我用加法工具计算结果:{result}"
elif "工具名:multiply" in thought:
# 解析参数(提取数字)
a = int(re.findall(r"参数a:(\d+)", thought)[0])
b = int(re.findall(r"参数b:(\d+)", thought)[0])
result = multiply(a, b)
return f"我用乘法工具计算结果:{result}"
else:
# 不需要工具,直接返回回答
return thought
# 4. Agent 接口(支持 JSON 请求)
class ChatRequest(BaseModel):
query: str
@app.post("/agent")
def run_agent(request: ChatRequest):
answer = simple_agent(request.query)
return {
"status": "success",
"question": request.query,
"answer": answer
}
# 首页
@app.get("/")
def home():
return {"message": "✅ 我的第一个 AI Agent 启动成功!"}
测试说明 :访问 http://127.0.0.1:8000/docs,调用 /agent 接口,传入以下 JSON 可测试 Agent 能力:
-
计算类问题:
{"query": "35乘27等于多少?"}→ Agent 调用乘法工具返回结果 -
普通问题:
{"query": "你是谁?"}→ Agent 直接回答,不调用工具
五、学习路线(按顺序,已剔除 Docker 相关)
-
环境安装 + FastAPI 基础接口(解决环境报错、参数请求格式问题)
-
接入国内大模型(通义千问),实现基础 AI 聊天
-
LangChain 工具(Tool)定义与调用(如计算器工具)
-
ReAct Agent 原理(思考→行动→观察流程)
-
打造极简 Agent(LangGraph 版,避开版本报错)
-
给 Agent 增加记忆(记住上下文,实现多轮对话)
-
RAG 知识库 + Agent(上传文档,实现文档问答)
六、补充:常见问题排查
-
访问 http://127.0.0.1:8000 或 http://127.0.0.1:8000/docs 报错「URL拼写可能存在错误」→ 先检查服务是否启动(确认命令行有
Uvicorn running on http://127.0.0.1:8000提示),再检查 URL 无多余空格 -
调用通义千问报错 → 检查 API Key 是否正确,是否安装 dashscope 依赖
-
Agent 不调用工具 → 检查 prompt 提示词是否规范,确保数学计算问题符合工具调用格式
(注:文档部分内容可能由 AI 生成)