【NVIDIA NIM 黑客松训练营】AI写古诗词

项目简介

NVIDIA联合CSDN推出了NVIDIA NIM黑客松训练营,笔者也是抱着试试看的心态加入其中,感受大模型的魅力。进入里后,有非常详细的入门操作手册以及各大模型介绍,模型包括以下:

大家可以参加试试,还蛮好玩的,活动链接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

 点击 Copy 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控制多样性,这两个参数对模型生成的结果影响还是蛮大的,可以尽可能的调低随机性,增大多样性,当然这需要做更多的实验来调整,就留给大家去实现吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值