NVIDIA NIM平台如何打造AI图表识别系统

NVIDIA NIM是一套易于使用的推理微服务,旨在加速企业中性能优化的生成式 AI 模型的部署。

NIM 推理微服务可以部署在任何地方,从工作站和本地到云,提供企业控制自己的部署选择并确保数据安全。它还提供行业领先的延迟和吞吐量,实现经济高效的扩展,并为最终用户提供无缝体验。

我们可以访问适用于 Llama 3 8B Instruct 和 Llama 3 70B Instruct 模型的 NIM 推理微服务,以便在任何 NVIDIA 加速的基础设施上进行自托管部署。包含用于训练、自定义、检索增强生成(RAG)、guardrails、toolkits、数据 curation 和模型预训练的工具。

在这里插入图片描述
点击“Try Now”即可跳转到一个NIM平台的列表中,可以看到有大概133个Models,非常的多,而且可以自己在分类中搜索想要的分类,可以查看一下每个模型的详情,在这个界面我们能看到多种基于 NIM 平台的AI模型,接下来我们将介绍其中之一的大语言模型,构建我们的知识问答系统。

在这里插入图片描述

点击Login,通过邮箱注册注意一下邮箱接收一下验证码之后,验证完成之后:

在这里插入图片描述
弹框一个界面,需要填写用户名,填写完成用户名后,点击创建新账户即可。

在这里插入图片描述
注册成功后,可以在右上角查看我们的免费的次数:

创建成功后,将会返回 NIM 平台的主页面,到这里您就用有了 NVIDIA云账户 。再次点击右上角按钮,可以看到剩余免费额度,点击Request More 可以进行企业用户认证,获取更多使用额度

在这里插入图片描述
以上就是账号的注册,可以看到只需要简单的邮箱几步就可以完成注册的功能。


接下来,需要使用到python语言,提前需要具备一下python的知识,这里我们通过pyCharm来进行创建一个python的项目:

在这里插入图片描述
创建成功后,因为运行python代码需要进行安装库与依赖包,需要安装以下库和依赖包:

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

安装完后成,创建一个python文件,里面的内容:

# -*- 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()# 定义检索函数@chaindef 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()@chaindef final_chain(question):documents = hyde_retriever.invoke(question)response = ""for s in answer_chain.stream({"question": question, "context": documents}):response += sreturn 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()

这是一个基于NVIDIA语言模型和网页数据的知识问答系统。用户可以输入需要学习的网址和NVIDIA API密钥,选择适合的语言模型并输入问题,系统将基于提供的网页数据和问题生成假设性的回答,并返回最终的结果。用户可以在界面上直接与系统交互,获取问题的答案。

上面的代码是一个基于Gradio和NVIDIA语言模型的知识问答系统。让我来逐步解释每部分的内容:

    1. 首先,定义了假设性回答模板和最终回答模板,用于生成假设性答案和最终答案的格式化输出。
    1. 接下来,定义了一个处理问题的函数process_question,该函数接收网址、NVIDIA API密钥、语言模型和问题作为输入,并执行以下步骤:
    • 初始化加载器并加载网页数据
    • 设置环境变量
    • 初始化NVIDIA嵌入层和文本分割器
    • 创建嵌入模型、检索器和对话模型
    • 定义检索函数hyde_retriever和最终回答链final_chain
    • 调用最终链获取答案并返回结果
    1. 然后定义了可用的语言模型列表models,用户可以在Gradio界面上选择语言模型。
    1. 最后,创建了一个Gradio界面iface,使用process_question函数作为后端处理函数,输入包括学习网址、NVIDIA API密钥、语言模型和问题,输出为文本格式的回答。用户可以在Gradio界面上输入问题,并获取系统生成的回答。

整个代码实现了一个用户友好的网页知识问答系统,用户可以通过输入问题,获取基于提供的网页数据和NVIDIA语言模型的答案。Gradio提供了一个直观的界面,使用户能够轻松地与系统交互。


2. 如何查找key?

随便找一个模型,例如我这里使用的是meta / llama-3.1-405b-instruct模型,点击这个模型:
在这里插入图片描述
详情里面,可以看到提供了不少语言的Demo示例,比如我们这里常用的python代码,点击“Get API Key”即可获取相关的key Code,

在这里插入图片描述

生成的Code点击Copy一下就行:

在这里插入图片描述

在打开的浏览器中填入上面复制的 API 密钥、需要学习的网页地址、使用的语言模型以及提出的问题后,点击submit,等待一段时间 即可看到回答的信息。

在这里插入图片描述


3. 如何使用API接口呢?

BluePrint

申请地址
https://build.nvidia.com/google/google-deplot?snippet_tab=Python

模型介绍
将统计图表转换为数据结构json格式

# 导入requests库和base64编码库
import requests, base64# 设置推理URL和流式传输标志
invoke_url = "https://ai.api.nvidia.com/v1/vlm/google/deplot"
stream = True# 以二进制模式打开图像文件并进行base64编码
with open("economic-assistance-chart.png", "rb") as f:image_b64 = base64.b64encode(f.read()).decode()# 确保编码后的图像大小小于180,000字节,否则需要使用资产API
assert len(image_b64) < 180_000, \"To upload larger images, use the assets API (see docs)"# 准备请求头,需要API密钥进行身份验证
headers = {"Authorization": "Bearer $API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC","Accept": "text/event-stream" if stream else "application/json"
}# 准备请求负载,包含用户消息、最大令牌数、温度等参数
payload = {"messages": [{"role": "user","content": f'Generate underlying data table of the figure below: <img src="data:image/png;base64,{image_b64}" />'}],"max_tokens": 1024,"temperature": 0.20,"top_p": 0.20,"stream": stream
}# 发送POST请求到指定的推理URL
response = requests.post(invoke_url, headers=headers, json=payload)# 根据是否开启流式传输,处理响应
if stream:for line in response.iter_lines():if line:print(line.decode("utf-8"))
else:print(response.json())

使用一张图表:

在这里插入图片描述

在这里插入图片描述
在上传大图片时,需要注意一下,有容量限制一下:

在这里插入图片描述

Traceback (most recent call last):File "test1.py", line 13, in <module>assert len(image_b64) < 180_000, \
AssertionError: To upload larger images, use the assets API (see docs)

在这里插入图片描述
可以看到从文字类的图表excel也是可以识别到的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Windows创建一个MFC应用【带界面】

MFC使用教程【对初学者保姆型友好&#xff01;】 目录 前提条件 1&#xff1a;创建MFC应用程序 2. 项目结构解读 引用 外部依赖项 头文件 源文件 资源文件 文件功能详解 项目的主要流程 步骤2&#xff1a;配置OpenCV 安装OpenCV 包含目录与库文件 步骤3&#xff1…

云卓H30:引领科技与性能的完美融合!

在科技日新月异的今天&#xff0c;一款集高性能与便捷操作于一体的手持地面站成为了无人机、机器人等智能设备的得力助手。云卓H30手持地面站&#xff0c;凭借其搭载的高通骁龙660处理器&#xff0c;在多个适用场景中展现出了卓越的实力。 高通骁龙660&#xff0c;这款先进的移…

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行

Python 如何处理大规模数据库表的迁移与数据迁移的高效执行 引言 在现代应用开发中&#xff0c;随着业务需求的增长&#xff0c;数据库表结构和数据往往需要进行迁移和更新。迁移&#xff08;Migration&#xff09;是指对数据库表的结构、数据类型、索引、约束等进行修改或更新…

Docker 安装sql server 登陆失败

错误&#xff1a; Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate]. Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish co…

UE5 TimeLine入门

UE5 TimeLine入门 时间轴曲线 共计三个关键帧&#xff08;0,0&#xff09;(1.5,10) (3,0) 蓝图 1.按下空格键执行。 2.时间轴TimeLine函数。 3.动画播放结束后执行。 4.每一帧都执行。

单片机原理及应用笔记:单片机的结构原理与项目实践

作者介绍 李婷婷&#xff0c;女&#xff0c;银川科技学院计算机与人工智能学院&#xff0c;2022级计算机与科学技术9班本科生&#xff0c;单片机原理及应用课程第五组。 指导老师&#xff1a;王兴泽 电子邮箱&#xff1a;365349930qq.com 前言 本篇文章是参考《单片机原理…

rk3568 , rk3588 , rknpu2 sdk , rknn-toolkit2, rknn-toolkit2-lite 的了解

rknpu2 sdk 与 rknn-toolkit 的区别。 网上的截图&#xff1a; 总结&#xff1a; rknpu2 是针对 C接口的&#xff0c; rknn toolkit2 是针对 Python接口的。 至于 连不连板&#xff0c; 是不是 拷贝&#xff0c; 那不重要。 然后是 rknn rootlkit2 与 rknn toolkit2 li…

数据结构算法题:栈与队列的使用(一)

目录 用队列实现栈题目解题思路代码实现创建栈的结构体栈的初始化入栈出栈获取栈顶数据判断栈是否为空销毁栈 用队列实现栈 题目 题目描述&#xff1a; 示例&#xff1a; 解题思路 题目要求使用两个队列实现栈的入栈、出栈、获取栈顶元素、检查栈是否为空栈的基本操作。 …

答题pk小程序的技术特点和性能优势分析

答题小程序是一种在移动设备上运行的应用程序&#xff0c;旨在提供各种类型的答题体验。以下是答题小程序的一些特点和优势&#xff1a; 一、特点 多样化的题目类型&#xff1a; 包括选择题、填空题、判断题等常见题型&#xff0c;还可能有简答题、论述题等更具挑战性的题型。…

健康推荐系统:SpringBoot技术实现

3系统分析 3.1可行性分析 通过对本基于智能推荐的卫生健康系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于智能推荐的卫生健康系统采用SSM框架&#…

Spire.PDF for .NET【页面设置】演示:在 C#/VB.NET 中创建 PDF 小册子

当人们打印大型 PDF 文档时&#xff0c;PDF 小册子非常有用。它在书籍、报纸和杂志编辑中特别受欢迎。本节将介绍一种通过C#、VB.NET 中的.NET PDF组件创建 PDF 小册子的非常简单的方法。 Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作…

[含文档+PPT+源码等]精品基于django实现的原生Andriod天气信息的着装搭配系统

基于Django实现的原生Android天气信息的着装搭配系统背景&#xff0c;可以从以下几个方面进行详细阐述&#xff1a; 一、技术背景 Django框架&#xff1a; Django是一个高级的Python Web框架&#xff0c;它鼓励快速开发和干净、实用的设计。Django框架具有强大的数据库抽象层、…

深入了解EasyNVR及EasyNVS,EasyNVR连接到EasyNVS当显示授权超时如何解决?又因为什么原因?

我们先来了解NVR批量管理软件/平台EasyNVR&#xff0c;它深耕市场多年&#xff0c;为用户提供多种协议&#xff0c;兼容多种厂商设备&#xff0c;包括但不限于支持海康&#xff0c;大华&#xff0c;宇视&#xff0c;萤石&#xff0c;天地伟业&#xff0c;华为设备。 NVR录像机…

14.JVM对象创建与内存分配机制深度剖析

一、对象的创建 1.类加载检查 当虚拟机接受到一条new指令时&#xff0c;会去检查这个指令的参数是否能在常量池种定位到一个符号引用&#xff0c;并且检查这个符号引用代表的类是否已经被加载、解析和初始化。如果没有则进行类的加载过程&#xff1b; 2.分配内存 在类加载检…

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

前言【Unity实战篇】 接入百度自动翻译,实现文本自动翻译功能一、获取百度翻译开发平台的APPID和密钥二、Unity中接入自动翻译功能三、Unity中实现自动翻译文本Text功能总结前言 日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。本篇文章将演示怎样在Unity中接入…

数据质量差的代价是什么?

如今&#xff0c;许多数字企业都认为自己是数据驱动的。通过各种软件解决方案&#xff0c;数据无处不在&#xff0c;收集起来也非常方便&#xff0c;这使得企业能够被动地收集大量数据&#xff0c;并将其应用于决策制定。 然而&#xff0c;人们往往很容易在不考虑数据质量的情…

新手爬虫DAY1

这个错误信息表明在你的Python程序中&#xff0c;re.search() 函数没有找到预期的匹配项&#xff0c;因此返回了 None。当你尝试在 None 对象上调用 group(1) 方法时&#xff0c;Python 抛出了一个 AttributeError。 具体来说&#xff0c;错误发生在 pc.py 文件的第6行&#x…

【实战篇】用SkyWalking排查线上[xxl-job xxl-rpc remoting error]问题

一、组件简介和问题描述 SkyWalking 简介 Apache SkyWalking 是一个开源的 APM&#xff08;应用性能管理&#xff09;工具&#xff0c;专注于微服务、云原生和容器化环境。它提供了分布式追踪、性能监控和依赖分析等功能&#xff0c;帮助开发者快速定位和解决性能瓶颈和故障。…

excel筛选多个单元格内容

通常情况下&#xff0c;excel单元格筛选时&#xff0c;只筛选一个条件&#xff0c;如果要筛选多个条件&#xff0c;可以如下操作&#xff1a; 字符串中间用空格分隔就行。

IDEA中git如何快捷的使用Cherry-Pick功能

前言 我们在使用IDEA开发时&#xff0c;一般是使用GIT来管理我们的代码&#xff0c;有时候&#xff0c;我们需要在我们开发的主分支上合并其他分支的部分提交代码。注意&#xff0c;是部分&#xff0c;不是那个分支的全部提交&#xff0c;这时候&#xff0c;我们就需要使用Che…