- 博客(3436)
- 收藏
- 关注
原创 华为开发者空间 x DeepSeek,一文教你拥有自己的DeepSeek大模型,搭建Open WebUI
本文介绍了利用华为云开发者空间免费资源搭建大模型应用的全过程。华为开发者空间提供2核CPU/4GB内存的云主机和180小时/年的免费额度,预置多种开发工具。作者详细演示了通过Ollama平台部署DeepSeek-R1(1.5B)语言模型的步骤,包括下载安装、服务配置和模型加载。此外,还介绍了使用Docker部署Open WebUI实现可视化交互界面的方法,最终在58分钟内完成从云主机申请到模型交互的全流程。该方案为开发者提供了零成本体验大模型技术的实践路径,适用于企业研发、教学实验和个人学习等多种场景。
2025-07-26 22:49:48
761
原创 华为云云主机+DeepSeek|如何一键式华为云云主机单机部署基于华为云的Dify-LLM AI应用方案,打造属于自己的古诗词语音漫画AI智能体
华为开发者空间为开发者提供免费的云主机及开发工具,支持昇腾、鸿蒙等华为根技术。本文详细介绍了基于华为云主机部署DeepSeek大模型与Dify平台搭建"古诗词语音漫画AI智能体"的全流程。通过条件分支节点实现智能判断,当用户输入历史人物时调用LLM模型查询诗词,上传文件时则通过语音转文本解析内容。该方案充分利用华为云生态的技术优势,显著降低开发门槛,助力开发者快速构建AI应用。
2025-07-25 19:53:42
919
原创 华为云云主机+DeepSeek|如何基于华为云云主机的Dify-LLM AI应用实现智能语音读取方案
华为云开发者空间为全球开发者提供免费云主机及开发工具资源,支持昇腾、鸿蒙等核心技术生态。用户可快速部署AI应用,如Dify平台结合TTS技术实现古诗词语音化,通过华为云主机高效运行大语言模型,构建自动化工作流完成文本生成、语音转换及多平台推送功能。开发者空间提供从开发到部署的全流程支持,助力技术创新。
2025-07-25 19:42:23
612
原创 华为云主机+DeepSeek实践|基于华为云主机快速部署DeepSeek大模型并构建Dify平台AI工作流Agent应用LLM模型集成
在人工智能AI技术不断发展的今天,基于大语言模型(LLM)的AI智能体Agent开放式应用正在迅速服务于各行各业。现在很多网站都有AI机器人聊天窗口,能随时解答我们的问题和诉求。但是如果自己搭建一个智能客服系统,听起来是不是有点难?别担心,今天就来分享如何华为云一键私有化部署 Dify,轻松搞定 AI 智能机器人!华为云Dify平台作为一款开源的大模型应用开发平台,与“华为云主机平台上部署的DeepSeekR1大模型商用级推理服务”深度集成,为开发者提供了构建、部署和运营AI应用的一站式解决方案。
2025-07-24 20:55:43
989
原创 华为云主机+DeepSeek|基于华为云主机快速构建DeepSeek,结合Dify平台AI智能旅游规划工作流Agent应用天气功能实践
摘要: 华为云开发者空间提供4核8G Ubuntu云主机,支持快速部署Dify-LLM应用开发平台。通过Ollama工具部署deepseek-r1模型,并集成天气API实现数据爬取与结构化处理。利用Dify的代码执行节点完成JSON解析、字典操作及迭代处理,将天气数据转换为适合AI分析的格式,最终实现温度预测等场景应用,展现华为云在AI开发中的高效性能与便捷性。
2025-07-24 11:23:36
942
原创 【华为开发者空间 x DeepSeek】2小时基于华为开发者空间和DeepSeek应用助力电商企业AI “数据飞轮”分析方案最佳实践落地
华为开发者空间为开发者提供云主机及开发工具,支持AI数据分析平台搭建。针对某宠物饲料公司的BI系统痛点(数据质量差、IT与业务脱节),提出基于DeepSeek大模型实现AI数据飞轮方案。通过自然语言转SQL查询,将电商订单数据可视化分析,降低技术门槛。方案在华为云主机部署Python环境,集成数据分析工具链,实现业务驱动的智能决策。该方案有效激活沉睡数据,提升企业数据价值转化效率。
2025-07-06 11:41:49
3214
15
原创 Python 高手编程系列三千三百六十四:抽象语法树
Python 语法首先被转换成抽象语法树(Abstract Syntax Tree,AST),然后才被编译成字节码。这是对源代码抽象语法结构的一种树状表示。利用内置的 ast 模块,可以得到对Python 语法的处理过程。利用带有 ast.PyCF_ONLY_AST 标记的 compile()函数或者利用 ast.parse()帮助函数,可以创建 Python 代码的原始 AST。逆向直接转换却没有那么简单,没有用于完成这项功能的内置函数。不过有些项目(例如 PyPy)可以完成这项任务。
2025-07-06 11:41:08
723
原创 Python 高手编程系列三千三百六十三:一些关于代码生成的提示
虽然类的调用签名相当严格,但 Python 并不强制要求返回参数的类型。and eval in Python(参见 http://lucumr.pocoo.org/2011/2/1/exec-in-python/)。”换句话说,即使你有一丝的怀疑,也不应该使用它们,而应该尝试寻找其他解决方法。• exec(object, globals, locals):这一函数允许你动态执行 Python 代码。对于元编程而言,最有用的显然是 exec(),因为它可以执行任意 Python 语句的序列。
2025-07-06 11:39:43
365
原创 Python 高手编程系列三千三百六十:使用 C 或者 C++编写扩展
幸运的是,distutils 和 setuptools提供了辅助程序将编译好的扩展定义为模块,因此编译和分发可以使用 setup.py 脚本处。Debian/Ubuntu 中的 python-dev),但是在 Windows 下,它是默认分发的,可以在 Python 的。不幸的是,在 C 和 C++中,直接使用 Python/C API 编写自己的扩展是相当苛刻的。理,就像它们是普通的 Python 包。Pyrex 这样的工具,它们仅仅出于扩展的目的而提供了 Python 语言的超集,实际上它们只。
2025-07-06 11:39:01
262
原创 Python 高手编程系列三千三百五十九:基本的低级日志实践
格式的支持,例如 Apache/Nginx 的访问日志。Logstash 进程无法处理原始日志文件被移动或删除的情况,因此,Supervisor 和 Circus 都能够处理被管理进程的日志转储和保留,但是你应该考虑这是。是你唯一想要处理和归档的日志。流行的 Linux 发行版,那么很可能每个服务自己的日志文件都被一个叫作 logrotate 的。Fluentd 的最佳事件格式是 JSON,因为它增加的开销最小。将现有服务与 Logstash 集成非常简单,因为它可以监听现有日志文件对新事件的更改,
2025-07-06 11:38:23
290
原创 Python 高手编程系列三千三百五十八:监控系统与应用指标
python 是用 Python 编写的(https://github.com/agroszer/munin-node-python)。munin-node-c 是用 C 编写的(https://github.com/munin-monitoring/munin-c),munin- node-有一个 munin-python 包(http://python-munin.readthedocs.org/en/latest/),可以帮助你用。
2025-07-06 11:36:43
253
原创 Python 高手编程系列三千三百五十七:代码检测与监控
另一个值得注意的集成是能够跟踪通过 Python 内置 logging 模块记录的消息。启用这种支持只需要添加几行代码,如下所示:捕获 logging 消息可能会有一些不太明显的警告,因此如果你对这一功能感兴趣,请务必阅读有关这一主题的官方文档。这应该可以让你避免不愉快的意外。最后还有一点,就是运行你自己的 Sentry 可以省钱。“天下没有免费的午餐”,你最终将支付额外的基础设施费用,而 Sentry 只是另一项需要维护的服务。维护=额外工作=成本!
2025-07-06 11:35:03
684
原创 Python 高手编程系列三千三百五十五:常见约定与实践
(Filesystem Hierarchy Standard,FHS),它定义了 Unix 和类似 Unix 的操作系统中的目录结构和。在 Python 社区中,管理应用进程的两个常用工具是 Supervisor(http://supervisord.org)upstart 和 runit)下运行 Circus,尤其是从系统包仓库中安装 Circus 的情况。不管怎样,Supervisor 无法在 Python 3 中运行,所以它不会得到我们的祝福。不幸的是,在大多数情况下,它们并不适合于运行用户级的。
2025-07-06 11:34:19
306
原创 Python 高手编程系列三千三百五十四:你自己的包索引或索引镜像
你可能会想要运行你自己的 Python 包索引,主要有以下 3 个原因。● 官方的 Python 包索引没有任何可用性保证。因此,它往往意味着网站可能会倒闭。你不希望由于 PyPI 的故障而中途停止部署或打包过程。● 即使是不会公开发布的闭源代码,将 Python 编写的可复用组件正确打包也很有用。它简化了代码库,因为公司内用于不同项目的包不需要供应(vendored)。你可以从仓库直接安装这些包。
2025-07-06 11:33:28
715
原创 Python 高手编程系列三千三百五十三:十二要素应用
无痛部署的主要要求是确保构建应用的过程尽可能简单和流畅。这主要是清除障碍并鼓励成熟的做法。在有些组织中,只有特定的人负责开发(开发团队,Dev),而不同的人负责部署和维护执行环境(运营团队,Ops),那么遵守这些常见做法就特别重要。与服务器维护、监控、部署、配置等相关的所有任务都统称为运营(operations)。即使在某些组织中没有单独的运营团队,通常也只有一部分开发人员被授权执行部署任务并维护远程服务器。这一职位的通用名称是 DevOps。此外,开发团队的每名成员都负责运营。
2025-07-06 11:32:30
882
原创 Python 高手编程系列三千三百五十二:可执行包中 Python 代码的安全性
• 用复杂的方式修改 CPython 源代码版本,这样即使得到了应用的反编译源代码,没。• 运行时删除所有可用的代码元数据(文档字符串),从而稍微降低最终结果的可读性。最重要的是应用的构建方式,以及将其部署到目标环境中所使用的流程。行文件中反编译嵌入代码并不是一件容易的任务,但它的确是可行的。执行文件并不是一个可行的解决方案。一旦你的把戏被识破了,你所有额外的努力都将变成时间和资源的。适合你的打包需求,也知道你的项目需要哪种类型的发行版。的应用仅提供向用户销售的服务,那么你有责任在自己的基础设施上运行它。
2025-07-06 11:31:39
324
原创 Python 高手编程系列三千三百五十一:cx_Freeze
cx_Freeze(http://cx-freeze.sourceforge.net/)是另一种用于创建独立可执行文件的工具。它是一种比 PyInstaller 更加简单的解决方案,但也支持 3 个主要平台:• Windows;• Linux;• Mac OS X。与 PyInstaller 一样,它不允许我们执行跨平台构建,因此你需要在想要分发的同一个操作系统中创建可执行文件。cx_Freeze 的主要缺点是它不允许我们创建真正的单文件可执行文件。
2025-07-06 11:30:43
488
原创 Python 高手编程系列三千三百五十:独立可执行文件
在介绍 Python 代码打包的材料中,创建独立可执行文件是经常被忽略的一个主题。这主要是因为 Python 标准库中缺少合适的工具能够让程序员创建简单的可执行文件,用户不需要安装 Python 解释器就可以运行这些可执行文件。与 Python 相比,编译语言有一个很大的优点,就是它允许为给定的系统架构创建可执行的应用程序,用户不需要知道底层技术就可以运行。Python 代码作为一个包分发时,需要有 Python 解释器才能运行。这对于没有足够技术水平的用户来说造成了很大不便。
2025-07-06 11:29:45
654
原创 Python 高手编程系列三千三百四十九:源代码包与构建包
Linux 的系统或 Mac OS 中很常见,因为这些系统通常都会提供编译器,但这在 Windows。• build_ext:构建 C 扩展,并像 build_clib 一样将结果放在构建文件夹中。为了能够分发预构建的发行版,distutils 提供了 build 命令,可以通过 4 个步骤。sdist 发行版中,如果包里面包含 C 库或扩展,那么目标系统将负责编译它们。源代码发行版是最简单的,也是最不依赖于平台的。版本被用于标记存档名称,这个存档可以在任何拥有 Python 的系统上分发并安装。
2025-07-06 11:26:54
411
原创 Python 高手编程系列三千三百四十八:上传一个包
包与用户绑定,因此在默认情况下,只有注册了包名称的用户是它的管理员,并且可以上传新的发行版。任何人都可以免费上传新的包,唯一的要。你唯一需要的是一个包管理器,可以从 PyPI 下载新的发行版。对于 Python 包而言,如果没有有组织的保存、上传和下载方式,那么它是没有用的。使用 setup.py 进行上传时,你不能重复使用已经构建的发行版,每次上传时都必须。些打包用法的细节,以及关于如何创建你自己的包索引的说明。于大型项目来说,这可能是一个问题,因此有一个选项可以指定其他用户作为包的维护者,
2025-07-06 11:25:56
301
原创 Python 高手编程系列三千三百四十七:PEP 420 — 隐式命名空间包
不幸的是,在写作本书时,setuptools.find_packages()还不支持 PEP 420。在 3.3 版以前的 Python 版本中,无法使用 PEP 420 布局中的命名空间包。个包含 Python 包或模块(也包括命名空间包)的目录来说,如果它不包含__init__.py。念非常古老,也常用于像 Zope 这样的成熟项目,因此完全可以使用它,但是没有隐式定义。.py 文件中声明命名空间,并且未来可能会删除 setuptools 的这个隐式行为。最简单的方法不一定是最好的。
2025-07-04 13:13:58
217
原创 Python 高手编程系列三千三百四十六:setup.py develop 或 pip -e
构的 Acme 公司,共同的命名空间可以是 acme。与 SQL 相关的库,那么他可以创建一个在 acme 中注册自己的新的 acme.sql 包。如果你想添加一个新的子包 — 例如 templating,就会被迫将其包含在 acme 的源。可以编辑包的源代码而无需重新安装,并且它在 sys.path 中可用,就像正常安装一样。可以将命名空间包理解成在高于元包(meta-package)的层面对相关的包或模块进行分。常是一个被忽略的功能,在你的组织中或者非常大的项目中对于构建打包生态系统非常有用。
2025-07-04 13:13:27
376
原创 Python 高手编程系列三千三百四十五:管理依赖
许多项目需要安装和/或使用一些外部包。如果依赖列表很长的话,就会出现一个问题:如何管理依赖?在大多数情况下答案很简单。不要过度设计(over-engineer)问题。保持简单,并在 setup.py 脚本中明确提供依赖列表,代码如下:setup(
2025-07-04 13:12:52
466
原创 Python 高手编程系列三千三百四十四:常见模式
对于没有经验的开发者来说,创建一个用于分发的包可能是一项乏味的任务。如果不考虑元数据可能在项目其他部分找到的事实,setuptools 或 distuitls 在 setup()函数调用中接受的大多数元数据都可以手动输入,代码如下:setup(“”",‘etc’,这么做当然可行,但从长远来看很难维护,并且未来可能会出现错误和不一致。setuptools 和 distuitls 都不能从项目源代码中自动提取各种元数据信息,因此你需要自己提供这些信息。
2025-07-04 13:11:58
589
原创 Python 高手编程系列三千三百四十三:setup.cfg
setup.cfg 文件包含 setup.py 脚本命令的默认选项。如果构建和分发包的过程更加复杂,并且需要向 setup.py 命令中传入许多可选参数,那么这个文件非常有用。你可以按项目将这些默认参数保存在代码中。这将使你的分发流程独立于项目之外,也能够让包的构建方式与向用户和其他团队成员的分发方式变得透明。setup.cfg 文件的语法与内置 configparser 模块提供的语法相同,因此它类似于常见的 Microsoft Windows INI 文件。
2025-07-04 13:11:15
885
原创 Python 高手编程系列三千三百四十二:创建一个包
都是最重要的而且和本章相关的。的内置命令,而 Extra commands(额外命令)则是由诸如 setuptools 这样的第三方包。虽然 distutils 是一个标准库模块,但建议你使用 setuptools 包来代替,它对标准的。(fork)、替代项目与完全重新编写,都想要彻底修复 Python 的打包生态系统。setuptools 派生的 distribute),但有些则被弃用(distutils2)。distutils 模块中描述的所有元数据,并将其合并为标准的 setup()函数调用的参数。
2025-07-04 13:10:26
359
原创 Python 高手编程系列三千三百四十一:有用的工具
要想对 Pylint 进行微调,第一件要做的事就是,使用-generate-rcfile 选项在项。pep8的输出比PyLint更简单,也更容易解析,所以如果你想要与一些连续集成解决方案(例。感兴趣的程序员来说,这是最佳选择,不需要任何额外的工具配置(像 Pylint 那样)。除了检查是否遵守某种任意的编码标准,Pylint 还可以给出有关整体代码质量的额外。是可调节的,所以如果你的团队使用一些与默认不同的命名和编码约定,你可以轻松配置。风格指南,介绍了一些命名建议,可以让你以后的代码更加明确;
2025-07-04 13:09:52
257
原创 Python 高手编程系列三千三百四十 :小心使用*args 和**kwargs 魔法参数
args 或**kwargs 不同,因为它可以提供能够操作数值并且能够独立发展的内部。但要注意,这可能会增加循环依赖的可能性,并且在__init__模块中添加的代码将被。签名的函数的装饰器,它是不可或缺的。如果参数列表变得很长而且很复杂,那么添加魔法参数是很吸引人的。另一种有趣的方法是创建一个容器类,将多个相关参数分组以提供执行上下文。魔法参数有时是无法避免的,特别是在元编程中。类的名称必须简明、精确,并足以使人理解类的作用。如果一个模块开始变得复杂,并且包含许多类,那么好的做法是创建一个包并将模块。
2025-07-04 13:09:01
223
原创 Python 高手编程系列三千三百三十九 :避免现有名称
这种检查参数的方法是契约式设计(Design by Contract ,DbC,参见http://en.wikipedia.org/函数和方法的签名是代码完整性的保证,它们驱动函数和方法的使用并构建其 API。让我们来关注一个遵循 TDD 方法的代码库,它向正确的方向发展,每当出现新的缺陷。它们应该反映创建该元。尽量使用原创的名称,即使是上下文的局部名称。如果每个函数都有一个固定的、定义明确的参数列表,那么代码的鲁棒性会更好。如果库中的代码被外部元素使用,那么进行断言可能是有用的,因为传入的数据可能。
2025-07-04 13:05:59
599
原创 Python 高手编程系列三千三百三十八 :property
trash(垃圾箱)或dumpster(垃圾桶),因为这正是他们的队友最终对这些模块的处理方式。堆不相关的、质量非常差的代码片段,其大小呈指数增长。如果一个元素保存的是布尔值,is 和 has 前缀提供一种自然的方式,使其在命名空。这样做的原因是它们的含义模糊、模棱两可,且没有向实际名称中添加任何信息。也在命名空间的构建中具有重要的作用,从而也影响代码可读性。如果你的代码不是在构建一种新的抽象数据类型,那么使用类似 list、dict、但现实表明,在许多情况下,它们都会变为危险的结构反模式,并且迅速增长。
2025-07-04 13:04:34
216
原创 Python 高手编程系列三千三百三十七 :函数和方法
函数和方法的名称应该使用小写加下划线。但在旧的标准库模块中并不总是这样。Python 3 对标准库做了大量重组,所以大多数函数和方法都有一致的大小写。不过对于某些模块(例如 threading)而言,你可以访问使用混合大小写(mixedCase)的旧的函数名称(例如 currentThread)。留着它们是为了更容易向后兼容,但如果你不需要在旧版Python 中运行代码,那么应该避免使用这些旧的名称。
2025-07-04 13:03:44
684
原创 Python 高手编程系列三千三百三十六 :命名和使用
常量用来定义程序所依赖的一组值,例如默认配置文件名。好的做法是将所有常量集中放在包中的一个文件内。举个例子,Django 采用的就是这种方法。一个名为 settings.py 的模块提供所有常量,如下所示:SQL_USER = ‘tarek’SQL_PASSWORD = ‘secret’SQL_URI = ‘postgres://%s:%s@localhost/db’ % (SQL_USER, SQL_PASSWORD)MAX_THREADS = 4另一种方法是使用可以被 ConfigPar
2025-07-04 13:03:13
846
原创 Python 高手编程系列三千三百三十五 :Hy
如果你想接受来自其他程序员的任何协作,即使你对最佳代码风格指南有不同的看法,那么也应该坚持遵守 PEP 8。Hy(http://docs.hylang.org/)是完全用 Python 编写的 Lisp 方言。有.hy扩展名的模块都被看作Hy模块,都可以像普通Python模块那样导入。要记住,比遵守 PEP 8 更重要的是项目内的一致性。做的争吵,可能会变成一场永无止境并且永远没有赢家的口水战(flame war)。而且,如果整个项目的代码库处于成熟的开发状态,那么对其重新调整风格(restyling)
2025-07-04 13:02:26
316
原创 Python 高手编程系列三千三百三十四:抽象语法树
Python 语法首先被转换成抽象语法树(Abstract Syntax Tree,AST),然后才被编译成字节码。这是对源代码抽象语法结构的一种树状表示。利用内置的 ast 模块,可以得到对Python 语法的处理过程。利用带有 ast.PyCF_ONLY_AST 标记的 compile()函数或者利用 ast.parse()帮助函数,可以创建 Python 代码的原始 AST。逆向直接转换却没有那么简单,没有用于完成这项功能的内置函数。不过有些项目(例如 PyPy)可以完成这项任务。
2025-07-04 13:01:25
356
原创 Python 高手编程系列三千三百三十三:一些关于代码生成的提示
虽然类的调用签名相当严格,但 Python 并不强制要求返回参数的类型。and eval in Python(参见 http://lucumr.pocoo.org/2011/2/1/exec-in-python/)。”换句话说,即使你有一丝的怀疑,也不应该使用它们,而应该尝试寻找其他解决方法。• exec(object, globals, locals):这一函数允许你动态执行 Python 代码。对于元编程而言,最有用的显然是 exec(),因为它可以执行任意 Python 语句的序列。
2025-07-04 13:00:32
374
原创 Python 高手编程系列三千三百三十二:Python 3 中新的元类语法
元类并不是新的 Python 特性,从 Python 2.2 版开始就一直都有。不过它的语法发生了重大变化,这种变化既不向后兼容也不向前兼容。新的语法如下所示:pass在 Python 2 中,其写法必须是这样的:= typePython 2 的 class 语句不接受关键字参数,所以 Python 3 定义元类的语法会在导入时引发 SyntaxError 异常。仍然可以编写在两个 Python 版本中都能运行的元类代码,但需要做一些额外工作。
2025-07-01 09:42:37
591
原创 Python 高手编程系列三千三百三十一:元类
现在第一个位置参数的命名约定为 cls,说明它已经是一个创建好的类对象(元类的实例),而不是一个元类对象。name、bases 和 namespace 参数的含义与前面介绍的 type()调用中的参数相同,• bases:这是父类的列表,将成为__bases__属性,并用于构造新创建的类的 MRO。然是 type 类的子类(参见图 3-4),因为如果不是的话,这个类将在继承方面与其他的类。metaclass 参数的值通常是另一个类对象,但它可以是任意可调用对象,只要接受。定义了对象实例的类也是对象。
2025-07-01 09:41:54
779
原创 Python 高手编程系列三千三百二十九:槽
属性来为指定的类设置一个静态属性列表,并在类的每个实例中跳过__dict__字典的创建过程。不幸的是,这个问题不能用第 2 章“(4)保存内省的装饰器”一节介绍的方法(使用额外。Python 中的混入类是一种不应被初始化的类,而是用来向其他现有类提供某种可复用。虽然有这样的警告,但类装饰器仍然是对流行的混入(mixin)类模式的一种简单又轻。在类装饰器中这样使用闭包的主要缺点是,生成的对象不再是被装饰的类的实例,而是在。这种模式的框架之一。当然,上面的代码片段并不是很好的代码示例,因为其含义过于模糊。
2025-07-01 09:40:40
788
原创 Python 高手编程系列三千三百二十八:property
基于上述原因,创建 property 的最佳语法是使用 property 作为装饰器。如果需要修改property的工作方式,推荐在派生类中覆写所有的property。property 的 setter 行为的话,通常意味着也需要修改 getter 的行为。property 提供了一个内置的描述符类型,它知道如何将一个属性链接到一组方法上。不幸的是,上面的代码有一些可维护性的问题。在大多数情况下,这是唯一的选择,因为如果修改了。是利用当前类的方法实时创建,不会使用派生类中覆写的方法。
2025-07-01 09:38:48
701
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人