在整个 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 利用了 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_ID
和 YOUR_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应用程序!
共同學習,寫下你的評論
評論加載中...
作者其他優質文章