Stay Hungry,Stay Foolish!

langgraph应用可以使用langserve部署吗(和fastapi集成)

langgraph应用可以使用langserve部署吗

是的,LangGraph 应用可以通过 LangServe 部署!

如何部署 LangGraph 应用?

  1. 将 LangGraph 工作流封装为 Runnable
    LangGraph 的 GraphStateGraph 可以编译为一个 Runnable,这使得它可以像 LangChain 的 Runnable 一样通过 LangServe 部署。

  2. 使用 add_routes 注册到 FastAPI
    LangServe 提供了 add_routes 方法,可以轻松将 LangGraph 工作流暴露为 API 端点。

示例代码

python
复制
from fastapi import FastAPI
from langgraph.graph import Graph
from langserve import add_routes
from langchain_core.runnables import RunnableLambda

# 1. 定义一个简单的 LangGraph 工作流
def my_workflow(input: str) -> str:
    return f"Processed: {input}"

# 2. 转换为 Runnable
workflow = Graph()
workflow.add_node("process", RunnableLambda(my_workflow))
workflow.set_entry_point("process")
app = workflow.compile()

# 3. 用 LangServe 部署
fastapi_app = FastAPI()
add_routes(fastapi_app, app, path="/my-graph")

# 4. 运行服务 (uvicorn server:fastapi_app)

部署方式

  • 本地运行:使用 uvicorn 启动服务:

    bash
    复制
    uvicorn server:fastapi_app --reload
  • 生产环境:可以使用 Docker、Kubernetes 或云服务(如 AWS ECS、GCP Cloud Run)部署。

访问 API

  • POST /my-graph/invoke – 单次调用

  • POST /my-graph/stream – 流式输出

  • GET /my-graph/playground – 交互式测试界面

总结

LangGraph + LangServe 是一个强大的组合,可以轻松将复杂的工作流部署为 API。
✅ 适用于需要 多步骤决策、循环、状态管理 的 AI 应用。
✅ 提供 REST API、流式响应和 Playground 支持。

如果你的 LangGraph 应用涉及更复杂的状态管理(如 StateGraph),只需确保正确编译为 Runnable,就可以无缝集成到 LangServe 中。 🚀

 

可以添加Depend做鉴权吗?

是的!在使用 LangServe 部署 LangGraph 应用时,可以通过 FastAPI 的 Depends 依赖注入系统 轻松添加鉴权逻辑(如 API Key 验证、JWT 校验等)。以下是具体实现方法:


1. 添加鉴权依赖项

利用 FastAPI 的 Depends,定义一个鉴权函数,并在路由中声明依赖。

示例:API Key 鉴权

python
复制
from fastapi import FastAPI, Depends, HTTPException, Header
from langserve import add_routes

# 1. 定义鉴权逻辑
def verify_api_key(api_key: str = Header(..., alias="x-api-key")):
    # 替换为你的有效 API Key 校验逻辑(如数据库查询、环境变量比对等)
    valid_keys = ["your-secret-key", "another-valid-key"]  
    if api_key not in valid_keys:
        raise HTTPException(status_code=403, detail="Invalid API Key")
    return api_key  # 可返回校验后的值供后续使用

# 2. 创建 FastAPI 应用
app = FastAPI()

# 3. 添加 LangGraph 路由时注入依赖
add_routes(
    app,
    your_compiled_langgraph_app,  # 替换为你的 LangGraph Runnable
    path="/chat",
    dependencies=[Depends(verify_api_key)],  # 关键点:注入依赖
)

2. 支持更复杂的鉴权(如 JWT)

如果需要 OAuth2/JWT 等鉴权,可以使用 fastapi.security 模块:

python
复制
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")  # 假设有 token 端点

def verify_jwt(token: str = Depends(oauth2_scheme)):
    try:
        payload = jwt.decode(token, "your-secret-key", algorithms=["HS256"])
        return payload
    except JWTError:
        raise HTTPException(status_code=401, detail="Invalid token")

add_routes(
    app,
    your_langgraph_app,
    path="/secure-chat",
    dependencies=[Depends(verify_jwt)],
)

3. 测试鉴权

  • 请求时需携带鉴权信息

    bash
    复制
    curl -X POST http://localhost:8000/chat/invoke \
         -H "x-api-key: your-secret-key" \
         -H "Content-Type: application/json" \
         -d '{"input": "Hello"}'
  • 未授权时会返回 403/401 错误


4. 进阶场景

  • 部分路由免鉴权:通过 add_routesdependencies 参数灵活控制。

  • 角色权限控制:在依赖函数中解析用户角色并校验权限。

  • 集成第三方鉴权服务:如 Firebase Auth、Auth0 等。


总结

LangServe + FastAPI 依赖注入 可以无缝实现鉴权。
✅ 支持 API Key、JWT、OAuth2 等多种方式。
✅ 灵活控制 全局或路由级 的权限校验。

只需在 add_routes 中传入 dependencies=[Depends(your_auth_func)] 即可! 🛡️

 

 
 

 

posted @ 2025-04-14 22:34  lightsong  阅读(924)  评论(0)    收藏  举报
千山鸟飞绝,万径人踪灭