LangServe5 分钟把你的 LangChain 应用变成在线 API一句话总结LangServe 是 LangChain 官方的一键部署神器——你写好一个 AI 处理流程Chain它自动帮你生成 REST API别的系统直接就能调用。一、为什么要用 LangServe想象这个场景你花了一下午用 LangChain 写了一个超棒的智能翻译润色工具在 Jupyter 里跑得很顺。老板过来说“不错把这个能力接进公司的客服系统里吧。”这时候你面临几个问题客服系统用 Java 写的你的代码是 Python怎么对接别的同事也想调用总不能每次都发你脚本让他们本地跑吧需要支持高并发Jupyter 笔记本显然扛不住…LangServe 就是来解决这些问题的。 它基于 FastAPI 构建能把你的 LangChain 流程封装成标准的 HTTP 服务自动生成接口文档支持流式输出、批量处理甚至自带一个浏览器里的调试界面。citeweb_search:1#2web_search:1#7二、核心概念一个add_routes搞定一切LangServe 的设计哲学极其简单——“你写 Chain我生 API”。核心就这一个函数fromlangserveimportadd_routes add_routes(app,your_chain,path/your-api)三行代码你的 Chain 就变成了一个完整的 Web 服务。三、实战从零部署一个翻译服务步骤 1安装依赖pipinstalllangserve[all]# 同时安装客户端服务端pipinstalllangchain-openai uvicornlangserve[all]包含两端依赖。如果你只需要调用别人的 LangServe 服务装langserve[client]就够了。citeweb_search:1#7步骤 2写你的 AI 流程Chain# chain.pyfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_openaiimportChatOpenAIfromlangchain_core.output_parsersimportStrOutputParser# 构建一个专业翻译官ChainpromptChatPromptTemplate.from_messages([(system,你是一位精通{language}的专业翻译请准确翻译以下内容),(human,{text})])modelChatOpenAI(modelgpt-4o-mini)parserStrOutputParser()# 用管道符号 | 把组件串起来translate_chainprompt|model|parser这个 Chain 接收两个参数language目标语言和text要翻译的内容。步骤 3用 LangServe 发布为 API# server.pyfromfastapiimportFastAPIfromlangserveimportadd_routesfromchainimporttranslate_chain appFastAPI(title智能翻译服务,version1.0,description基于LangChain的专业翻译API)# 核心把 chain 挂载到 /translate 路径add_routes(app,translate_chain,path/translate)if__name____main__:importuvicorn uvicorn.run(app,host0.0.0.0,port8000)步骤 4启动服务python server.py看到Uvicorn running on http://0.0.0.0:8000就说明成功了四、LangServe 自动给你生成了什么启动后你的服务自带以下豪华套餐端点 作用 例子POST /translate/invoke单次调用同步返回完整结果 普通问答POST /translate/batch批量调用一次处理多条 批量翻译POST /translate/stream流式调用逐字返回SSE 打字机效果POST /translate/stream_log流式返回中间过程可见 调试复杂 ChainGET /translate/playground浏览器调试界面 不用写代码就能测GET /docsSwagger 自动文档 给别人看接口规范浏览器调试界面Playground直接访问http://localhost:8000/translate/playground你会看到一个交互式界面┌─────────────────────────────────────┐ │ 翻译服务 Playground │ │ │ │ language: [英文 ▼] │ │ text: [你好世界 ] │ │ │ │ [ 运行 ] │ │ │ │ 结果: Hello, World │ └─────────────────────────────────────┘不用写一行调用代码就能边调参数边测试。citeweb_search:1#2五、三种调用方式方式 1HTTP 直接调用任何语言都能用# 单次翻译curl-XPOST http://localhost:8000/translate/invoke\-HContent-Type: application/json\-d{ input: { language: 英文, text: 今天天气真好 } }# 返回{output:The weather is really nice today}# 流式翻译逐字返回适合前端打字机效果curl-XPOST http://localhost:8000/translate/stream\-HContent-Type: application/json\-d{ input: { language: 日文, text: 你好 } }方式 2Python 远程调用像本地函数一样丝滑LangServe 提供了RemoteRunnable让你调用远程服务就像调用本地 ChainfromlangserveimportRemoteRunnable# 连接远程服务translatorRemoteRunnable(http://localhost:8000/translate)# 直接 invoke和本地 chain 用法完全一致resulttranslator.invoke({language:法文,text:我爱编程})print(result)# Jadore programmer# 流式调用也完全一样forchunkintranslator.stream({language:德文,text:你好}):print(chunk,end)这个设计非常巧妙——你的业务代码里本地开发和线上部署可以无缝切换。开发时用本地 Chain上线后换成RemoteRunnable指向线上地址其他代码完全不用改。citeweb_search:1#1方式 3批量处理省时间省 Token# 一次翻译 3 句话texts[{language:英文,text:早上好},{language:英文,text:晚上好},{language:日文,text:谢谢}]resultstranslator.batch(texts)# 一次性返回 3 个结果六、进阶玩法同时部署多个服务一个 FastAPI 应用可以挂多个 ChainappFastAPI()# 翻译服务add_routes(app,translate_chain,path/translate)# 摘要服务add_routes(app,summary_chain,path/summary)# 客服问答服务add_routes(app,rag_chain,path/customer-service)# 现在你有 3 套独立 API# /translate/invoke、/summary/invoke、/customer-service/invokeRAG 知识库服务实战这是企业最常见的场景——让大模型基于私有文档回答问题# rag_server.pyfromlangchain_community.vectorstoresimportFAISSfromlangchain_openaiimportOpenAIEmbeddings,ChatOpenAIfromlangchain.chainsimportRetrievalQAfromfastapiimportFastAPIfromlangserveimportadd_routes# 加载向量知识库vectorstoreFAISS.load_local(faiss_index,OpenAIEmbeddings())retrievervectorstore.as_retriever()# 构建 RAG 问答链qa_chainRetrievalQA.from_chain_type(llmChatOpenAI(modelgpt-4o),retrieverretriever)appFastAPI()add_routes(app,qa_chain,path/qa)# 调用方式# curl /qa/invoke -d {input: 公司的年假政策是什么}加上安全控制fromfastapiimportHeader,HTTPExceptionapp.middleware(http)asyncdefcheck_api_key(request,call_next):api_keyrequest.headers.get(x-api-key)ifapi_key!your-secret-key:raiseHTTPException(status_code403,detailInvalid API Key)returnawaitcall_next(request)# 现在所有接口都需要在 Header 里带 x-api-key七、生产环境部署开发完只是第一步上线还需要考虑稳定性。官方推荐用 Dockerciteweb_search:1#1web_search:1#6# Dockerfile FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . # 生产环境用 gunicorn uvicorn 多进程 CMD [gunicorn, -k, uvicorn.workers.UvicornWorker, -w, 4, -b, 0.0.0.0:8000, server:app]# docker-compose.ymlversion:3.8services:langserve:build:.ports:-8000:8000environment:-OPENAI_API_KEY${OPENAI_API_KEY}deploy:replicas:2# 跑两个实例八、LangServe 的适用边界LangServe 非常适合相对简单的 Chain 和 Runnable但如果你的应用涉及复杂的状态机、多轮对话管理、或者 LangGraph 的图结构官方建议考虑 LangGraph Cloud。citeweb_search:1#7场景 推荐方案单轮问答、翻译、摘要 ✅ LangServeRAG 检索问答 ✅ LangServe简单 Agent单工具调用 ✅ LangServe复杂多状态工作流LangGraph LangGraph Cloud需要完全自定义请求/响应格式 手写 FastAPI九、一句话总结LangServe 你写 Chain 的业务逻辑它帮你搞定 HTTP 接口、文档、调试界面、流式传输、批量处理。它把AI 能力服务化这件事的门槛降到了最低——从能跑通的脚本到别人能调用的服务真的只需要一个add_routes。如果你已经在用 LangChain 开发应用LangServe 几乎是零成本的上线路径。试试看5 分钟就能让你的 AI 能力正式营业