【NVIDIA NIM 黑客松训练营】实现剧本杀 AI 策划官(手摸手教程)
NVIDIA NIM 微服务提供基于 NVIDIA 推理软件的预构建容器。通过NIM,开发者可以轻松地构建各种生成式AI应用,如copilots、ChatGPT聊天机器人等。与传统的模型部署方式相比,NVIDIA NIM显著提高了部署效率,将所需时间从数周缩短至几分钟。
一、背景介绍
首先介绍一下参加这次【 NVIDIA NIM 黑客松训练营】的背景。
本人是一名 11 年的互联网开发老鸟了,从 Web 后端开发,到全栈开发,再到后拉的物联网开发,以及目前的研发管理,10 多年一步步见证了互联网焕然一新的快速变革之路,也就是从去年开始接触 AIGC、AI Agent 等相关的一些技术,也几乎体验了国内主流的大多数 AI 产品(看我以前的博文就可以看到 22 年初就体验【华为云 ModelArts】并且撰写了当时体验的过程)
但是随着 23 年 AI 的迅速发展和崛起,既出现了非常多的广泛 AI 应用场景、也改变了不少行业的工作方式和发展方向,本来作为一个老程序员,内心其实对新技术还是有一点点排斥的,但是我也知道,AI 这个技术,特别是做互联网开发的人,根本躲不过去的。所以这两年我主要业余精力都有放在 AI 和 Web3 领域;今年年初换购了一个 M3 MacBook Pro 其实也是想更多的研究这两个方面的技术(不要让硬件拖我后腿)。
然后参加这次【 NVIDIA NIM 黑客松训练营】也是看到有技术群里在讨论这个活动,周末抽空关注了一下,感觉挺有意思,把错过了的之前直播视频回放也恶补了一下。恶补完成后,就迫不及待的拿到相关训练营资料就直接开干了。
好了,废话不多说了,直接进入详细的 WorkShop 环节。
二、活动介绍
首先活动的形式是纯线上,以训练营学习的方式,再到动手实践,期间提供了非常详细的学习资料,让初次接受 NVIDIA NIM 微服务产品的开发者能够少走很多弯路。
其次,在资料介绍中,也提供了比较丰富多样的AI场景及模型教程,这样可以覆盖大多数开发者想实现的AI场景。
- 大语言模型 Phi-3 LLMs
- 生成代码 Granite Code
- 生成文本向量 Generate Embeddings for Text Retrieval (agent-blueprints)
- 视觉语义分割ChangeNet
- 光学字符检测OCDRNet
- 统计图表理解deplot(agent-blueprints)
并且还提供了一个较为完整的案例。
总之,从训练营准备工作来说,已经非常全面了,这样的训练营可以覆盖大多数的开发者进行友好的体验。
为了活动的趣味性和丰富性,活动方还准备了丰厚的活动激励,可以说是深得人心了,这下不支持都不行了,话不多说,冲!
三、WorkShop开始
1、注册&模型选择与密钥获取
首先进入官网,点击“立即尝试”。
下一步,其实已经进入模型列表页面了,但是选择模型前,你还需要登录/注册。
我这边已经有过账号了,账号默认登录了。然后下一步直接选择具体的模型。
这里提一嘴,如果你是企业开发者,可以在这里申请企业用户认证,能获取更多使用额度
接下来,就是选择具体哪个模型了,这跟你需要做的 AI 应用场,景息息相关;模型场景前面介绍过了有非常多种类的选择,我这边因为公司产品这一块正好在研究“剧本杀”相关的活动,所以顺势我们来试一试,让AI帮我来完成这些剧本的设计。
OK,经过一段时间的来回选择,我选择了 mistralai/mixtral-8x22b-instruct-v0.1 模型。
可以看到,模型下面左侧有一个填写内容的输入框,右侧是不同方式的示例代码(本人相较而言,对 Python、NodeJS、Docker 熟悉点),这里就选 Python 版本吧。
在这之前我们需要把相关依赖项安装了。
pip install langchain_nvidia_ai_endpoints langchain-community langchain-text-splitters faiss-cpu gradio==3.50.0 setuptools beautifulsoup4
2、“剧本杀 AI策划官”实现
首先,我们打开PyCharm
,没有的话只要有Python开发环境,终端也是可以的。(具体怎么下载PyCharm
,怎么创建项目就不在这里说了,Python基础中的基础了)。
我们把刚刚的代码直接粘贴到PyCharm
中。
运行代码后,可以看到下面的输出。
最终的输出文字并不多也没换行。我们把代码稍微调整下。
我们把内容变量化,并且,刚刚看到内容好像很短,这个对“剧本杀”来说完全不符合要求,我们把输出最大长度调整一下,并且主题也换一下。
这个输出就比较符合预期了;但是在终端中输出并不是我想要的,而且剧本杀多样化的参数、剧情等都应该设置变量进去,这样才能让 AI 输出更有针对性的剧本杀。
3、“剧本杀 AI策划官”优化
不管是从直播视频中,还是学习资料中,我们都看到,我们是可以通过 Gradio 进行Web页面搭建的(有不懂的可以查一下资料,学习使用还是比较容易的),我们打算使用 Gradio 构建一个页面,页面里面设置一些参数,进一步优化我们的“剧本杀 AI策划官”。
首先我们来看 Gradio 这一块的代码。
我们设置了3个参数,1个输入类型,2个下拉选择类型。
- 剧本杀的名称。
- 剧本杀的类型方向。
- 剧本杀的主题。
types = ["男性方向", "女性方向"]
themes = ["民国谍战", "古代宫斗", "未来科幻", "咏物言志", "西部牛仔", "恐怖悬疑", "侦探推理", "末日生存", "都市生活"]
iface = gr.Interface(
fn=generateQue,
inputs=[
gr.Textbox( label="你想生成的剧本杀名称"),
gr.Dropdown(types, label="选择剧本杀类别"),
gr.Dropdown(themes, label="选择剧本杀具体")
],
outputs="text",
title="剧本杀 AI 策划官"
)
再看另外一方面,我们把三个设定好的参数传进去,密钥记得填自己的,可以直接粘贴过来;然后把max_tokens
继续加长了一点。
def generateQue(question, type, 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="your key" # 你的密钥
)
prompt = f"设计内容{type}和{theme}要求写一个较为详细的剧本杀设计内容,标题为{question}。"
# 创建聊天完成请求
# 请求内容是生成一首诗
# 设置生成参数:temperature控制随机性,top_p控制多样性,max_tokens限制最大生成长度,stream设置为True以流式接收结果
completion = client.chat.completions.create(
model="mistralai/mixtral-8x22b-instruct-v0.1", # 你的模型
messages=[{"role": "user", "content": prompt}],
temperature=0.05,
top_p=0.5,
max_tokens=4096, # 根据需求改长短
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
完整代码如下:
from openai import OpenAI
import gradio as gr
def generateQue(question, type, 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"设计内容{type}和{theme}要求写一个较为详细的剧本杀设计内容,标题为{question}。"
# 创建聊天完成请求
# 请求内容是生成一首诗
# 设置生成参数:temperature控制随机性,top_p控制多样性,max_tokens限制最大生成长度,stream设置为True以流式接收结果
completion = client.chat.completions.create(
model="mistralai/mixtral-8x22b-instruct-v0.1",
messages=[{"role": "user", "content": prompt}],
temperature=0.05,
top_p=0.5,
max_tokens=4096,
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
types = ["男性方向", "女性方向"]
themes = ["民国谍战", "古代宫斗", "未来科幻", "咏物言志", "西部牛仔", "恐怖悬疑", "侦探推理", "末日生存", "都市生活"]
iface = gr.Interface(
fn=generateQue,
inputs=[
gr.Textbox( label="你想生成的剧本杀名称"),
gr.Dropdown(types, label="选择剧本杀类别"),
gr.Dropdown(themes, label="选择剧本杀具体")
],
outputs="text",
title="剧本杀 AI 策划官"
)
iface.launch()
OK,尝试一下。
Web 界面
输入好 标题、类别和主题后就开始生成内容了。
大概 10s 左右,内容就生成出来了,还是非常满意的
剧本杀生成出来非常不错,省去了极多的思考、策划时间;整体构建也非常丝滑。
整体总结
1、活动组织方面
活动提前准备与组织方面非常完善了,让整体的活动体验感拉满了,不管是小助手的消息回复效率,还是相关资料的准备,让这次的产品体验非常Nice。
2、产品体验方面
整体的产品体验使用也是非常丝滑的,没有出现任何Bug、网络、权限等等相关问题,几乎一气呵成完成了整体的体验,可以看得出 NVIDIA 在 NIM的产品上做了非常足的准备工作以及体验感优化;这方面可以说是今年在各个平台各种AI工具和产品上还没感受到的。
3、产品优势
其实这次的体验,还有一个感觉,NIM 给开发者提供了很多便捷性,开发者本身就并不需要性能多么好的GPU设备就可以非常便捷的自己搭建、体验和使用AI开发工具了。想想当初为什么买M3 就是之前的笔记本跑个ollama 72b模型,直接都是龟速输出内容,实在惨不忍睹。
另外就是使用真的就跟宣传一样的,几分钟到十几分钟就可以轻松部署出来自己的AI应用了。
另外一方面就是预设的模型非常丰富了,能够覆盖大多数的应用场景。
好了,就先这么多把!期待更新的消息。如果有深度测评的机会,其实可以做一个和其他主流AI产品”横向对比“、”纵向对比“的测评文章的。
更多推荐
所有评论(0)