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,将不会为invoke、batch、stream、stream_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调试页面,方便调试我们定义的Chain
、Agent
等LangChain服务。
你可以按下面格式访问Playground
例子:访问 /my_runnable/playground/
。