【NVIDIA NIM 黑客松训练营】利用生成式NVIDIA NIM,20分钟帮我生成一个智能导游AI应用

在这里插入图片描述

    1. 账号注册
    1. 安装Python
    1. 导入相关依赖项
    1. 获取NVIDIA API密钥
    1. 启动项目

在这里插入图片描述

安装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指向NVIDIAAPI服务
# 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指向NVIDIAAPI服务

    # 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()

在这里插入图片描述

可以通过简单的设置就可以帮助我们生成一些小红书的文案,非常的快捷与方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值