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 OpenAIdef 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_chainapp = FastAPI(title="文档问答API",version="1.0",description="基于LangServe的RAG服务"
)# 添加链路由
add_routes(app,create_retrieval_chain(),path="/ask-doc"
)if __name__ == "__main__":import uvicornuvicorn.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 OpenAIdef 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_chainapp = FastAPI()
chain = create_translation_chain()# 添加多个路由点
add_routes(app, chain, path="