【LangServe部署流程】5 分钟部署你的 AI 服务
目录
一、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 模块。
相关文章:

【LangServe部署流程】5 分钟部署你的 AI 服务
目录 一、LangServe简介 二、环境准备 1. 安装必要依赖 2. 编写一个 LangChain 可运行链(Runnable) 3. 启动 LangServe 服务 4. 启动服务 5. 使用 API 进行调用 三、可选:访问交互式 Swagger 文档 四、基于 LangServe 的 RAG 应用部…...

攻防世界-unseping
进入环境 在获得的场景中发现PHP代码并进行分析 编写PHP编码 得到 Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319 将其传入 想执行ls,但是发现被过滤掉了 使用环境变量进行绕过 $a new…...
微软推出 Bing Video Creator,免费助力用户轻松创作 AI 视频
2025 年 6 月 2 日,微软正式在自家 Bing 应用中上线了一项名为 “Bing Video Creator” 的新功能,为广大用户带来了全新的创作体验。 Bing Video Creator 背靠 OpenAI 当红的 Sora 视频生成模型,用户只需输入文字描述,就能直接生…...
(13)java+ selenium->元素定位大法之By_partial_link_text
1.简介 在上一篇中我们说了link_text,目前我们接着看partial link text,顾名思义是通过链接定位的(官方说法:超链接文本定位)。我们在上一篇的文章末尾有提到,这种方式的定位属于模糊匹配定位,什么是partial link text呢,看到part这个单词我们就可以知道,当这个文字超…...
Xget 正式发布:您的高性能、安全下载加速工具!
您可以通过 star 我固定的 GitHub 存储库来支持我,谢谢!以下是我的一些 GitHub 存储库,很有可能对您有用: tzst Xget Prompt Library 原文 URL:https://blog.xi-xu.me/2025/06/02/xget-launch-high-performance-sec…...

[yolov11改进系列]基于yolov11使用FasterNet替换backbone用于轻量化网络的python源码+训练源码
【FasterNet介绍】 为了设计快速神经网络,许多工作都集中在减少浮点运算的数量(FLOPs)上。 然而,我们观察到FLOPs的减少并不一定会导致延迟的类似程度的减少。 这主要源于低效率的每秒浮点运算(FLOPS)。 为了实现更快的网络&#…...

一周学会Pandas2之Python数据处理与分析-Pandas2数据绘图与可视化
锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Pandas 集成了 Matplotlib,提供了简单高效的绘图接口,使数据可视化变得直观便捷。本指南将详…...

企业级安全实践:SSL/TLS 加密与权限管理(一)
引言 ** 在数字化转型的浪潮中,企业对网络的依赖程度与日俱增,从日常办公到核心业务的开展,都离不开网络的支持。与此同时,网络安全问题也日益严峻,成为企业发展过程中不可忽视的重要挑战。 一旦企业遭遇网络安全事…...

2025——》VSCode Windows 最新安装指南/VSCode安装完成后如何验证是否成功?2025最新VSCode安装配置全攻略
1.VSCode Windows 最新安装指南: 以下是 2025 年 Windows 系统下安装 Visual Studio Code(VSCode)的最新指南,结合官方文档与实际操作经验整理而成: 一、下载官方安装包: 1.访问官网: 打开浏览器,进入 VSCode 官方下载页面https://code.visualstudio.com/Download 2…...
RabbitMQ如何保证消息可靠性
RabbitMQ是一个流行的开源消息代理,它提供了可靠的消息传递机制,广泛应用于分布式系统和微服务架构中。在现代应用中,确保消息的可靠性至关重要,以防止消息丢失和重复处理。本文将详细探讨RabbitMQ如何通过多种机制保证消息的可靠…...

【MATLAB代码】制导——三点法,二维平面下的例程|运动目标制导,附完整源代码
三点法制导是一种导弹制导策略,主要用于确保导弹能够准确追踪并击中移动目标。该方法通过计算导弹、目标和制导站之间的相对位置关系,实现对目标的有效制导。 本文给出MATLAB下的三点法例程,模拟平面上捕获运动目标的情况订阅专栏后可直接查看源代码,粘贴到MATLAB空脚本中即…...
Spring Security用户管理机制详解
UserDetailsService契约解析 核心方法解析 UserDetailsService接口仅定义了一个关键方法loadUserByUsername(),其方法签名如下: public interface UserDetailsService {UserDetails loadUserByUsername(String username) throws UsernameNotFoundException; }该方法作为用…...

如何爬取google应用商店的应用分类呢?
以下是爬取Google Play商店应用包名(package name)和对应分类的完整解决方案,采用ScrapyPlaywright组合应对动态渲染页面,并处理反爬机制: 完整爬虫实现 1. 安装必要库 # 卸载现有安装pip uninstall playwright scrapy-playwright -y# 重新…...

SQL Relational Algebra(数据库关系代数)
目录 What is an “Algebra” What is Relational Algebra? Core Relational Algebra Selection Projection Extended Projection Product(笛卡尔积) Theta-Join Natural Join Renaming Building Complex Expressions Sequences of Assignm…...
如何安装huaweicloud-sdk-core-3.1.142.jar到本地仓库?
如何安装huaweicloud-sdk-core-3.1.142.jar到本地仓库? package com.huaweicloud.sdk.core.auth does not exist 解决方案 # 下载huaweicloud-sdk-core-3.1.142.jar wget https://repo1.maven.org/maven2/com/huaweicloud/sdk/huaweicloud-sdk-core/3.1.142/huawe…...
Electron桌面应用下,在拍照、展示pdf等模块时,容易导致应用白屏
Electron 应用白屏问题分析与解决方案 Electron 应用中拍照、PDF展示等模块导致白屏的常见原因通常与内存泄漏、渲染进程崩溃或资源加载超时有关。以下是具体排查与解决方法: 检查内存泄漏 项目中,分析代码,高频操作或未释放的资源可能导致…...

智能工业时代:工业场景下的 AI 大模型体系架构与应用探索
自工业革命以来,工业生产先后经历了机械化、电气化、自动化、信息化的演进,正从数字化向智能化迈进,人工智能技术是新一轮科技革命和产业变革的重要驱动力量,AI 大模型以其强大的学习计算能力掀开了人工智能通用化的序幕ÿ…...
【git stash切换】
问题 当前正在修改对应某个bug,突然来了个更紧急的工作,需要保留现场,去对应更紧急的事务,git该如何操作? 1. 查看当前工作状态(确认修改) git status 2. 保存当前工作现场(包含…...
React 18 生命周期详解与并发模式下的变化
1. React 生命周期概述 React 组件的生命周期可以分为三个阶段:挂载(Mounting)、更新(Updating)和卸载(Unmounting),以及错误处理阶段。 1.1. 挂载阶段(Mounting&#…...

易语言使用OCR
易语言使用OCR 用易语言写个脚本,需要用到OCR,因此我自己封装了一个OCR到DLL。 http://lkinfer.1it.top/ 视频演示:https://www.bilibili.com/video/BV1Zg7az2Eq3/ 支持易语言、c、c#使用,平台限制:window 10 介绍…...

C++和C#界面开发方式的全面对比
文章目录 C界面开发方式1. **MFC(Microsoft Foundation Classes)**2. **Qt**3. **WTL(Windows Template Library)**4. **wxWidgets**5. **DirectUI** C#界面开发方式1. **WPF(Windows Presentation Foundation…...
监控 100 台服务器磁盘内存CPU利用率
监控 100 台服务器磁盘,内存,CPU利用率脚本 以下是一个优化后的监控脚本,用于同时监控100台服务器的磁盘、内存和CPU利用率,并支持并发执行以提高效率: #!/bin/bash # 服务器监控脚本 - 支持并发获取100台服务器系统指标 # 功能…...
Linux远程连接主机——ssh命令详解
摘要:SSH是OpenSSH套件中的加密远程连接工具,基于SSH协议提供安全的服务器管理通道。本文详解连接参数、认证方法和功能,提供实用操作示例。 一、SSH核心特性 SSH(Secure Shell)是行业标准的远程管理协议:…...

算法-集合的使用
1、set常用操作 set<int> q; //以int型为例 默认按键值升序 set<int,greater<int>> p; //降序排列 int x; q.insert(x); //将x插入q中 q.erase(x); //删除q中的x元素,返回0或1,0表示set中不存在x q.clear(); //清空q q.empty(); //判断q是否为空&a…...

性能优化 - 理论篇:CPU、内存、I/O诊断手段
文章目录 Pre引言1. CPU 性能瓶颈1.1 top 命令 —— 多维度 CPU 使用率指标1.2 负载(load)——任务排队情况1.3 vmstat 命令 —— CPU 繁忙与等待 2. 内存性能瓶颈2.1 操作系统层面的内存分布2.2 top 命令 —— VIRT / RES / SHR 三个关键列2.3 CPU 缓存…...

算法:二分查找
1.二分查找 704. 二分查找 - 力扣(LeetCode) 二分查找算法要确定“二段性”,时间复杂度为O(lonN)。为了防止数据溢出,所以求mid时要用防溢出的方式。 class Solution { public:int search(vector<int>& nums, int tar…...
Spring Boot3.4.1 集成 mybatis plus
Spring Boot 集成 mybatis plus 第一步 引入依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version> </dependency><dependency><groupId>com.bao…...

Ubuntu 22.04 上安装 PostgreSQL(使用官方 APT 源)
Ubuntu 22.04 上安装 PostgreSQL(使用官方 APT 源) 步骤 1:更新系统 sudo apt update sudo apt upgrade -y步骤 2:添加 PostgreSQL 官方仓库 # 安装仓库管理工具 sudo apt install wget ca-certificates gnupg lsb-release -y#…...

Linux随记(十八)
一、k8s的node节点磁盘 /data已使用率超过 85% , 出现disk pressure ,驱逐pod现象 evicted , the node had condition:[DiskPressure] #修改/var/lib/kubelet/config.yaml ]# cat /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1…...

Windows MongoDB C++驱动安装
MongoDB驱动下载 MongoDB 官网MongoDB C驱动程序入门MongoDB C驱动程序入门 安装环境 安装CMAKE安装Visual Studio 编译MongoDB C驱动 C驱动依赖C驱动,需要先编译C驱动 下载MongoDB C驱动源码 打开CMAKE(cmake-gui) 选择源码及输出路径,然后点击configure …...