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 # Windows2.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 生产环境部署建议
- 使用Gunicorn作为进程管理器:
pip install gunicorn gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app- 添加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 错误处理策略
- 工作流级别错误处理:
from langgraph.graph import Graph def handle_error(state, error): return {"error": str(error)} workflow = Graph(error_handlers={Exception: handle_error})- 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}") raise8.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项目。