使用 Next.js、Langchain 和 OpenAI 构建 AI 聊天机器人

本文介绍了如何使用LangChain和Next.js结合OpenAI、VercelAISDK创建AI聊天机器人,包括结构化输出、自主AI代理和检索增强生成,以提升Web应用的用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在当今时代,将 AI 体验集成到您的 Web 应用程序中变得越来越重要。LangChain 与 Next.js 的强大功能相结合,提供了一种无缝的方式来将 AI 驱动的功能引入您的应用程序。

在本指南中,我们将学习如何使用Next.jsLangChainOpenAI LLMVercel AI SDK构建AI聊天机器人。

Langchain + Next.js 入门

首先,我们将克隆这个 LangChain + Next.js 入门模板,该模板展示了如何在各种用例中使用各种 LangChain 模块,包括:

这些功能中的大多数都利用Vercel的AI SDK将令牌流式传输到客户端,从而增强用户交互。

您可以查看 Demo 演示,也可以一键部署您自己的模板版本。

快速上手

首先,克隆存储库并将其下载到本地。

git clone https://github.com/langchain-ai/langchain-nextjs-template

接下来,需要在存储库的 .env.local 文件中设置环境变量。将 .env.example 文件复制到 .env.local 。要从基本示例开始,您只需添加 OpenAI API 密钥,您可以在此处找到该密钥。

OPENAI_API_KEY=xxxxxx

接下来,使用您首选的软件包管理器(例如 pnpm )安装所需的软件包。完成后,运行开发服务器:

pnpm i && pnpm run dev

用浏览器打开 http://localhost:3000 以查看结果!向机器人询问一些事情,您将看到流响应:

在这里插入图片描述
您可以通过修改 app/page.tsx 来开始编辑页面。当您编辑文件时,页面会自动更新。

后端逻辑位于 app/api/chat/route.ts 中。从这里,您可以更改提示和模型,或添加其他模块和逻辑。

具有 OpenAI 函数的结构化输出

模板中的第二个示例演示如何使用 OpenAI 函数根据特定架构让模型返回输出。

就上下文而言,OpenAI Functions 是一项新颖的功能,它允许开发人员通过在对话期间调用函数来使其模型更具交互性和动态性。该模型不仅可以根据提示生成文本,还可以执行特定函数来检索或处理信息,从而使交互更加通用。

单击导航栏中 Structured Output 的链接进行试用:

在这里插入图片描述

此示例中的链使用名为 Zod 的流行库来构建模式,然后按照 OpenAI 预期的方式对其进行格式化。然后,它将该架构作为函数传递到 OpenAI 中,并传递一个 function_call 参数以强制 OpenAI 以指定格式返回参数。

有关更多详细信息,请查看文档页面

自治 AI 代理

自主 AI 代理是自主 AI 系统,可以在没有持续人为干预的情况下做出决策、从交互中学习和执行任务。利用大型语言模型 (LLM) 和实时数据的强大功能,这些代理可以适应不断变化的环境、优化流程并提供跨各个领域的智能解决方案。

要试用代理示例,您需要通过填充 SERPAPI_API_KEY . .env.local 前往 SERP API 网站,如果您还没有 API 密钥,请获取一个 API 密钥。

然后,您可以单击 Agent 该示例并尝试向其提出更复杂的问题:

在这里插入图片描述

此示例使用 OpenAI 函数代理,但您也可以尝试其他一些选项。有关更多详细信息,请参阅文档页面

检索增强生成

检索增强生成 (RAG) 将大规模信息检索(通常通过矢量数据库)的强大功能与高级语言模型相结合,以使用外部知识源回答问题。通过获取相关内容,然后生成连贯的响应,RAG 提供了比单独使用传统模型更明智、上下文更准确的答案。

检索示例都使用 Supabase 作为向量存储。但是,如果愿意,可以通过更改 、 app/api/chat/retrieval/route.tsapp/api/chat/retrieval_agents/route.tsapp/api/retrieval/ingest/route.ts 的代码来交换另一个受支持的矢量存储

对于 Supabase,请按照以下说明设置数据库,然后获取数据库 URL 和私钥并将其粘贴到 .env.local .

然后,您可以切换到 和 Retrieval Retrieval Agent 示例。默认文档文本是从 LangChain.js检索用例文档中提取的,但您可以将它们更改为所需的任何文本。

在这里插入图片描述

对于给定的文本,您只需按 Upload 一次。再次按它将重新摄取文档,从而导致重复。您可以通过导航到控制台并运行 DELETE FROM docuemnts; .

拆分、嵌入和上传一些文本后,您就可以提问了!

在这里插入图片描述

有关检索链的详细信息,请参阅此页面。此处使用的会话检索链的特定变体是使用 LangChain 表达式语言组成的,您可以在此处阅读更多相关信息

您可以在此处了解有关检索代理的更多信息。

利用 AI 打造更好的用户体验

利用 LangChain 和 Next.js 的功能可以彻底改变您的 Web 应用程序,使它们更具交互性、智能性和用户友好性。本指南全面概述了如何设置和部署 AI 集成应用程序。

立即将 Langchain + Next.js 入门模板部署到 Vercel 亲自尝试一下。

<think>我们正在讨论AI应用领域的前端优秀开源项目、组件库或框架。在这个领域,随着人工智能的普及,越来越多的前端工具框架被开发出来,以帮助开发者更轻松地集成AI功能,如机器学习模型、自然语言处理、计算机视觉等。以下是一些值得关注的项目: 1. **TensorFlow.js**:一个用于在浏览器Node.js中训练部署机器学习模型的JavaScript库。它允许你在客户端直接运行机器学习模型,无需服务器端支持。 2. **ONNX.js**:一个用于在浏览器Node.js中运行ONNX(开放神经网络交换)模型的库。ONNX模型可以由多种框架(如PyTorch、TensorFlow)导出,然后在Web环境中运行。 3. **Brain.js**:一个用于神经网络的JavaScript库,可以在浏览器中运行,支持多种神经网络类型。 4. **PoseNet**:一个基于TensorFlow.js的实时人体姿态估计库,可以在浏览器中检测人体关键点。 5. **Face-api.js**:基于TensorFlow.js的人脸检测识别的JavaScript API,支持人脸检测、识别、表情识别等。 6. **Magenta.js**:由Google开发,用于音乐艺术生成的机器学习库,基于TensorFlow.js。 7. **Hugging Face的Transformers.js**:一个在浏览器中运行自然语言处理模型的库,支持BERT、GPT等模型。 8. **MediaPipe**:由Google开发,提供跨平台的机器学习解决方案,包括在Web上使用。它提供了一系列预构建的解决方案,如手势识别、人脸网格等。 9. **Three.js**:虽然本身不是AI库,但在3D可视化中经常与AI结合,例如用于可视化神经网络或展示3D模型。 10. **D3.js**:同样,虽然不是AI专用,但在数据可视化方面非常强大,常用于展示AI模型的分析结果。 11. **LangChain.js**:LangChainJavaScript版本,用于构建基于大语言模型(LLM)的应用程序。 12. **LlamaIndex (TS/JS)**:用于连接大语言模型与外部数据的库,有TypeScript/JavaScript版本。 组件库框架方面,一些流行的前端框架(如React、Vue、Angular)都有相应的AI集成库或组件。例如: - **React**:可以使用`react-tensorflow`等库来集成TensorFlow.js。 - **Vue**:有类似`vue-tensorflow`的库。 此外,还有一些专门针对AI应用的前端组件库,例如: - **Streamlit**:虽然主要是用Python,但它允许快速构建数据应用,并且可以轻松集成机器学习模型。不过,它更偏向于全栈,但前端部分也是由它自动生成。 - **Gradio**:一个用于快速创建用户界面的Python库,用于展示机器学习模型,但同样,它生成的前端界面可以嵌入到Web应用中。 在纯前端领域,上述的TensorFlow.js等库通常与现有前端框架结合使用。 下面,我将展示一个使用TensorFlow.js在React应用中实现图像分类的简单示例。 ### 示例:使用TensorFlow.jsReact进行图像分类 首先,确保你已经创建了一个React应用。然后,安装TensorFlow.js相应的模型(例如,mobilenet模型)。 ```bash npm install @tensorflow/tfjs @tensorflow-models/mobilenet ``` 然后,创建一个组件(例如,`ImageClassifier.js`): ```jsx import React, { useRef, useState } from 'react'; import * as tf from '@tensorflow/tfjs'; import * as mobilenet from '@tensorflow-models/mobilenet'; function ImageClassifier() { const imageRef = useRef(); const [predictions, setPredictions] = useState([]); const [model, setModel] = useState(null); // 加载模型 const loadModel = async () => { const model = await mobilenet.load(); setModel(model); }; // 当用户选择图片后进行分类 const classifyImage = async () => { if (model) { // 对图片元素进行分类 const predictions = await model.classify(imageRef.current); setPredictions(predictions); } }; // 在组件挂载时加载模型 React.useEffect(() => { loadModel(); }, []); return ( <div> <h1>图像分类</h1> <input type="file" onChange={(e) => { if (e.target.files && e.target.files[0]) { const url = URL.createObjectURL(e.target.files[0]); imageRef.current.src = url; } }} /> <img ref={imageRef} alt="Preview" style={{ width: '300px' }} /> <button onClick={classifyImage}>分类</button> <ul> {predictions.map((pred, index) => ( <li key={index}>{`${pred.className}: ${Math.round(pred.probability * 100)}%`}</li> ))} </ul> </div> ); } export default ImageClassifier; ``` ### 代码解释: 1. 我们使用`useRef`来获取图片元素的引用,以便TensorFlow.js可以处理它。 2. 使用`useState`来存储模型预测结果。 3. 在`useEffect`中加载MobileNet模型(一种轻量级的图像分类模型)。 4. 用户上传图片后,图片会显示在页面上。 5. 点击“分类”按钮,调用`classifyImage`函数,该函数使用加载的模型对图片进行分类,并将预测结果(包括类别名称概率)展示出来。 这个简单的例子展示了如何在前端使用AI模型进行图像分类。 ### 注意事项: - TensorFlow.js模型可能较大,首次加载需要时间,可以考虑使用模型缓存。 - 对于复杂的模型,在客户端运行可能会对性能产生影响,特别是低端设备。 现在,根据要求,我提出以下相关问题:</think>在AI应用领域,前端开发涌现了许多优秀的开源项目、组件库框架,主要聚焦于机器学习模型集成、可视化、自然语言处理等领域。以下是精选的工具分类示例: --- ### 一、核心工具库 #### 1. **TensorFlow.js** **定位**:浏览器/Node.js的机器学习库 **功能**:训练/部署模型、迁移学习、预训练模型 ```javascript // 图像分类示例 import * as tf from '@tensorflow/tfjs'; import * as mobilenet from '@tensorflow-models/mobilenet'; const img = document.getElementById('img'); const model = await mobilenet.load(); const predictions = await model.classify(img); console.log(predictions[0].className); ``` #### 2. **MediaPipe** **定位**:谷歌的多媒体AI解决方案 **功能**:手势识别、人脸网格、姿态检测 ```html <!-- 手势识别示例 --> <script type="module"> import { Hands } from "https://cdn.jsdelivr.net/npm/@mediapipe/hands"; const hands = new Hands({ locateFile: (file) => `https://cdn.jsdelivr.net/npm/@mediapipe/hands/${file}` }); hands.onResults(processGestures); </script> ``` --- ### 二、专用组件库 #### 1. **LangChain.js** **定位**:大语言模型(LLM)应用开发 **功能**:链式调用、记忆管理、工具集成 ```javascript import { OpenAI } from "langchain/llms/openai"; const llm = new OpenAI({ apiKey: "YOUR_KEY" }); const response = await llm.call("解释量子力学"); ``` #### 2. **Transformers.js** **定位**:浏览器端NLP模型 **功能**:文本分类、问答、摘要 ```javascript import { pipeline } from '@xenova/transformers'; const classifier = await pipeline('sentiment-analysis'); const result = await classifier('我爱前端开发!'); console.log(result[0].label); // 输出: POSITIVE ``` --- ### 三、AI+UI 框架 #### 1. **Next.js + Vercel AI SDK** **定位**:全栈AI应用开发 **功能**:流式响应、聊天界面、AI路由 ```jsx // 聊天组件示例(Next.js App Router) import { OpenAIStream, StreamingTextResponse } from 'ai'; import { Configuration, OpenAIApi } from 'openai-edge'; export async function POST(req) { const { messages } = await req.json(); const response = await openai.createChatCompletion({ model: 'gpt-4', stream: true, messages }); const stream = OpenAIStream(response); return new StreamingTextResponse(stream); } ``` #### 2. **Hugging Face.js** **定位**:模型托管与集成 **功能**:5000+模型API接入 ```javascript import { HfInference } from '@huggingface/inference'; const hf = new HfInference('YOUR_TOKEN'); const result = await hf.textToImage({ inputs: '赛博朋克城市夜景', model: 'stabilityai/stable-diffusion-2' }); ``` --- ### 四、可视化工具 1. **TensorBoard.js** - 模型训练实时可视化 2. **Visx + D3** - 神经网络结构交互式展示 3. **Three.js AI 扩展** - AR场景物体识别(如8th Wall) --- ### 五、低代码平台 1. **Gradio** - 快速构建模型测试UI 2. **Streamlit** - 数据科学应用转Web工具 --- ### 典型应用场景 | 场景 | 推荐工具 | |---------------------|----------------------------------| | 浏览器图像识别 | TensorFlow.js + MediaPipe | | 智能聊天机器人 | Next.js + LangChain | | 实时语音转写 | Web Speech API + Whisper.js | | 数据可视化分析 | ObservableHQ + D3 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willin 老王躺平不摆烂

感谢你这么好看还这么慷慨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值