【大模型学习】项目练习:套壳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.pswp.cn/diannao/88443.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记03:布线-过孔的调用与添加

布线-过孔的调用与添加 (1)在进行PCB设计时,都必须使用到过孔,对走线进行换层处理。在走线进行打过孔之前,必须先要添加过孔,这样在PCB布线时才可以使用过孔。 (2)需要使用pad des…

在vscode中,Python程序的内置对象、关键字、自定义函数名/类名、字符串进行着色,说明分别是什么颜色?

在 VS Code 中,Python 代码的着色完全取决于你当前使用的主题。不同主题(如 Dark, Monokai, Solarized Dark, Light, Quiet Light 等)对不同类型的代码元素会使用不同的颜色。 一、Default Dark(默认的深色主题) impo…

Visual Studio 中使用 AddressSanitizer 指南

Visual Studio 中使用 AddressSanitizer 指南 基于 Microsoft Visual Studio 2022,支持 MSVC 和 Clang 编译器链,本文详细说明如何在 VS 中配置和使用 AddressSanitizer,用于检测内存误用,如消息释放后访问、超界读写等类型错误。…

Flink Sink函数深度解析:从原理到实践的全流程探索

在Flink的数据流处理体系中,Sink函数作为数据处理的最终出口,肩负着将处理后的数据写入外部存储引擎的关键使命。它如同数据旅程的终点站,决定着数据的最终归宿与应用价值。深入理解Sink函数的工作原理、核心概念及实现方式,对构建…

Codex+ 自建中转 API 部署教程(Windows 版)

📌 一、前置环境准备 安装 Node.js 和 Codex CLI: npm install -g openai/codex准备 OpenAI API Key 确保你已有的中转接口兼容 OpenAI 格式, 📌 二、设置 PowerShell 环境变量 # 设置你的 API Key(使用哪家的看你的…

Centos 7离线部署Nginx 高效省时

给脚本执行权限:chmod x install_nginx.sh以root用户运行:sudo ./install_nginx.sh 脚本如下: #!/bin/bash # Nginx一键化部署脚本(修复版本开机自启) # 需要以root权限运行set -e # 任何命令失败时立即退出脚本# 定…

P7915 [CSP-S 2021] 回文

题目描述 给定正整数 n n n 和整数序列 a 1 , a 2 , … , a 2 n a_1, a_2, \ldots, a_{2 n} a1​,a2​,…,a2n​,在这 2 n 2 n 2n 个数中, 1 , 2 , … , n 1, 2, \ldots, n 1,2,…,n 分别各出现恰好 2 2 2 次。现在进行 2 n 2 n 2n 次操作&#xf…

小智AI -- ESP32-S3 DIY面包板WIFI-LCD彩屏

DIY 所需硬件 开发板:ESP32-S3-DevKitC-1(选择 WROOM N16R8 模组) Goouuu ESP32-S3-N16R8开发板数字麦克风:INMP441 INMP441全向麦克风模块功放:MAX98357A MAX98357 I2S 音频放大器模块腔体喇叭:8Ω 2~3W 或…

家用网络进行DNS优选

家用网络进行DNS优选的好处主要体现在以下几个方面: 提升网络访问速度: DNS优选通过选择响应时间更快的DNS服务器,减少域名解析的延迟,从而加快网页加载和应用访问速度。尤其在访问国内外网站时,选择合适的DNS服务器可…

刷题 | 牛客 - js中等题-下 (更ing)45/54知识点解答

JS45 数组去重 描述 为 Array 对象添加一个去除重复项的方法 示例1 输入: [false, true, undefined, null, NaN, 0, 1, {}, {}, a, a, NaN] 复制输出: [false, true, undefined, null, NaN, 0, 1, {}, {}, a] Array.prototype.uniq function () …

vue3使用krpano1.22

官方文档链接 https://krpano.com/docu/js/#top 例子 https://krpano.com/releases/1.22/viewer/examples/javascript-interface/js-api-examples.html https://krpano.com/viewsource.html?releases/1.22/viewer/examples/javascript-interface/js-api-examples.html 注…

2025年AI面试推荐榜单,数字化招聘转型优选

一、AI面试为何成为2025招聘标配? 2025年企业对AI面试的需求从“效率工具”升级为“战略级招聘伙伴”。数据显示,超7成企业计划年内全面引入AI面试,其中技术岗、全球化招聘及蓝领用工场景需求增速显著。以下以综合技术实力、行业口碑及落地能…

人机协作新篇章:艾利特按摩机器人如何重塑健康生活

引言:按摩机器人的需求爆发 在快节奏的现代生活中,亚健康人群比例持续攀升。据《全球健康产业白皮书》显示: 85%的都市人群存在肌肉劳损问题专业理疗师供需缺口达1:3200精准按摩服务成本年均增长18% 这一背景下,按摩…

从代码学习深度学习 - 情感分析:使用循环神经网络 PyTorch版

文章目录 前言1. 加载与预处理数据集数据读取与词元化构建词汇表截断、填充与数据迭代器2. 构建循环神经网络模型双向RNN模型(BiRNN)详解权重初始化3. 加载预训练词向量构建词向量加载器将预训练向量注入模型4. 训练与评估模型定义训练函数可视化训练过程5. 模型预测编写预测…

化于无形的 lambda 语法

针对数据集合的每个成员进行计算是很常见的任务,用循环语句当然能实现,但比较麻烦,算个简单的求和都要写很多句代码。 编程语言经常把这些运算封装成函数,比如 Python 的 sum 函数,求订单价格总和是这样写的&#xff…

day42

1. 回调函数:把一个函数当成“任务清单”交给另一个函数,等后者干完活,就按清单执行这个函数。比如点外卖后留电话,骑手送到了就打电话(执行回调)通知你。 2. lambda函数:临时写的超短函数&…

百度日志中台前端重构实践

日志中台是百度内部针对打点数据的全生命周期管理平台,作为公司日志数据的唯一入口,承担以下核心职能:1.功能覆盖:提供从数据采集、传输、存储到查询分析的一站式服务,支持产品运营分析、研发性能监控、运维管理等多元…

資訊安全 (Information Security)3大 “CIA“要素

資訊安全之3大要素,業界慣用"CIA"稱之,包括機密性 (Confidentiality)、完整性(Integrity)與可用性(Availability);更應增加諸如鑑別性、可歸責性、不可否認性與可靠性。 1.機密性 (Confidentiality) 機密性是指採用適當的安全機制…

php后台增加权限控制

背景 最近在对接某大厂,部署差不多了,但是在漏洞扫描环节有问题,前端是用vue代码写的。后端是php。发现前端路由可以拦截未登录的url。但是后端php接口不用登录就能访问,很危险 解决方法 一、创建 Auth 中间件 首先创建一个专门…

跨平台后端编程ASP.NET CORE Razor新一代Web开发框架C#

asp.net core Razor动态语言编程代替asp.net .aspx更高级吗? https://blog.csdn.net/xiaoyao961/article/details/148846065 C#Blazor应用-跨平台WEB开发VB.NET-CSDN博客 https://blog.csdn.net/xiaoyao961/article/details/148846437 Products.razor文件,Blazor和…