0


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代码需要进行安装库与依赖包,需要安装以下库和依赖包:

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

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

  1. # -*- coding: utf-8-*-
  2. # 导入必要的库
  3. from langchain_nvidia_ai_endpoints import NVIDIAEmbeddings, ChatNVIDIA
  4. from langchain_community.document_loaders import WebBaseLoader
  5. from langchain_community.vectorstores importFAISSfrom langchain_text_splitters import RecursiveCharacterTextSplitter
  6. from langchain_core.prompts import ChatPromptTemplate
  7. from langchain_core.output_parsers import StrOutputParser
  8. from langchain_core.runnables import chain
  9. import os
  10. import gradio as gr
  11. from datetime import datetime
  12. # Even if you do not know the full answer, generate a one-paragraph hypothetical answer to the below question in Chinese
  13. # 定义假设性回答模板
  14. hyde_template ="""Even if you do not know the full answer, generate a one-paragraph hypothetical answer to the below question:{question}"""
  15. # 定义最终回答模板
  16. template ="""Answer the question based only on the following context:{context}
  17. Question:{question}"""
  18. # 定义函数来处理问题
  19. def process_question(url, api_key, model_name, question):
  20. # 初始化加载器并加载数据
  21. loader =WebBaseLoader(url)
  22. docs = loader.load()
  23. # 设置环境变量
  24. os.environ['NVIDIA_API_KEY']= api_key
  25. # 初始化嵌入层
  26. embeddings =NVIDIAEmbeddings()
  27. text_splitter =RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
  28. documents = text_splitter.split_documents(docs)
  29. vector =FAISS.from_documents(documents, embeddings)
  30. retriever = vector.as_retriever()
  31. # 初始化模型
  32. model =ChatNVIDIA(model=model_name)
  33. # 创建提示模板
  34. hyde_prompt = ChatPromptTemplate.from_template(hyde_template)
  35. hyde_query_transformer = hyde_prompt | model |StrOutputParser()
  36. # 定义检索函数
  37. @chain
  38. def hyde_retriever(question):
  39. hypothetical_document = hyde_query_transformer.invoke({"question": question})return retriever.invoke(hypothetical_document)
  40. # 定义最终回答链
  41. prompt = ChatPromptTemplate.from_template(template)
  42. answer_chain = prompt | model |StrOutputParser()
  43. @chain
  44. def final_chain(question):
  45. documents = hyde_retriever.invoke(question)
  46. response =""for s in answer_chain.stream({"question": question,"context": documents}):
  47. response += s
  48. return response
  49. # 调用最终链获取答案
  50. returnstr(datetime.now())+final_chain.invoke(question)
  51. # 定义可用的模型列表
  52. models =["mistralai/mistral-7b-instruct-v0.2","meta/llama-3.1-405b-instruct"]
  53. # 启动Gradio应用
  54. iface = gr.Interface(
  55. fn=process_question,
  56. inputs=[
  57. gr.Textbox(label="输入需要学习的网址"),
  58. gr.Textbox(label="NVIDIA API Key"),
  59. gr.Dropdown(models, label="选择语言模型"),
  60. gr.Textbox(label="输入问题")],
  61. outputs="text",
  62. title="网页知识问答系统")
  63. # 启动Gradio界面
  64. 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格式

  1. # 导入requests库和base64编码库
  2. import requests, base64
  3. # 设置推理URL和流式传输标志
  4. invoke_url ="https://ai.api.nvidia.com/v1/vlm/google/deplot"
  5. stream = True
  6. # 以二进制模式打开图像文件并进行base64编码
  7. withopen("economic-assistance-chart.png","rb")as f:
  8. image_b64 = base64.b64encode(f.read()).decode()
  9. # 确保编码后的图像大小小于180,000字节,否则需要使用资产API
  10. assert len(image_b64)<180_000, \
  11. "To upload larger images, use the assets API (see docs)"
  12. # 准备请求头,需要API密钥进行身份验证
  13. headers ={"Authorization":"Bearer $API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC","Accept":"text/event-stream"if stream else"application/json"}
  14. # 准备请求负载,包含用户消息、最大令牌数、温度等参数
  15. 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
  16. }
  17. # 发送POST请求到指定的推理URL
  18. response = requests.post(invoke_url, headers=headers, json=payload)
  19. # 根据是否开启流式传输,处理响应
  20. if stream:for line in response.iter_lines():if line:print(line.decode("utf-8"))else:print(response.json())

使用一张图表:

在这里插入图片描述

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

在这里插入图片描述

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

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

标签: 人工智能

本文转载自: https://blog.csdn.net/2301_79516858/article/details/142964794
版权归原作者 2301_79516858 所有, 如有侵权,请联系我们删除。

“NVIDIA NIM平台如何打造AI图表识别系统”的评论:

还没有评论