当前位置: 首页 > 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的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

相关文章:

  • wordpress建不了网站正规网站建设公司
  • 做首饰网站网上电商平台开发
  • 品牌设计有限公司seo综合查询是什么意思
  • 做网站注册哪类商标seo在线培训机构排名
  • 河南网站优化要多少钱网站开发用什么软件
  • 做的网站用户密码在哪里找模板网站建站公司
  • 火山 RTC 引擎14 设置CB
  • (LeetCode 面试经典 150 题 )121. 买卖股票的最佳时机 (遍历)
  • 自然语言处理入门
  • 【开源项目】比 PyInstaller 更方便:图形界面打包 Python 脚本的体验
  • 工程优化——WebSocket、WSS(WebSocket Secure)和SSE(Server-Sent Events)通信对比
  • PyEcharts教程(009):PyEcharts绘制水球图
  • 常见网络知识,宽带、路由器
  • 【教学类-89-08】20250624新年篇05——元宵节灯笼2CM黏贴边(倒置和正立数字 )
  • 内存泄漏和内存溢出的区别
  • 五种 IO 模式的简单介绍 -- 阻塞 IO,非阻塞 IO,信号驱动 IO,IO 多路复用,异步 IO
  • 使用 PyFluent 自动化 CFD
  • FPGA基础 -- Verilog 验证平台之 **cocotb 验证 `阶乘计算模块(factorial)` 的例子**
  • CRMEB PHP多门店版v3.2.1系统全开源+Uniapp前端+搭建教程
  • 用vscode破解最新typora1.10.8
  • 前端vue2每三十秒被动接受后端服务器发送过来得数据
  • 服务器数据恢复——异常断电导致服务器故障的数据恢复案例
  • 编程语言的发展逻辑:从人类认知到人工智能协同
  • C预处理详解2
  • WHAT - React Native 的 Expo Router
  • Redis哈希表Rehash全解析:扩容缩容背后的渐进式智慧