当前位置: 首页 > news >正文

【大模型学习】项目练习:套壳DeepSeek

这里是阿川的博客,祝您变得更强

✨ 个人主页:在线OJ的阿川
💖文章专栏:AI入门到进阶
🌏代码仓库:


写在开头

现在您看到的是我的结论或想法但在这背后凝结了大量的思考、经验和讨论


在这里插入图片描述

在这里插入图片描述

📚目录

  • 一、设计思路
  • 二、具体流程操作
  • 三、想说的话

🚀实现套壳DeepSeek

套壳DeepSeek

在这里插入图片描述

一、⛳设计思路

本套壳DeepSeek采用模块化设计,主要包含二大核心模块:

  1. 后端模块:调用LangChain中的DeepSeek R1 0528模型调用对话链获取其回答
  2. 前端模块:Streamlit前端及部署云和调用后端代码

说明:
本地编译器为Visual Studio codePython版本为3.12,安装库为:

altair==5.5.0
annotated-types==0.7.0
anyio==4.9.0
attrs==25.3.0
blinker==1.9.0
cachetools==6.1.0
certifi==2025.6.15
charset-normalizer==3.4.2
click==8.2.1
colorama==0.4.6
distro==1.9.0
gitdb==4.0.12
GitPython==3.1.44
greenlet==3.2.3
h11==0.16.0
httpcore==1.0.9
httpx==0.28.1
idna==3.10
Jinja2==3.1.6
jiter==0.10.0
jsonpatch==1.33
jsonpointer==3.0.0
jsonschema==4.24.0
jsonschema-specifications==2025.4.1
langchain==0.3.26
langchain-core==0.3.66
langchain-deepseek==0.1.3
langchain-openai==0.3.25
langchain-text-splitters==0.3.8
langsmith==0.4.1
MarkupSafe==3.0.2
narwhals==1.44.0
numpy==2.3.1
openai==1.91.0
orjson==3.10.18
packaging==24.2
pandas==2.3.0
pillow==11.2.1
protobuf==6.31.1
pyarrow==20.0.0
pydantic==2.11.7
pydantic_core==2.33.2
pydeck==0.9.1
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.2
referencing==0.36.2
regex==2024.11.6
requests==2.32.4
requests-toolbelt==1.0.0
rpds-py==0.25.1
six==1.17.0
smmap==5.0.2
sniffio==1.3.1
SQLAlchemy==2.0.41
streamlit==1.46.0
tenacity==9.1.2
tiktoken==0.9.0
toml==0.10.2
tornado==6.5.1
tqdm==4.67.1
typing-inspection==0.4.1
typing_extensions==4.14.0
tzdata==2025.2
urllib3==2.5.0
watchdog==6.0.0
zstandard==0.23.0

二、🎉具体流程操作

2.1 安装虚拟环境

方式一:使用anaconda安装
1.下载anaconda
2.打开
在这里插入图片描述
3.创建并进入虚拟环境
在这里插入图片描述
4.正常安装相应的库即可
在这里插入图片描述
5.删除虚拟环境(可选)
先退出当前虚拟环境,再删除虚拟环境
在这里插入图片描述

方式二:在Visual Studio code创建虚拟环境
1.根据图操作
在这里插入图片描述
2.找到Python安装环境配置即可


2.2 安装相应的库

1.打开终端
在这里插入图片描述
2.输入
在这里插入图片描述
requirements.txt自己把相应的库建出来txt文件
3.导入相应的库(可选)
打开终端,输入:
在这里插入图片描述


2.3 后端(backend.py)

主要实现功能:

1.内容获取:使用Langchain中的DeepSeek模型进行调用获取–Langchain文档

from langchain.chains import ConversationChain # 对话链,用于管理对话状态
from langchain_deepseek import ChatDeepSeek # DeepSeek的聊天模型def catch_response(prompt, memory, deepseek_api_key): # 获取聊天响应的函数model = ChatDeepSeek(model="deepseek-reasoner", api_key=deepseek_api_key) # 创建DeepSeek聊天模型实例,指定模型和API密钥chain = ConversationChain(llm=model, memory=memory) # 创建对话链,自动存储记忆和加载记忆response = chain.invoke({"input": prompt}) # 调用对话链获取响应return response["response"] # 可以获取提示词和记忆和响应内容,但这里只要返回内容。

2.4🚀前端(frontend.py)

主要实现功能:
1.前端页面:使用streamlit进行页面布置并调用后端

import streamlit as st # 前端库
from langchain.memory import ConversationBufferMemory # 对话记忆,用于存储对话历史
from backend import catch_response # 导入后端函数,用于获取聊天响应st.title("🤖 套壳DeepSeek AI")with st.sidebar: # 侧边栏,用于输入API密钥deepseek_api_key = st.text_input("请输入DeepSeek API Key:", type="password")st.markdown("[获取DeepSeek API key](https://platform.deepseek.com/api_keys)")if "memory" not in st.session_state: # 如果会话状态中没有记忆,则初始化st.session_state["memory"] = ConversationBufferMemory(return_messages=True) # 返回消息记忆列表st.session_state["messages"] = [{"role": "ai","content": "靓仔,我是喜羊羊,别看我是一只羊,其实我是一只羊,有什么可帮你的吗?"}] # 初始消息for message in st.session_state["messages"]: # 遍历会话状态中的消息st.chat_message(message["role"]).write(message["content"]) # chat_message用于显示不同角色的消息,这里是AI角色
prompt = st.chat_input() # 获取用户输入的提示词
if prompt: # 如果用户输入了提示词if not deepseek_api_key: # 如果没有输入API密钥st.info("请输入你的DeepSeek API Key")st.stop()st.session_state["messages"].append({"role": "human", "content": prompt})st.chat_message("human").write(prompt) # 这里是人类角色的消息with st.spinner("AI正在思考中,请稍等..."): # 显示加载动画response = catch_response(prompt, st.session_state["memory"],deepseek_api_key)msg = {"role": "ai", "content": response} # 保存AI角色的消息st.session_state["messages"].append(msg) # 将AI角色的消息添加到会话状态中st.chat_message("ai").write(response) # 显示AI角色的消息refresh_button = st.button("刷新对话") # 刷新按钮,用于清空会话状态
if refresh_button: # 如果点击了刷新按钮if not deepseek_api_key: # 如果没有输入API密钥st.info("请输入你的DeepSeek API Key")st.stop()st.session_state["messages"] = [{"role": "ai", "content": "靓仔,我是喜羊羊,别看我是一只羊,其实我是一只羊,有什么可帮你的吗?"}] # 重置消息列表st.session_state["memory"] = ConversationBufferMemory(return_messages=True) # 重置记忆st.rerun() # 重新运行应用程序,以清空界面和状态

2.5 本地运行

1.终端运行
在这里插入图片描述

2.第一次运行之后,会叫你输入邮箱,输入即可
3.运行成功
在这里插入图片描述


2.6 streamlit云部署 (可选)

1.注册并登入github网页
2.新建仓库
在这里插入图片描述
在这里插入图片描述

3.上传文件
在这里插入图片描述
4.提交文件
在这里插入图片描述
在这里插入图片描述

5.登入streamlit云
6.选择
在这里插入图片描述
7.然后选择
在这里插入图片描述

8.部署成功
套壳DeepSeek
在这里插入图片描述

9.若部署失败,需要删除失败的操作(可选)
在这里插入图片描述

三、😉想说的话

3.1 代码现状

个人感兴趣,玩一下,不足之处多多包涵。

主要问题有:
  1. 功能实现不够多 (可以套壳国外的一些AI,然后进行使用,封装的功能够多,可以进行盈利,自己包车队)
  2. 变量名起的不够精炼

3.2 改进方案

如何解决:

  1. 多学习,多练习,熟练度上去后,尝试表达想法。
  2. 勤注释,换位思考
  3. 多背单词

3.3 开发困难记录

练习过程中遇到的困难:

  1. 在实现刷新对话功能,发现需要点击两次才能将之前的消息删除。
  2. 在实现刷新对话功能时发现不需要输入秘钥,依旧可刷新。
  3. 在实现刷新功能时,没有欢迎用语了。

3.4 解决方案

如何解决的困难:

  1. 发现哪怕是重置了messages,但之前旧消息队列还在,应该要立即刷新,要st.rerun
  2. 增加判断语句
  3. 在实现刷新功能中加入messages欢迎用语。

3.5代码汇总

个人主页csdn资源


3.6 多说一句

若你能看到看到这篇文章且能看到这,则说明你我有缘留个关注吧,后面还会接着计算机408、底层原理、开源项目、以及数据、后端研发相关、实习、笔试/面试、秋招/春招、各种竞赛相关、简历相关、考研、学术相关……,祝你我变得更强

好的,到此为止啦,祝您变得更强

在这里插入图片描述

在这里插入图片描述

道阻且长 行则将至
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述
http://www.lqws.cn/news/502993.html

相关文章:

  • 阿里最新开源:Mnn3dAvatar 3D数字人框架, 无需联网,本地部署可离线运行,支持多模态实时交互
  • 索引优化SEO帮助你的网站内容更快被搜索引擎发现
  • Python的GUI库选择指南(深度拓展)
  • C++ —— STL容器 —— vector的模拟实现
  • 【Java开发日记】我们详细地讲解一下 Java 异常及要如何处理
  • 快速sincos算法,stm32测试
  • 如何轻松地将照片从 iPhone 传输到计算机
  • 【LLaMA-Factory 实战系列】三、命令行篇 - YAML 配置与高效微调 Qwen2.5-VL
  • iOS应用开发中的性能调试与数据分析:一套完整实战工具流程
  • 学习threejs,使用kokomi、gsap实现图片环效果
  • AI智能化高效办公:WPS AI全场景深度应用指南
  • pyqt setContentsMargins
  • 左神算法之数字字符串解码方案计数算法
  • Kafka 监控与调优实战指南(二)
  • Matplotlib vs Seaborn:选择与区别
  • 逆向入门(7)汇编篇-mul指令的学习
  • GitLab 备份恢复与配置迁移详尽教程(实战版)
  • 创客匠人拆解知识变现从 IP 到商业闭环的关键要素
  • 基于版本控制+WORM的OSS数据保护:防勒索攻击与法规遵从实践
  • OpenCV CUDA模块设备层-----检查 CUDA 错误并输出调试信息内联函数checkCudaError()
  • 【Linux网络编程】多路转接I/O(一)select,poll
  • HTML炫酷烟花
  • ✨从零搭建 Ubuntu22.04 + Python3.11 + PyTorch2.5.1 GPU Docker 镜像并上传 Docker Hub
  • Flask(二) 路由routes
  • 零知开源——STM32F4实现ILI9486显示屏UI界面系列教程(三):记事本功能实现
  • bmc TrueSight 监控mysql配置
  • prometheus+grafana+Linux监控
  • Linux 中的信号处理方式详解
  • 【机器学习深度学习】多层神经网络的构成
  • 在仓颉开发语言中使用数据库