-
- 账号注册
-
- 安装Python
-
- 导入相关依赖项
-
- 获取NVIDIA API密钥
-
- 启动项目
安装python以及相关的库文件:
python的安装:
apt-get install python3
apt-get install pip3
在打开的窗口安装我们所需要的依赖项,输入下方命令:
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()
获取NVIDIA API密钥:
在模型详情中,找到Get Api key中获取一个key,将这个key copy一下即可。
启动项目:
安装依赖后,使用python main.py后,执行127.0.0.1:7860后,可以打开一个网页,我们在网上找了一个旅游的网址,复制API key后,选择了llama3.1的模型,在输入问题,就可以得到答案。
可以看到我们使用llama3.1的模型,可以得到一些帮我推荐一下国庆节景点:给我们推荐了几个地点:颐和园、天安门广场、长城、张家界、黄山、西湖、故宫、海南三亚、桂林山水等。
如何改造为智能导游AI应用
MIN平台不止是只有一种模型,还有其它的的模型可以使用一下:
- 大语言模型 Phi-3 LLMs
- 生成代码 Granite Code
- 生成文本向量 Generate Embeddings for Text Retrieval (agent-blueprints)
- 视觉语义分割ChangeNet
- 光学字符检测OCDRNet
- 统计图表理解deplot(agent-blueprints)
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=True
)
# 流式处理生成的结果
# 遍历每个返回的块,检查内容是否非空并逐块打印
for chunk in completion:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
from openai import OpenAI
import gradio as gr
def generatePoem(poem,theme):
# 初始化OpenAI客户端,配置base_url和api_key
# base_url指向NVIDIA的API服务
# api_key是用于身份验证的密钥,如果在NGC外部执行则需要提供
client = OpenAI(
base_url="https://integrate.api.nvidia.com/v1",
api_key="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"
)
prompt=f"帮我推荐{poem}地方,给出10个{theme}题材的旅游的地点,不要重复,需要给出10条,并且生成小红书类似的推文"
# 创建聊天完成请求
# 选择使用microsoft的phi-3-mini-4k-instruct模型
# 请求内容是生成一首诗
# 设置生成参数:temperature控制随机性,top_p控制多样性,max_tokens限制最大生成长度,stream设置为True以流式接收结果
completion = client.chat.completions.create(
model="microsoft/phi-3-mini-4k-instruct",
messages=[{"role": "user", "content": prompt}],
temperature=0.05,
top_p=0.5,
max_tokens=1024,
stream=True
)
# 流式处理生成的结果
# 遍历每个返回的块,
result=str()
for chunk in completion:
if chunk.choices[0].delta.content is not None:
result += str(chunk.choices[0].delta.content)
return result
poems=["北京","上海","成都","青岛","深圳"]
themes=["国庆节","中秋节","春节","元宵节"]
# 启动Gradio应用
iface = gr.Interface(
fn=generatePoem,
inputs=[
gr.Dropdown(poems, label="选择城市"),
gr.Dropdown(themes,label="选择节假日")
],
outputs="text",
title="AI生成旅游小红书文案"
)
# 启动Gradio界面
iface.launch()
可以通过简单的设置就可以帮助我们生成一些小红书的文案,非常的快捷与方便。