能否在Next.js端点中使用langgraph-sdk/react的useStream及生成式UI?
在Next.js中集成LangChain useStream与生成式UI(无需独立服务器)
1. 基于LangGraph核心库搭建Next.js后端逻辑
无需依赖langgraph-cli dev启动的独立服务器,直接在Next.js的API路由中初始化LangGraph Agent,同时嵌入用户认证、使用限制等自定义逻辑:
// app/api/langgraph/[...route]/route.ts import { NextResponse } from 'next/server'; import { auth } from '@/auth'; // 假设你用NextAuth实现用户认证 import { createGraphAgent } from '@/lib/langgraph-agent'; // 自定义LangGraph Agent初始化逻辑 // 处理流式聊天核心请求 export async function POST(request: Request, { params }: { params: { route: string[] } }) { // 用户认证检查 const session = await auth(); if (!session?.user) { return new NextResponse('未授权', { status: 401 }); } // 使用限制检查(比如调用次数、token消耗阈值) const usageLimit = await checkUserUsage(session.user.id); if (!usageLimit.allowed) { return new NextResponse('超出使用限制', { status: 429 }); } // 初始化Agent并处理流式请求 const agent = await createGraphAgent(); const { threadId, messages } = await request.json(); const stream = await agent.stream({ threadId, messages, }); return new NextResponse(stream, { headers: { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', }, }); } // 处理threads查询请求(适配useStream的路由调用) export async function GET(request: Request, { params }: { params: { route: string[] } }) { const session = await auth(); if (!session?.user) return new NextResponse('未授权', { status: 401 }); const { searchParams } = new URL(request.url); const threadId = searchParams.get('threadId'); // 从数据库读取用户的线程记录 const threads = await getUserThreads(session.user.id, threadId); return NextResponse.json(threads); }
2. 适配useStream钩子指向Next.js API
修改前端useStream的配置,将apiUrl指向你的Next.js API路由,无需改动钩子核心逻辑:
import { useStream } from '@langchain/langgraph-sdk/react'; const thread = useStream({ apiUrl: '/api/langgraph', // 替换为你的Next.js API前缀 assistantId: 'custom-agent', // 自定义Agent标识,后端可据此区分逻辑 });
3. 集成生成式UI功能
生成式UI依赖的useStream和useStreamContext钩子,只要后端API返回的数据格式与LangGraph官方服务一致,就能直接复用。在Next.js客户端组件中直接引入使用:
'use client'; import { useStream, useStreamContext } from '@langchain/langgraph-sdk/react'; import { GenerateUI } from '@langchain/langgraph-sdk/react/generate-ui'; export default function ChatComponent() { const thread = useStream({ apiUrl: '/api/langgraph', assistantId: 'custom-agent', }); const { messages } = useStreamContext(); return ( <div className="chat-container"> {messages.map((msg) => ( <div key={msg.id} className="chat-message"> {msg.content} </div> ))} <GenerateUI thread={thread} /> </div> ); }
关键说明
- 无需从零编写库:直接复用
@langchain/langgraph-sdk的前端钩子,只需在Next.js后端实现对应API端点的逻辑,匹配官方服务的数据格式即可。 - 自定义逻辑完全可控:所有认证、限流、数据存储逻辑都可以在Next.js API路由中完成,无需依赖外部服务。
- 简化非核心端点:如果不需要
/crons这类定时任务相关的端点,可以在前端钩子配置中忽略,或返回空响应,不影响核心流式聊天与生成式UI功能。
内容的提问来源于stack exchange,提问作者Vladislav
相关产品推荐
相关产品推荐

