一、背景
最近偶然加入了NVIDIA NIM 黑客松训练营,训练营给大家提供了免费的NVIDIA NIM平台,可以选择其一来搭建自己的生成式AI应用。
我作为一个计算机小白,很感激能有这个机会,在过去几周中学到了很多新东西。当拿到这个demo任务时,我灵机一动想要让AI协助大家算命。
二、实验步骤
2.1 环境安装
pip install openai
pip install gradio == 3.50.0
2.2 项目代码
from openai import OpenAI
import gradio as gr
client = OpenAI(
base_url = "https://integrate.api.nvidia.com/v1",
api_key = "$API_KEY_REQUIRED_IF_EXECUTING_OUTSIDE_NGC"
)
选择了NIM 平台中的 phi-3 LLMs 模型
它是轻量级,具有强大的数学和逻辑推理能力的大语言模型
定义主函数 getFortune,它有两个主变量birth_date 和 fortune_type
birth_date 为用户输入的自己的出生日期;fortune_type 为算命方式,包括中国的八字和外国的星盘两种,用户可以选择其中一种
def getFortune(birth_date, fortune_type):
question = f"Analyze the {fortune_type} of a person born on {birth_date}"
# 设置生成参数:temperature控制随机性,top_p控制多样性,max_tokens限制最大生成长度,stream设置为True以流式接收结果
completion = client.chat.completions.create(
model="microsoft/phi-3-mini-4k-instruct",
messages=[{"role": "user", "content": question}],
temperature=0.1,
top_p=0.2,
max_tokens=2048,
stream=True
)
# 流式处理生成的结果
# 遍历每个返回的块
response_text = ""
for chunk in completion:
if chunk.choices[0].delta.content is not None:
response_text += str(chunk.choices[0].delta.content)
print(response_text)
return response_text
网站可视化部分
types = ["Bazi","natal chart"]
# 启动Gradio应用
iface = gr.Interface(
fn=getFortune,
inputs=[
gr.Textbox(label="输入出生日期 (格式:YYYY-MM-DD)"),
gr.Dropdown(types, label="选择类型"),
],
outputs="text",
title="赛博算命",
description="输入您的出生日期,并选择算命类型(八字-Bazi或星盘-natal chart)来获取预测。"
)
# 启动Gradio界面
iface.launch()
三、结果展示
星盘运行结果
八字运行结果
从结果上分析如果选择“八字——Bazi”,它的运算结果不太准,属相总是不正确(可能英文训练数据中,与八字相关内容较少);但如果选择“星盘——natal chart”,运算结果比较准确。