FastAPI + LangChain Agent 从零入门学习笔记

文章目录

  • [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 uvicornpy -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 流程

  1. Thought(思考):判断问题是否需要调用工具

  2. Action(行动/调用工具):选择合适的工具并传入参数

  3. Observation(观察结果):获取工具执行后的结果

  4. 重复直到完成任务,返回最终答案

四、完整可运行示例(分阶段实现)

示例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 相关)

  1. 环境安装 + FastAPI 基础接口(解决环境报错、参数请求格式问题)

  2. 接入国内大模型(通义千问),实现基础 AI 聊天

  3. LangChain 工具(Tool)定义与调用(如计算器工具)

  4. ReAct Agent 原理(思考→行动→观察流程)

  5. 打造极简 Agent(LangGraph 版,避开版本报错)

  6. 给 Agent 增加记忆(记住上下文,实现多轮对话)

  7. RAG 知识库 + Agent(上传文档,实现文档问答)

六、补充:常见问题排查

  • 访问 http://127.0.0.1:8000http://127.0.0.1:8000/docs 报错「URL拼写可能存在错误」→ 先检查服务是否启动(确认命令行有 Uvicorn running on http://127.0.0.1:8000 提示),再检查 URL 无多余空格

  • 调用通义千问报错 → 检查 API Key 是否正确,是否安装 dashscope 依赖

  • Agent 不调用工具 → 检查 prompt 提示词是否规范,确保数学计算问题符合工具调用格式

(注:文档部分内容可能由 AI 生成)

相关推荐
词元Max2 小时前
Java 转 AI Agent 开发学习路线(2026年3月最新版)
java·人工智能·学习
星幻元宇VR3 小时前
VR互动平台|开启沉浸式体验新方式
科技·学习·安全·vr·虚拟现实
qqacj3 小时前
Spring Security 官网文档学习
java·学习·spring
南無忘码至尊3 小时前
Unity学习90天 - 第 6 天 -学习物理 Material + 重力与阻力并实现弹跳球和冰面滑动效果
学习·unity·游戏引擎
liu****4 小时前
LangGraph-AI应用开发框架(二)
windows·langchain·大模型·工作流·langgraph
小陈phd4 小时前
多模态大模型学习笔记(三十六)—— 扩散模型与可控生成:从AI涂鸦到精准作画的技术革命
人工智能·笔记·学习
是小蟹呀^4 小时前
【总结】LangChain中的中间件Middleware
python·中间件·langchain·agent
Sss_Ass5 小时前
跟着老师不迷路系列---跟着李述铜老师学习汇编语言之基本汇编程序符号绑定语句
学习·嵌入式·汇编语言·李述铜·符号绑定语句