You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 13:12:45