一架梯子,一头程序猿,仰望星空!
LangChain教程(Python版本) > 内容正文

LangServe 指南


1. LangServe 概述

LangServe是一个库,帮助开发人员将LangChain的运行程序和链部署为REST API。它集成了FastAPI,并使用pydantic进行数据验证。

2. 功能

LangServe具有以下特点:

  • 从LangChain对象自动推断输入和输出模式,并在每个API调用中执行验证,提供丰富的错误消息
  • API文档页面,包含JSONSchema和Swagger
  • 高效的 /invoke/, /batch//stream/ 端点,支持单个服务器上的许多并发请求
  • /stream_log/ 端点,用于流式传输链/代理的所有(或部分)中间步骤
  • 截至0.0.40版的新功能,支持 astream_events,使流式传输更加容易,无需解析 stream_log 的输出
  • /playground/ 页面,具有流式输出和中间步骤
  • 内置(可选)跟踪到LangSmith,只需添加您的API密钥
  • 使用经过实战考验的开源Python库构建,如FastAPI、Pydantic、uvloop和asyncio
  • 使用客户端SDK调用LangServe服务器,就像调用本地运行的Runnable一样(或直接调用HTTP API)
  • LangServe Hub

3. 限制

  • 对于源自服务器的事件,尚不支持客户端回调
  • 使用Pydantic V2时不会生成OpenAPI文档。Fast API不支持混合pydantic v1和v2命名空间。有关更多细节,请参阅下面的部分。

4. 安装

您可以使用以下命令安装LangServe:

pip install "langserve[all]"

或者使用 pip install "langserve[client]" 安装客户端代码,使用 pip install "langserve[server]" 安装服务器代码。

4. 示例应用程序

下面我们介绍如果将LangChain定义的模型、链(Chain)、Agent发布成REST API,让其他应用程序调用,如果你熟悉FastAPI下面很简单,只是使用langserve提供的工具类注册FastAPI路由。

下面例子部署了一个OpenAI聊天模型、一个Anthropic聊天模型,以及一个使用Anthropic模型讲述关于特定主题笑话的链。

以下是示例代码:

#!/usr/bin/env python
from fastapi import FastAPI
from langchain.prompts import ChatPromptTemplate
from langchain.chat_models import ChatAnthropic, ChatOpenAI
from langserve import add_routes

# 定义FastAPI服务
app = FastAPI(
    title="LangChain 服务器",
    version="1.0",
    description="使用LangChain的Runnable接口的简单API服务器",
)

# 注册路由,直接将`ChatOpenAI`模型暴露到/openai路由下面
add_routes(
    app,
    ChatOpenAI(),
    path="/openai",
)

# 注册路由,直接将`ChatAnthropic`模型暴露到/openai路由下面

add_routes(
    app,
    ChatAnthropic(),
    path="/anthropic",
)


model = ChatAnthropic()
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
# 这里将一个langchain定义的chain注册到/joke路由下面
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="localhost", port=8000)

如果您打算从浏览器中调用端点,则还需要设置CORS标头。您可以使用FastAPI内置的中间件来实现:

from fastapi.middleware.cors import CORSMiddleware

# 设置所有支持CORS的来源
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
    expose_headers=["*"],
)

5.文档

运行上面例子后,LangServe自动为所有注册的路由生成API文档,方下面地址查看生成的OpenAPI文档:

http://localhost:8000/docs

确保添加 /docs 后缀。

⚠️ 如果使用pydantic v2,将不会为invokebatchstreamstream_log生成文档, 建议使用pydantic v1版本

6. API路由介绍

下面介绍注册一个API路由之后,LangServe为我们生成了那些API接口

例如下面代码:

# 注册一个路由
add_routes(
    app,
    runnable,
    path="/my_runnable",
)

LangServe将生成下面接口:

  • POST /my_runnable/invoke - 模型调用接口
  • POST /my_runnable/batch - 批量调用模型的接口
  • POST /my_runnable/stream - 流式输出的模型调用接口
  • POST /my_runnable/stream_log - 流式输出的模型调用接口,并且附带日志输出
  • POST /my_runnable/astream_events - 异步流式输出的模型调用接口,并且附带事件输出
  • GET /my_runnable/input_schema - 模型调用的接口参数说明
  • GET /my_runnable/output_schema - 模型输出的接口参数说明
  • GET /my_runnable/config_schema - 模型的配置说明

7.Playground

LangServe为每一个注册路由提供了一个UI调试页面,方便调试我们定义的ChainAgent等LangChain服务。

你可以按下面格式访问Playground 例子:访问 /my_runnable/playground/



关联主题