趋近智
自动化部署过程是实现生产环境中可靠且可重复发布的基础。手动部署容器化应用,特别是像使用 LangChain 构建的复杂系统,会带来很大的人为错误风险、环境间的不一致性以及缓慢的发布周期。持续集成和持续部署 (CI/CD) 流水线提供了必要的自动化框架来应对这些问题。
CI/CD 流水线自动化了将代码更改从开发者机器部署到生产环境的步骤。它们强制保持一致性,运行自动化检查,并加快发布过程,让团队能够更快、更有信心地交付更新。
持续集成 (CI): 这种做法是指开发者频繁地将代码更改合并到中央仓库,然后运行自动化构建和测试。对于 LangChain 应用来说,一个常见的 CI 过程包括:
持续部署 (CD): 这种做法通过自动部署所有通过 CI 阶段的代码更改到生产环境,从而扩展了 CI。一个紧密相关的理念是持续交付,它自动将更改部署到预演或预生产环境,在部署到生产环境之前需要手动审批。CD 过程通常包括:
有多个平台提供 CI/CD 功能。流行的选择包括:
.github/workflows/)。.gitlab-ci.yml)。提供 Auto DevOps 和内置容器注册表等功能。最佳选择视您现有的基础设施、团队专业知识、预算和具体功能需求而定。对于托管在 GitHub 上的项目,GitHub Actions 通常提供最高效的体验。同样地,GitLab 用户通常会觉得 GitLab CI/CD 非常方便。
我们来演示如何使用 GitHub Actions 为一个容器化的 LangChain 应用搭建一个基础的 CI 流水线。创建一个名为 .github/workflows/ci.yml 的文件:
name: LangChain CI
on:
push:
branches: [ main ] # 在推送到 main 分支时触发
pull_request:
branches: [ main ] # 在针对 main 的拉取请求时触发
jobs:
build-and-test:
runs-on: ubuntu-latest # 使用标准 Linux 环境
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11' # 指定您项目的 Python 版本
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
# 如果有开发依赖(例如用于测试),则安装它们
# pip install -r requirements-dev.txt
- name: Lint with Flake8 (Example)
run: |
pip install flake8
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Run tests with Pytest
env:
# 重要提示:请使用 GitHub Secrets 存储实际的 API 密钥!
# 这些是占位符,真实的密钥应安全存储。
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY_TEST }} # 示例密钥
# 添加其他必要的测试环境变量
run: |
pip install pytest pytest-mock # 安装测试框架
pytest tests/ # 假设您的测试在 'tests' 目录中
- name: Build Docker image
run: |
# 适当标记镜像,例如使用 Git SHA
docker build . --file Dockerfile --tag my-langchain-app:${{ github.sha }}
管理密钥: 请注意测试步骤中的 env 块。切勿将 API 密钥或其他敏感凭据直接提交到您的代码或 CI 配置文件中。所有主要的 CI/CD 平台都提供安全存储密钥(如示例中的 secrets.OPENAI_API_KEY_TEST)的机制,这些密钥仅在流水线执行期间作为环境变量注入。
在此 CI 流水线的基础上,我们可以添加一个部署作业。本示例说明了如何将 Docker 镜像推送到注册表并概述了部署步骤。
# (之前的 CI 作业 'build-and-test' 定义在此处)
deploy:
needs: build-and-test # 确保 CI 通过后才部署
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' && github.event_name == 'push' # 仅在推送到 main 分支时部署
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Log in to Docker Hub (Example Registry)
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/my-langchain-app:latest
${{ secrets.DOCKERHUB_USERNAME }}/my-langchain-app:${{ github.sha }}
- name: Deploy to Kubernetes (Example)
# 此步骤需要设置 kubectl 上下文或使用特定的 action
# 例如:azure/k8s-deploy@v4, google-github-actions/deploy-gke@v2
run: |
echo "Setting up kubectl context..." # 设置 kubectl 上下文...
# 使用密钥配置 kubectl 访问(例如 KUBECONFIG 数据)
echo "Applying Kubernetes manifests..." # 应用 Kubernetes 配置...
# kubectl apply -f k8s/deployment.yaml -f k8s/service.yaml
# kubectl set image deployment/my-langchain-app my-langchain-app=${{ secrets.DOCKERHUB_USERNAME }}/my-langchain-app:${{ github.sha }}
echo "Deployment step would execute here." # 部署步骤将在此处执行。
- name: Deploy to AWS Lambda (Example)
# 此步骤需要 AWS 凭证,并可能需要 AWS CLI 或 SAM CLI
# 使用 aws-actions/configure-aws-credentials@v4 等 action
run: |
echo "Configuring AWS credentials..." # 配置 AWS 凭证...
# 使用密钥配置 AWS CLI 访问
echo "Deploying function update..." # 部署函数更新...
# aws lambda update-function-code --function-name my-langchain-function --image-uri ${{ secrets.AWS_ACCOUNT_ID }}.dkr.ecr.${{ secrets.AWS_REGION }}.amazonaws.com/my-langchain-repo:${{ github.sha }}
echo "Deployment step would execute here." # 部署步骤将在此处执行。
# 同样地添加其他部署目标(Serverless Framework, Google Cloud Functions 等)
部署步骤: 实际的部署命令很大程度上视您选择的基础设施(Kubernetes、AWS Lambda、Google Cloud Functions、Azure Functions、虚拟机)而定。您通常会使用:
kubectl、aws、gcloud、az)。google-github-actions/deploy-cloud-run、aws-actions/amazon-ecs-deploy-task-definition)。请记得使用密钥安全地配置目标平台的访问凭证。
在 CI/CD 流水线中测试 LLM 应用会带来独特的难题:
pytest-mock)来模拟 LLM 响应和工具输出。测试提示模板是否具有正确的格式和变量注入。一个常见的 CI/CD 流水线遵循顺序流程,通常会根据不同环境进行分支。
CI/CD 流水线的简化示意图,包含可选的预演环境部署和生产环境前的手动审批步骤。
.github/workflows/、.gitlab-ci.yml)、Kubernetes manifest 和 IaC 定义都应存储在版本控制中。在生产环境中运行 LangChain 应用时,搭建 CI/CD 流水线是一项投入,它会在稳定性、速度和减少运维开销方面带来回报。它将部署从一项有风险的手动任务转变为可靠的自动化过程。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造