前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >10 分钟内构建您的聊天机器人应用程序(Next.js、gpt4o 和 DenserRetriever)

10 分钟内构建您的聊天机器人应用程序(Next.js、gpt4o 和 DenserRetriever)

原创
作者头像
DenserAI_Chris
发布2024-08-17 23:03:22
1120
发布2024-08-17 23:03:22
举报
文章被收录于专栏:DenserAI
Designed by Freepik (www.freepik.com)
Designed by Freepik (www.freepik.com)

在本文中,您将学习如何构建一个由 AI 驱动的聊天机器人应用程序,该应用程序允许您根据自己的数据自定义自己的知识聊天机器人。我们将介绍如何:

●使用 Next.js 构建 Web 应用程序,

●使用@vercel/ai 将 AI 集成到软件应用程序中,

●使用 DenserRetriever 检索您自己的数据。

DenserRetriever:企业级人工智能检索器。

RAG系统主要包括两个部分:检索器和生成器。人工智能检索器用于确保人工智能应用中的准确和无缝体验。而Denser Retriever 将多种搜索技术整合到一个平台中。在MTEB数据集上的实验表明,Denser Retriever可以显著提升向量搜索(VS)的基线(snowflake-arctic-embed-m模型, 在MTEB/BEIR排行榜达到了最先进的性能)。它利用梯度增强 (xgboost) 机器学习技术来结合:

  • 基于关键字的搜索,重点在于精确获取查询中提到的内容。
  • 矢量数据库非常适合查找大量可能相关的答案。
  • 机器学习重新排序器可以对结果进行微调,以确保最相关的答案位于列表顶部。

DenserRetriever官网

DenserRetriever的GitHub地址

先决条件

要完全理解本教程,您需要对 React 或 Next.js 有基本的了解。以下是构建 AI 驱动的聊天机器人应用程序所需的工具:

Docker&Docker compose - 在您的本地主机上提供 DenserRetriever api服务器。

OpenAI API——提供 API 密钥,使我们能够使用 ChatGPT 模型执行各种任务。

项目设置和软件包安装

创建 Next.js 项目

首先,通过在终端中运行以下代码片段创建一个 Next.js 应用程序:

代码语言:javascript
复制
npx create-next-app --example 
https://github.com/vercel/ai/tree/main/examples/next-langchain next-retriever

在本教程中,我们将使用 vercel 的 langchain 集成模板。接下来,我们可以安装依赖项。

代码语言:javascript
复制
cd next-retriever
npm install

启动 DenserRetriever

首先,将 docker-compose.yml 文件复制到您的工作目录。

代码语言:javascript
复制
version: "3.5"

services:
  denserretriever:
    image: jotyy318/denserretriever
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/"]
      interval: 30s
      timeout: 20s
      retries: 3
    ports:
      - "8090:8090"

  elasticsearch:
    image: elasticsearch:8.13.4
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms1g -Xmx1g
      - xpack.security.enabled=false
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-./docker-volume}:/usr/elasticsearch/data
    ports:
      - "9200:9200"
      - "9300:9300"

  etcd:
    container_name: milvus-etcd
    image: quay.io/coreos/etcd:v3.5.0
    environment:
      - ETCD_AUTO_COMPACTION_MODE=revision
      - ETCD_AUTO_COMPACTION_RETENTION=1000
      - ETCD_QUOTA_BACKEND_BYTES=4294967296
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/etcd:/etcd
    command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd

  minio:
    container_name: milvus-minio
    image: minio/minio:RELEASE.2020-12-03T00-03-10Z
    environment:
      MINIO_ACCESS_KEY: minioadmin
      MINIO_SECRET_KEY: minioadmin
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/minio:/minio_data
    command: minio server /minio_data
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  standalone:
    container_name: milvus-standalone
    image: milvusdb/milvus:v2.3.15
    command: ["milvus", "run", "standalone"]
    environment:
      ETCD_ENDPOINTS: etcd:2379
      MINIO_ADDRESS: minio:9000
    volumes:
      - ${DOCKER_VOLUME_DIRECTORY:-./docker-volume}/volumes/milvus:/var/lib/milvus
    ports:
      - "19530:19530"
    depends_on:
      - "etcd"
      - "minio"

networks:
  default:
    name: milvus

接下来,您可以用自己的数据替换数据/code/data。如果没有,它将使用 DenserAI 的默认数据。

最后,运行以下命令启动 DenserRetriever。

代码语言:javascript
复制
docker compose up -d

索引建立完成后,DenserRetriever 的状态将是健康的。

恭喜!您现在可以构建应用程序了。

构建聊天机器人应用程序

在本节中,我将引导您构建聊天机器人应用程序。要设置 Next.js 和 DenserRetriever 之间的连接,请导航到 Next.js 应用程序文件夹/api/chat并编辑文件route.ts

代码语言:javascript
复制
import { ChatOpenAI } from "@langchain/openai";
import { LangChainAdapter, Message, StreamingTextResponse } from "ai";
import { AIMessage, HumanMessage } from "langchain/schema";

export const dynamic = "force-dynamic";
export const maxDuration = 60;

function generatePrompt(query: string, passages: string[]): string {
  let prompt: string =
    "### Instructions:\n" +
    "The following context consists of an ordered list of sources. If you can find answers from the context, use the context to provide a long response. You MUST cite the context titles and source URLs strictly in Markdown format in your response. If you cannot find the answer from the sources, use your knowledge to come up with a reasonable answer and do not cite any sources. If the query asks to summarize the file or uploaded file, provide a summarization based on the provided sources. If the conversation involves casual talk or greetings, rely on your knowledge for an appropriate response.";

  prompt += `### Query:\n${query}\n`;

  if (passages.length > 0) {
    prompt += `\n### Context:\n${JSON.stringify(passages)}\n`;
  }

  prompt += "### Response:";

  return prompt;
}

export async function POST(req: Request) {
  const {
    messages,
  }: {
    messages: Message[];
  } = await req.json();

  const model = new ChatOpenAI(
    {
      model: "gpt-4o",
    },
    {
      baseURL: process.env.OPENAI_API_BASE_URL,
    },
  );

  const query = messages[messages.length - 1].content;

  const { passages } = await fetch("http://127.0.0.1:8090/retrieve", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      question: query,
    }),
  })
    .then((res) => {
      if (res.ok) {
        return res.json();
      } else {
        throw new Error("Failed to fetch");
      }
    })
    .catch((err) => {
      return { docs: [], passages: [] };
    });

  const prompt = generatePrompt(query, passages);

  const stream = await model.stream(
    messages.map((message) =>
      message.role == "user"
        ? new HumanMessage(prompt)
        : new AIMessage(message.content),
    ),
  );

  return new StreamingTextResponse(LangChainAdapter.toAIStream(stream));
}

接下来,在中设置您的OPENAI_API_KEY环境变量.env.local

代码语言:javascript
复制
cp .env.local.example .env.local

现在,启动你的 Next.js 应用程序,你将看到奇迹。

结论

Denser Retriever 兼具了易用性和先进的准确性,如果您正在构建企业 AI 应用程序,DenserRetriever 是满足您的数据检索需求的一个非常不错的选择。

如果你想要了解更多关于 Denser Retriever,以及如何安装,还有从文本文件或网页页面构建检索索引,并在此索引上进行查询的相关信息,欢迎阅读如下文章:

Denser Retriever: 企业级AI检索器,轻松构建RAG应用和聊天机器人(完全开源)

如想了解更多关于Denser Retriever的资讯,欢迎阅读我们的博客

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DenserRetriever:企业级人工智能检索器。
  • 先决条件
  • 项目设置和软件包安装
    • 创建 Next.js 项目
      • 启动 DenserRetriever
      • 构建聊天机器人应用程序
      • 结论
      相关产品与服务
      对话机器人
      对话机器人(Conversation Robot,ICR),是基于人工智能技术,面向企业场景的 AI 服务,可应用于智能客服、服务咨询、业务办理等场景。本产品旨在帮助企业快速构建,满足自身业务诉求的对话机器人,从而减少企业人力成本或解决服务不及时问题。用户可通过对话机器人用户端引擎,实现高准确率的对话服务。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档