LangServe 使用指南与实例详解
LangServe 是 LangChain 团队开发的官方部署工具,用于将 LangChain 链(Chains)和代理(Agents)快速部署为 REST API 服务。以下是完整的使用规则和实战示例:
一、核心使用规则
1. 环境准备
# 安装核心依赖
pip install "langserve[all]" # 完整安装(包含Playground)
pip install "langserve[client]" # 仅客户端
pip install "langserve[server]" # 仅服务器
2. 项目结构规范
my_langserve_project/
├── app.py # 主应用文件
├── chain.py # LangChain组件定义
├── requirements.txt
└── Dockerfile # 容器化部署
3. 部署规则
部署方式 | 启动命令 | 适用场景 |
---|---|---|
本地开发 | uvicorn app:app --reload |
开发调试 |
生产部署 | gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app |
正式环境 |
Docker容器 | docker build -t langserve-app . && docker run -p 8030:8030 langserve-app |
云原生部署 |
Serverless | 适配AWS Lambda/Vercel | 按需扩展 |
二、完整使用示例
1. 基础链部署(RAG问答系统)
# chain.py
from langchain.chains import RetrievalQA
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.llms import OpenAI
def create_retrieval_chain():
# 1. 加载向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.load_local("docs_faiss_index", embeddings)
# 2. 创建检索链
return RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0),
chain_type="stuff",
retriever=vectorstore.as_retriever(),
return_source_documents=True
)
# app.py
from fastapi import FastAPI
from langserve import add_routes
from chain import create_retrieval_chain
app = FastAPI(
title="文档问答API",
version="1.0",
description="基于LangServe的RAG服务"
)
# 添加链路由
add_routes(
app,
create_retrieval_chain(),
path="/ask-doc"
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8030)
2. 多链集成(翻译+摘要)
# chain.py
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.chains import SimpleSequentialChain
from langchain.llms import OpenAI
def create_translation_chain():
# 翻译链
translate_template = """将以下文本从{source_lang}翻译为{target_lang}:\n{text}"""
translate_prompt = PromptTemplate.from_template(translate_template)
translate_chain = LLMChain(
llm=OpenAI(),
prompt=translate_prompt,
output_key="translated_text"
)
# 摘要链
summarize_template = """为以下文本生成摘要:\n{translated_text}"""
summarize_prompt = PromptTemplate.from_template(summarize_template)
summarize_chain = LLMChain(
llm=OpenAI(),
prompt=summarize_prompt,
output_key="summary"
)
# 组合链
return SimpleSequentialChain(
chains=[translate_chain, summarize_chain],
input_variables=["text", "source_lang", "target_lang"],
output_variables=["summary"]
)
# app.py
from fastapi import FastAPI
from langserve import add_routes
from chain import create_translation_chain
app = FastAPI()
chain = create_translation_chain()
# 添加多个路由点
add_routes(app, chain, path="/translate-summarize")