Appearance
部署指南
部署是 LangChain 应用开发的最后一个环节,它将开发好的应用部署到生产环境中。本节将详细介绍如何部署 LangChain 1.2 应用。
部署前准备
在部署 LangChain 应用之前,需要进行以下准备工作:
- 代码优化:优化代码结构,使用 LCEL 语法提高代码的可读性和可维护性
- 依赖管理:确保所有依赖都已正确安装,并生成依赖文件
- 环境配置:配置环境变量,如 API 密钥等
- 测试:确保应用在本地运行正常
- 监控:设置监控和日志系统,以便及时发现和解决问题
部署方式
LangChain 应用可以通过多种方式部署,以下是一些常用的部署方式:
1. 本地部署
本地部署是指在本地机器上运行应用,适用于开发和测试环境。
示例:本地部署 LangChain 应用
bash
# 安装依赖
pip install -r requirements.txt
# 运行应用
python app.py2. 容器化部署
容器化部署是指使用 Docker 等容器技术部署应用,适用于开发、测试和生产环境。
示例:使用 Docker 部署 LangChain 应用
- 创建 Dockerfile
dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
ENV OPENAI_API_KEY=your-api-key
CMD ["python", "app.py"]- 创建 requirements.txt
langchain
langchain-openai
fastapi
uvicorn
langchain-community- 构建和运行 Docker 容器
bash
# 构建 Docker 镜像
docker build -t langchain-app .
# 运行 Docker 容器
docker run -p 8000:8000 langchain-app3. 云平台部署
云平台部署是指将应用部署到云平台上,如 AWS、Azure、Google Cloud 等,适用于生产环境。
示例:部署到 AWS Lambda
- 创建 Lambda 函数
python
# lambda_function.py
import os
from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
def lambda_handler(event, context):
# 初始化语言模型
llm = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# 创建提示词模板
template = """You are a helpful assistant. Answer the following question:
Question: {question}
Answer:"""
prompt = PromptTemplate(template=template, input_variables=["question"])
# 创建输出解析器
output_parser = StrOutputParser()
# 使用 LCEL 语法创建链
chain = prompt | llm | output_parser
# 运行链
question = event["queryStringParameters"]["question"]
response = chain.invoke({"question": question})
return {
"statusCode": 200,
"body": response
}- 创建 deployment package
bash
# 创建部署包
mkdir package
pip install --target package langchain langchain-openai langchain-community
cp lambda_function.py package/
cd package
zip -r ../lambda-deployment-package.zip .
cd ..- 部署到 AWS Lambda
- 登录 AWS 控制台
- 导航到 Lambda 服务
- 创建新函数
- 上传 deployment package
- 配置环境变量(如 OPENAI_API_KEY)
- 配置触发方式(如 API Gateway)
4. Web 服务部署
Web 服务部署是指将应用部署为 Web 服务,使用 FastAPI、Flask 等框架,适用于生产环境。
示例:使用 FastAPI 部署 LangChain 应用
- 创建 app.py
python
from fastapi import FastAPI, Query
from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
import os
app = FastAPI()
# 初始化语言模型
llm = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
# 创建提示词模板
template = """You are a helpful assistant. Answer the following question:
Question: {question}
Answer:"""
prompt = PromptTemplate(template=template, input_variables=["question"])
# 创建输出解析器
output_parser = StrOutputParser()
# 使用 LCEL 语法创建链
chain = prompt | llm | output_parser
@app.get("/query")
async def query(question: str = Query(..., description="The question to ask")):
response = chain.invoke({"question": question})
return {"answer": response}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)- 创建 requirements.txt
langchain
langchain-openai
fastapi
uvicorn
langchain-community- 运行应用
bash
# 安装依赖
pip install -r requirements.txt
# 运行应用
python app.py- 部署到云平台
可以使用以下云平台部署 FastAPI 应用:
- Heroku:使用 Procfile 和 Heroku CLI
- AWS EC2:使用 SSH 部署
- Google Cloud Run:使用 Docker 部署
- Azure App Service:使用 Azure CLI 部署
部署的最佳实践
1. 环境变量管理
使用环境变量管理敏感信息,如 API 密钥、数据库连接字符串等。
示例:使用 .env 文件管理环境变量
bash
# 安装 python-dotenv
pip install python-dotenvpython
# app.py
from dotenv import load_dotenv
import os
# 加载环境变量
load_dotenv()
# 使用环境变量
api_key = os.environ["OPENAI_API_KEY"]# .env
OPENAI_API_KEY=your-api-key2. 依赖管理
使用 requirements.txt 或 pyproject.toml 管理依赖,确保所有依赖都已正确安装。
示例:生成 requirements.txt
bash
# 生成 requirements.txt
pip freeze > requirements.txt3. 日志和监控
设置日志和监控系统,以便及时发现和解决问题。
示例:使用 logging 模块
python
import logging
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# 使用日志
logger.info("Application started")
try:
# 代码
logger.info("Operation successful")
except Exception as e:
logger.error(f"Error: {e}")4. 性能优化
优化应用的性能,提高响应速度和并发处理能力。
示例:使用异步处理
python
from fastapi import FastAPI
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
import os
app = FastAPI()
# 初始化聊天模型
chat_model = ChatOpenAI(api_key=os.environ["OPENAI_API_KEY"])
# 创建聊天提示词模板
chat_template = ChatPromptTemplate.from_messages([
("system", "You are a helpful assistant"),
("human", "{question}")
])
# 创建输出解析器
output_parser = StrOutputParser()
# 使用 LCEL 语法创建链
chain = chat_template | chat_model | output_parser
@app.get("/query")
async def query(question: str):
# 异步运行链
response = await chain.ainvoke({"question": question})
return {"answer": response}5. 安全性
确保应用的安全性,防止 API 密钥泄露和恶意攻击。
示例:使用环境变量和 API 密钥管理
python
import os
from langchain_openai import OpenAI
# 从环境变量获取 API 密钥
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise ValueError("OPENAI_API_KEY environment variable is not set")
# 初始化语言模型
llm = OpenAI(api_key=api_key)示例:完整的部署流程
1. 准备应用
python
# app.py
from fastapi import FastAPI, Query
from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from dotenv import load_dotenv
import os
import logging
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# 加载环境变量
load_dotenv()
app = FastAPI()
# 初始化语言模型
api_key = os.environ.get("OPENAI_API_KEY")
if not api_key:
raise ValueError("OPENAI_API_KEY environment variable is not set")
llm = OpenAI(api_key=api_key)
# 创建提示词模板
template = """You are a helpful assistant. Answer the following question:
Question: {question}
Answer:"""
prompt = PromptTemplate(template=template, input_variables=["question"])
# 创建输出解析器
output_parser = StrOutputParser()
# 使用 LCEL 语法创建链
chain = prompt | llm | output_parser
@app.get("/query")
async def query(question: str = Query(..., description="The question to ask")):
logger.info(f"Received query: {question}")
try:
response = chain.invoke({"question": question})
logger.info(f"Generated response: {response}")
return {"answer": response}
except Exception as e:
logger.error(f"Error processing query: {e}")
return {"error": "An error occurred while processing your query"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)2. 创建依赖文件
# requirements.txt
langchain
langchain-openai
fastapi
uvicorn
python-dotenv
langchain-community3. 创建 Dockerfile
dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
ENV OPENAI_API_KEY=your-api-key
CMD ["python", "app.py"]4. 构建和运行
bash
# 构建 Docker 镜像
docker build -t langchain-app .
# 运行 Docker 容器
docker run -p 8000:8000 langchain-app5. 部署到云平台
可以使用以下命令部署到 Heroku:
bash
# 登录 Heroku
heroku login
# 创建 Heroku 应用
heroku create langchain-app
# 推送代码
git push heroku main
# 设置环境变量
heroku config:set OPENAI_API_KEY=your-api-key
# 打开应用
heroku open总结
部署是 LangChain 应用开发的最后一个环节,它将开发好的应用部署到生产环境中。在 LangChain 1.2 中,推荐使用 LCEL 语法创建链,并使用相应的部署方式来部署应用。
通过本文的介绍,您应该已经了解了如何部署 LangChain 应用,包括本地部署、容器化部署、云平台部署和 Web 服务部署等方式。在实际应用中,您可以根据具体需求选择合适的部署方式,配置适当的环境和监控,确保应用的稳定运行。