news 2026/9/10 22:32:14

用Python自动化生成PPT图表,从40分钟压缩到10秒

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用Python自动化生成PPT图表,从40分钟压缩到10秒

做月度汇报的时候,我最崩溃的不是分析数据,而是把十几张图表挨个截图、贴进PPT、再调整大小对齐。后来我用Python把这套流程彻底自动化了:数据一更新,脚本跑一遍,整份带图表的PPT直接生成,从过去的40分钟压缩到不到10秒。这篇就完整拆解这套流水线的每一个环节,从环境搭建、图形生成到版式拼装,再到批量出图和定时自动化,手把手带你把“数据变幻灯片”这件事变成一条自动产线。

1. 先从工作场景看这套方案到底解决了什么

1.1 手工做PPT图形最耗时的三个环节

我做过一段时间业务数据周报,每周五下午最痛苦的就是把运营数据整理成图表再贴进PPT。整个流程拆开来看,耗时基本集中在三件事上:

第一,图表生成。用Excel画图虽然快,但一旦数据口径变了,图表的颜色、坐标轴、图例都要手动调,而且Excel图表贴进PPT之后经常出现字体错乱、线条变细这种细节问题,返工率特别高。

第二,版式调整。每张图插入PPT之后都要拖位置、调大小、改标题对齐。PPT的吸附和自动对齐在批量操作时并不好用,十张图下来至少消耗二十分钟。

第三,更新迭代。哪怕只是补一个数据,整套PPT里的图表就得重新生产一遍。手工流程里没有任何缓存机制,做一百次和做一次的工作量几乎一样。

1.2 自动化图形的核心流水线公式

我最终沉淀下来的方案就是一条流水线,核心公式很简单:

数据读取 → matplotlib生成图表 → python-pptx组装版式 → 批量输出PPT

数据读取阶段用pandas处理Excel、CSV或者数据库查询结果;matplotlib负责把数据变成高清PNG图片;python-pptx负责创建幻灯片、插入图片、排版文字。三步串起来之后,每次数据更新只需要重新运行一次脚本,图表数量哪怕从10张增加到100张,耗时也只是线性增长,人工成本几乎为零。

这套方案的优势不光是省时间,更重要的是可追溯、可复现。每个数字从哪里来、图怎么画、放在哪一页,全部由代码定义,不会出现“上次手动调的版本找不到了”这种尴尬。

2. 制图环境搭建:装好Python之后还需要准备这些

2.1 最小依赖集合,一个都不能少

我默认你的电脑上已经装好了Python 3.9以上的版本。如果还没装,直接去Python官网下安装包,安装时记得勾选“Add Python to PATH”,这会省掉后面很多环境变量配置的麻烦。

真正搭建这套PPT自动化环境,需要安装的库只有三个核心:

pip install python-pptx matplotlib pandas
  • python-pptx:负责创建和操作PPT文件,是这套方案的主心骨。
  • matplotlib:生成图表的核心库,支持柱状图、折线图、饼图、散点图等几乎所有常见图形。
  • pandas:读取Excel、CSV数据用,如果你的数据来源是数据库,可以换成SQLAlchemy或者PyMySQL。

python-pptx真正的大版本是0.6.x和1.0.x,接口上有些细微差别,建议直接装最新版。安装完成后可以用下面这段代码验证环境:

pip list | findstr pptx pip list | findstr matplotlib

如果你用的是Linux或者macOS,把findstr换成grep即可。

2.2 用虚拟环境隔离项目,避免“库冲突地狱”

做自动化脚本最怕的就是不同项目的依赖互相打架。我之前在一个服务器上同时跑爬虫和PPT生成脚本,结果matplotlib的版本被另一个项目强行降级,图表中文全部变成方块,排查了一下午。

现在我的习惯是每个项目单独建一个虚拟环境:

python -m venv ppt_env

创建完之后激活:

# Windows ppt_env\Scripts\activate # Linux / macOS source ppt_env/bin/activate

激活之后你会看到命令行提示符前面多了一个(ppt_env),这时候再执行pip install,所有包都会被装进这个独立环境里,不影响全局Python,别的项目也不影响这个环境。

2.3 第一个最小可运行的PPT脚本

环境装好后,先跑一个最简脚本确认整条链路是通的。不要一上来就写复杂逻辑,先把最小闭环跑通,后面加功能才不至于越调越乱:

from pptx import Presentation from pptx.util import Inches prs = Presentation() slide = prs.slides.add_slide(prs.slide_layouts[5]) # 空白版式 slide.shapes.add_textbox(Inches(1), Inches(1), Inches(8), Inches(2)).text = "PPT自动化测试" prs.save("test_output.pptx") print("生成成功")

这段代码创建了一页空白幻灯片,在上面放了一个文本框。如果运行后生成了test_output.pptx且能正常打开,说明python-pptx的基本链路是通的。这一步是整个项目的地基,一定要确认没问题再往下走。

3. 先把图形生成出来:matplotlib出图参数详解

3.1 面向PPT的图片尺寸并非越大越好

很多人第一次用matplotlib生成PPT配图时,直接把默认的640x480尺寸的图塞进幻灯片,结果在投影上一放大就发虚。解决思路并不复杂,关键在figsizedpi两个参数配合:

import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(10, 5), dpi=200) ax.bar(["Q1", "Q2", "Q3", "Q4"], [320, 410, 390, 520]) ax.set_title("季度销售额") fig.savefig("chart.png", dpi=200, bbox_inches="tight") plt.close(fig)

这里的逻辑是这样的:figsize=(10, 5)指的是图片的逻辑尺寸,单位是英寸;dpi=200是输出分辨率。两者相乘才是最终图片的像素值,也就是2000×1000像素。这个像素量放在16:9的PPT页面里,横跨大半页也不会糊。

bbox_inches="tight"这个参数容易被忽略,但极其重要。它会让matplotlib自动裁剪掉图表周围多余的空白边距,避免图片插入PPT时四周出现一大圈白边。

3.2 中文字体问题,这是最容易踩的坑

matplotlib默认字体不支持中文,如果你直接在图标题或坐标轴里写中文,生成出来的图片里全是方格子,也就是俗称的“豆腐块”。解决方案有两种,我推荐第二种。

第一种是全局修改字体配置,写一次全局生效:

import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["Microsoft YaHei", "SimHei"] plt.rcParams["axes.unicode_minus"] = False # 解决负号显示异常

Microsoft YaHei是微软雅黑,在Windows上基本都有;如果你的运行环境是Linux服务器,建议改成:

plt.rcParams["font.sans-serif"] = ["WenQuanYi Zen Hei", "Noto Sans CJK SC"]

第二种更稳的方式,是指定字体文件路径,不依赖操作系统的字体注册状态:

import matplotlib import matplotlib.pyplot as plt from matplotlib import font_manager font_path = "C:/Windows/Fonts/msyh.ttc" font_manager.fontManager.addfont(font_path) prop = font_manager.FontProperties(fname=font_path) matplotlib.rcParams["font.family"] = prop.get_name() matplotlib.rcParams["axes.unicode_minus"] = False

尤其是在服务器上跑定时任务时,服务器可能没有安装中文字体,如果不指定字体文件,生成的图表必然出问题。提前把字体文件放到项目目录下,用绝对路径加载,是最保险的做法。

3.3 把图保存成临时文件还是内存对象

常规做法是把图保存成PNG文件,然后让python-pptx去读文件。这个方案简单直观,但如果一次性生成几百张图,磁盘上会留下大量临时文件,管理起来很麻烦。

更好的做法是利用BytesIO把图片直接保存在内存里,让python-pptx直接读内存数据:

from io import BytesIO import matplotlib.pyplot as plt fig, ax = plt.subplots(figsize=(8, 4), dpi=200) ax.plot([1, 2, 3, 4], [10, 15, 13, 18]) ax.set_title("趋势图") img_buffer = BytesIO() fig.savefig(img_buffer, format="png", dpi=200, bbox_inches="tight") plt.close(fig) img_buffer.seek(0)

img_buffer.seek(0)这一步不能漏,它把指针移回开头,否则python-pptx读取时会拿到空数据。用内存方案跑完之后,垃圾回收会自动释放空间,不需要自己清理临时文件。

4. python-pptx版式组装:从空白页到一张完整的图形页

4.1 理解SlideLayout的真正含义

python-pptx操作PPT的第一步是理解“版式”这个概念。一个PPT文件里可以定义很多种版式,比如标题页、标题和内容、空白等。python-pptx里最常用的是前六个版式,对应索引0到5:

from pptx import Presentation prs = Presentation() for i, layout in enumerate(prs.slide_layouts): print(i, layout.name)

在默认模板中,索引5一般是空白版式,最适合用来自由排版。我的习惯是:封面页用索引0的标题页版式,正文图表页统一用索引5的空白版式,全部由代码控制位置和大小,这样出来的效果反而比依赖模板占位符更整齐统一。

4.2 用Inches统一布阵,别被坐标系骗了

python-pptx使用的内部单位是EMU(English Metric Units),直接操作这个单位容易把人绕晕。官方提供了InchesCm两个工具函数,建议全项目统一用Inches

插入图片的核心方法就一个:

from pptx.util import Inches slide.shapes.add_picture( image_file="chart.png", left=Inches(1.0), # 图片左上角距离页面左边1英寸 top=Inches(1.5), # 图片左上角距离页面顶部1.5英寸 width=Inches(8.0) # 图片宽度8英寸,高度自动等比缩放 )

这里有一个细节:widthheight只要指定其中一个,另一个会自动按原始比例缩放,不会变形。但如果你两个都写,比例又和原图不一致,就会出现图片被拉伸的情况。

默认PPT页面是13.33英寸宽、7.5英寸高,16:9比例。我习惯给页面左右各留0.5英寸白边,所以一张全宽图片的宽度就是12.33英寸。多图并排时,我会先把总宽度算清楚再分配每张图的宽度,避免出现越界。

4.3 一个函数搞定单页多图排版

实际工作中,单页PPT经常需要放两张或者四张对比图。我封装了一个通用函数,可复用性很高:

from pptx.util import Inches def add_picture_grid(slide, img_paths, cols=2, page_width=13.333, left_margin=0.5, top_margin=0.8, gap=0.3, slide_height=7.5): rows = (len(img_paths) + cols - 1) // cols usable_width = page_width - 2 * left_margin img_width = (usable_width - (cols - 1) * gap) / cols usable_height = slide_height - top_margin - 0.5 img_height = (usable_height - (rows - 1) * gap) / rows for idx, path in enumerate(img_paths): row = idx // cols col = idx % cols left = left_margin + col * (img_width + gap) top = top_margin + row * (img_height + gap) slide.shapes.add_picture(path, Inches(left), Inches(top), width=Inches(img_width), height=Inches(img_height))

这个函数接收一个图片路径列表,自动按行列排布。核心思路是:先算出可用宽度,减去间距,然后均分给每一列。使用的时候只需要准备图片列表,调一行代码即可完成多图版面,后续改列数只需要改cols参数。

4.4 在图片下方补充说明文字

图表放进PPT之后,通常还需要配一个说明或结论。python-pptx添加文本框需要四步:加文本框、设置位置尺寸、写入内容、设置字体格式:

from pptx.util import Inches, Pt txBox = slide.shapes.add_textbox(Inches(1), Inches(6.5), Inches(11), Inches(0.6)) tf = txBox.text_frame tf.text = "说明:Q4销售额环比增长33%,主要受年末大促拉动。" p = tf.paragraphs[0] p.font.size = Pt(14) p.font.name = "微软雅黑" p.font.bold = False

注意height参数在文本框里不代表实际文本高度,而是文本框的占位高度。文本超出时会继续渲染,所以建议把文本框高度设置得比预期文字多一点,防止文字被裁切。

5. 批量生产实战:从Excel数据到整套PPT一次成型

5.1 数据源文件怎么约定最省事

自动化的前提是数据组织有规律。我建议在项目目录下建立一个data文件夹,里面放一个约定好的Excel文件,比如report_data.xlsx。工作表名就是不同的业务模块,每个工作表的A列是类别名,B列是数值。

举个例子,sales_summary.xlsx里是一个工作表:

季度销售额
Q1320
Q2410
Q3390
Q4520

读取用pandas一行代码:

import pandas as pd df = pd.read_excel("data/sales_summary.xlsx")

如果你的脚本会跑在Linux服务器上,Excel文件依赖openpyxl库,记得提前安装:

pip install openpyxl

5.2 循环生成图表并逐页放入PPT

核心思路是:遍历所有工作表,每个工作表生成一张图表,然后为每个图表创建一页新的幻灯片。示例代码如下:

import pandas as pd import matplotlib.pyplot as plt from io import BytesIO from pptx import Presentation from pptx.util import Inches, Pt xlsx_path = "data/sales_summary.xlsx" excel_data = pd.read_excel(xlsx_path, sheet_name=None) # 读取所有sheet prs = Presentation() default_layout = prs.slide_layouts[5] for sheet_name, df in excel_data.items(): # 生成图表到内存 fig, ax = plt.subplots(figsize=(10, 4.5), dpi=200) ax.bar(df.iloc[:, 0].astype(str), df.iloc[:, 1]) ax.set_title(f"{sheet_name} 趋势") ax.set_xlabel(df.columns[0]) ax.set_ylabel(df.columns[1]) img_buffer = BytesIO() fig.savefig(img_buffer, format="png", dpi=200, bbox_inches="tight") plt.close(fig) img_buffer.seek(0) # 创建新幻灯片并插入图片 slide = prs.slides.add_slide(default_layout) slide.shapes.add_picture(img_buffer, Inches(0.6), Inches(1.2), Inches(12.1)) # 加标题文本框 txBox = slide.shapes.add_textbox(Inches(0.6), Inches(0.3), Inches(12), Inches(0.7)) tf = txBox.text_frame tf.text = f"{sheet_name} 分析报告" tf.paragraphs[0].font.size = Pt(24) tf.paragraphs[0].font.bold = True tf.paragraphs[0].font.name = "微软雅黑" prs.save("output/monthly_report.pptx") print("PPT生成完毕,共", len(excel_data), "页")

sheet_name=None这个参数非常关键,它让read_excel一次读取所有工作表,返回一个字典,键是工作表名,值是DataFrame。这样每个工作表天然就对应PPT里的一页,循环逻辑非常清晰。

5.3 自动生成目录页和总览页

图表页生成完之后,一份正式的汇报PPT还应该有封面和目录。这两个页面不需要图表,但要能根据实际生成的页数自动调整内容。

我在项目里写了一个生成目录页的函数:

def add_toc_slide(prs, entries): slide = prs.slides.add_slide(prs.slide_layouts[5]) txBox = slide.shapes.add_textbox(Inches(0.8), Inches(0.5), Inches(11), Inches(1)) txBox.text_frame.text = "目录" txBox.text_frame.paragraphs[0].font.size = Pt(32) txBox.text_frame.paragraphs[0].font.bold = True bodyBox = slide.shapes.add_textbox(Inches(0.8), Inches(1.6), Inches(11), Inches(5.5)) tf = bodyBox.text_frame for idx, entry in enumerate(entries, start=1): paragraph = tf.add_paragraph() if idx > 1 else tf.paragraphs[0] paragraph.text = f"{idx}. {entry}" paragraph.font.size = Pt(18)

add_paragraph的细节在这里体现出来:文本框默认自带一个空段落,所以从第二个条目开始才追加新段落,否则会多出一行空行。

把目录页放在第一个循环页之前,就形成了标准的“封面→目录→内容页→结尾”结构。整份PPT从头到尾全部由脚本自动生成,不需要任何手动干预。

6. 九成会踩的坑:字体、清晰度、越界和性能

6.1 图表中文变成方块:根源不是python-pptx而是matplotlib

很多人在群里反馈“python-pptx插入图片中文全乱了”,我先纠正一下:python-pptx本身不处理图片里的渲染,图片是什么样插入后就是什么样。问题几乎都出在matplotlib生成图片阶段的中文字体缺失。

判断方法很简单,直接看生成的PNG图片,如果PNG里面中文就是豆腐块,那问题就在matplotlib;如果PNG正常但插入PPT后模糊,再考虑是不是图片分辨率不够。

解决方案在3.2节已经详细讲过,核心就是两条:Windows环境用Microsoft YaHei,服务器环境用font_manager.addfont指定字体文件路径。我最推荐的还是第二种,可控性更强,不依赖系统环境。

6.2 图片在PPT里模糊:只调DPI还不够

DPI调得再高,如果figsize本身就很小,输出像素值仍然不会大。举个例子:figsize=(4, 3), dpi=300,图片像素是1200×900,铺满一张宽屏PPT肯定不够,会模糊。

记住一个公式:

图片像素宽度 = figsize宽 × dpi

如果你需要一张宽度占10英寸的PPT图片,希望它足够清晰,至少应该保证像素宽度在2000左右。所以figsize=(10, 5), dpi=200figsize=(8, 4), dpi=250都是安全方案,像素宽度分别为2000和2000。

另外还有一个容易被忽略的点:插入图片时手动指定widthheight后,如果尺寸比例和原始图不一致,python-pptx会拉伸图片,导致文字变形、边缘模糊。所以我的建议是只指定width,让height自动按比例缩放。如果你确实需要精确控制高度,请在生成图片时就严格控制figsize的比例,保证原图和插入尺寸比例一致。

6.3 图片越界或者重叠:坐标计算要对齐“左上角”

python-pptx的坐标是相对于幻灯片左上角计算的,所有lefttop都表示图形左上角的位置。很多人想当然地以为是中心点坐标,结果图片放到一半出了屏幕。

我在4.3节给的网格函数里已经处理好了坐标计算,核心是:

left = left_margin + col * (img_width + gap) top = top_margin + row * (img_height + gap)

这个公式的原理是:先算左边距,然后加上列索引乘以每列占用的总宽度。注意这里用的是(img_width + gap)而不是img_width,否则两张图之间不会有间隔。

还有一个隐蔽问题:PPT页面的实际尺寸可能不一样。python-pptx默认创建一个16:9的演示文稿,宽度是13.333英寸,高度是7.5英寸。但如果你用旧模板创建PPT,页面可能是4:3的,宽10英寸高7.5英寸。我的建议是不要依赖默认值,统一在创建之后显式设置页面尺寸:

prs = Presentation() prs.slide_width = Inches(13.333) prs.slide_height = Inches(7.5)

这样无论后续插入多少内容,页面规格都是稳定的。

6.4 批量生成几百页时的性能优化

当你需要生成几百页图表时,脚本跑得越来越慢,甚至会内存溢出。原因多数在于:每次循环创建matplotlib图像之后,没有及时释放内存。

优化手段主要有三个:

第一,plt.close(fig)必须写在循环内,在保存图片之后立刻关闭图像对象。这是最基础也最重要的一步,不关闭的话内存会持续累积。

第二,不要在循环里重复加载中文字体文件。字体加载是很重的IO操作,应该在脚本开头只加载一次,循环里只引用。

第三,如果图表样式完全一致,只是数据不同,可以复用同一个Figure对象:

fig, ax = plt.subplots(figsize=(10, 5), dpi=200) for df in all_sheets: ax.clear() # 清空坐标轴内容 ax.bar(df.iloc[:, 0].astype(str), df.iloc[:, 1]) ax.set_title(df.name) fig.savefig(buf, format="png", dpi=200, bbox_inches="tight") buf.seek(0) # 插入PPT...

这里的关键是ax.clear(),它清空坐标轴但保留Figure本身,避免了反复创建子图的性能开销。实测在生成300页PPT时,用复用方式比每次新建Figure快了将近一倍。

7. 更进一步:把脚本真正接进自动化产线

7.1 用命令行参数控制灵活度

写死数据源路径和输出路径的脚本只能给自己用。为了让自动化更灵活,我习惯用argparse为脚本加参数:

import argparse parser = argparse.ArgumentParser(description="自动生成月报PPT") parser.add_argument("--data", required=True, help="Excel数据文件路径") parser.add_argument("--output", default="output/monthly_report.pptx", help="PPT输出路径") parser.add_argument("--title", default="月度经营分析", help="PPT标题") args = parser.parse_args() print("数据源:", args.data) print("输出:", args.output)

这样你在命令行里一行指令就能完成所有操作:

python build_report.py --data data/march.xlsx --output output/march.pptx --title "3月经营分析"

把参数暴露出来之后,脚本就不只是一个一次性工具,而是一个真正可以复用的命令行程序。

7.2 挂进Windows任务计划或Linux cron定时执行

每周五下午自动出周报,这就是我实际的运行方式。Windows下用任务计划程序,Linux服务器上用cron,本质都是定时执行上面这条命令。

以Linux crontab为例,每周五下午5点执行:

0 17 * * 5 cd /opt/ppt_automation && /opt/ppt_automation/ppt_env/bin/python build_report.py --data data/weekly.xlsx --output output/weekly.pptx

注意两点:cron里最好使用虚拟环境里Python的绝对路径;执行前先cd到项目目录,确保相对路径不会出问题。Windows任务计划程序操作类似,触发条件选“按周”,然后设置周五17点执行命令就行。

如果脚本里涉及发送邮件、上传到内部系统之类的后续动作,可以继续追加命令,把整个链条串起来。

7.3 生成后自检:让脚本自己检查文件是否可靠

定时任务跑完之后,不能指望每次手动打开PPT检查结果。我写了两个简单的自检逻辑放进脚本尾部:

from pptx import Presentation # 检查文件是否损坏且页数是否正确 prs_check = Presentation("output/monthly_report.pptx") expected_pages = len(excel_data) + 2 # 内容页 + 封面 + 目录 if len(prs_check.slides) != expected_pages: raise RuntimeError(f"页数异常: 期望{expected_pages}, 实际{len(prs_check.slides)}") # 检查是否有图片资源 total_pictures = sum( 1 for slide in prs_check.slides for shape in slide.shapes if shape.shape_type == 13 # PICTURE类型 ) print(f"自检通过:共{len(prs_check.slides)}页,{total_pictures}张图片")

shape.shape_type == 13是python-pptx里图片类型的常量值。如果自检输出页数对、图片数对,这份PPT基本可以放心交付;如果异常,脚本会在定时任务日志里留下错误信息,邮件报警也能直接接上。

我做这个自动化方案的过程中,最大的领悟是:千万不要在脚本里试图模拟“手工做PPT”的所有习惯。手工喜欢把图拖来拖去看效果,但代码必须讲究规则和复现。把数据结构和页面规则定清楚之后,Python给出的回报是稳定、快速、不用加班。这套代码我已经用了好几个月,期间只需要在数据格式变化时稍微调整脚本,日常基本不用再碰PPT了。如果你的工作里也有“数据要变成图文汇报”的重复场景,强烈建议花一个下午把它自动化,这个投入回报率会超出你的预期。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 22:32:12

ITSM软件选型指南:国内外产品对比与实施策略

1. ITSM软件行业现状与选型痛点IT服务管理(ITSM)软件市场近年来呈现出爆发式增长态势。根据Gartner最新报告显示,全球ITSM工具市场规模在2023年达到约50亿美元,年复合增长率保持在12%左右。这个快速增长的市场中,既有S…

作者头像 李华
网站建设 2026/9/10 22:30:35

CVAT 自动标注 5 步上手:模型选择、标签映射与阈值设置

CVAT 自动标注 5 步上手:模型选择、标签映射与阈值设置 【免费下载链接】cvat Computer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products,…

作者头像 李华
网站建设 2026/9/10 22:30:01

定速风电机组技术解析与市场应用

1. 定速风电机组的技术本质与历史定位 在风电行业追求变速机组、智能控制的今天,定速风电机组依然保持着独特的市场存在。这种采用异步发电机直接并网的经典设计,就像机械手表界的ETA 2824机芯——结构简单、维护方便、经久耐用。我曾在内蒙古某风电场拆…

作者头像 李华
网站建设 2026/9/10 22:24:37

Semgrep 静态分析实战:用长得像源码的模式找出 bug 变体

Semgrep 静态分析实战:用长得像源码的模式找出 bug 变体 【免费下载链接】semgrep Lightweight static analysis for many languages. Find bug variants with patterns that look like source code. 项目地址: https://gitcode.com/GitHub_Trending/se/semgrep …

作者头像 李华
网站建设 2026/9/10 22:23:33

Qwen-Agent 本地部署:改 1 行配置跑通模型推理

Qwen-Agent 本地部署:改 1 行配置跑通模型推理 【免费下载链接】Qwen-Agent Agent framework and applications built upon Qwen>3.0, featuring Function Calling, MCP, Code Interpreter, RAG, Chrome extension, etc. 项目地址: https://gitcode.com/GitHub…

作者头像 李华