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

【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南

前言

随着自然语言处理(NLP)技术的快速发展,越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型(LLM),以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架,支持多种先进的 LLM,并提供了易于使用的API接口。本文将详细介绍如何通过 Ollama 构建一个高效、安全的本地AI对话系统,包括Ollama的安装与配置、使用 Go 语言操作大模型以及与 LobeChat 的结合实现可视化管理。

 

一、Ollama 简介与优势

Ollama 是一款专注于本地部署的大型语言模型框架,旨在为用户提供一种无需依赖云端服务即可享受先进 AI 能力的方式。它具备以下特点:

  • 隐私保护:所有处理都在用户的本地设备上完成,确保敏感信息不离开用户环境。
  • 多模型支持:支持多个版本的 Llama 以及其他流行的 LLM,如 Phi 4, Gemma 2 等。
  • 易用性:提供简单直观的命令行工具和 RESTful API,方便开发者快速上手。
  • 性能优化:针对不同硬件配置进行了优化,能够充分利用现有资源提供最佳性能。
  • 社区支持:活跃的开源社区提供了丰富的文档和支持,帮助开发者解决问题并分享经验。

 

二、安装与配置 Ollama

1.环境准备

在开始安装之前,请确认您的开发环境满足以下要求:

  • 操作系统兼容性:支持的操作系统包括 Windows、macOS 和 Linux。请根据实际情况选择合适的安装方式。
  • 硬件资源要求:根据所选模型大小,建议至少具备 8GB RAM 用于7B模型,16GB RAM用于13B模型,32GB RAM 用于 33B 模型。对于 GPU 加速,推荐使用 NVIDIA CUDA 兼容的显卡。
  • 依赖库安装:确保已安装 Docker,以便能够轻松部署 LobeChat 服务。如果需要从源码编译 Ollama,则还需安装 GCC、CMake 等构建工具链。
  • 网络连接:初次安装时需保证有稳定的互联网连接,以便下载必要的依赖项和更新。

2.安装步骤

根据不同的操作系统,安装步骤有所不同:

  • macOS

        下载 Ollama for macOS 并解压、安装。

  • Windows

        下载 Ollama for Windows 并安装。

  • Linux

        可以通过官方脚本或手动安装:

 

curl -fsSL https://ollama.com/install.sh | sh

3.配置 Ollama 允许跨域访问

为了让其他服务正确连接到 Ollama,设置几个关键的环境变量:

  • macOS

        由于 Ollama 的默认参数配置,启动时设置了仅本地访问,所以跨域访问以及端口监听需要进行额外的环境变量设置 OLLAMA_ORIGINS。使用 launchctl 设置环境变量:

  1. launchctl setenv OLLAMA_ORIGINS "*"

        完成设置后,需要重启 Ollama 应用程序。

  • Windows

        由于 Ollama 的默认参数配置,启动时设置了仅本地访问,所以跨域访问以及端口监听需要进行额外的环境变量设置 OLLAMA_ORIGINS。

        在 Windows 上,Ollama 继承了您的用户和系统环境变量。

  1. 首先通过 Windows 任务栏点击 Ollama 退出程序。
  2. 从控制面板编辑系统环境变量。
  3. 为您的用户账户编辑或新建 Ollama 的环境变量 OLLAMA_ORIGINS,值设为 * 。
  4. 点击OK/应用保存后重启系统。
  5. 重新运行Ollama。
  • Linux

        由于 Ollama 的默认参数配置,启动时设置了仅本地访问,所以跨域访问以及端口监听需要进行额外的环境变量设置 OLLAMA_ORIGINS。如果 Ollama 作为 systemd 服务运行,应该使用systemctl设置环境变量:

  1. 通过调用sudo systemctl edit ollama.service编辑 systemd 服务。

    sudo systemctl edit ollama.service
  2. 对于每个环境变量,在 [Service] 部分下添加 Environment:

    [Service]
    Environment="OLLAMA_HOST=0.0.0.0"
    Environment="OLLAMA_ORIGINS=*"
  3. 保存并退出。

  4. 重载 systemd 并重启 Ollama:

    sudo systemctl daemon-reload
    sudo systemctl restart ollama

     

4. 模型选择与下载

根据具体的业务需求选择合适的预训练模型。Ollama 支持多个版本的 Llama 以及其他流行的 LLM,如下表所示:

模型名称参数量大小 (GB)下载命令
Llama 3.370B43GBollama run llama3.3
Llama 3.23B2.0GBollama run llama3.2
Llama 3.21B1.3GBollama run llama3.2:1b
Solar10.7B6.1GBollama run solar


选择好模型后,可以通过下命令下载并加载到本地环境中。请注意,较大的模型可能需要更多的时间和存储空间来完成下载及初始化过程。

5. Ollama 命令使用

提供了丰富的命令行工具,用于管理和操作模型。以下是常用的命令及其功能,以表格形式展示:

命令描述
ollama --help查看帮助信息
ollama list列出所有可用模型
ollama pull <model>下载或更新指定模型
ollama start启动Ollama服务
ollama stop停止Ollama服务
ollama restart重启Ollama服务
ollama status检查服务状态
ollama delete <model>删除不再使用的模型
ollama generate --model <model> --prompt "提示文本"生成文本,基于指定模型和提示文本

这些命令可以帮助您更高效地管理Ollama环境,确保模型的正确下载、加载和服务的稳定运行。

我们使用 llama3.2 作为后面示例的大模型语言,执行命令:"ollama pull llama3.2",下载该模型语言。

e467c7cacc2d4b68ae14c17df8166d69.png

 

三、使用 Go 语言操作大模型

1. Go 语言客户端示例

下面是一个简单的 Go 语言客户端示例,演示如何与 Ollama REST API 交互,发送文本请求并接收响应。请注意,某些API调用可能需要 API 密钥进行身份验证,具体取决于 Ollama 的服务配置。

package mainimport ("bufio""bytes""encoding/json""fmt""io""log""net/http""os""strings""time"
)// ChatRequest 是发送到 API 的请求体结构
type ChatRequest struct {Model    string        `json:"model"`    // 模型的名称或标识符Messages []ChatMessage `json:"messages"` // 消息内容,包含具体的文本信息Stream   bool          `json:"stream"`   // 是否以流的方式返回结果
}// ChatMessage 是请求和响应中消息的结构
type ChatMessage struct {Role    string `json:"role"`    // 角色,可以是"user"或"assistant"Content string `json:"content"` // 消息内容
}// ChatResponse 是从 API 接收到的响应体结构
type ChatResponse struct {Model              string      `json:"model"`                // 模型的名称或标识符CreatedAt          time.Time   `json:"created_at"`           // 响应创建的时间戳Message            ChatMessage `json:"message"`              // 生成的消息内容DoneReason         string      `json:"done_reason"`          // 完成生成的原因Done               bool        `json:"done"`                 // 表示生成是否完成TotalDuration      int64       `json:"total_duration"`       // 总生成持续时间(毫秒)LoadDuration       int         `json:"load_duration"`        // 模型加载持续时间(毫秒)PromptEvalCount    int         `json:"prompt_eval_count"`    // 提示评估的次数PromptEvalDuration int         `json:"prompt_eval_duration"` // 提示评估的持续时间(毫秒)EvalCount          int         `json:"eval_count"`           // 评估的总次数EvalDuration       int         `json:"eval_duration"`        // 评估的总持续时间(毫秒)
}func main() {// 读取器用于从标准输入读取用户输入reader := bufio.NewReader(os.Stdin)// 打印欢迎信息fmt.Println("欢迎使用AI!输入 'exit' 退出对话。")for {fmt.Print("我: ")userInput, err := reader.ReadString('\n')if err != nil {log.Fatalf("Error reading input: %v", err)}userInput = strings.TrimSpace(userInput)if userInput == "exit" {fmt.Println("Goodbye!")break}// 创建请求体requestBody := ChatRequest{Model: "llama3.2:latest",Messages: []ChatMessage{{Role:    "user",Content: userInput,},},Stream: false, // 根据需要设置为 true 或 false}// 将请求体序列化为JSONjsonData, err := json.Marshal(requestBody)if err != nil {log.Fatalf("Error marshaling request body: %v", err)}// 创建HTTP请求apiURL := "http://localhost:11434/api/chat"req, err := http.NewRequest("POST", apiURL, bytes.NewBuffer(jsonData))if err != nil {log.Fatalf("Error creating request: %v", err)}// 设置请求头,包括Content-Type和API密钥(如果API需要)apiKey := "your_api_key_here" // 替换为实际的API密钥req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))req.Header.Set("Content-Type", "application/json")// 发送HTTP请求并获取响应client := &http.Client{}resp, err := client.Do(req)if err != nil {log.Fatalf("Error making request: %v", err)}defer resp.Body.Close()// 读取响应体body, err := io.ReadAll(resp.Body)if err != nil {log.Fatalf("Error reading response body: %v", err)}// 解析响应体var response ChatResponseerr = json.Unmarshal(body, &response)if err != nil {log.Fatalf("Error unmarshaling response body: %v", err)}// 打印生成的文本,添加标记fmt.Printf("%s\n", response.Message.Content)}
}

这段代码展示了如何通过 HTTP POST 请求调用 Ollama 的服务端点 /api/chat,发送一段文本聊天内容,并接收由选定模型生成的回复。如果 Ollama 服务需要 API 密钥认证,确保在请求头中包含正确的 Authorization 字段。

3a68ba8f0422432ebf79e3b61492f33c.png

2.API 密钥认证

在使用 Go 语言或其他编程语言与 Ollama 服务进行交互时,务必确认是否需要 API 密钥进行认证。如果需要,应按照 Ollama 提供的指南设置正确的认证信息,以确保 API 调用的安全性和合法性。对于生产环境,强烈建议使用安全的方式管理和传输 API 密钥,以防止泄露和滥用。 

 

四、配置可视化 LobeChat

1. 安装 LobeChat

使用 Docker 容器化技术可以简化 LobeChat 的部署过程。通过添加环境变量 OLLAMA_PROXY_URL 来指定 Ollama 的服务地址,使得 LobeChat 可以通过这个代理与 Ollama 交互。完整的 Docker 命令如下所示:

docker run -d -p 3210:3210 -e OLLAMA_PROXY_URL=http://host.docker.internal:11434 lobehub/lobe-chat

这条命令会在本地机器的 3210 端口启动 LobeChat 服务,并将其与 Ollama 服务相连。

6442c2904579465f915d466b27d2568f.png

2.配置 LobeChat 模型

点击“会话设置”,选择“语言模型”,设置之前自己下载的语言模型;选择“默认助手”,模型选择“llama:3.2”。

19fa9edfb0ac4f3da502e1a872a49b4a.png

5d56f62b998c4dce8ffa3d98e5990223.png

3.测试与优化

完成上述步骤后,接下来就是对集成后的系统进行全面的功能测试。这包括但不限于单元测试、集成测试以及用户体验测试。根据测试结果进行必要的调整和优化,确保系统的稳定性和性能。特别是要注意以下几点:

  • 对话质量:检查对话是否流畅,回复是否准确。
  • 响应时间:测量从用户提问到机器人回应的时间间隔。
  • 资源使用情况:监控CPU、内存等资源消耗,确保不会因频繁调用导致系统负载过高。

f63cb309e0184e8fa67e76585026b987.png

4. 用户界面定制

LobeChat 提供了灵活的前端定制选项,可以根据实际需求修改用户界面的设计和功能。例如,可以添加自定义样式、图标和按钮,增强用户体验;也可以集成第三方插件和服务,扩展平台的功能范围。此外,还可以根据用户反馈不断迭代改进 UI/UX 设计,使产品更加符合目标受众的需求。

 

五、应用场景与案例研究

企业级客服机器人

借助 LobeChat 与 Ollama 的集成,企业可以构建一个高度智能化且安全可靠的客服平台。所有对话都发生在本地环境中,既保护了客户隐私,又提高了沟通效率。例如,一家银行可以利用这一平台为客户提供全天候的金融服务咨询,确保信息安全的同时提升服务质量。

教育辅助工具

对于在线教育平台而言,这种集成可以帮助创建更加个性化的学习体验。例如,根据学生的答题情况实时提供反馈和建议,促进知识的有效传递。此外,还可以开发针对特定学科的智能辅导系统,帮助学生更好地掌握知识点。

智能家居控制

通过语音助手等形式,用户可以用自然语言指令控制家中的智能设备,享受便捷舒适的家居生活。例如,说出“打开客厅灯”,系统就能立即执行相应操作,极大地方便了日常生活。

医疗健康助手

在医疗领域,集成后的系统可以作为医生的助手,帮助分析病历、提供诊断建议或解释复杂的医学术语。它还可以用于患者的日常健康管理,提醒用药时间和预约日期,提高医疗服务的质量和效率。

 

总结

本文详细介绍了如何通过 Ollama 构建一个高效、安全的本地 AI 对话系统,涵盖了从安装配置到使用 Go 语言操作大模型,再到配置可视化 LobeChat 的全过程。通过这种集成,不仅提升了对话的质量和效率,还为客户提供了前所未有的个性化体验。希望这篇文章能帮助你深入了解Ollama及其应用潜力,如果你有任何问题或想要了解更多相关信息,请随时留言交流!

 

参考资料

LobeChat Docs
Ollama GitHub Repository

 

相关文章:

【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南

前言 随着自然语言处理&#xff08;NLP&#xff09;技术的快速发展&#xff0c;越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型&#xff08;LLM&#xff09;&#xff0c;以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架&#xff0c;支持多种先…...

蓝桥杯训练—斐波那契数列

文章目录 一、题目二、解析三、代码 一、题目 求100以内的斐波那契数列 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列 &#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&…...

TensorFlow DAY3: 高阶 API(Keras,Estimator)(完)

TensorFlow 作为深度学习框架&#xff0c;当然是为了帮助我们更便捷地构建神经网络。所以&#xff0c;本次实验将会了解如何使用 TensorFlow 来构建神经网络&#xff0c;并学会 TensorFlow 构建神经网络的重要函数和方法。 知识点 Keras 顺序模型Keras 函数模型Keras 模型存储…...

复健第二天之[MoeCTF 2022]baby_file

打开题目在线环境可以看到&#xff1a; 感觉要用伪协议去求&#xff0c;但是我们并不知道flag的位置&#xff0c;这里我选择用dirsearch去扫一下&#xff1a; 最像的应该就是flag.php了 于是就构建payload&#xff1a; **?filephp://filter/convert.base64-encode/resource…...

【QT用户登录与界面跳转】

【QT用户登录与界面跳转】 1.前言2. 项目设置3.设计登录界面3.1 login.pro参数3.2 界面设置3.2.1 登录界面3.2.2 串口主界面 4. 实现登录逻辑5.串口界面6.测试功能7.总结 1.前言 在Qt应用程序开发中&#xff0c;实现用户登录及界面跳转功能是构建交互式应用的重要步骤之一。下…...

【docker踩坑记录】

docker踩坑记录 踩坑记录(持续更新中.......)docker images 权限问题 踩坑记录(持续更新中…) docker images 权限问题 permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head "http://%2Fvar%2Frun%2Fdocker.s…...

【Azure 架构师学习笔记】- Azure Function (2) --实操1

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Function 】系列。 接上文【Azure 架构师学习笔记】- Azure Function (1) --环境搭建和背景介绍 前言 上一文介绍了环境搭建&#xff0c;接下来就在本地环境下使用一下。 环境准备 这里我下载了最新的VS studio&…...

豆包MarsCode:构造特定数组的逆序拼接

问题描述 思路分析 1. 数组的组成&#xff1a; 我们要根据 i 的不同值拼接出不同长度的子数组。对于每个 i 从 1 到 n&#xff0c;我们要把数字从 n 逆序到 i 拼接成一个子数组。 例如&#xff0c;当 i 1 时&#xff0c;拼接 [n, n-1, ..., 1]。当 i 2 时&#xff0c;拼接 …...

14-美妆数据分析

前言 美妆数据分析可以帮助企业更好地理解市场趋势、客户偏好和产品表现 import pandas as pd import numpy as np 一、数据清洗 data pd.read_csv(rC:\Users\B\Desktop\美妆数据.csv,encodinggbk) data.head()data.info()data data.drop_duplicates(inplaceFalse) data.r…...

新阿里云买服务器配置需手动配置80端口

新买阿里云服务器需手动配置80&#xff0c;端口才可以访问nginx CentOS系统 安装nginx 1. 安装 Nginx yum install nginx 2. 启动 Nginx 服务 systemctl start nginx 3. 修改默认网页 cd /usr/share/nginx/ echo "666" >index.html cat index.html 访问ngin最后…...

Mysql--实战篇--连接泄漏问题(什么是连接泄漏,未关闭SqlSession,长事务处理,连接池管理等)

1、什么是连接泄漏&#xff08;Connection Leak&#xff09;&#xff1f; 连接泄漏是指应用程序未能正确关闭数据库连接&#xff0c;导致连接池中的可用连接逐渐减少&#xff0c;最终耗尽所有连接。连接泄漏可能会导致新的请求无法获得连接&#xff0c;进而引发服务中断。 连…...

【ESP32】ESP-IDF开发 | WiFi开发 | AP模式 + 基站连接例程

1. 简介 前面一篇讲了WiFi的基站模式&#xff0c;演示了怎么编程连接AP&#xff0c;所以这一篇讲一讲AP模式&#xff0c;ESP32作AP&#xff0c;让其他的设备连接自己。 1.1 DHCP 这里需要补充一个知识点——DHCP服务器。当基站连接一个AP时&#xff0c;会被分配一个IP&#xf…...

Ubuntu升级Linux内核教程

本文作者CVE-柠檬i: CVE-柠檬i-CSDN博客 本文使用的方法是dpkg安装&#xff0c;目前版本为5.4.0-204&#xff0c;要升级成5.8.5版本 下载 下载网站&#xff1a;https://kernel.ubuntu.com/mainline/ 在该网站下载deb包&#xff0c;选择自己想要升级的版本&#xff0c;这里是5…...

关于AWS网络架构的思考

目录&#xff1a; AWS概述 EMR Serverless AWS VPC及其网络 关于AWS网络架构的思考 在AWS K8S中部署的业务&#xff0c;有不同的流量路径。 流量进入 客户端请求 普通的客户端流量流向从前到后是: 客户端公司网关(endpoint)业务的Endpoint ServiceLoad Balancers(监听80和…...

Pandas库的常用内容归纳

Pandas 是一个强大的 Python 数据分析库&#xff0c;提供了大量用于数据处理和分析的功能。以下是一些 Pandas 库中常用的功能&#xff1a; 数据创建和操作 Series 和 DataFrame&#xff1a;创建一维的 Series 和二维的 DataFrame 对象。数据导入&#xff1a;从 CSV、Excel、…...

【错误解决方案记录】spine3.8.75导出的数据使用unity-spine3.8插件解析失败报错的解决方案

报错信息 Exception: Unsupported skeleton data, please export with a newer version of Spine. Spine.SkeletonBinary.ReadSkeletonData (System.IO.Stream file) (at Assets/Spine/Runtime/spine-csharp/SkeletonBinary.cs:132) Spine.Unity.Editor.AssetUtility.AddRequi…...

Python与PyTorch的浅拷贝与深拷贝

1.Python赋值操作的原理 在python中&#xff0c;x something&#xff0c; 这样的赋值操作&#xff0c;准确的理解是&#xff1a;给存储something建立一个索引x (即存储地址)&#xff0c; x通过访问something的存储内容&#xff0c;获得something的值。 在下面代码中&#xff…...

【unity进阶篇】弧度、角度和三角函数(Mathf),并实现类似蛇的运动

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…...

【分类】【损失函数】处理类别不平衡:CEFL 和 CEFL2 损失函数的实现与应用

引言 在深度学习中的分类问题中&#xff0c;类别不平衡问题是常见的挑战之一。尤其在面部表情分类任务中&#xff0c;不同表情类别的样本数量可能差异较大&#xff0c;比如“开心”表情的样本远远多于“生气”表情。面对这种情况&#xff0c;普通的交叉熵损失函数容易导致模型…...

支持selenium的chrome driver更新到132.0.6834.83

最近chrome释放新版本&#xff1a;132.0.6834.83 如果运行selenium自动化测试出现以下问题&#xff0c;是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only su…...

IO模型与NIO基础二

抽象基类之二 FilterInputStream FilterInputStream 的作用是用来“封装其它的输入流&#xff0c;并为它们提供额外的功能”。 它的常用的子类有BufferedInputStream和DataInputStream。 (1) BufferedInputStream的作用就是为“输入流提供缓冲功能&#xff0c;以及mark()和res…...

什么是FPGA开发?

FPGA&#xff08;Field-Programmable Gate Array&#xff09;&#xff0c;即现场可编程门阵列&#xff0c;是一种通过编程方式实现特定功能的集成电路。与传统的ASIC&#xff08;专用集成电路&#xff09;相比&#xff0c;FPGA具有灵活性高、开发周期短、成本相对较低等优势&am…...

寻找川味:成都九尺板鸭

寻找川味:成都九尺板鸭 在四川这片美食的天堂里,隐藏着无数令人垂涎的传统名吃。其中,成都九尺板鸭以其悠久的历史、独特的制作工艺和令人难以抗拒的美味,成为了许多食客心中不可错过的地道川味。 历史渊源 九尺板鸭,顾名思义,因主产于四川省成都市彭州市九尺镇而得名。早在5…...

Object常用的方法及开发中的使用场景

在前端开发中&#xff0c;Object 对象提供了许多常用的方法&#xff0c;这些方法帮助我们操作对象的属性和结构。以下是常用的 Object 方法及其功能简要说明&#xff1a; 对象常用的方法 1. 创建对象 Object.create(proto[, propertiesObject]) 创建一个具有指定原型对象和属性…...

ElasticSearch上

安装ElasticSearch Lucene&#xff1a;Java语言的搜索引擎类库&#xff0c;易扩展&#xff1b;高性能&#xff08;基于倒排索引&#xff09;Elasticsearch基于Lucene&#xff0c;支持分布式&#xff0c;可水平扩展&#xff1b;提供Restful接口&#xff0c;可被任何语言调用Ela…...

基于SpringCloud的广告系统设计与实现(二)

一、common公共模块 1.common的作用 通用的代码、配置不应该散落在各个业务模块中&#xff0c;不利于维护与更新 一个大的系统&#xff0c;响应对象需要统一外层格式 各种业务设计与实现&#xff0c;可能会抛出各种各样的异常&#xff0c;异常信息的收集也应该做到统一 2.统…...

2011年西部数学奥林匹克的几何题

2011G1 证明: 显然, O O O, I I I, F F F 共线, E I / / M O EI//MO EI//MO, △ E I F ∼ △ M O F \triangle EIF \sim \triangle MOF △EIF∼△MOF. 进而 E F / M F r 1 / r 2 EF/MFr_1/r_2 EF/MFr1​/r2​. ( r 1 (r_1 (r1​ 为圆 I I I 的半径, r 2 r_2 r2​ 为…...

(一)afsim第三方库编译

注意&#xff1a;防止奇怪的问题&#xff0c;源码编译的路径最好不要有中文&#xff0c;请先检查各文件夹名 AFSIM版本 Version&#xff1a; 2.9 Plugin API Version&#xff1a; 11 软件环境 操作系统&#xff1a; Kylin V10 SP1 项目构建工具: cmake-3.26.0-linux-aarch6…...

boss直聘 __zp_stoken__ 分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 py代码 import execjs imp…...

python matplotlib绘图,显示和保存没有标题栏和菜单栏的图像

目录 1. 使用plt.savefig保存无边框图形 2. 显示在屏幕上&#xff0c;并且去掉窗口的标题栏和工具栏 3. 通过配置 matplotlib 的 backend 和使用 Tkinter&#xff08;或其他图形库&#xff09; 方法 1&#xff1a;使用 TkAgg 后端&#xff0c;并禁用窗口的工具栏和标题栏 …...

AI-Talk开发板之替换唤醒词

一、说明 聆思提供的Demo唤醒词默认为"小美,小美"&#xff0c;V2.4及之后的SDK支持替换唤醒词&#xff0c;聆思提供了在线工具生成唤醒词固件。 工具&#xff1a;tool.listenai.com/audio-custom/products/ 官方博客教程&#xff1a;实操给桌面AI语音助理&#xff…...

C#实现字符串反转的4种方法

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... 1、string.Reverse 方法 string content "Hello World";string reverseStri…...

【MySQL索引:B+树与页的深度解析】

文章目录 MySQL索引&#xff1a;B树与页的深度解析1. 索引使用的数据结构——B树1.1 B树介绍1.2 B树的特点1.3 B树和B树的对比 2. MySQL中的页2.1 页的介绍2.2 页主体2.3 页目录2.4 B树在MySQL索引中的应用 MySQL索引&#xff1a;B树与页的深度解析 在MySQL数据库中&#xff0…...

在 macOS 上,用命令行连接 MySQL(/usr/local/mysql/bin/mysql -u root -p)

根据你提供的文件内容&#xff0c;MySQL 的安装路径是 /usr/local/mysql。要直接使用 mysql 命令&#xff0c;你需要找到 mysql 可执行文件的路径。 在 macOS 上&#xff0c;mysql 客户端通常位于 MySQL 安装目录的 bin 子目录中。因此&#xff0c;完整的路径应该是&#xff1…...

深入HDFS——数据上传源码

引入 就如RPC篇章里提到的观点一样&#xff0c;任何一种能广为传播的技术&#xff0c;都是通过抽象和封装的思想&#xff0c;屏蔽底层底层复杂实现&#xff0c;提供简单且强大的工具&#xff0c;来降低使用门槛的。 HDFS的风靡自然也是如此。 通过前面深入了NameNode和DataN…...

归并排序算法

归并排序 1算法介绍 和选择排序一样&#xff0c;归并排序的性能不受输入数据的影响&#xff0c;但表现比选择排序好的多&#xff0c;因为始终都是O(n log n&#xff09;的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用…...

优雅解决webview_flutter不支持安卓选择图片视频文件问题

这个问题&#xff0c;网上一搜索&#xff0c;就是要去修改别人写好的插件。 搞Flutter开发&#xff0c;尽量不要去修改别人的插件 &#xff0c;特别是像 webview_flutter 这种比较大的官方插件。 相信我&#xff0c;你拿捏不了它。 主要问题就是&#xff1a; webview_flutter…...

Linux UDP 编程详解

一、引言 在网络编程领域&#xff0c;UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;作为一种轻量级的传输层协议&#xff0c;具有独特的优势和适用场景。与 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff0…...

UllnnovationHub,一个开源的WPF控件库

目录 UllnnovationHub1.项目概述2.开发环境3.使用方法4.项目简介1.WPF原生控件1.Button2.GroupBox3.TabControl4.RadioButton5.SwitchButton6.TextBox7.PasswordBox8.CheckBox9.DateTimePicker10.Expander11.Card12.ListBox13.Treeview14.Combox15.Separator16.ListView17.Data…...

[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令

[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令 简介 项目分析 如何执行系统命令并拿到结果 代码实现 简介 在Python学习日记-77中我们介绍了 socket 基于 TCP 和基于 UDP 的套接字&#xff0c;还实现了服务器端和客户端的通信&#xff0c;本…...

css3过渡总结

一、过渡的定义与作用 CSS3 过渡&#xff08;Transitions&#xff09;允许 CSS 属性在一定的时间区间内平滑地过渡&#xff0c;从一个值转变为另一个值。它能够让网页元素的状态变化更加自然、流畅&#xff0c;给用户带来更好的视觉体验。例如&#xff0c;当一个元素从隐藏状态…...

生产环境中常用的设计模式

生产环境中常用的设计模式 设计模式目的使用场景示例单例模式保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点- 日志记录器- 配置管理器工厂方法模式定义一个创建对象的接口&#xff0c;让子类决定实例化哪个类- 各种工厂类&#xff08;如视频游戏工厂模式创…...

【STM32-学习笔记-4-】PWM、输入捕获(PWMI)

文章目录 1、PWMPWM配置 2、输入捕获配置3、编码器 1、PWM PWM配置 配置时基单元配置输出比较单元配置输出PWM波的端口 #include "stm32f10x.h" // Device headervoid PWM_Init(void) { //**配置输出PWM波的端口**********************************…...

游戏行业销售数据分析可视化

完整源码项目包获取→点击文章末尾名片&#xff01; &#x1f31f;分析&#xff1a; 可看出最近五年用户最喜爱的游戏类型依然还是Action-动作类&#xff08;当然市场发行的也很多&#xff09; Sports-运动类和Shooter-射击类顺序互换,但我估计现在大环境局势紧张可以会推动射击…...

微服务网关,如何选择?

什么是API网关 API网关&#xff08;API Gateway&#xff09;是微服务架构中的一个关键组件&#xff0c;它充当了客户端与后端服务之间的中间层。其主要功能包括请求路由、协议转换、负载均衡、安全认证、限流熔断等。通过API网关&#xff0c;客户端无需直接与多个微服务交互&a…...

Java开发提速秘籍:巧用Apache Commons Lang工具库

一、Java 开发效率之困 在当今数字化时代&#xff0c;Java 作为一门广泛应用的编程语言&#xff0c;在各类软件开发项目中占据着举足轻重的地位。无论是大型企业级应用、互联网平台&#xff0c;还是移动应用后端&#xff0c;都能看到 Java 的身影。然而&#xff0c;Java 开发者…...

多用户商城系统源码哪家好用?怎么选?

想拥有属于自己的多用户商城系统&#xff0c;但回头一看自己又是个技术小白&#xff0c;看着网上眼花缭乱的b2b2c商城系统&#xff0c;更是不知道如何选起&#xff1f;下面给大家分享一条较为成熟的选择思路&#xff0c;以作参考。 1、从需求上决定系统方向 企业在选型b2b2c商…...

聊聊如何实现Android 放大镜效果

一、前言 很久没有更新Android 原生技术内容了&#xff0c;前些年一直在做跨端方向开发&#xff0c;最近换工作用重新回到原生技术&#xff0c;又回到了熟悉但有些生疏的环境&#xff0c;真是感慨万分。 近期也是因为准备做地图交互相关的需求&#xff0c;功能非常复杂&#x…...

NVIDIA视频编解码

开源了两个项目&#xff1a;英伟达显卡视频编解码、jetson视频编解码。都是基于官方SDK进行的封装&#xff0c;由于官方自带的demo晦涩难懂并且每块都是独立的&#xff0c;我对SDK进行二次封装并形成了一套较为完整的视频编解码流程&#xff0c;调用简单&#xff0c;有完整的测…...

Mysql事务隔离级

什么是事务的隔离级别 数据库事务的隔离级别是指事务在并发执行时&#xff0c;如何控制事务之间相互影响的程度。它决定了多个事务并发执行时&#xff0c;事务中的操作对其他事务的可见性&#xff0c;进而影响数据的一致性和并发性。 为什么会有隔离级别的概念&#xff1f; …...