langgraph应用可以使用langserve部署吗(和fastapi集成)
langgraph应用可以使用langserve部署吗
是的,LangGraph 应用可以通过 LangServe 部署!
如何部署 LangGraph 应用?
-
将 LangGraph 工作流封装为
Runnable
LangGraph 的Graph
或StateGraph
可以编译为一个Runnable
,这使得它可以像 LangChain 的Runnable
一样通过 LangServe 部署。 -
使用
add_routes
注册到 FastAPI
LangServe 提供了add_routes
方法,可以轻松将 LangGraph 工作流暴露为 API 端点。
示例代码
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
启动服务: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 鉴权
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
模块:
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. 测试鉴权
-
请求时需携带鉴权信息:
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_routes
的dependencies
参数灵活控制。 -
角色权限控制:在依赖函数中解析用户角色并校验权限。
-
集成第三方鉴权服务:如 Firebase Auth、Auth0 等。
总结
✅ LangServe + FastAPI 依赖注入 可以无缝实现鉴权。
✅ 支持 API Key、JWT、OAuth2 等多种方式。
✅ 灵活控制 全局或路由级 的权限校验。
只需在 add_routes
中传入 dependencies=[Depends(your_auth_func)]
即可! 🛡️