基于NVIDIA NIM 平台的知识问答系统实现客服功能

news2024/12/12 19:54:36

前言:

NVIDIA联合CSDN推出了《NVIDIA NIM黑客松训练营》,通过对着提供的实验手册,学习了基于NVIDIA的NIM平台知识问答系统,简单的一段代码就可以实现一个AI智能问答系统。而且这次活动注册账号即可获得到免费的1000tokens,如果进行企业用户认证还可以获取更丰富的功能。

在这里插入图片描述
本人也是很早就接触了一些AI的应用,如ChatGPT、豆包coze应用等,AI的应用可以给工作与生活上都带来了颠覆性的认知,可以加快处理的效率与减少重复的工作量。在以前都是要先学习python语言,然后再学习AI的框架,而且手里也要有高配置的IT硬件资源,比如GPU、显卡等算力资源。

在这里插入图片描述
今天给大家推荐一个基于NVIDIA的NIM生成式AI平台,可以不需要额外的学习太多AI相关的相关知识体系,就可以以API的形式接入到目前的开发应用中,而且还提供了多种开发语言支持的代码,比如python、nodejs、shell脚本、docker等,可以在不到10分钟即可实现一个最简单的AI产品,接下来由我来介绍一下NIM的体验过程。


一、NVIDIA NIM生成式AI平台是什么?

在这里插入图片描述

NVIDIA NIM 微服务提供基于NVIDIA推理软件的预构建容器。通过NIM平台开发者可以轻松地构建各种生成式AI应用,如 Copilots、ChatGPT聊天机器人等。与传统的模型部署方式相比,NVIDIA NIM显著提高了部署效率,将所需时间从数周缩短至几分钟:

  • NVIDIA NIM平台是Nvidia专为生成式AI模型推理设计的产品。
  • NIM代表NVIDIA Inference Microservices,即英伟达推理微服务。
  • NIM提供了多种使用方式,包括NVIDIA NIM API、作为NVIDIA AI Enterprise平台的一部分,以及NVIDIA NIM自托管容器。

NVIDIA NIM可以灵活部署在云、数据中心和工作站上,充分利用Nvidia的AI推理能力。NIM平台提供了一套行业标准API,使开发者能够轻松地部署AI模型,通过几行代码即可实现。该平台与流行的LLM编排工具(如LangChain和LlamaIndex)紧密集成,便于开发者构建聊天机器人、AI助手等应用程序。

在这里插入图片描述


1.1 NVIDIA NIM生成式AI平台模型介绍 :

NVIDIA NIM 微服务产品提供了非常丰富多样的AI场景及模型教程,这样可以覆盖大多数开发者想实现的AI场景。
在这里插入图片描述
接下来先通过一个示例来演示一下如何使用基于NVIDIA NIM 平台的知识问答系统,并且还提供了一个较为完整的案例。


1.2 NVIDIA NIM平台

首先打开基于NVIDIA NIM 平台网址,点击下面的“Try Now”按钮。
在这里插入图片描述
打的这个页面中,点击“Try Now”按钮,即可跳转一个登陆注册开通基于NVIDIA NIM 平台免费的API权限,点击“Login”,在弹出的“Get Started with your free API credits”框中,输入你的企业邮箱,点击“Next”按钮:
在这里插入图片描述
因为是新一次,首先做一下账号的注册,填写好邮件和密码后,点击“创建账户”:
在这里插入图片描述
此时,会给邮件发送一验证码,记得在邮件中找到并复制验证码并进行验证:
在这里插入图片描述
验证完成后,需要填写一个用户名,再点击创建账号:
在这里插入图片描述
进入后,左侧是所有模型的分类,右上角可以显示有多少次数,免费的次数。1000多,够我们进行测试了。
在这里插入图片描述


如何快速实现一个知识问答系统实现客服功能

首先安装一下python环境,再安装相关的包依赖:

pip install langchain_nvidia_ai_endpoints langchain-community langchain-text-splitters faiss-cpu gradio==3.50.0 setuptools beautifulsoup4

然后我们把下面的代码复制粘贴到一开始创建的 Python 文件中,例如“nim_test.py”

# -*- coding: utf-8 -*-

# 导入必要的库
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings, ChatNVIDIA
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import chain
import os
import gradio as gr
from datetime import datetime
# Even if you do not know the full answer, generate a one-paragraph hypothetical answer to the below question in Chinese
# 定义假设性回答模板
hyde_template = """Even if you do not know the full answer, generate a one-paragraph hypothetical answer to the below question:

{question}"""

# 定义最终回答模板
template = """Answer the question based only on the following context:
{context}

Question: {question}
"""

# 定义函数来处理问题
def process_question(url, api_key, model_name, question):
    # 初始化加载器并加载数据
    loader = WebBaseLoader(url)
    docs = loader.load()

    # 设置环境变量
    os.environ['NVIDIA_API_KEY'] = api_key

    # 初始化嵌入层
    embeddings = NVIDIAEmbeddings()
    text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
    documents = text_splitter.split_documents(docs)
    vector = FAISS.from_documents(documents, embeddings)
    retriever = vector.as_retriever()

    # 初始化模型
    model = ChatNVIDIA(model=model_name)

    # 创建提示模板
    hyde_prompt = ChatPromptTemplate.from_template(hyde_template)
    hyde_query_transformer = hyde_prompt | model | StrOutputParser()

    # 定义检索函数
    @chain
    def hyde_retriever(question):
        hypothetical_document = hyde_query_transformer.invoke({"question": question})
        return retriever.invoke(hypothetical_document)

    # 定义最终回答链
    prompt = ChatPromptTemplate.from_template(template)
    answer_chain = prompt | model | StrOutputParser()

    @chain
    def final_chain(question):
        documents = hyde_retriever.invoke(question)
        response = ""
        for s in answer_chain.stream({"question": question, "context": documents}):
            response += s
        return response

    # 调用最终链获取答案
    return str(datetime.now())+final_chain.invoke(question)

# 定义可用的模型列表
models = ["mistralai/mistral-7b-instruct-v0.2","meta/llama-3.1-405b-instruct"]

# 启动Gradio应用
iface = gr.Interface(
    fn=process_question,
    inputs=[
        gr.Textbox(label="输入需要学习的网址"),
        gr.Textbox(label="NVIDIA API Key"),
        gr.Dropdown(models, label="选择语言模型"),
        gr.Textbox(label="输入问题")
    ],
    outputs="text",
    title="网页知识问答系统"
)

# 启动Gradio界面
iface.launch()

点击Python标签下的Get API Key ,在弹出的框中点击 Generate Key:

在这里插入图片描述
弹出一个确认提示词,点击“Generate key”:
在这里插入图片描述
生成key,这个key有一个有效期,复制下面那个key的密钥:
在这里插入图片描述
通过运行项目后:

在这里插入图片描述

在NVIDIA API Key提交上去,将需要学习的网址放上去,再选择对应的语言模型,输入相关问题,点击“submit”,即可查看需要的信息。


完成一个API接口的客服功能

Phi-3 LLMs
轻量级 具有强大的数学和逻辑推理能力大语言模型。

API申请地址
https://build.nvidia.com/microsoft/phi-3-mini-4k

模型介绍
其强大的推理能力和逻辑能力使其成为内容生成、摘要、问答和情感分析任务的理想选择。

# 导入OpenAI库
from openai import OpenAI

# 初始化OpenAI客户端,配置base_url和api_key
# base_url指向NVIDIAAPI服务
# api_key是用于身份验证的密钥,如果在NGC外部执行则需要提供
client = OpenAI(
  base_url = "https://integrate.api.nvidia.com/v1",
  api_key = "$API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC"
)

# 创建聊天完成请求
# 选择使用microsoft的phi-3-mini-4k-instruct模型
# 请求内容是生成一首关于GPU计算奇迹的limerick诗
# 设置生成参数:temperature控制随机性,top_p控制多样性,max_tokens限制最大生成长度,stream设置为True以流式接收结果
completion = client.chat.completions.create(
  model="microsoft/phi-3-mini-4k-instruct",
  messages=[{"role":"user","content":"Write a limerick about the wonders of GPU computing."}],
  temperature=0.2,
  top_p=0.7,
  max_tokens=1024,
  stream=False
)

# 流式处理生成的结果
# 遍历每个返回的块,检查内容是否非空并逐块打印
print(completion)

stream参数表示是否为流式接口,改为false后,可以看到以API的方式来生成:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2253999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(12)时间序列预测之MICN(CNN)

文章目录 前言1. challenge 一、网络结构1. MHDecomp2. Trend-cyclical Prediction Block3. Seasonal Prediction BlockMIC LayerMerge 实验结果1.长时预测 总结参考 文章信息 模型: MICN (Multi-scale Isometric Convolution Network)关键词: 长时预测…

设计模式——Facade(门面)设计模式

摘要 本文介绍了外观设计模式,这是一种通过简单接口封装复杂系统的设计模式。它简化了客户端与子系统之间的交互,降低了耦合度,并提供了统一的调用接口。文章还探讨了该模式的优缺点,并提供了类图实现和使用场景。 1. 外观设计模…

opencv-android编译遇到的相关问题处理

1、opencv-android sdk下载 下载地址:https://opencv.org/releases/ 下载安卓SDK即可 2、解压下载好的SDK 3、导入opencv的SDK到安卓项目中 导入步骤在/OpenCV-android-sdk/sdk/build.gradle文件的注释中写的非常详细,大家可安装官方给出的步骤导入。…

go语言读取yaml配置文件内容

1、config.yaml配置文件内容假设如下 name: "example" version: 1.0 settings:timeout: 30debug: truefeatures:- feature1- feature22、定义结构体 go语言定义结构体匹配yaml内容 package mainimport ("fmt""log""os""gopkg.…

STL算法之其它算法_下

random_shuffle 这个算法将[first,last)的元素次序随机排列。也就说,在N!中可能的元素排列中随机选出一种,此处N为last-first。 N个元素的序列,其排列方式为N!中,random_shuffle会产生一个均匀分布,因此任何一个排列被…

模拟简单的iOT工作流

没有实际接触过iOT的流程,应该实际使用比这个接口返回要复杂,只是演示~希望能参与实际的接口接入,而不是只展示个假数据。 启动RabbitQ 使用的是3.8.5 启动命令 RabbitMQ Service - start RabbitMQ Command Prompt rabbitmqctl start_app …

【快速入门 LVGL】-- 1、STM32 工程移植 LVGL

目录 一、LVGL 简述 二、复制一个STM32工程 三、下载 LVGL 四、裁剪 源文件 五、工程添加 LVGL 文件 六、注册 显示 七、注册 触摸屏 八、LVGL 心跳、任务刷新 九、开跑 LVGL 十、控件的事件添加、响应处理 十 一、几个好玩小事情 十 二、显示中文 ~~ 约定 ~~ 在…

关于线扫相机的使用和注意事项

引言 线扫相机作为工业视觉系统中的核心设备之一,以其高分辨率和高速成像的特点被广泛应用于印刷质量检测、电子元件检测、纺织品缺陷检测等领域。本文从线扫相机的基本原理出发,探讨其使用方法,并总结在实际应用中的注意事项,为…

MybatisPlus字段类型处理器TypeHandler

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 简介 官网:字段类型处理器 在 MyBatis 中,类型处理器(TypeHandle…

c++编译版本问题#error C++17 or later compatible compiler is required to use xx

问题解决方向 网上多数给出的解决方法是找到setup.py,然后修改extra_compile_args参数中的cxx,由-stdc14改为-stdc17,但是这个方法在我这里没用。 所以我重新理解了下这个error,应该是说为了编译安装当前的库,需要的…

【AI大模型】大型语言模型LLM基础概览:技术原理、发展历程与未来展望

目录 🍔 大语言模型 (LLM) 背景 🍔 语言模型 (Language Model, LM) 2.1 基于规则和统计的语言模型(N-gram) 2.2 神经网络语言模型 2.3 基于Transformer的预训练语言模型 2.4 大语言模型 🍔 语言模型的评估指标 …

一文理解多模态大语言模型——下

作者:Sebastian Raschka 博士, 翻译:张晶,Linux Fundation APAC Open Source Evangelist 编者按:本文并不是逐字逐句翻译,而是以更有利于中文读者理解的目标,做了删减、重构和意译&#xff0c…

uC/OSII学习笔记(二)任务的堆栈检验

加入OSTaskCreateExt()创建拓展任务函数的使用。 加入OSTaskStkChk()堆栈检验函数的使用。 堆栈检验函数可检查任务堆栈的使用字节数量和空闲字节数量。 具体使用方法如下: 1.创建拓展任务OSTaskCreateExt()用于堆栈检验,堆栈检验必须用拓展任务OSTaskCr…

WPF+LibVLC开发播放器-进度条显示和拖动控制

进度条显示和拖动控制 视频教程界面上代码实现进度条显示进度进度条拖动视频进度 效果 视频教程 WPFLibVLC开发播放器-进度条控制 界面上 界面上线增加一个Slider控件&#xff0c;当做播放进度条 <SliderName"PlaySlider"Grid.Row"1"Width"800&qu…

【Rust WebAssembly 入门实操遇到的问题】

Rust WebAssembly 入门实操遇到的问题 什么是WebAssembly跟着教程走wasm-pack build error总结 什么是WebAssembly WebAssembly&#xff08;简称Wasm&#xff09;是一种基于堆栈的虚拟机的二进制指令 格式。Wasm 被设计为编程语言的可移植编译目标&#xff0c;支持在 Web 上部…

同为科技(TOWE)柔性定制化PDU插座

随着科技的进步&#xff0c;越来越多的精密电子设备&#xff0c;成为工作生活密不可分的工具。 电子电气设备的用电环境也变得更为复杂&#xff0c;所以安全稳定的供电是电子电气设备的生命线。 插座插排作为电子电气设备最后十米范围内供配电最终核心部分&#xff0c;便捷、安…

AI RPA 影刀基础教程:开启自动化之旅

RPA 是什么 RPA 就是机器人流程自动化&#xff0c;就是将重复的工作交给机器人来执行。只要是标准化的、重复的、有逻辑行的操作&#xff0c;都可以用 RPA 提效 准备 安装并注册影刀 影刀RPA - 影刀官网 安装 Chrome 浏览器 下载链接&#xff1a;Google Chrome 网络浏览器 …

HTTP 长连接(HTTP Persistent Connection)简介

HTTP长连接怎么看&#xff1f; HTTP 长连接&#xff08;HTTP Persistent Connection&#xff09;简介 HTTP 长连接&#xff08;Persistent Connection&#xff09;是 HTTP/1.1 的一个重要特性&#xff0c;它允许在一个 TCP 连接上发送多个 HTTP 请求和响应&#xff0c;而无需为…

VS与SQL Sever(C语言操作数据库)

作者这里使用的是程序是&#xff1a; Visual Studio SQL Sever (1 对VS的操作 1.首先我们打开Visual Studio Installer&#xff0c;并以管理员身份运行 2.点击修改 3.先选择数据存储和处理&#xff0c;再在右方添加处理工具&#…

基于“开源 2+1 链动 O2O 商城小程序”的门店拉新策略与流程设计

摘要&#xff1a;在数字化商业浪潮席卷之下&#xff0c;实体门店面临着激烈的市场竞争&#xff0c;如何高效拉新成为关乎门店生存与发展的关键问题。本文聚焦于“开源 21 链动 O2O 商城小程序”&#xff0c;深入探讨结合多种手段的门店拉新策略及详细流程设计。通过剖析到店扫码…