Datawhale AI夏令营第四期魔搭 大模型应用开发 Task1案例:智能编程助手

Datawhale AI夏令营第四期魔搭 大模型应用开发 Task1案例:智能编程助手

Demo搭建并运行

绑定账号等步骤,非常简单一步一步来就行,省略…

下载文件,并且安装运行环境

git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/AICamp_yuan_baseline.git
pip install streamlit==1.24.0

运行

streamlit run AICamp_yuan_baseline/Task\ 1:零基础玩转源大模型/web_demo_2b.py --server.address 127.0.0.1 --server.port 6006

命令行的解释:

  • streamlit run: 这是Streamlit命令行工具,用于运行Streamlit应用程序。
  • AICamp_yuan_baseline/Task\ 1:零基础玩转源大模型/web_demo_2b.py python脚本所在的路径,名字内有空格需要加\
  • --server.address 127.0.0.1: 这指定了服务器监听的IP地址,127.0.0.1是本地回环地址,意味着服务器只接受来自本机的连接。
  • --server.port 6006: 这指定了服务器监听的端口号,6006是指定的端口。

点开http://127.0.0.1:6006 即可开始使用,端口可以自己指定,我改成7878,8888已被占用。运行后效果如图

请添加图片描述

核心源码

# 导入所需的库
from transformers import AutoTokenizer, AutoModelForCausalLM	# 加载预训练的语言模型和tokenizer
import torch	# torch用于深度学习模型的运算
import streamlit as st	# 使用st.title函数设置Web应用程序的标题

# 创建一个标题和一个副标题
st.title("💬 Yuan2.0 智能编程助手")

# 源大模型下载
from modelscope import snapshot_download
model_dir = snapshot_download('IEITYuan/Yuan2-2B-Mars-hf', cache_dir='./')
# model_dir = snapshot_download('IEITYuan/Yuan2-2B-July-hf', cache_dir='./')

# 定义模型路径
path = './IEITYuan/Yuan2-2B-Mars-hf'
# path = './IEITYuan/Yuan2-2B-July-hf'

# 定义模型数据类型
torch_dtype = torch.bfloat16 # A10
# torch_dtype = torch.float16 # P100

# 定义一个函数,用于获取模型和tokenizer
@st.cache_resource
def get_model():
    print("Creat tokenizer...")
    tokenizer = AutoTokenizer.from_pretrained(path, add_eos_token=False, add_bos_token=False, eos_token='<eod>')
    tokenizer.add_tokens(['<sep>', '<pad>', '<mask>', '<predict>', '<FIM_SUFFIX>', '<FIM_PREFIX>', '<FIM_MIDDLE>','<commit_before>','<commit_msg>','<commit_after>','<jupyter_start>','<jupyter_text>','<jupyter_code>','<jupyter_output>','<empty_output>'], special_tokens=True)

    print("Creat model...")
    model = AutoModelForCausalLM.from_pretrained(path, torch_dtype=torch_dtype, trust_remote_code=True).cuda()

    print("Done.")
    return tokenizer, model

# 加载model和tokenizer
tokenizer, model = get_model()

# 初次运行时,session_state中没有"messages",需要创建一个空列表
if "messages" not in st.session_state:
    st.session_state["messages"] = []

# 每次对话时,都需要遍历session_state中的所有消息,并显示在聊天界面上
# 检查st.session_state中是否存在messages列表,如果不存在则创建一个,用于存储对话历史
for msg in st.session_state.messages:
    st.chat_message(msg["role"]).write(msg["content"])

# 如果用户在聊天输入框中输入了内容,则执行以下操作
if prompt := st.chat_input():
    # 将用户的输入添加到session_state中的messages列表中
    st.session_state.messages.append({"role": "user", "content": prompt})

    # 在聊天界面上显示用户的输入
    st.chat_message("user").write(prompt)

    # 调用模型
    # 将用户的输入和历史消息拼接,然后使用tokenizer进行编码,通过模型生成响应
    prompt = "<n>".join(msg["content"] for msg in st.session_state.messages) + "<sep>" # 拼接对话历史
    inputs = tokenizer(prompt, return_tensors="pt")["input_ids"].cuda()
    outputs = model.generate(inputs, do_sample=False, max_length=1024) # 设置解码方式和最大生成长度
    output = tokenizer.decode(outputs[0])
    response = output.split("<sep>")[-1].replace("<eod>", '')

    # 将模型的输出添加到session_state中的messages列表中
    st.session_state.messages.append({"role": "assistant", "content": response})

    # 在聊天界面上显示模型的输出
    st.chat_message("assistant").write(response)

这段代码是一个使用Streamlit框架创建的Web应用程序,可以让用户与预训练的语言模型进行交互。用户输入的消息会被发送到模型,模型生成的响应会被显示在聊天界面上。通过st.cache_resource装饰器,模型和tokenizer的加载过程被缓存,以避免每次用户输入时都重新加载,从而提高应用程序的响应速度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值