前言:
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指向NVIDIA的API服务
# 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的方式来生成: