LangChain 实践4 7-1 项目初始化 + 基础Model I/O

目标

搭建前后端基础框架,完成Model I/O核心封装,跑通基础对话接口,实现最基础的AI对话

Model I/O = 标准化AI的输入输出流程 = 提示词模板 + 输出解析 + 大模型调用封装

后端任务

  1. 创建Python虚拟环境,安装依赖 ✅️
  2. 配置大模型API Key,封装LLM调用工具类✅️
  3. 实现
    • 提示词模板(ChatPromptTemplate)✅️
    • 输出解析器(StrOutputParser)✅️
    • 基础对话接口(/chat)✅️
  4. 搭建FastAPI服务,测试接口通断 ✅️

封装 LLM 调用工具类

把 chain(模型 + 模板 + 解析器)单独封装,不写在 main.py 里,代码更干净。

python 复制代码
import os
from dotenv import load_dotenv
from langchain_community.chat_models import ChatTongyi
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

load_dotenv()
TONGYI_API_KEY = os.getenv('TONGYI_API_KEY')

class LLM:
    """
    瑶瑶的私人助手 LLM 工具类
    自带:提示词 + 输出解析器 + 流式输出 + 通义模型
    """

    #  @staticmethod不用创建对象,直接用类里的函数
    @staticmethod
    def get_chain():
        chat_prompt_template = ChatPromptTemplate.from_messages([
            ("system", "你是瑶瑶的私人助手,协助她完成工作生活学习上的事情"),
            ("user", "{user_input}")
        ])

        chat_model =  ChatTongyi(
            model="qwen-plus",
            dashscope_api_key=TONGYI_API_KEY,
            temperature=0.7,
            max_tokens=2000,
            streaming=True,
            verbose=False
        )
        # plus = 日常 RAG:0.7 + 2000 + streaming = True
        # max = 长文 / 深度:0.6 + 4096 + streaming = True
        # turbo = 省钱快答:0.7 + 1024 + streaming = True
        # 工具调用:温度 0.2、不流式

        parser = StrOutputParser()
        chain = chat_prompt_template | chat_model | parser

        return chain

实现基础对话接口 /chat

接收用户消息 → 调用 chain → 返回流式回答。

python 复制代码
from config.llm_config import LLM

# FastAPI 必需
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import asyncio

app = FastAPI(title="瑶瑶助手 API")

# 关键:不直接在启动时初始化 chain,用一个全局变量存
_chain = None

def get_chain():
    """懒加载:第一次调用时才初始化 chain"""
    global _chain
    if _chain is None:
        print("正在初始化 LLM chain...")
        _chain = LLM.get_chain()
        print("LLM chain 初始化完成!")
    return _chain


# 核心对话接口
@app.post("/chat")
async def chat(user_input: str):
    chain = get_chain()
    # 流式返回
    async def async_generator():
        chunks = chain.stream({"user_input": user_input})
        for chunk in chunks:
            yield chunk

    return StreamingResponse(async_generator(), media_type="text/plain")

# 测试接口是否存活
@app.get("/")
def home():
    return {"message": "瑶瑶助手已启动成功"}

服务验证(启动 + 访问)

核心启动命令

基础命令:uvicorn main:app --reload

常用完整命令:uvicorn main:app --host 127.0.0.1 --port 8000 --reload

关键组件作用

FastAPI:Python 开发包,专门用于快速编写 /chat 这类 Web 接口。

Uvicorn:ASGI 服务器,负责运行 main.py 中的 FastAPI 实例,让服务可以被外部访问。

--reload 参数详解

开启文件监听 + 服务自动重启功能:

  • Uvicorn 会创建主进程 + 子进程,主进程依赖 watchfiles 监听 .py 文件变更;
  • 子进程负责真正运行 FastAPI 服务;
  • 代码保存后,主进程会自动重启子进程,让新代码立即生效。

注意:--reload 不是 "改完一定生效",尤其在 Windows:监听不稳、进程残留、缓存干扰,都会让前端一直访问到历史旧接口。

开发时:小改动靠 reload,出问题就手动重启;生产环境绝对不能用 --reload。

访问服务

地址:http://127.0.0.1:8000/docs

这是 FastAPI 框架自带的交互式 API 文档页面,路由 /docs 为固定地址。

作用:提供可视化界面,可直接在浏览器中查看、调试、测试所有后端接口,无需额外使用 Postman 等工具。

使用前提:uvicorn main:app 服务正常启动且运行稳定。

前端任务

  1. 创建Vue2项目,安装UI组件库
  2. 实现极简聊天界面(输入框+消息列表)
  3. 对接后端/chat接口,实现基础对话

https://gitee.com/abigale1998/chat-ai项目基础上,接入自定义大模型接口,实现基础对话。

交付成果

✅ 前后端可运行

✅ 基础AI对话功能

✅ Model I/O 封装完成

运行效果


相关推荐
_Programmer5 小时前
Langgraph踩坑记录
langchain
wuhen_n7 小时前
LangChain JS 入门:快速搭建前端 AI 开发环境
前端·langchain·ai编程
兆。7 小时前
LangChain框架深度解析:与FastGPT的优势对比
人工智能·langchain
Coder小相8 小时前
LangChain 1.0 第五篇 - Tool与MCP让Agent拥有行动力
人工智能·langchain·ai编程
SilentSamsara8 小时前
SQLAlchemy 2.x:异步 ORM 与数据库迁移 Alembic 完整指南
开发语言·数据库·python·sql·青少年编程·oracle·fastapi
兮山与9 小时前
LangChain2.0
langchain
AI周红伟10 小时前
长鑫科技存储之王:存储三强对比:三星、SK海力士 vs 长鑫科技
数据库·人工智能·科技·react.js·架构·langchain
java_cj10 小时前
LangChain初入门 - 简化LLM开发难度的利器
开发语言·python·langchain
BUG研究员_11 小时前
Web应用-FastAPI
python·fastapi