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

2023-08-27 14:18:13

在当今时代,将 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 亲自尝试一下。

更多推荐

汇编基础(1)--ARM32

简介ARM32,也称为ARMArchitecturev7,是一种32位的指令集架构(ISA),由ARM公司开发并广泛应用于嵌入式系统和移动设备。ARM32是ARM体系结构中较早的版本,被许多处理器核使用,包括Cortex-A、Cortex-R和Cortex-M系列。ARM32架构的主要特点如下:精简指令集:ARM32使

ArmSom-W3开发板之PCIE的开发指南(二)

一、前言上一篇RK3588平台驱动调试篇[PCIE篇]-PCIE的开发指南(一)已经介绍过如何在3588上使用pcie的资源,这一篇介绍在Linux系统下如何应用pcie接上的设备二、PCI配置空间一个PCIe系统最多有256条Bus,每条Bus上最多挂32个Device,每个Device最多又能实现8个Functio

再聊Java Stream的一些实战技能与注意点

大家好,又见面了。在此前我的文章中,曾分2篇详细探讨了下JAVA中Stream流的相关操作,2篇文章收获了累计10w+阅读、2k+点赞以及5k+收藏的记录。能够得到众多小伙伴的认可,是技术分享过程中最开心的事情。不少小伙伴在评论中提出了一些的疑问或自己的独到见解,也在评论区中进行了热烈的互动讨论。梳理了下相关评论内容,

JVM 虚拟机 ----> Java 内存模型(JMM)

文章目录Java内存模型(JMM)一、运行时数据区域划分二、程序计数器(ProgramCounterRegister)计数器的作用三、Java虚拟机栈(VMStack)四、本地方法栈(NativeMethodStack)五、堆(Heap)1、概述2、新生代、老年代3、创建对象的内存分配六、元空间(MetaSpace)1

【C# 基础精讲】异步和同步的区别

异步(Asynchronous)和同步(Synchronous)是在编程中经常遇到的两种执行模式。它们涉及到程序中任务的执行方式以及对资源的管理方式。在本文中,我们将深入探讨异步和同步的区别、使用场景以及在C#中如何实现异步编程。1.同步执行同步执行是指程序按照严格的顺序依次执行每个任务,当前任务执行完成后再执行下一个

Qt5开发及实例V2.0-第二章Qt模板库工具类及控件

Qt5开发及实例V2.0-第二章Qt模板库工具类及控件第2章Qt5模板库、工具类及控件2.1字符串类2.1.1操作字符串2.1.2查询字符串数据2.1.3字符串的转换2.2容器类2.2.1QList类、QLinkedList类和QVector类2.2.2QMap类和QHash类2.3QVariant类2.4算法及正则表

解密Java多线程中的锁机制:CAS与Synchronized的工作原理及优化策略

目录CAS什么是CASCAS的应用ABA问题异常举例Synchronized原理基本特征加锁过程偏向锁轻量级锁重量级锁其他优化操作锁消除锁粗化CAS什么是CASCAS:全称Compareandswap,字面意思:”比较并交换“,CAS涉及如下操作:假设内存中的原数据为A,旧的预期值为B,需要修改的值为C。首先把A与B进

安卓系统--翻译手机rom语言 添加多国语言 编译apk 反编译ODEX 工具步骤解析

很多小品牌机型不具备多语言设置。国内大都是中文。要想换为其他语言除非固件支持。例如国际版固件等等。大厂基本都有中文或者英文或者其他语言配置。而小品牌机型只能通过修改rom来达到多语言调用.工具步骤演示今天给友友介绍一款工具,可以用来翻译手机rom语言。添加多国语言和有些系统apk的编译与反编译等等。工具支持小米系列低版

NTPS/YCD80-1-400V终端电气综合治理保护系统 末端用电防护治理装置

NTPS/YCD80-1-400V终端电气综合治理保护系统赵经理:18O668722O7(同微信)QQ:3O824OO571公司是一家从事智能电网用户端的智能电力监控与电气安全系统的研发,生产和销售于一体的高新技术企业,自主研发了风机节能控制器,新风空调节能控制器,电梯节能控制器,水泵节能控制器,热交换系统节能控制器,

还没用熟 TypeScript 社区已经开始抛弃了

根据rich-harris-talks-sveltekit-and-whats-next-for-svelte这篇文章的报道,Svelte计划要把代码从TS换到JS了。TheteamisswitchingtheunderlyingcodefromTypeScripttoJavaScript.Thatandtheupda

【腾讯云Cloud Studio 实战训练营】深入解析Cloud Studio—React 快速构建点餐页面

序言运气不会凭空而来,只有当你足够努力的时候,才会足够幸运。文章标记颜色说明:黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点腾讯云CloudStudio是一款基于云端的集成开发环境(IDE),它可以让开发人员在任何地方、任何时间使用互联网访问和编写代码,而无需安装任何软件或工具。在本文中,将详细介

热文推荐