人工智能和机器学习5 (复旦大学计算机科学与技术实践工作站)语言模型相关的技术和应用、通过OpenAI库,调用千问大模型,并进行反复询问等功能加强

前言

       在这个日新月异的AI时代,自然语言处理(NLP)技术正以前所未有的速度改变着我们的生活方式和工作模式。作为这一领域的佼佼者,OpenAI不仅以其强大的GPT系列模型引领风骚,还通过其开放的API接口,让全球开发者能够轻松接入并探索AI的无限可能。今天,我将带大家一起探索如何使用OpenAI库来调用“千问大模型”(这里假设的模型名,实际中可能是GPT-3、GPT-4或其他类似的高级语言模型),并通过一系列编程技巧实现反复询问、上下文记忆等功能加强,从而构建出更加智能、流畅的对话体验。

一、环境准备

       首先,确保你的开发环境已经安装了Python,并配置了必要的库。对于OpenAI的API调用,你需要安装openai库。可以通过pip命令轻松完成安装:

pip install openai

主要讲语言模型相关的技术和应用。
和之前的课不衔接,之前有地方还没理解的同学也可以直接听。大家有安装任意版本python环境即可,提前安装openai包,命令是 pip install openai
只用这一个包就可以了
另外大家注册下 通义千问:通义 (aliyun.com)icon-default.png?t=N7T8https://tongyi.aliyun.com/qianwen/ 和 阿里云 平台:阿里云-计算,为了无法计算的价值 (aliyun.com)icon-default.png?t=N7T8https://www.aliyun.com/并用成年人身份证实名认证阿里云平台。

接下来,你需要在OpenAI的官方网站注册账号,并获取你的API密钥(API Key)。这个密钥将用于你的Python脚本中,以便能够调用OpenAI的API。

不用代理,搜索“通义千问”:(点击如下图会打开通义千问官网,我们不用点击直接搜索)

找到通义千问|模型服务灵积如何定制通义千问模型_模型服务灵积(DashScope)-阿里云帮助中心 (aliyun.com)icon-default.png?t=N7T8https://help.aliyun.com/zh/dashscope/developer-reference/finetune-qwen?spm=5176.21213303.J_qCOwPWspKEuWcmp8qiZNQ.148.2fe62f3dvLEJJc&scm=20140722.S_help@@%E6%96%87%E6%A1%A3@@2399895._.ID_help@@%E6%96%87%E6%A1%A3@@2399895-RL_%E9%80%9A%E4%B9%89%E5%8D%83%E9%97%AE-LOC_llm-OR_ser-V_3-RE_new2@@cardNew-P0_13

点击开发参考,按照教程先去开通DashScope并创建获取API-KEY如何获取通义千问API的KEY_模型服务灵积(DashScope)-阿里云帮助中心 (aliyun.com)icon-default.png?t=N7T8https://help.aliyun.com/zh/dashscope/developer-reference/acquisition-and-configuration-of-api-key?spm=a2c4g.11186623.0.0.270c5796VLjNWG

开通DashScope

需要在开通DashScope后,才可以获得API-KEY,开通DashScope请参考以下步骤:

1、访问DashScope管理控制台:前往控制台。

2、点击“未开通”,在控制台“总览”页下,单击去开通

3、阅读服务协议,确认无误后单击立即开通

4、开通完成:

获取API-KEY

按照以下步骤获取DashScope的API-KEY。

安全提示:

  1. 访问DashScope管理控制台API-KEY管理页面:前往API-KEY管理,单击创建新的API-KEY

  2. 系统创建生成API-KEY,并在弹出的对话框中展示,您可以单击复制按钮将API-KEY的内容复制保存。(sk-xx5d4b8c7a9d42e6a31965f0632fxxxx)实在忘记了,就删了重新建一个吧~

  3. 新建一个tyqw.py文件:把自己的API-KEY输入进去,留着一会备用,(阿里云这个API-KEY既可以当作用户又可以当作密码用)

    api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxx'

  4. 复制并在安全的地方保存API-KEY后,单击我已保存,关闭。此次创建的API-KEY可立即用于调用DashScopeAPI,对API-KEY的后续操作均可在当前的API-KEY管理页面进行。 

二、基本调用示例

API platform | OpenAIicon-default.png?t=N7T8https://openai.com/api/在开始之前,让我们先通过一个简单的例子来展示如何使用OpenAI库发送请求到千问大模型:

import openai  # 设置你的API密钥  
openai.api_key = "YOUR_API_KEY_HERE"  # 发送请求到模型  
response = openai.Completion.create(  engine="text-davinci-003",  # 假设使用GPT-3的某个版本,实际应根据千问大模型的名称调整  prompt="请问今天天气如何?",  max_tokens=100,  temperature=0.5,  top_p=1.0,  frequency_penalty=0.0,  presence_penalty=0.0  
)  # 打印模型回复  
print(response['choices'][0]['text'])

如何定制通义千问模型_模型服务灵积(DashScope)-阿里云帮助中心 (aliyun.com)icon-default.png?t=N7T8https://help.aliyun.com/zh/dashscope/developer-reference/finetune-qwen?spm=a2c4g.11186623.0.0.75735796iyp8e6通义千问是阿里云自主研发的超大规模语言模型,具备多领域、多任务的自然语言处理能力。它能进行创作(如写故事、公文等)、编写代码、翻译多种语言、文本润色和摘要、角色扮演对话及制作图表等。该模型支持fine-tune,提供多种版本如qwen-turbo、qwen-7b-chat及qwen-72b-chat,以适应不同需求。

在定制模型时,需要准备JSON格式的训练数据,包括用户与助手的对话内容。数据准备支持messages、prompt-completion及human-assistant(已弃用)三种格式。模型训练可通过设置超参数如n_epochs、batch_size和learning_rate来优化。

使用通义千问模型进行定制时,有限制条件如同时只能运行一个定制任务,且最多可创建五个定制任务(不包括失败及取消的)。定制任务的状态包括准备中、运行中、成功、失败和取消。若任务失败,可通过错误码判断原因并寻求解决方案。

如果之前openai没有按转好的同学可以试着安装特定版本openai1.35.9及以上的版本,找到适合自己的版本安装好就好,

pip install openai==1.35.9

(万能解决办法)更换 PyPI 源
  • pip 默认使用 PyPI 的官方源,但你可以配置它使用其他镜像源,这些源可能位于更接近你的地理位置的服务器上,从而提供更好的连接速度。
  • 你可以使用国内的镜像源,如阿里云、清华大学、中国科技大学等提供的 PyPI 镜像。
  • 使用以下命令来配置 pip 使用特定的镜像源(以阿里云为例):
pip install -i https://mirrors.aliyun.com/pypi/simple/ openai

快速入门 | OpenAI 官方帮助文档中文版 (xiniushu.com)icon-default.png?t=N7T8https://openai.xiniushu.com/docs/quickstart介绍 - OpenAI(ChatGPT) (apifox.cn)icon-default.png?t=N7T8https://openai.apifox.cn/回到阿里云的"模型广场“(开源)———选择第一个<通义千问>点击进去就好了,

三、通义千问模型介绍

通义千问是由阿里云自主研发的大语言模型,用于理解和分析用户输入的自然语言,在不同领域和任务为用户提供服务和帮助。您可以通过提供尽可能清晰详细的指令,来获取符合您预期的结果。

模型体验

您可以在模型体验中心试用通义千问模型,具体操作,请参见模型体验中心。

应用场景

通义千问凭借其强大的语言处理能力,为用户带来高效、智能的语言服务体验,其能力包括但不限于文字创作、翻译服务和对话模拟等,具体应用场景如下:

  • 文字创作:撰写故事、公文、邮件、剧本和诗歌等。

  • 文本处理:润色文本和提取文本摘要等。

  • 编程辅助:编写和优化代码等。

  • 翻译服务:提供各类语言的翻译服务,如英语、日语、法语或西班牙语等。

  • 对话模拟:扮演不同角色进行交互式对话。

  • 数据可视化:图表制作和数据呈现等。通义千问模型是什么_模型服务灵积(DashScope)-阿里云帮助中心 (aliyun.com)icon-default.png?t=N7T8https://help.aliyun.com/zh/dashscope/developer-reference/model-introduction?spm=a2c4g.11186623.0.0.351246c1qCKhJB#BQnl3

四、模型概览

以下是通义千问模型的商业版。相较于开源版,商业版具有最新的能力和改进。

通义千问模型商业版概览

通义千问模型商业版提供了多个针对不同任务复杂度和性能需求的模型选项,包括通义千问-Max、通义千问-Plus和通义千问-Turbo,每个系列均持续优化并引入最新能力。

通义千问-Max

  • 定位:系列中效果最优的模型,专为处理复杂、多步骤的任务设计。
  • 版本与快照:提供最新版本及历史快照(如qwen-max-0428、qwen-max-0403等),确保用户可根据需求选择固定版本。
  • 性能参数:支持长上下文(如qwen-max-longcontext达30k),高输入输出限制(如最大输入6k,最大输出2k),适合深度交互场景。
  • 成本:输入成本为每千Token 0.04元,输出成本为每千Token 0.12元,提供100万Token免费额度(有效期视开通服务而定)。

通义千问-Plus

  • 定位:能力均衡,推理效果和速度介于Max与Turbo之间,适合中等复杂任务。
  • 更新亮点:如qwen-plus-0806版本,集中提升了语言一致性、修复了中英文混答问题、减少了回复重复,并显著增强了数学、阅读理解、表格理解和推理能力,同时提升了对系统指令的响应能力。
  • 性能参数:高上下文长度(如131072)和输入输出限制(如最大输入128k,最大输出8k),满足广泛需求。
  • 成本:输入成本为每千Token 0.004元,输出成本为每千Token 0.012元,同样提供100万Token免费额度。

通义千问-Turbo

  • 定位:系列中速度最快、成本最低的模型,适合处理简单任务。
  • 版本与快照:包括最新版本及历史快照(如qwen-turbo-0624),便于用户选择。
  • 性能参数:虽然上下文长度和输入输出限制相对较低(如最大输入6k,最大输出1.5k),但足以应对日常简单查询和交互。
  • 成本:输入成本为每千Token 0.002元,输出成本为每千Token 0.006元,同样享有100万Token免费额度。

总结:通义千问商业版模型系列覆盖了从简单到复杂的不同任务需求,通过持续的技术更新和性能优化,为用户提供高效、经济的自然语言处理解决方案。用户可根据具体应用场景和预算限制,灵活选择合适的模型版本。

小试牛刀1:
from openai import OpenAIbase_url = 'https://dashscope.aliyuncs.com/compatible-mode/v1'
api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxx'  # 填自己的API_KEY
client = OpenAI(base_url=base_url, api_key=api_key)
model = 'qwen-plus'messages = [{"role": "system", "content": '你是一个能力很强的AI'},{"role": "user", "content": '推荐几部电影'},
]stream = client.chat.completions.create(model=model,messages=messages,stream=True,
)result = ''
for chunk in stream:text = chunk.choices[0].delta.contentif text is not None:result += textprint(text, end='')
 

这段代码尝试通过模拟OpenAI的API客户端与一个自定义或第三方服务(通过https://dashscope.aliyuncs.com/compatible-mode/v1这个URL访问)进行交互,以执行聊天机器人风格的文本生成任务。尽管代码中使用了OpenAI这个类名,但很可能这并不是直接来自OpenAI官方库的类,而是为了适应特定服务而自定义或修改过的。

  1. 初始化客户端:代码通过传递一个基础URL和API密钥来创建一个OpenAI客户端实例。这个基础URL指向了阿里云的一个服务,可能是为了兼容或测试目的而设置的。

  2. 设置模型和消息:指定了要使用的模型(qwen-plus,这很可能是一个自定义或特定于服务的模型)和初始聊天消息(包括一个系统消息和一个用户消息,用户消息请求推荐电影)。

  3. 发起聊天请求:使用客户端的chat.completions.create方法(尽管这个方法路径在OpenAI官方库中可能不同)来发起聊天请求。通过设置stream=True,请求以流式方式接收响应,这允许在生成大量文本时逐步处理结果。

  4. 处理响应:代码遍历流式响应,并尝试从每个响应块(chunk)中提取生成的文本。然而,提取文本的路径(chunk.choices[0].delta.content)是特定于这个服务或API的,并不符合OpenAI官方API的响应格式。对于每个非空的文本块,它都被添加到结果字符串中并打印出来。

总结来说,这段代码是一个使用自定义或第三方服务进行聊天机器人文本生成的示例,尽管它使用了类似OpenAI API的术语和方法名,但实际上是针对特定服务进行适配的。

小试牛刀2:
from openai import OpenAIbase_url = 'https://dashscope.aliyuncs.com/compatible-mode/v1'
api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxx'  # 填自己的API_KEY
client = OpenAI(base_url=base_url, api_key=api_key)model = 'qwen-max'messages = [{"role": "system", "content": '你是一个能力很强的AI'},]while True:user_input = input('\n\nuser: \n')if user_input.strip().lower()== 'exit':breakmessages.append({'role': 'user','content': user_input})stream = client.chat.completions.create(model=model,messages=messages,stream=True,)print('\nAssistant:')result =''for chunk in stream:text = chunk.choices[0].delta.contentif text is not None:result += textprint(text, end='')messages.append({'role': 'assistant','content': result})

用Gradio写一个大模型对话的网页页面

这段代码试图使用类似OpenAI的API(但实际上通过自定义的base_urlapi_key连接到了一个非OpenAI的服务,这里看起来像是阿里云的一个兼容模式服务dashscope.aliyuncs.com),来创建一个简单的文本聊天机器人。不过,有几个关键点需要注意,因为代码中有一些假设和潜在的错误。

代码简述

  1. 导入和初始化
    • 从假定的openai库中导入OpenAI类(但通常OpenAI的库是openai,这里可能是自定义的或者是对实际库的误解)。
    • 设置自定义的base_urlapi_key来连接到非标准的API服务。
    • 创建一个OpenAI类的实例client,用于与API服务交互。
  2. 设置初始对话
    • 定义了一个model变量,这里假设为'qwen-max',这看起来像是自定义模型或服务的名称。
    • 初始化一个messages列表,包含一个系统消息,告诉AI它的角色和能力。
  3. 用户输入循环
    • 使用一个无限循环来不断获取用户输入。
    • 如果用户输入exit(不区分大小写),则退出循环。
    • 将用户的输入添加到messages列表中,标记为'user'角色。
  4. 与AI交互
    • 使用client.chat.completions.create方法(这假设是API服务提供的一个方法,用于生成对话的完成)发送当前的对话历史(messages列表)到服务。
    • 设置stream=True,这可能意味着服务将以流的形式返回结果,允许逐步处理大型响应。
    • 遍历返回的流,提取每个块(chunk)中的第一个选择(choices[0])的增量内容(delta.content),并将其拼接成完整的响应。
    • 打印AI的响应,并将该响应作为AI('assistant'角色)的消息添加到messages列表中。

潜在问题和注意事项

  • 库和API的兼容性:代码假设存在一个与OpenAI API相似的openai库,但实际上使用的是阿里云的服务。这要求该服务确实提供了类似的方法和响应结构。
  • API的响应结构:代码假设每个chunk都有一个choices列表,且列表的第一个元素(choices[0])有一个delta.content属性。这必须与服务实际返回的响应结构相匹配。
  • 错误处理:代码中没有错误处理逻辑,如网络错误、API限制、无效的API密钥等。
  • 安全性:硬编码的api_key可能带来安全风险,特别是如果代码被公开或泄露。
  • 无限循环:除非用户输入exit,否则循环将无限进行,这可能导致资源耗尽或其他问题。
  • API服务的限制:频繁请求API可能会受到速率限制或其他限制,这需要在代码中适当处理。
  • 代码的可读性和维护性:使用更具描述性的变量名和注释可以帮助提高代码的可读性和维护性。

五、How to Create a Chatbot with GradioCreating A Chatbot Fast (gradio.app)icon-default.png?t=N7T8https://www.gradio.app/guides/creating-a-chatbot-fast

(万能解决办法)使用镜像源

由于直接访问 PyPI 有时可能很慢或不稳定,你可以尝试使用国内的镜像源来加速包的下载。例如,你可以使用清华大学、阿里云等提供的镜像。

你可以通过修改 pip 的配置文件(pip.conf 或 pip.ini)来设置镜像源,或者使用命令行参数来临时指定镜像源。例如,使用清华大学的 pip 镜像源安装 gradio:

pip install gradio -i https://pypi.tuna.tsinghua.edu.cn/simple

这个命令会告诉 pip 从清华大学的镜像源下载 gradio 包及其依赖。 

解释-下CNN的原理,详细点:

举个简单的使用例子(栗子):

千问封装:
写一篇科幻小说
from openai import OpenAIdef qwen(prompt):base_url = 'https://dashscope.aliyuncs.com/compatible-mode/v1'api_key = 'sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'  # 填自己的API_KEYmodel = 'qwen-max'client = OpenAI(base_url=base_url,api_key=api_key)messages = [{"role": "system", "content": '你是一个能力很强的AI'},{"role": "user", "content": prompt},]stream = client.chat.completions.create(model=model,messages=messages,stream=True,)result = ''for chunk in stream:text = chunk.choices[0].delta.contentif text is not None:result += textprint(text, end='')return resultif __name__=='__main__':qwen('写一篇科幻小说')

大模型对话网页版完整代码:
from openai import OpenAI
import gradio as grbase_url = 'https://dashscope.aliyuncs.com/compatible-mode/v1'
api_key = 'sk-xxx'  # 填自己的API_KEY
client = OpenAI(base_url=base_url, api_key=api_key)
model = 'qwen-max'def predict(message, history):print('\n\nUser:')print(message)messages = []for human, assistant in history:messages.append({"role": "user", "content": human})messages.append({"role": "assistant", "content": assistant})messages.append({"role": "user", "content": message})stream = client.chat.completions.create(model=model,messages=messages,stream=True,)print('\nAssistant:')result = ''for chunk in stream:text = chunk.choices[0].delta.contentif text is not None:result += textprint(text, end='')yield resultgr.ChatInterface(predict).launch()

这段代码试图结合使用 Gradio 库来创建一个聊天界面,以及一个自定义的 OpenAI 客户端(尽管这里的 OpenAI 类很可能是虚构的或来自一个非官方的库,因为标准的 OpenAI Python SDK 通常不使用 OpenAI 作为类名,而是使用 openai 模块),以与某个自定义的聊天模型(在这个例子中是 'qwen-max')进行交互。不过,有几个问题和潜在的误解需要澄清。

代码简述

  1. 导入和初始化
    • 导入 Gradio 库和(假设的)OpenAI 类。
    • 设置连接到自定义 API 服务的 base_url 和 api_key
    • 创建一个 OpenAI 类的实例 client,用于与 API 交互。
    • 定义要使用的模型名称 model
  2. 定义预测函数
    • predict 函数接收两个参数:message(当前用户的消息)和 history(之前的对话历史,作为 (human, assistant) 对的列表)。
    • 函数内部,首先打印出用户的消息。
    • 然后,它创建一个空的 messages 列表,用于构建发送给 API 的完整对话历史。
    • 遍历 history,将每对 (human, assistant) 消息添加到 messages 列表中,分别标记为 'user' 和 'assistant' 角色。
    • 将当前用户的消息也添加到 messages 列表中。
    • 使用 client.chat.completions.create 方法(这假设是 API 提供的一个方法)发送对话历史到服务,并设置 stream=True 以逐步接收响应。
    • 遍历返回的流,拼接 AI 的响应,并实时打印和通过生成器 yield 返回(但这里的使用方式可能不符合 Gradio 的预期,因为 Gradio 通常期望一个最终的结果,而不是一个生成器)。
  3. 创建和启动 Gradio 聊天界面
    • 使用 gr.ChatInterface(predict) 创建一个聊天界面,该界面将使用 predict 函数作为其后端。
    • 调用 .launch() 方法启动聊天界面。

潜在问题和注意事项

  • OpenAI 类的使用:如上所述,这里的 OpenAI 类很可能是虚构的或来自非标准库。标准的 OpenAI Python SDK 使用的是 openai 模块,而不是 OpenAI 类。
  • 生成器的使用:在 Gradio 的上下文中,predict 函数应该返回一个完整的结果,而不是一个生成器。Gradio 不会自动处理生成器,因此这种方式可能不会按预期工作。
  • API 响应结构:代码假设了 API 响应的特定结构(如 chunk.choices[0].delta.content),这必须与 API 实际返回的响应结构相匹配。
  • 安全性:硬编码的 api_key 可能导致安全风险。
  • 错误处理:代码中没有错误处理逻辑,如网络错误、API 限制等。
  • API 服务的限制:频繁请求 API 可能会受到速率限制或其他限制。

改进建议

  • 确认 OpenAI 类的来源和用法,或改用标准的 OpenAI Python SDK(如果适用)。
  • 修改 predict 函数以返回一个完整的结果字符串,而不是生成器。
  • 添加适当的错误处理和日志记录。
  • 考虑使用缓存或其他机制来减少对 API 的请求次数。
  • 如果 API 支持,考虑使用异步请求来提高性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/52970.shtml

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

相关文章

哈工大-操作系统L30

文件使用磁盘的实现 fd文件描述符 buf内存缓冲区 count读写字符的个数 file->inode获得inode file_write写文件 inode映射表 读写的内存缓冲区buf,file字符流的位置200-212,根据inode提供的索引号找到块号,根据buf形成请求队列&#xff0c;再放入电梯队列 fseek调整读…

Jenkins安装使用详解,jenkins实现企业级CICD流程

文章目录 一、资料1、官方文档 二、环境准备1、安装jdk172、安装maven3、安装git4、安装gitlab5、准备我们的springboot项目6、安装jenkins7、安装docker8、安装k8s&#xff08;可选&#xff0c;部署节点&#xff09;9、安装Harbor10、准备带有jdk环境的基础镜像 三、jenkins实…

力扣1235.规划兼职工作

力扣1235.规划兼职工作 动态规划 二分 将所有工作按照结束时间排序f[i]表示前i个工作可获取的最大收益状态转移&#xff1a;取第i个工作&#xff0c;f[i] profit[i] f[j]&#xff0c;其中j为结束时间小于i的开始时间的最大数不取第i个工作&#xff0c;f[i] f[i-1]可以通过二…

低代码开发平台:重塑未来软件开发格局的关键力量

低代码开发平台正以前所未有的速度改变着软件开发的面貌&#xff0c;通过最小化手动编码&#xff0c;让用户能够迅速构建应用程序。随着企业对敏捷性和创新能力的追求日益增强&#xff0c;这类平台的需求激增。展望未来&#xff0c;技术进步与市场动态将引领低代码开发进入新的…

大阪OSAKA分子泵TG710MTG730TG1130TD7111TG2810TD3211TG3413手侧接线图

大阪OSAKA分子泵TG710MTG730TG1130TD7111TG2810TD3211TG3413手侧接线图

window下kafka3启动多个

准备工作 我们先安装好kafka&#xff0c;并保证启动成功&#xff0c;可参考文章Windows下安装Kafka3-CSDN博客 复制kafka安装文件 kafka3已经内置了zookeeper&#xff0c;所以直接复制就行了 修改zookeeper配置文件 这里我们修改zookeeper配置文件&#xff0c;主要是快照地址…

【MyBatis】MyBatis的一级缓存和二级缓存简介

目录 1、一级缓存 1.1 我们在一个 sqlSession 中&#xff0c;对 User 表根据id进行两次查询&#xff0c;查看他们发出sql语句的情况。 1.2 同样是对user表进行两次查询&#xff0c;只不过两次查询之间进行了一次update操作。 1.3 一级缓存查询过程 1.4 Mybatis与Spring整…

switch语句和while循环

switch语句和while循环 switch语句break的用法default的用法switch语句中的case和default的顺序问题 while语句while语句的执行流程while语句的具体例子 switch语句 switch 语句是⼀种特殊形式的 if…else 结构&#xff0c;用于判断条件有多个结果的情况。它把多重 的 else if…

滚动视图ScrollView

activity_scroll_view.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pare…

【Python系列】 Python 中的枚举使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

合宙LuatOS开发板使用手册——Air700EAQ

EVB-Air700EL&700EY 开发板是合宙通信推出的基于 Air700EL&700EY 模组所开发的&#xff0c; 包含电源&#xff0c;SIM 卡&#xff0c;USB&#xff0c;PCB 天线等必要功能的最小硬件系统。 以方便用户在设计前期对 模块进 行性能评估&#xff0c;功能调试&#xff0c;软…

如何让“相信相信的力量”帮你多赚100万

公门洞开纳百川 众心逐梦越千山 号召引领潜力绽 心觉潜意识无间 我们经常听到这句话&#xff1a;相信相信的力量 为什么要相信相信的力量 相信是什么意思 相信的力量又是什么意思 我估计99%的人不知道这句话的底层逻辑是什么 如果你悟透了&#xff0c;你的并且践行了&…

PE文件结构详解(非常详细)

最近在参考OpenShell为任务栏设置图片背景时&#xff0c;发现里面使用了IAT Hook&#xff0c;这一块没有接触过&#xff0c;去查资料的时候发现IAT Hook需要对PE文件结构有一定的了解&#xff0c;索性将PE文件结构的资料找出来&#xff0c;系统学习一下。 PE文件结构 Portable…

【Qt】 QDateTimeEdit | QDial

文章目录 QDateTimeEdit —— 时间日期 微调框QDateTimeEdit 属性核心信号QDateTimeEdit 的使用 QDial —— 按钮QDial 属性核心信号QDial 使用 QDateTimeEdit —— 时间日期 微调框 QDateTimeEdit 属性 QDateTimeEdit 作为 时间日期 的 微调框 dateTime —— 时间⽇期的值…

minio文件存储+ckplayer视频播放(minio分片上传合并视频播放)

文章目录 参考简述效果启动minio代码配置类RedisConfigWebConfigMinioClientAutoConfigurationOSSPropertiesapplication.yml 实体类MinioObjectResultStatusCodeOssFileOssPolicy 工具类FileTypeUtilMd5UtilMediaTypeMinioTemplate 文件分片上传与合并MinioFileControllerMini…

Webpack打包常见问题及优化策略

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介Webpack打包常见问题及优化策略1. 引言2. Webpack打包常见问题2.1 打包时间过长问题描述主要原因 2.2 打包体积过大问题描述主要原因 2.3 依赖包版本冲突问题描述主要原因 2.4 动态导入和代码拆分问题问题描述主要原因 2.5 文件路径…

Python+VScode 两个不同文件夹里的py文件相互调用|python的模块调用|绝对导入

第一次用VScode写python遇到了模块无法识别的问题&#xff0c;搞了一整天&#xff0c; 上网查&#xff0c;chatGPT都不行&#xff0c;现在时解决了。 首先项目结构如下&#xff0c;四个文件夹&#xff0c;四个py文件 代码&#xff1a; def f1fun():print("f1") de…

Code Practice Journal | Day59-60_Graph09 最短路径(待更)

1. Dijkstra 1.1 原理与步骤 步骤&#xff1a; 选取距离源点最近且未被访问过的节点标记该节点为已访问更新未访问节点到源点的距离 1.2 代码实现 以KamaCoder47题为例 题目&#xff1a;47. 参加科学大会&#xff08;第六期模拟笔试&#xff09; (kamacoder.com) class Progra…

Apache SeaTunnel Zeta 引擎源码解析(一)Server端的初始化

引入 本系列文章是基于 Apache SeaTunnel 2.3.6版本&#xff0c;围绕Zeta引擎给大家介绍其任务是如何从提交到运行的全流程&#xff0c;希望通过这篇文档&#xff0c;对刚刚上手SeaTunnel的朋友提供一些帮助。 我们整体的文章将会分成三篇&#xff0c;从以下方向给大家介绍&am…

指针5.回调函数与qsort

今天来学习回调函数与qsort 目录 1.回调函数实现模拟计算器代码的简化原代码运行结果简化代码运行结果 qsort函数排序整型数据代码运行结果 qsort排序结构数据代码 qsort函数的模拟实现代码运行结果 总结 1.回调函数 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的…