目录
一、LangServe简介
二、环境准备
1. 安装必要依赖
2. 编写一个 LangChain 可运行链(Runnable)
3. 启动 LangServe 服务
4. 启动服务
5. 使用 API 进行调用
三、可选:访问交互式 Swagger 文档
四、基于 LangServe 的 RAG 应用部署流程
🌟 项目目标
第一步:安装依赖
第二步:准备知识文档
第三步:构建 RAG 链(rag_chain.py)
第四步:部署为 LangServe 服务(main.py)
第五步:启动服务
第六步:测试 API 调用
第七步:可选增强功能
项目结构参考
示例请求格式(JSON)
五、实践建议
六、扩展玩法
七、项目结构参考
总结
本教程将带你用 LangServe 构建一个可在线访问的 LLM 服务,支持通过 HTTP API 调用大语言模型(如 OpenAI 的 GPT 或阿里百炼 Qwen)。
一、LangServe简介
LangServe 是 LangChain 官方提供的部署工具,用于将 LangChain 的 Runnable 组件(如链、Agent、RAG Pipelines)以 RESTful API 形式发布为 Web 服务。
你可以理解它是:
“一个让你把 LangChain 项目一键变成 API 的开发框架。”
二、环境准备
1. 安装必要依赖
pip install langserve langchain openai uvicorn
若使用的是 Qwen 或阿里百炼平台,请安装相关 SDK,如:
pip install dashscope
2. 编写一个 LangChain 可运行链(Runnable)
创建一个文件:my_chain.py
# my_chain.py
from langchain_core.runnables import RunnableLambda
from langchain_core.prompts import PromptTemplate
from langchain.chat_models import ChatOpenAIprompt = PromptTemplate.from_template("你是一位诗人。请根据提示写一首诗:{topic}")llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0.7)# 定义一个 runnable 链
poetry_chain = prompt | llm# 或者包装成一个函数
poetry_func = RunnableLambda(lambda x: poetry_chain.invoke(x))
3. 启动 LangServe 服务
创建一个文件:main.py
# main.py
from langserve import add_routes
from fastapi import FastAPI
from my_chain import poetry_funcapp = FastAPI()# 启用 LangServe 路由:将 poetry_func 发布为 API
add_routes(app, poetry_func, path="/poetry")# 启动方式见下方 uvicorn 命令
4. 启动服务
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
启动后你会看到输出:
INFO: Uvicorn running on http://127.0.0.1:8000
5. 使用 API 进行调用
你可以使用 curl、Postman、或 Python 发请求:
curl http://localhost:8000/poetry/invoke \-X POST \-H "Content-Type: application/json" \-d '{"input": {"topic": "月亮与孤独"}}'
返回结果类似:
{"output": "在孤独的夜晚月色浓,\n独影轻摇寂寞中……"
}
三、可选:访问交互式 Swagger 文档
打开浏览器访问:
http://localhost:8000/docs
你将看到自动生成的 API 文档,并可以在线测试。
四、基于 LangServe 的 RAG 应用部署流程
本教程将手把手教你如何构建一个检索增强生成(RAG)系统,并通过 LangServe 快速部署为可调用的 Web API。
🌟 项目目标
构建一个支持文档问答的 API 服务,具备以下功能:
📄 文档向量化并存入数据库(FAISS)
🔍 基于用户提问进行语义搜索
🧠 使用 LLM(如 OpenAI / Qwen)进行上下文感知回答
🌐 通过 LangServe 部署为
/qa
API 接口
第一步:安装依赖
pip install langchain langserve openai faiss-cpu tiktoken
如果你使用阿里百炼:
pip install dashscope
第二步:准备知识文档
创建一个文本文件 data.txt
(例如法律文书、公司手册、产品说明书等):
LangServe 是 LangChain 官方推出的服务部署工具。它可以将 LangChain 的链或 agent 包装成 API 形式,并可通过 FastAPI 进行调用。
第三步:构建 RAG 链(rag_chain.py
)
# rag_chain.py
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings # 或 DashScopeEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.document_loaders import TextLoader
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA# 加载文档并切分
loader = TextLoader("data.txt")
docs = loader.load()splitter = CharacterTextSplitter(chunk_size=300, chunk_overlap=50)
chunks = splitter.split_documents(docs)# 创建向量数据库
vectorstore = FAISS.from_documents(chunks, OpenAIEmbeddings())# 创建问答链
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
llm = ChatOpenAI(model="gpt-3.5-turbo")
rag_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
第四步:部署为 LangServe 服务(main.py
)
# main.py
from fastapi import FastAPI
from langserve import add_routes
from rag_chain import rag_chainapp = FastAPI()
add_routes(app, rag_chain, path="/qa")
第五步:启动服务
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
第六步:测试 API 调用
curl http://localhost:8000/qa/invoke \-X POST \-H "Content-Type: application/json" \-d '{"input": "LangServe 是什么?"}'
返回:
{"output": "LangServe 是 LangChain 官方的服务部署工具..."
}
你也可以通过浏览器访问:
http://localhost:8000/docs
在线测试 API。
第七步:可选增强功能
功能 | 方法 |
---|---|
✅ 替换为 DashScope 模型 | 替换 ChatOpenAI 为 DashScopeChatModel |
✅ 替换为 Qdrant 向量库 | 用 Qdrant.from_documents() 代替 FAISS |
✅ 显示引用来源 | 使用 RetrievalQAWithSourcesChain |
✅ 支持多轮对话记忆 | 用 RunnableWithMessageHistory 包装 QA 链 |
✅ 多文档支持 | 加载多个文档并统一入库 |
✅ LangGraph 多状态问答流程 | 可用 LangGraph 拓展复杂问答流程并暴露为服务 |
项目结构参考
.
├── data.txt # 你的知识库文档
├── rag_chain.py # 构建 RAG 模块
├── main.py # LangServe 部署接口
├── requirements.txt # 依赖清单
└── .env # API Key 环境变量
示例请求格式(JSON)
{"input": "LangServe 的用途是什么?"
}
返回:
{"output": "LangServe 是 LangChain 的部署工具..."
}
使用 LangServe 搭配 RAG 模型部署的方式,让你可以:
快速上线问答系统
对接自己的知识库
以 API 方式调用,便于嵌入 Web/微信/APP
进一步拓展项:
使用 DashScope 替换 OpenAI
添加源文片段高亮与显示
支持流式响应 / 多轮记忆
接入向量检索 API 进行文档动态更新
五、实践建议
-
✅ 将复杂链(如 RetrievalQA、Tool Agent)封装成 runnable,也能直接部署。
-
✅ 用
RunnableWithMessageHistory
维护对话历史,实现多轮记忆对话。 -
✅ 配置
.env
文件管理 API Key 等环境变量。 -
✅ 可部署到服务器上(例如用 Docker + Gunicorn)。
六、扩展玩法
应用场景 | 示例 |
---|---|
多链路切换 | 注册多个 add_routes(app, ..., path="/x") |
集成向量搜索 | 与 Qdrant、FAISS 等结合 |
流式响应 | 支持 streaming=True 开启流式输出 |
LangGraph 支持 | 用于多状态对话流程图部署 |
用户权限验证 | 与 FastAPI 中间件整合验证逻辑 |
七、项目结构参考
.
├── main.py # 启动入口
├── my_chain.py # 你的 LangChain runnable
├── requirements.txt # 依赖清单
└── .env # API 密钥配置(可选)
总结
LangServe 是部署 LLM 应用的理想方案,简洁、快速、灵活。你只需编写好一个 LangChain 链,将它暴露为 API,整个流程就能上线一个可供前端、其他服务调用的 AI 模块。