【项目介绍】
NVIDIA提供了免费的GPU和AI算力,旨在向各大公司及开发者推广自己的AI能力,开发者首次体验会免费提供1000个Credits left和至少个大模型[“mistralai/mistral-7b-instruct-v0.2”, “meta/llama-3.1-405b-instruct”]。由于openAI在国内申请麻烦并且还收费,本人看到这么好的免费机会,抓紧体验了一把,非常的过瘾。废话少说,直接上干货!
白嫖Credits 方案:
账号注册
访问: ai.nvidia.com ,点击 Try Now
在打开的的页面点击右上角的 Login
输入注册的邮箱
邮箱通过验证后,继续按照操作提示创建 NVIDIA 云账户
创建成功后,将会返回 NIM 平台的主页面,到这里您就用有了 NVIDIA云账户 。
再次点击右上角按钮,可以看到剩余免费额度,点击Request More 可以进行企业用户认证,获取更多使用额度
在这个界面我们能看到多种基于 NIM 平台的AI模型,接下来我们将使用其中之一的大语言模型,构建我们的数据分析问答系统。
到目前为止,我们注册好了账号,并有1000个credit。下边开始写代码。
【技术方案与实验步骤】
技术方案
要实现这个小系统,我们需要完成以下步骤:
1、安装python环境
2、创建一个数据集data
3、写一段python代码来构建系统
4、执行代码生成一个可视化页面
5、创建一个api-key
6、选择一个大模型来服务。
7、准备一些需求问题,验证系统的能力
下面详细介绍每一步骤的实现。
安装python环境
已经有python环境的同学可以跳过这一步。
以下是在不同操作系统中安装 Python 环境的步骤:
一、Windows 系统
打开浏览器,访问 Python 官方网站:https://www.python.org/。
在首页中找到 “Downloads”(下载)选项,点击进入下载页面。
在下载页面中,你会看到不同版本的 Python 可供选择。通常建议选择最新的稳定版本。
选择适合你系统的安装程序,一般来说,对于 Windows 64 位系统,选择 “Windows x86-64 executable installer”;对于 32 位系统,选择 “Windows x86 executable installer”。
下载完成后,双击安装程序开始安装。
在安装向导中,勾选 “Add Python [版本号] to PATH” 选项,这将确保你可以在命令提示符中直接运行 Python。
选择 “Customize installation”(自定义安装)以进行更详细的设置,或者直接选择 “Install Now”(立即安装)进行快速安装。
等待安装过程完成。
安装完成后,你可以打开命令提示符,输入 “python --version” 来验证 Python 是否安装成功,并查看安装的版本号。
二、macOS 系统
访问 Python 官方网站:https://www.python.org/。
在下载页面中选择适合 macOS 的安装程序,通常是 “macOS 64-bit installer”。
下载完成后,双击安装程序开始安装。
在安装向导中,按照提示逐步进行操作,通常默认设置即可满足大多数需求。
安装完成后,打开终端,输入 “python --version” 来验证安装是否成功。
三、Linux 系统(以 Ubuntu 为例)
打开终端。
输入以下命令来更新软件包列表:
sudo apt update
输入以下命令安装 Python:
sudo apt install python3
安装完成后,在终端中输入 “python3 --version” 来验证安装是否成功。
安装完成后,你可以根据需要安装一些常用的 Python 开发工具,如集成开发环境(IDE)如 PyCharm、VS Code 等,以及包管理工具 pip3,用于安装和管理各种 Python 库。
本作者使用的vscode编辑器来完成的。
创建一个数据集data
创建一个csv文件,把准备好的数据放进去。下边以电子产品为例。
写一段python代码来构建系统
首先要安装依赖库:
在终端输入如下命令:
pip3 install langchain_nvidia_ai_endpoints langchain-community langchain-text-splitters faiss-cpu gradio==3.50.0 setuptools beautifulsoup4
新建一个python文件,如
nvd.py:
,详细代码如下:
# -*- coding: utf-8 -*-
# 导入必要的库
from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings, ChatNVIDIA
from langchain_community.document_loaders import TextLoader
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
# 假设性回答模板,这里假设是分析数据的趋势相关问题
hyde_template = """Even if you do not know the full answer, generate a one-paragraph hypothetical answer to the below data analysis question:
{question}"""
# 最终回答模板,基于提供的数据上下文回答问题
template = """Answer the data analysis question based only on the following data context:
{context}
Question: {question}
"""
# 定义函数来处理数据分析问题
def process_data_question(data_file_path, api_key, model_name, question):
# 初始化加载器并加载数据
loader = TextLoader(data_file_path)
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_data_question,
inputs=[
gr.Textbox(label="输入数据文件路径"),
gr.Textbox(label="NVIDIA API Key"),
gr.Dropdown(models, label="选择语言模型"),
gr.Textbox(label="输入数据分析问题")
],
outputs="text",
title="数据分析问答系统"
)
iface.launch()
执行代码生成一个可视化页面
代码写好之后,检查一下,如果没有问题,我们开始在终端运行命令:
python3 -u "xxx/nvd.py"
运行结果如上图。生成访问地址: http://127.0.0.1:7860
创建一个api-key
获取NVIDIA API密钥
访问 https://build.nvidia.com/meta/llama-3_1-405b-instruct
点击Python标签下的Get API Key ,在弹出的框中点击 Generate Key
点击 Copy Key 我们保存好这个密钥。一定要保存,保存,保存哈!备份到一个文件里,方便多次复制多次使用。
选择一个大模型来服务。
然后输入数据地址、api-key(上边保存的密钥),选择大模型、输入问题,然后点击sumbit,开始等待,还有非常友好的时间进度。
当然,网络不好会超时报错,代码报错也没事,不用重启服务,重新点击一下sumbit就行:
准备一些需求问题,验证系统的能力
作者准备了一些问题:
1、最受欢迎的产品是什么?为什么?
2、最受欢迎的产品是什么?最不赚钱的产品是什么?为什么?
3、统计产品名称维度的销售情况,按销售总额排序。
【实验结果展示】
【分析与总结】
整体流程下来,非常的丝滑,很容易上手。
NVIDIA提供了免费的GPU和AI算力,大家如果对知识问答、数据分析和大模型感兴趣,且公司业务也有类似的需求,快速进入NVIDIA的官网体验一下吧!
版权归原作者 doing814 所有, 如有侵权,请联系我们删除。