继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用LangServe轻松将LangChain应用部署为REST API

开心每一天1111
关注TA
已关注
手记 531
粉丝 50
获赞 218

在整个 LangChain 系列中,我们探讨了 LangChain 的强大且灵活,从在 Google Kubernetes Engine (GKE) 上部署带有 Gemini 的 LangChain 到 运行开放模型如 Gemma。现在,让我们介绍一个有趣的补充,帮助我们将由 LangChain 支持的应用程序部署为 REST API:LangServe

什么是LangServe?

LangServe 是一个帮助简化 LangChain 应用程序作为 REST API 部署的工具。你无需手动处理 LLM 部署中的 REST 逻辑(如暴露端点或提供 API 文档),LangServe 可以自动处理这些工作。它由 LangChain 的同一团队构建,确保无缝集成并提供友好的开发者体验。

你为什么用LangServe?

在本系列的前几部分中,我们学习了如何部署一个由LangChain驱动的应用程序以及如何与它进行互动。还不够吗?那么,LangServe则提供了一些关键优势:

  • 快速部署: LangServe 大幅减少了将你的 LangChain 应用程序暴露为 API 所需的模板代码量。
  • 自动创建 API 文档: LangServe 自动为你的部署链创建交互式 API 文档,使他人(或者你未来的自己,如果你跟我一样)更容易理解和使用你的服务。
  • 内置玩乐区: LangServe 提供了一个简单的网络玩乐区,可以直接从你的浏览器与部署的 LangChain 应用程序进行交互。这对于测试和调试非常方便。
  • 标准化接口: LangServe 帮助你为 LangChain 应用程序创建一致且结构化的 API,使其更易于与其他服务和前端应用程序集成。
  • 简化客户端交互: LangServe 随带一个相应的客户端库,简化了从其他 Python 或 JavaScript 应用程序调用你的部署链的步骤。
LangServe是怎么运作的?

LangServe 利用了 FastAPI 和 pydantic 的强大功能,为您的 LangChain 应用程序构建一个健壮且高效的服务层。它实质上将您的 LangChain 链或代理封装起来,使其变成 FastAPI 的端点。(音译为:郎格赛夫)

我们来看一个例子,看看这一切是如何结合在一起的。

创建一个LangServe应用(注:LangServe是一个特定的应用程序)

比如说,你有一个使用Gemini的LangChain应用。

    从 langchain_google_genai 导入 ChatGoogleGenerativeAI 作为 ChatGoogleGenerativeAI
    从 langchain_core.prompts 导入 ChatPromptTemplate 作为 ChatPromptTemplate

    llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash")

    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                "你是一个乐于助人的助手,会回答有关给定主题的问题。",
            ),
            ("human", "{input}"),
        ]
    )

    chain = prompt | llm

点击这里全屏开启 / 点击这里退出全屏

这里是如何将它改编为适用于LangServe的例子,你可以把它保存为app.py

    从 langchain_google_genai 导入 ChatGoogleGenerativeAI 作为 ChatGoogleGenerativeAI
    从 langchain_core.prompts 导入 ChatPromptTemplate
    从 langchain_core.output_parsers 导入 StrOutputParser
    从 langserve 导入 add_routes
    导入 uvicorn
    从 fastapi 导入 FastAPI

    app = FastAPI(
      标题="LangChain Server",
      版本="1.0",
      description="一个简单的 API 服务器,使用 LangChain 的 Runnable 接口",
    )

    llm = ChatGoogleGenerativeAI(模型="gemini-2.0-flash")

    prompt = ChatPromptTemplate.from_messages(
        [
            (
                "system",
                "你是一个乐于助人的助手,会回答关于给定主题的相关问题。",
            ),
            ("human", "{input}"),
        ]
    )

    chain = prompt | llm | StrOutputParser()

    add_routes(
        app,
        chain,
        path="/my-chain",
    )

    如果 __name__ == '__main__':
        uvicorn.run(app, host="localhost", port=8000)

进入全屏,退出全屏

然后,创建一个列出我们依赖项的 requirements.txt 文件。

langserve
langchain-google-genai
uvicorn
fastapi
sse_starlette

# 注意:这些是技术库和代码名称,不需要翻译。

进入全屏,退出全屏

就这样!通过这些简单的更改,你的链现在就可以开始提供服务了。你可以使用如下命令安装依赖并运行这个应用。记得把 your_google_api_key 替换成你的 Gemini API 密钥

    export GOOGLE_API_KEY="your_google_api_key" # 导出谷歌API密钥
    pip install -r requirements.txt # 使用pip安装所需的依赖项
    python app.py # 运行主程序

先导出谷歌API密钥,然后使用pip安装所需的依赖项,最后运行主程序。

全屏模式下进入,退出全屏模式

这会启动一个服务器,默认情况下使用端口8000。

玩转您的 LangServe 应用程序

一旦你的服务器运行起来,你可以用几种方式与它交互:

  • 通过自动生成的API文档页面: 在浏览器中打开 http://localhost:8000/docs 查看交互式API文档界面。
  • 使用内置的试玩区: 在浏览器中打开 http://localhost:8000/my-chain/playground/ 在简单的网页界面中直接测试你的链。
  • 使用LangServe客户端库: 您可以使用其他Python或JavaScript应用程序编程地与您的API进行交互。下面是一个简单的Python示例:
from langserve import RemoteRunnable

remote_chain = RemoteRunnable("http://localhost:8000/my-chain")
# 从远程服务调用链并获取响应
response = remote_chain.invoke({"input": "告诉我关于Google Cloud Platform的详情"})
print(response)

全屏切换

将我们的应用容器化

你可以轻松地将你的LangServe应用打包成容器,像我们之前那样部署到GKE这样的平台上。

首先,创建一个 Dockerfile 来定义如何制作我们的镜像文件。

    # 使用官方的 Python 运行环境作为基础镜像
    FROM python:3-slim

    # 设置工作目录为 /app
    WORKDIR /app

    # 将当前目录的所有内容复制到 /app
    COPY . /app

    # 安装 requirements.txt 文件中列出的所有依赖包
    RUN pip install -r requirements.txt

    # 公开容器中的 80 端口
    EXPOSE 80

    # 启动时运行 app.py
    CMD [ "python", "app.py" ]

进入全屏幕模式,退出全屏幕模式

最后,构建容器镜像文件并将其推送至 Artifact Registry。记得替换 PROJECT_ID 为你的 Google Cloud 项目 ID。

# 使用 Google Cloud 进行登录
gcloud auth login

# 创建仓库(repositories)
gcloud artifacts repositories create images \
  --repository-format=docker \
  --location=us

# 配置对所需 Docker 仓库的身份验证
gcloud auth configure-docker us-docker.pkg.dev/PROJECT_ID/images

# 构建 Docker 镜像
docker build -t us-docker.pkg.dev/PROJECT_ID/images/my-langchain-app:v1 .

# 推送 Docker 镜像
docker push us-docker.pkg.dev/PROJECT_ID/images/my-langchain-app:v1

进入全屏,退出全屏

几秒钟后,你的容器镜像不应该存在于你的Artifact Registry(制品仓库)里。

现在我们来把容器映像部署到我们的 GKE 集群。你可以通过 Google Cloud Console 或使用 gcloud 命令行工具创建 GKE 集群,记得替换 PROJECT_ID,

使用gcloud命令在us-central1区域自动创建一个名为langchain-cluster的容器集群,命令为:

    gcloud container 集群自动创建 langchain-cluster \
      --project=PROJECT_ID \
      --region=us-central1

切换到全屏
退出全屏

一旦你的集群启动并运行,创建一个包含你的 Kubernetes 部署和服务的 YAML 文件。我们将其命名为 deployment.yaml,并将 PROJECT_IDYOUR_GOOGLE_API_KEY 替换成你的 Gemini API 密钥

apiVersion: apps/v1
kind: Deployment
metadata:
  name: langchain-deployment
spec:
  replicas: 3 # 根据需要调整
  selector: # 添加选择器
    matchLabels:
      app: langchain-app
  template:
    metadata:
      labels:
        app: langchain-app
    spec:
      containers:
      - name: langchain-container
        image: us-docker.pkg.dev/PROJECT_ID/images/my-langchain-app:v1
        ports:
        - containerPort: 80
        env:
        - name: GOOGLE_API_KEY
          value: YOUR_GOOGLE_API_KEY
---
apiVersion: v1
kind: Service
metadata:
  name: langchain-service
spec:
  selector:
    app: langchain-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: LoadBalancer # 外部暴露

切换到全屏模式 退出全屏

将这个 manifest 应用于你的集群:

# 获取集群环境
gcloud container clusters get-credentials langchain-cluster --region us-central1

# 部署配置文件
kubectl apply -f deployment.yaml

全屏模式,进或出

这会创建一个部署,其中包括你 LangChain 应用程序的三个实例,并通过负载均衡器对外提供服务。你可以根据需要的负载来调整副本的数量。

结尾

LangServe 桥接了开发与生产的鸿沟,让分享您的 AI 应用程序变得比以往更简单。通过简化且标准化的方式将您的链作为 API 提供,LangServe 让您的 LangChain 项目变得前所未有的可访问和易用。不论是打造内部工具还是面向公众的应用,LangServe 都能简化流程,让您更专注于使用 LangChain 创造有影响力的应用。

下一步是:

  • 深入阅读 LangServe 文档,了解更多关于其功能和能力的内容。
  • 试试使用我们提到的容器化技术将 LangServe 应用部署到 GKE。
  • 探索 LangServe 客户端库,看看如何轻松地将部署的应用链与其他应用集成。

通过这篇帖子,我们结束了在LangChain世界的探索之旅,从其核心概念和思想到使用GKE和开源模型的高级部署方案,再到现在利用LangServe提供的高效服务。希望这个系列能帮助你构建和部署你自己的出色AI应用程序!

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP