项目简介
NVIDIA联合CSDN推出了NVIDIA NIM黑客松训练营,笔者也是抱着试试看的心态加入其中,感受大模型的魅力。进入里后,有非常详细的入门操作手册以及各大模型介绍,模型包括以下:
- 大语言模型 Phi-3 LLMs
- 生成代码 Granite Code
- 生成文本向量 Generate Embeddings for Text Retrieval (agent-blueprints)
- 视觉语义分割ChangeNet
- 光学字符检测OCDRNet
- 统计图表理解deplot(agent-blueprints)
大家可以参加试试,还蛮好玩的,活动链接CSDN
那么本文呢,也是在阅读其操作手册后灵感突现,完成了一个Ai写诗的小demo。
使用的大模型为 Phi-3 LLMs,使用大模型首先要有一定的提示词,让大模型的输出达到我们想到的一个结果,那么此次呢,将用大模型模仿古代著名诗人如李白, 杜甫,白居易,李商隐,辛弃疾,还有诗词的风格诸如"羁旅思乡","爱情闺怨","咏史怀古","咏物言志","送别怀人","边塞征战","山水田园”根据这些提示词组会生成像“请以中国诗人李白的风格写一首关于送别怀人的古诗词”这样的句子作为输入丢给大模型,当然这样简单的提示,大模型生成的诗词还不是很满意,要调整一些参数或加一些限制,具体查看下文。
技术方案
使用python语言进行开发,IDE选择pycharm,使用gradio来作为前端用户操作的门户,后端使用openai库向NVIDIA NIM发送请求、获取结果
-
python3.8
-
openai
-
gradio
在pycharm终端执行以下命令即可:
pip install openai gradio
实验步骤
先要获取大模型api_key,大家可以趁着这次活动去注册得到免费的1000tokens,企业用户还能获取更多,步骤如下:
1.账号注册
访问 ai.nvidia.com ,点击 Try Now
在打开的的页面点击右上角的 Login
输入注册的邮箱
邮箱通过验证后,继续按照操作提示创建 NVIDIA 云账户
创建成功后,将会返回 NIM 平台的主页面,到这里您就用有了 NVIDIA云账户 。
再次点击右上角按钮,可以看到剩余免费额度,点击Request More
可以进行企业用户认证,获取更多使用额度
2.获取NVIDIA API密钥
访问 https://build.nvidia.com/meta/llama-3_1-405b-instruct
点击Python标签下的Get API Key
,在弹出的框中点击 Generate Key
3.代码如下:
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="替换成自己的"
)
prompt=f"模仿中国古代诗人{poem}的风格写一首关于{theme}题材的古诗词,不要重复,要押韵,诗里不要出现诗人名字和已经存在的诗."
# 创建聊天完成请求
# 选择使用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()
在api_key后粘贴刚刚复制的key,即可点击运行
这里,我加入几个限制条件,例如“不要重复”,“要押韵”,“诗里不要出现诗人名字以及已经存在的诗句”,这几个提示词源自实验,因为大模型常常会将诗人名字嵌入到诗里,或者有重复的之类的小bug,不过在拥有足够多的提示词之后,大模型的能力还是不错的。
实验结果展示
这首诗词是我觉得生成的比较不错的一首,大家觉得呢?
还有很多奇怪的操作,比如用李白写爱情闺怨风格的诗,就会比较抽象了哈哈哈哈。
还有让李商隐写边塞征战诗,也是会比较奇怪的。剩下的大家可以自己去尝试
分析与总结
本次demo是想用大模型模仿诗人风格写诗,比较简单明了。用大模型生成与诗人风格相近的诗词会取得不错的效果,但是在生成与诗人风格迥异的时候,结果就差强人意了,也可能诗提示词不足,大家可以试试看多加点提示词,或者调整参数例如temperature、top_p,temperature控制随机性,top_p控制多样性,这两个参数对模型生成的结果影响还是蛮大的,可以尽可能的调低随机性,增大多样性,当然这需要做更多的实验来调整,就留给大家去实现吧!