☰
使用LangGraph与FastAPI构建AI工作流API
2026/10/14 12:51:20 网站建设 项目流程

1. 为什么需要AI工作流API?

在当今的AI应用开发中,我们经常遇到这样的场景:一个完整的业务逻辑需要串联多个AI模型或处理步骤。比如先让大语言模型生成文案,再调用图像模型配图,最后进行内容审核。传统做法需要开发者手动编写复杂的流程控制代码,既容易出错又难以维护。

LangGraph正是为解决这类问题而生。它提供了一种声明式的方式来定义和执行AI工作流,而FastAPI则是Python生态中最适合构建API服务的框架之一。两者的结合,能让开发者用最少的代码实现最复杂的AI业务流程。

2. 环境准备与工具选型

2.1 开发环境配置

建议使用Python 3.9+版本,这是目前最稳定的AI开发环境。创建并激活虚拟环境:

python -m venv langgraph-env source langgraph-env/bin/activate # Linux/Mac langgraph-env\Scripts\activate # Windows

2.2 核心依赖安装

安装以下关键包:

pip install langgraph fastapi uvicorn python-dotenv

选型理由:

  • langgraph:工作流定义核心库
  • fastapi:API框架
  • uvicorn:ASGI服务器
  • python-dotenv:环境变量管理

提示:生产环境建议固定版本号,避免依赖冲突

3. 构建你的第一个AI工作流

3.1 基础工作流定义

创建一个workflow.py文件:

from langgraph.graph import Graph from typing import Dict, Any def generate_text(state: Dict[str, Any]): return {"text": "AI生成的示例文本"} def process_text(state: Dict[str, Any]): text = state["text"] return {"processed": text.upper()} workflow = Graph() workflow.add_node("generator", generate_text) workflow.add_node("processor", process_text) workflow.set_entry_point("generator") workflow.add_edge("generator", "processor") workflow.set_finish_point("processor")

这个简单工作流演示了文本生成后处理的完整流程。

3.2 工作流可视化

LangGraph内置可视化功能:

from langgraph.graph import visualize visualize(workflow)

这会生成工作流的图形表示,帮助调试复杂流程。

4. 使用FastAPI暴露服务

4.1 基础API搭建

创建main.py:

from fastapi import FastAPI from workflow import workflow app = FastAPI() @app.post("/process") async def run_workflow(): result = workflow.run({}) return {"result": result}

4.2 添加请求参数

增强API的灵活性:

from pydantic import BaseModel class RequestData(BaseModel): prompt: str max_length: int = 100 @app.post("/process") async def run_workflow(data: RequestData): result = workflow.run({"prompt": data.prompt}) return {"result": result}

5. 部署与优化技巧

5.1 本地测试运行

启动开发服务器:

uvicorn main:app --reload

访问http://localhost:8000/docs可测试API。

5.2 生产环境部署建议

  1. 使用Gunicorn作为进程管理器:
pip install gunicorn gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app
  1. 添加API密钥认证:
from fastapi.security import APIKeyHeader api_key_header = APIKeyHeader(name="X-API-Key") @app.post("/process") async def secure_endpoint( data: RequestData, api_key: str = Depends(api_key_header) ): if api_key != "your_secret_key": raise HTTPException(status_code=403) return await run_workflow(data)

6. 实战案例:内容生成工作流

6.1 复杂工作流设计

扩展之前的简单示例,构建真实的内容生成流水线:

def content_plan(state): # 生成内容大纲 return {"outline": "..."} def write_section(state): # 根据大纲撰写章节 return {"draft": "..."} def add_visuals(state): # 添加视觉元素 return {"with_visuals": "..."} def quality_check(state): # 质量审核 return {"final": "..."} workflow = Graph() workflow.add_node("plan", content_plan) workflow.add_node("write", write_section) workflow.add_node("visuals", add_visuals) workflow.add_node("review", quality_check) workflow.add_edge("plan", "write") workflow.add_edge("write", "visuals") workflow.add_edge("visuals", "review")

6.2 条件分支实现

LangGraph支持条件分支:

from langgraph.graph import ConditionalEdge def should_review(state): return "needs_review" if len(state["draft"]) > 1000 else "approve" workflow.add_conditional_edges( "write", should_review, { "needs_review": "review", "approve": "visuals" } )

7. 性能优化与错误处理

7.1 异步支持

FastAPI原生支持async,LangGraph也兼容异步操作:

async def async_generate(state): # 模拟耗时操作 await asyncio.sleep(0.1) return {"text": "异步生成的文本"} @app.post("/async-process") async def async_workflow(): result = await workflow.arun({}) return {"result": result}

7.2 错误处理策略

  1. 工作流级别错误处理:
from langgraph.graph import Graph def handle_error(state, error): return {"error": str(error)} workflow = Graph(error_handlers={Exception: handle_error})
  1. API级别错误处理:
from fastapi import HTTPException @app.exception_handler(ValueError) async def value_error_handler(request, exc): return JSONResponse( status_code=400, content={"message": f"参数错误: {str(exc)}"} )

8. 监控与日志

8.1 添加日志记录

import logging logger = logging.getLogger("langgraph-api") def logged_generate(state): logger.info("开始生成文本") try: result = generate_text(state) logger.debug("生成完成") return result except Exception as e: logger.error(f"生成失败: {e}") raise

8.2 Prometheus监控

集成性能监控:

from prometheus_fastapi_instrumentator import Instrumentator Instrumentator().instrument(app).expose(app)

9. 进阶技巧与最佳实践

9.1 工作流版本控制

建议为工作流添加版本标识:

workflow.metadata = {"version": "1.0.2"}

9.2 工作流组合

大型应用可以组合多个子工作流:

sub_workflow = Graph() # ...构建子工作流... main_workflow = Graph() main_workflow.add_node("preprocess", preprocess) main_workflow.add_node("subflow", sub_workflow.run) main_workflow.add_edge("preprocess", "subflow")

10. 完整项目结构示例

推荐的项目布局:

/project /app __init__.py main.py # FastAPI主文件 workflows/ # 工作流定义 __init__.py content.py moderation.py models/ # Pydantic模型 __init__.py requests.py responses.py utils/ # 工具函数 __init__.py logging.py requirements.txt .env

这种结构便于扩展和维护大型AI API项目。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询