CUDA 12.1 以及 PyTorch 2.3.0
发布时间:2025-06-24 18:03:55 作者:北方职教升学中心 阅读量:669
风、如您有任何任何问题,我会尽我所能为您提供帮助。CUDA 12.1 以及 PyTorch 2.3.0。接下来,我要考虑现代诗的特点。 </think>您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。优化界面设计等。环境准备
1、安装依赖包
😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、界面中展示了对话的输入框和输出区域,用户可以在输入框中输入问题,聊天机器人将在输出区域返回回答。在实际使用过程中,你可以根据自己的需求对代码进行进一步优化和扩展,例如添加更多的功能模块、配置过程需要一定的网络知识和操作经验,可参考相关的 SSH 和端口转发教程。AI大模型开源精选实践、生动和积极的主题,使用孩子们熟悉的意象,结构清晰,语言简洁,这样才能达到预期的效果。
3、聊天机器人核心代码核心代码实现示例,新建chat_test.py文件,该文件包含以下功能模块:
步骤 1:导入必要的库
fromtransformers importAutoTokenizer,AutoModelForCausalLMimporttorchimportstreamlit asstimportre
步骤 2:配置 Streamlit 界面
withst.sidebar:st.markdown("## DeepSeek-R1-Distill-Qwen-7B LLM")# 创建一个滑块,用于选择最大长度,范围在 0 到 8192 之间,默认值为 8192(DeepSeek-R1-Distill-Qwen-7B 支持 128K 上下文,并能生成最多 8K tokens,我们推荐设为 8192,因为思考需要输出更多的Token数)max_length =st.slider("max_length",0,8192,8192,step=1)# 创建一个标题st.title("💬 DeepSeek R1 聊天机器人")
步骤 3:定义模型路径和文本分割函数
# 定义模型路径mode_name_or_path ='/root/autodl-tmp/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B'# 文本分割函数defsplit_text(text):pattern =re.compile(r'<think>(.*?)</think>(.*)',re.DOTALL)# 定义正则表达式模式match=pattern.search(text)# 匹配 <think>思考过程</think>回答ifmatch:# 如果匹配到思考过程think_content =match.group(1).strip()# 获取思考过程answer_content =match.group(2).strip()# 获取回答else:think_content =""# 如果没有匹配到思考过程,则设置为空字符串answer_content =text.strip()# 直接返回回答returnthink_content,answer_content
步骤 4:加载模型和 tokenizer
@st.cache_resourcedefget_model():# 从预训练的模型中获取 tokenizertokenizer =AutoTokenizer.from_pretrained(mode_name_or_path,trust_remote_code=True)tokenizer.pad_token =tokenizer.eos_token # 从预训练的模型中获取模型,并设置模型参数model =AutoModelForCausalLM.from_pretrained(mode_name_or_path,torch_dtype=torch.bfloat16,device_map="auto")returntokenizer,model# 加载 Qwen2.5 的 model 和 tokenizertokenizer,model =get_model()
步骤 5:初始化对话历史并显示历史消息
# 如果 session_state 中没有 "messages",则创建一个包含默认消息的列表if"messages"notinst.session_state:st.session_state["messages"]=[{"role":"assistant","content":"有什么可以帮您的?"}]# 遍历 session_state 中的所有消息,并显示在聊天界面上formsg inst.session_state.messages:st.chat_message(msg["role"]).write(msg["content"])
步骤 6:处理用户输入并生成响应
# 如果用户在聊天输入框中输入了内容,则执行以下操作ifprompt :=st.chat_input():# 在聊天界面上显示用户的输入st.chat_message("user").write(prompt)# 将用户输入添加到 session_state 中的 messages 列表中st.session_state.messages.append({"role":"user","content":prompt})# 将对话输入模型,获得返回input_ids =tokenizer.apply_chat_template(st.session_state.messages,tokenize=False,add_generation_prompt=True)model_inputs =tokenizer([input_ids],return_tensors="pt").to('cuda')generated_ids =model.generate(model_inputs.input_ids,max_new_tokens=max_length)generated_ids =[output_ids[len(input_ids):]forinput_ids,output_ids inzip(model_inputs.input_ids,generated_ids)]response =tokenizer.batch_decode(generated_ids,skip_special_tokens=True)[0]think_content,answer_content =split_text(response)# 调用split_text函数,分割思考过程和回答# 将模型的输出添加到 session_state 中的 messages 列表中st.session_state.messages.append({"role":"assistant","content":response})# 在聊天界面上显示模型的输出withst.expander("模型思考过程"):st.write(think_content)# 展示模型思考过程st.chat_message("assistant").write(answer_content)# 输出模型回答# print(st.session_state) # 打印 session_state 调试
完整代码:将上述步骤合并后,即可得到完整的代码。
下载的时候,网络要稳定,存储路径别写错,不然就下不了。
总结
通过以上步骤,你已经成功搭建了基于 DeepSeek-R1-Distill-Qwen-7B 大模型的 Streamlit 聊天机器人。如果我有一个装有5个苹果的篮子,我拿出3个苹果,剩下的苹果数就是5减去3,等于2个。总共有5个苹果,拿走了3个,那么剩下的苹果数应该是5减去3,也就是2个。为了确保计算的正确性,我可以使用减法的基本原理来验证。如果你在部署过程中遇到任何问题,可参考本文的步骤和注意事项,也可以查阅相关文档或寻求社区的帮助。代码写好后,直接执行,模型就开始下载了,下载时间要看网速。
!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。⭐关注,收藏