Qwen/QwQ-32B 基础模型上构建agent实现ppt自动生成

关心Qwen/QwQ-32B 性能测试结果可以参考下

https://zhuanlan.zhihu.com/p/28600079208https://zhuanlan.zhihu.com/p/28600079208

官方宣传上是该模型性能比肩满血版 DeepSeek-R1(671B)!

我们实现一个 使用Qwen/QwQ-32B 自动生成 PowerPoint 演示文稿的需求,基于 Qwen/QwQ-32B 的自动化 PPT 生成 Agent,带有一个简单的用户界面。以下是一个使用 Python、Gradio(用于界面)和 python-pptx(用于生成 PPT)的实现方案,先利用提示词工程实现一个简单的ppt生成

  • 前提条件

  1. 你已经下载了 Qwen/QwQ-32B 权重到 ./qwq_32b 目录。
  2. 确保有足够的 GPU 内存(建议至少 24GB VRAM)来加载 32B 模型。
  • 系统提示

    • 设计一个系统提示,指导模型如何生成内容。该提示应包含结构化的内容格式,例如:
      • 第一张幻灯片为标题幻灯片(包含标题和副标题)。
      • 后续幻灯片为内容幻灯片(包含标题和要点)。
  • 内容生成流程

  • 消息构建

    • 将系统提示与用户提示结合,形成完整的输入消息列表。
  • 文本生成

    • 使用分词器将消息转换为模型输入格式,然后调用模型生成文本。
    • 设置生成参数(如最大新令牌数、温度等)来控制生成内容的质量和多样性。

PPT内容处理

  • 解析生成的内容

    • 将模型生成的文本分割为不同的幻灯片,识别标题幻灯片和内容幻灯片。
  • 创建PPT文件

    • 使用 python-pptx 库创建 PowerPoint 演示文稿,根据解析的内容添加幻灯片。
  • 保存PPT文件
  • 将生成的PPT文件保存到指定的位置,方便用户下载和使用。
def generate_ppt_content(topic, slide_count=3):system_prompt = ("You are Qwen, developed by Alibaba. You are tasked with creating content for a PowerPoint presentation. ""Generate a structured response with a title slide and subsequent slides based on the user's topic. "f"Provide content for {slide_count} slides in the following format:\n""Slide 1: Title Slide (Title, Subtitle)\n"f"Slide 2 to {slide_count}: Content Slide (Slide Title, Bullet Points)\n""Keep each slide concise and professional.")user_prompt = f"Generate a PPT about '{topic}'."messages = [{"role": "system", "content": system_prompt},{"role": "user", "content": user_prompt}]text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)model_inputs = tokenizer([text], return_tensors="pt").to("cuda")  # 输入放到 GPUgenerated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512,temperature=0.7,repetition_penalty=1.2)generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids inzip(model_inputs.input_ids, generated_ids)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]return response

处理流程概述:

  • 定义了一个结构化的提示,用于指示模型(Qwen)预期的输出格式。它具体说明了输出的格式要求,包括标题幻灯片和内容幻灯片。
  • 这将系统提示与请求生成指定主题的演示文稿结合在一起。
  • 将提示进行标记化,意味着将文本转换为模型可以理解的格式。这涉及将文本转换为数字表示(标记)。
  • 将标记化的输入准备好,移动到GPU以加快处理速度。
  • 模型根据输入提示生成响应。参数max_new_tokens、temperature和repetition_penalty决定生成的
  • max_new_tokens:模型可以一次生成的最大标记数(这里设置为512)。
  • temperature:控制输出的随机性。较低的值使输出更确定,而较高的值增加创造性。
  • repetition_penalty:抑制模型重复短语或想法,促进内容的多样性。

将生成的标记ID解码回人类可读的文本格式,排除模型使用的任何特殊标记。

初步运行下报错了

torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 270.00 MiB. GPU 0 has a total capacity of 23.53 GiB of which 158.56 MiB is free. Including non-PyTorch memory, this process has 23.36 GiB memory in use. Of the allocated memory 22.99 GiB is allocated by PyTorch, and 1.24 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)

机器有两张 NVIDIA 4090 显卡,每张显存 24GB,但当前模型加载时超出了单张 GPU 的显存容量(23.53GiB 已几乎用尽)。由于 Qwen/QwQ-32B 是一个非常大的模型(未经量化可能需要 60GB+ 显存),单张 24GB 显卡无法完整加载,因此需要利用多卡并行加载模型。

以下是实现多卡运行的解决方案,结合你的硬件(2 张 4090,48GB 总显存):

首先确认你的环境支持多卡:

import torch
print("CUDA available:", torch.cuda.is_available())
print("Device count:", torch.cuda.device_count())
for i in range(torch.cuda.device_count()):print(f"GPU {i}: {torch.cuda.get_device_name(i)}, {torch.cuda.get_device_properties(i).total_memory / 1024**3:.2f} GB")

使用 accelerate 的多卡支持

transformers 和 accelerate 提供了内置的多卡支持,通过 device_map="auto" 自动将模型分层分配到多个 GPU 上。

# 1. 加载模型和分词器
model_path = "./qwq_32b"
tokenizer = AutoTokenizer.from_pretrained(model_path)# 使用 accelerate 的多卡加载
model = AutoModelForCausalLM.from_pretrained(model_path,torch_dtype=torch.float16,  # 使用 FP16 减少显存占用device_map="auto",         # 自动分配到多张 GPUlow_cpu_mem_usage=True     # 优化内存使用
)
print("Model loaded successfully across multiple GPUs!")

优化显存使用

如果仍然遇到显存不足,可以进一步优化:

1. 使用 4-bit 量化

安装 bitsandbytes:

pip install bitsandbytes

修改模型加载部分:

model = AutoModelForCausalLM.from_pretrained(model_path,torch_dtype=torch.float16,device_map="auto",load_in_4bit=True,              # 4-bit 量化bnb_4bit_compute_dtype=torch.float16,bnb_4bit_use_double_quant=True  # 双重量化
)
  • 显存需求降至约 20-24GB,两张 4090 完全够用。
  • 可能略微影响生成质量,但对 PPT 内容生成影响不大。
设置环境变量

错误信息提到 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,可以尝试设置以优化内存分配:

export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True或者代码上添加
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"

修改后代码

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import gradio as gr
from pptx import Presentation
import os# 1. 加载模型和分词器
model_path = "./base_model/qwq_32b"
tokenizer = AutoTokenizer.from_pretrained(model_path)# 使用 accelerate 的多卡加载
model = AutoModelForCausalLM.from_pretrained(model_path,torch_dtype=torch.float16,device_map="auto",load_in_4bit=True,              # 启用 4-bit 量化bnb_4bit_compute_dtype=torch.float16,  # 计算用 FP16bnb_4bit_use_double_quant=True  # 双重量化,进一步节省显存
)
print("Model loaded successfully across multiple GPUs!")# 2. 生成 PPT 内容的函数
def generate_ppt_content(topic, slide_count=3):system_prompt = ("You are Qwen, developed by Alibaba. You are tasked with creating content for a PowerPoint presentation. ""Generate a structured response with a title slide and subsequent slides based on the user's topic. "f"Provide content for {slide_count} slides in the following format:\n""Slide 1: Title Slide (Title, Subtitle)\n"f"Slide 2 to {slide_count}: Content Slide (Slide Title, Bullet Points)\n""Keep each slide concise and professional.")user_prompt = f"Generate a PPT about '{topic}'."messages = [{"role": "system", "content": system_prompt},{"role": "user", "content": user_prompt}]text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)model_inputs = tokenizer([text], return_tensors="pt").to("cuda")  # 输入放到 GPUgenerated_ids = model.generate(model_inputs.input_ids,max_new_tokens=512,temperature=0.7,repetition_penalty=1.2)generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids inzip(model_inputs.input_ids, generated_ids)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]return response# 3. 创建 PPT 文件
def create_ppt(topic, content):prs = Presentation()slides = content.split("Slide")[1:]for slide_text in slides:slide_lines = slide_text.strip().split("\n")if not slide_lines:continueif "1:" in slide_text:slide_layout = prs.slide_layouts[0]slide = prs.slides.add_slide(slide_layout)title, subtitle = slide.shapes.title, slide.placeholders[1]title.text = slide_lines[0].replace("1: Title Slide", "").strip()subtitle.text = slide_lines[1].strip() if len(slide_lines) > 1 else " "else:slide_layout = prs.slide_layouts[1]slide = prs.slides.add_slide(slide_layout)title, body = slide.shapes.title, slide.placeholders[1]title.text = slide_lines[0].strip()tf = body.text_frametf.text = "\n".join(line.strip() for line in slide_lines[1:] if line.strip())output_file = f"{topic.replace(' ', '_')}_presentation.pptx"prs.save(output_file)return output_file# 4. 主函数
def ppt_agent(topic):content = generate_ppt_content(topic)output_file = create_ppt(topic, content)return content, output_file# 5. Gradio 界面
with gr.Blocks(title="PPT 生成 Agent") as demo:gr.Markdown("# 自动化 PPT 生成器")gr.Markdown("输入主题,生成 PPT 文件。基于 Qwen/QwQ-32B,多卡运行。")topic_input = gr.Textbox(label="PPT 主题", placeholder="例如:人工智能简介")output_text = gr.Textbox(label="生成的内容", lines=10, interactive=False)output_file = gr.File(label="下载 PPT 文件")submit_btn = gr.Button("生成 PPT")submit_btn.click(fn=ppt_agent, inputs=topic_input, outputs=[output_text, output_file])demo.launch(server_name="0.0.0.0", server_port=7860)

运行界面如下

点击“生成PPT” 

但是ppt质量有点堪忧

生成的 PPT 内容确实存在以下问题:

  1. 内容质量低:生成的文本包含不自然的表达(如 "I don’t have the prime data regarding from common knowledge up until now"),语法错误较多,逻辑也不够清晰。
  2. 格式问题:内容没有很好地适配 PPT 的结构,段落过长,缺乏简洁的要点化表达。
  3. 语言混杂:中英文混杂(如标题是中文,内容是英文),缺乏统一性。

为了提升 PPT 的质量,引入多个智能体的协作模式,利用联网功能获取更高质量的内容,并优化 PPT 的结构和格式。改进方案:

多智能体协作生成高质量 PPT

智能体角色分工
  1. 内容生成智能体:基于 QwQ-32B 模型,负责生成 PPT 的初步内容(已实现)。
  2. 内容优化智能体:联网搜索最新信息,修正生成内容中的错误,优化语言表达。
  3. 格式设计智能体:优化 PPT 结构,确保内容简洁、要点清晰,并适配 PPT 格式。
  4. 视觉美化智能体:提供 PPT 排版建议,优化字体、颜色、布局等(目前无法直接生成图片,但可以提供设计建议)。
改进步骤
  1. 优化内容生成:调整提示词,提升 QwQ-32B 的输出质量。
  2. 联网搜索补充:搜索与主题相关的最新信息,修正模型生成的内容。
  3. 结构化输出:将内容转为简洁的要点形式,适配 PPT。

修改代码

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import gradio as gr
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
from pptx.oxml.xmlchemy import OxmlElement
import os
import requests
from bs4 import BeautifulSoup
import time# 清理显存
torch.cuda.empty_cache()
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"# 1. 加载模型和分词器
model_path = "./base_model/qwq_32b"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path,torch_dtype=torch.float16,device_map="auto",load_in_4bit=True,bnb_4bit_compute_dtype=torch.float16,bnb_4bit_use_double_quant=True
)
print("Model loaded successfully!")# 2. 联网搜索(使用百度,优化解析逻辑)
def search_web(query, retries=3):for attempt in range(retries):try:url = f"https://www.baidu.com/s?wd={requests.utils.quote(query)}"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}response = requests.get(url, headers=headers, timeout=10)response.raise_for_status()soup = BeautifulSoup(response.text, "html.parser")snippets = []# 调整选择器,适配百度搜索结果for result in soup.select(".result.c-container"):title = result.select_one("h3 a")summary = result.select_one(".c-abstract") or result.select_one(".c-span-last")if title and summary:snippets.append(f"{title.get_text()}: {summary.get_text()}")elif title:snippets.append(title.get_text())if snippets:print("Search results:", snippets)  # 调试输出return "\n".join(snippets[:3])else:return "未找到相关搜索结果"except Exception as e:print(f"Search attempt {attempt + 1} failed: {str(e)}")if attempt == retries - 1:return "搜索失败,请检查网络连接或稍后再试"time.sleep(2)  # 重试前等待 2 秒# 3. 生成 PPT 内容
def generate_ppt_content(topic, slide_count=3):system_prompt = ("你是一个专业的 PPT 内容生成助手,语言为中文。你的任务是根据用户提供的主题,生成一份结构化的 PPT 内容。要求:"f"1. 生成 {slide_count} 页幻灯片:\n""   - Slide 1: 标题页(标题,副标题)\n"f"   - Slide 2 到 {slide_count}: 内容页(页标题,3-5 个简洁的要点)\n""2. 语言简洁、专业,适合 PPT 展示,避免长句。\n""3. 确保内容逻辑清晰,信息准确,基于小米汽车的最新信息(如 2025 年目标交付 30 万台,SU7 和 YU7 系列,智能化布局等)。\n""4. 不要包含不准确的信息(如错误的自动驾驶级别,当前小米汽车未达到 L4)。")user_prompt = f"生成一份关于 '{topic}' 的 PPT,重点介绍产品亮点和市场战略。"messages = [{"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt}]text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)model_inputs = tokenizer([text], return_tensors="pt").to("cuda")generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=256,temperature=0.7,repetition_penalty=1.2,pad_token_id=tokenizer.eos_token_id)generated_ids = [output_ids[len(input_ids):] for input_ids, output_ids inzip(model_inputs.input_ids, generated_ids)]response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]# 联网搜索补充信息search_result = search_web(f"{topic} 2025")return response + "\n\n补充信息(来自百度):\n" + search_result# 4. 创建 PPT 文件(优化美观度)
def create_ppt(topic, content):prs = Presentation()print("Generated content:\n", content)slides = content.split("Slide")[1:]for slide_index, slide_text in enumerate(slides):slide_lines = slide_text.strip().split("\n")if not slide_lines:continue# 设置背景渐变(浅灰色到白色)slide_layout = prs.slide_layouts[0 if "1:" in slide_text else 1]slide = prs.slides.add_slide(slide_layout)background = slide.backgroundfill = background.fillfill.gradient()fill.gradient_stops[0].color.rgb = RGBColor(240, 240, 240)fill.gradient_stops[1].color.rgb = RGBColor(255, 255, 255)# 添加占位符图片框(右侧)left = Inches(6)top = Inches(1.5)width = Inches(3)height = Inches(3)slide.shapes.add_picture_placeholder(left=left, top=top, width=width, height=height)if "1:" in slide_text:# 标题页title, subtitle = slide.shapes.title, slide.placeholders[1]title.text = slide_lines[0].replace("1: Title Slide", "").strip()subtitle.text = slide_lines[1].strip() if len(slide_lines) > 1 else " "# 美化标题页(使用小米品牌色:橙色)title.text_frame.paragraphs[0].font.size = Pt(44)title.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 103, 0)  # 小米橙色title.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTERsubtitle.text_frame.paragraphs[0].font.size = Pt(24)subtitle.text_frame.paragraphs[0].font.color.rgb = RGBColor(89, 89, 89)subtitle.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTERelse:# 内容页title, body = slide.shapes.title, slide.placeholders[1]title.text = slide_lines[0].strip()# 格式化内容为要点tf = body.text_frametf.clear()for line in slide_lines[1:]:if line.strip():p = tf.add_paragraph()p.text = line.strip()p.level = 0 if not line.startswith("-") else 1p.font.size = Pt(20)p.font.color.rgb = RGBColor(0, 0, 0)p.alignment = PP_ALIGN.LEFT# 美化内容页title.text_frame.paragraphs[0].font.size = Pt(32)title.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 103, 0)  # 小米橙色# 在最后一页添加补充信息if slide_index == len(slides) - 1 and "补充信息(来自百度)" in content:search_content = content.split("补充信息(来自百度):\n")[-1].strip()if search_content and search_content != "未找到相关搜索结果":left = Inches(0.5)top = Inches(5.5)width = Inches(9)height = Inches(1.5)textbox = slide.shapes.add_textbox(left, top, width, height)tf = textbox.text_frametf.text = "补充信息(来自百度):\n" + search_contentfor p in tf.paragraphs:p.font.size = Pt(14)p.font.color.rgb = RGBColor(100, 100, 100)p.alignment = PP_ALIGN.LEFToutput_file = f"{topic.replace(' ', '_')}_presentation.pptx"prs.save(output_file)return output_file# 5. 主函数
def ppt_agent(topic):content = generate_ppt_content(topic)output_file = create_ppt(topic, content)return content, output_file# 6. Gradio 界面
with gr.Blocks(title="PPT 生成 Agent") as demo:gr.Markdown("# 自动化 PPT 生成器")gr.Markdown("输入主题,生成高质量 PPT 文件。基于 Qwen/QwQ-32B 和百度联网优化。")topic_input = gr.Textbox(label="PPT 主题", placeholder="例如:小米汽车最新发布")output_text = gr.Textbox(label="生成的内容", lines=10, interactive=False)output_file = gr.File(label="下载 PPT 文件")submit_btn = gr.Button("生成 PPT")submit_btn.click(fn=ppt_agent, inputs=topic_input, outputs=[output_text, output_file])demo.launch(server_name="0.0.0.0", server_port=7860)

我们再尝使用添加些样式来丰富下ppt排班

修改代码

def create_ppt(topic, content):prs = Presentation()print("Generated content:\n", content)slides = content.split("Slide")[1:]for slide_index, slide_text in enumerate(slides):slide_lines = slide_text.strip().split("\n")if not slide_lines:continue# 设置背景渐变(浅灰色到白色)slide_layout = prs.slide_layouts[0 if "1:" in slide_text else 1]slide = prs.slides.add_slide(slide_layout)background = slide.backgroundfill = background.fillfill.gradient()fill.gradient_stops[0].color.rgb = RGBColor(240, 240, 240)fill.gradient_stops[1].color.rgb = RGBColor(255, 255, 255)# 添加矩形框作为图片占位符left = Inches(6)top = Inches(1.5)width = Inches(3)height = Inches(3)shape = slide.shapes.add_shape(1, left, top, width, height)  # 1 表示矩形shape.fill.solid()shape.fill.fore_color.rgb = RGBColor(220, 220, 220)shape.line.dash_style = MSO_LINE_DASH_STYLE.DASH  # 使用正确的虚线样式shape.line.color.rgb = RGBColor(150, 150, 150)txBox = shape.text_frametxBox.text = "图片占位符\n(请手动插入图片)"p = txBox.paragraphs[0]p.font.size = Pt(12)p.font.color.rgb = RGBColor(100, 100, 100)p.alignment = PP_ALIGN.CENTERif "1:" in slide_text:# 标题页title, subtitle = slide.shapes.title, slide.placeholders[1]title.text = slide_lines[0].replace("1: Title Slide", "").strip()subtitle.text = slide_lines[1].strip() if len(slide_lines) > 1 else " "# 美化标题页(使用小米品牌色:橙色)title.text_frame.paragraphs[0].font.size = Pt(44)title.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 103, 0)title.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTERsubtitle.text_frame.paragraphs[0].font.size = Pt(24)subtitle.text_frame.paragraphs[0].font.color.rgb = RGBColor(89, 89, 89)subtitle.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTERelse:# 内容页title, body = slide.shapes.title, slide.placeholders[1]title.text = slide_lines[0].strip()# 格式化内容为要点tf = body.text_frametf.clear()for line in slide_lines[1:]:if line.strip():p = tf.add_paragraph()p.text = line.strip()p.level = 0 if not line.startswith("-") else 1p.font.size = Pt(20)p.font.color.rgb = RGBColor(0, 0, 0)p.alignment = PP_ALIGN.LEFT# 美化内容页title.text_frame.paragraphs[0].font.size = Pt(32)title.text_frame.paragraphs[0].font.color.rgb = RGBColor(255, 103, 0)# 在最后一页添加补充信息和分割线if slide_index == len(slides) - 1 and "补充信息(来自百度)" in content:# 添加分割线left = Inches(0.5)top = Inches(5.3)width = Inches(9)height = Inches(0.01)line = slide.shapes.add_shape(1, left, top, width, height)line.fill.solid()line.fill.fore_color.rgb = RGBColor(200, 200, 200)line.line.color.rgb = RGBColor(200, 200, 200)# 添加补充信息search_content = content.split("补充信息(来自百度):\n")[-1].strip()if search_content and search_content != "未找到相关搜索结果":left = Inches(0.5)top = Inches(5.5)width = Inches(9)height = Inches(1.5)textbox = slide.shapes.add_textbox(left, top, width, height)tf = textbox.text_frametf.text = "补充信息(来自百度):\n" + search_contentfor p in tf.paragraphs:p.font.size = Pt(14)p.font.color.rgb = RGBColor(100, 100, 100)p.alignment = PP_ALIGN.LEFToutput_file = f"{topic.replace(' ', '_')}_presentation.pptx"prs.save(output_file)return output_file

再次运行,控制台和新ppt

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

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

相关文章

ios 小组件和数据共享

创建主工程就不必讲了 1 创建小组件 创建子工程 [new Target ] 选择 [ Widger Extension] 小组件入口是WidgetBundle文件,可以进行多个小组件的调试 TestWidget2文件是主要操作,小组件使用swiftUI布局,使用 AppIntent进行事件处理&#xff…

C++【类和对象】(超详细!!!)

C【类和对象】 1.运算符重载2.赋值运算符重载3.日期类的实现 1.运算符重载 (1).C规定类类型运算符使用时,必须转换成调用运算符重载。 (2).运算符重载是具有特殊名字的函数,名字等于operator加需要使用的运算符,具有返回类型和参数列表及函数…

ExBody2: Advanced Expressive Humanoid Whole-Body Control

ExBody2: Advanced Expressive Humanoid Whole-Body Control 研究动机解决方案技术路线实验结果 ExBody2: Advanced Expressive Humanoid Whole-Body Control 研究动机 高维状态空间和复杂控制限制了人形机器人在现实世界中的应用。人形机器人和人类在身体结构上有很大不同&a…

115.不同的子序列(困难)

115.不同的子序列 力扣题目链接(opens new window) 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符…

【学习笔记】【AI医生】2-4 项目详细分析及DeepSeek适用场景

【DeepSeek AI 医生】2-4 项目详细分析及DeepSeek适用场景 1.1 项目流程图1.2 主流AI模型对比1.3 DeepSeek使用途径1.4 DeepSeek 适用场景 1.1 项目流程图 1.2 主流AI模型对比 1.3 DeepSeek使用途径 官网 https://chat.deepseek.com/线上Api (目前不可以状态&#…

再聊 Flutter Riverpod ,注解模式下的 Riverpod 有什么特别之处,还有发展方向

三年前我们通过 《Flutter Riverpod 全面深入解析》 深入理解了 riverpod 的内部实现,而时隔三年之后,如今Riverpod 的主流模式已经是注解,那今天就让我们来聊聊 riverpod 的注解有什么特殊之处。 前言 在此之前,我们需要先回忆…

Java【多线程】(3)单例模式与线程安全

目录 1.前言 2.正文 2.1线程安全类 2.2杂谈(介绍几个概念) 2.2.1内存可见性 2.2.2指令重排序 2.2.3线程饥饿 1. 什么是线程饥饿? 2. 线程饥饿的常见原因 2.2.4区分wait和sleep 2.4单例模式 2.4.1饿汉模式 2.4.2懒汉模式 2.4.2指…

4g串口发短信踩坑

这短短的4行有三种发送方式 1 勾选新行 2 不选新行 3 不选新行,再勾选16进制,完美解决 推荐网站AIR780 MINI LTE 4G全网通模块 — wiki

STM32 ——系统架构

3个被动单元 SRAM 存储程序运行时用到的变量 Flash(内部闪存存储器) 存储下载的程序 程序执行时用到的常量 桥接1和桥接2 AHB到APB的桥(AHBtoAPBx) 桥1 通过APB2总线连接到APB2上的外设。 高速外设,最高72MHz。 桥2 通过…

离散化和树状数组

离散化 #include<bits/stdc.h> using namespace std; using lllong long; const int N3e59; ll a[N]; struct Q {ll a,b; }Add[N],Que[N];//用结构体存储数值对 vector<ll>X; ll getIdx(ll x)//得到离散化数组下标 {return lower_bound(X.begin(),X.end(),x)-X.beg…

序列化和反序列化(Linux)

1 序列化和反序列化 write和read实质是拷贝函数 1.1序列化和反序列化的概述&#xff1a; 2网络版计算器 2.1代码实现 先把日志拷贝过来 2.1.1必须先要有网络功能 先把 TcpServer.hpp编写号 #pragma once #include <cstdint>#include "Socket.hpp" #inclu…

关于ngx-datatable no data empty message自定义模板解决方案

背景&#xff1a;由于ngx-dataable插件默认没有数据时显示的文案是no data to display&#xff0c;且没有任何样式。这里希望通过自定义模板来实现。但目前github中有一个案例是通过设置代码&#xff1a; https://swimlane.github.io/ngx-datatable/empty** <ngx-datatable…

opencv 图片颜色+轮廓识别

目标图片&#xff1a; 1 简单识别图片中出现颜色最多的 import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;public class SimpleImageColorRecognizer implements ImageColorRecogniz…

文件系统调用(上) ─── linux第17课

目录 linux 中man 2和man 3的区别 文件内容介绍 C语言文件接口 示例: 输出信息到显示器&#xff0c;你有哪些方法 总结: 系统文件I/O 文件类的系统调用接口介绍 示例 open 函数具体使用哪个,和具体应用场景相关&#xff0c; write read close lseek ,类比C文件相关接…

vue3-element-admin 前后端本地启动联调

一、后端环境准备 1.1、下载地址 gitee 下载地址 1.2、环境要求 JDK 17 1.3、项目启动 克隆项目 git clone https://gitee.com/youlaiorg/youlai-boot.git数据库初始化 执行 youlai_boot.sql 脚本完成数据库创建、表结构和基础数据的初始化。 修改配置 application-dev.y…

证券行业SCA开源风险治理实践

近日&#xff0c;悬镜安全成功中标国内领先的证券公司海通证券软件成分分析工具采购项目&#xff0c;中标产品为源鉴SCA开源威胁管控平台。 海通证券作为国内领先的证券公司之一&#xff0c;当下已基本建成涵盖证券期货经纪、投行、自营、资产管理、私募股权投资、另类投资、融…

JVM内存结构笔记(上)

文章目录 前言运行时数据区域1.程序计数器定义特点总结 2.虚拟机栈2.1 定义局部变量表 ★操作数栈动态链接方法返回地址(方法出口) 2.2 栈内存溢出演示栈内存溢出 java.lang.StackOverflowError 2.3问题辨析1. 垃圾回收是否涉及栈内存&#xff1f;2. 栈内存分配越大越好吗&…

使用 Miniforge3 管理 Python 环境的详细指南(基于最新实践和时效性信息,截至 2025 年)

以下是使用 Miniforge3 管理 Python 环境的详细指南&#xff08;基于最新实践和时效性信息&#xff0c;截至 2025 年&#xff09;&#xff1a; 一、Miniforge3 简介 Miniforge3 是一个轻量级 Conda 环境管理工具&#xff0c;默认使用 conda-forge 软件源&#xff08;社区维护的…

【python|二分|leetcode441】一题搞清楚二分区间问题---闭区间、左闭右开、左开右闭、全开区间

every blog every motto: Although the world is full of suffering&#xff0c; it is full also of the overcoming of it 0. 前言 一题搞清楚二分区间问题—闭区间、左闭右开、左开右闭、全开区间 0.1 题目&#xff1a;Problem: 441. 排列硬币 你总共有 n 枚硬币&#x…

【NLP 34、实践 ⑧ 基于faq知识库和文本匹配算法进行意图识别】

目录 一、demo1_similarity_function.py 二、demo2_bm25.py 三、基于faq知识库和文本匹配算法的意图识别 1.初始化 2.加载BM25模型 3.加载Word2Vec模型 4.文本向量化 5.加载知识库 6.查询方法 7.模型测试 正是江南好时节&#xff0c;落花时节又逢君 —— 25.3.7 一、demo1_sim…