news 2026/4/27 17:39:29

基于AI技能与MCP协议实现开发工作流自动化的桌面应用实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于AI技能与MCP协议实现开发工作流自动化的桌面应用实践

1. 项目概述:一个用AI技能重塑开发工作流的桌面应用

如果你是一名开发者,每天的工作是不是都围绕着Jira看板、Git分支和GitHub PR展开?从领任务、写代码、提交、提PR、处理评审意见,到最终合并,这一套流程下来,少说也得切换五六个工具,复制粘贴无数次链接。更别提有时候还得在多个代码仓库之间来回横跳,光是搞清楚一个功能改动涉及哪些项目,就够喝一壶的。Magic Slash这个项目,就是冲着解决这些“开发流程中的摩擦力”来的。它不是一个简单的命令行工具,而是一个深度整合了Claude Code AI助手、Jira和GitHub的桌面应用,通过七个精心设计的“技能”(Skills),试图将整个开发周期自动化、串联起来。

简单来说,你可以把它理解为一个“开发流程的自动驾驶仪”。它的核心思想是:你只需要告诉它“开始处理PROJ-123这个Jira任务”,它就能自动帮你拉取任务详情、分析影响范围、创建独立的Git工作区,然后引导Claude Code开始编码。后续的提交、创建PR、处理评审、乃至任务完结,都只需要一个简单的自然语言命令。这背后依赖的是Model Context Protocol(MCP),它让Claude Code能够安全地连接到你公司的Jira和GitHub,读取和写入数据,从而实现了工作流中不同环节的无缝衔接。

这个项目特别适合那些已经在使用Jira进行项目管理、GitHub进行代码托管,并且对AI辅助编码(特别是Claude Code)有较高接受度的开发团队或个人。无论你是全栈工程师需要同时处理前后端,还是团队负责人想更清晰地追踪任务状态,Magic Slash都提供了一种将琐碎操作“打包”执行的思路。接下来,我会带你深入拆解它的设计哲学、每个技能的实现细节,以及在实际部署和使用中可能遇到的“坑”和应对技巧。

2. 核心设计思路:为何是“技能”而非“命令”?

Magic Slash最吸引我的地方,不是它集成了多少工具,而是它看待开发流程的视角——它把每一个关键节点都抽象成了一个“技能”(Skill)。这不仅仅是命名上的小花招,背后体现的是一种以“任务”和“意图”为中心的设计哲学,这与传统的以“操作”为中心的命令行工具截然不同。

2.1 从“操作命令”到“意图技能”的转变

传统的CLI工具,比如Git本身,是动词驱动的:git checkout,git commit,git push。你需要精确地知道每一步该用什么命令,并且手动串联它们。而Magic Slash的七个技能:/magic:start,/magic:commit,/magic:pr,/magic:review,/magic:resolve,/magic:done,以及/magic:continue,都是围绕开发者的“意图”来命名的。

  • /magic:start:意图是“我要开始一个新功能或修复”。你不需要知道要先git fetch、再git checkout -b、然后去Jira复制描述。你只需要提供任务ID,剩下的“分析范围、选择仓库、创建工作区、初始化上下文”这一系列操作,都由技能内部逻辑串联完成。
  • /magic:pr:意图是“我的代码写好了,可以提审了”。它封装了git push、调用GitHub API创建PR、更新Jira状态、添加评论等多个步骤。你的意图是“提审”,而不是执行一系列离散的Git和API操作。
  • /magic:resolve:意图是“我要处理PR上的评审意见”。这可能是最复杂的意图之一,涉及到读取评论、理解修改建议、应用代码变更、生成修复提交、并安全地强制推送。技能将其打包成一个原子操作。

这种设计极大地降低了认知负担。开发者可以更专注于“要做什么”,而不是“怎么做”。这尤其适合与Claude Code这类AI助手配合,因为你可以用更自然的语言(如“开始处理PROJ-123”、“创建PR”)来触发复杂的自动化流程。

2.2 多仓库协同工作的智能路由

现代微服务或前后端分离架构下,一个业务功能常常横跨多个代码仓库。Magic Slash对此的解决方案非常巧妙:基于关键词的智能仓库选择。这不仅仅是配置文件里的一个功能项,而是整个/magic:start技能的核心逻辑。

它的工作流程是这样的:当你输入/magic:start PROJ-123时,技能会:

  1. 通过MCP从Jira获取PROJ-123的标题、描述、标签等信息。
  2. 遍历你预先在config.json中配置的所有仓库。每个仓库都可以设置一组keywords,比如api仓库的关键词可能是["backend", "api", "server"]web仓库则是["frontend", "ui", "react"]
  3. 执行一套评分算法:
    • 标签匹配:如果Jira任务的标签或组件与某个仓库的关键词匹配,加10分。这是强信号,表明任务明确归属。
    • 标题匹配:在任务标题中找到关键词,加5分。
    • 描述匹配:在任务描述中找到关键词,加2分。
  4. 根据总分排序,如果某个仓库分数显著高于其他(比如超过阈值),则自动为其创建工作树(worktree)。如果多个仓库分数相近,则会交互式地询问你:“这个任务似乎涉及多个仓库,你想用哪个?(1, 2, 或 ‘all’)”

实操心得:关键词配置的艺术这里有个很容易踩的坑:关键词设置得太宽泛或太重叠。比如,如果你给apiweb仓库都设置了["user", "profile"]这类业务关键词,那么一个关于“用户个人资料”的任务可能会让两个仓库得分都很高,导致每次都要手动选择,失去了自动化的意义。我的经验是:

  • 技术栈隔离:用技术栈关键词做主要区分。api["springboot", "nodejs", "api", "endpoint"]web["react", "vue", "component", "css"]
  • 业务上下文辅助:可以添加一些高层次的业务模块关键词,但要确保不冲突。例如,只有api仓库配置["payment", "billing"],而web仓库配置["checkout", "invoice-ui"]
  • 利用Jira组件:如果你们的Jira任务规范使用了“组件”(Component)字段,并且组件名与仓库名有明确映射(如组件“Backend-API”对应api仓库),那么在配置关键词时直接加入组件名,可以拿到最高的10分匹配,实现精准路由。

2.3 状态感知与上下文传递

Magic Slash的另一个精妙设计是技能间的状态感知。这主要通过Git工作树(worktree)和分支命名约定来实现。

当你使用/magic:start PROJ-123时,它会在你配置的仓库路径下,创建一个独立的工作树,目录名通常为仓库名-PROJ-123,并切出一个名为feature/PROJ-123的分支(分支名格式可配置)。这个工作树目录和分支名,就成了后续所有技能的“上下文锚点”。

  • 当你在这个工作树目录下运行/magic:commit时,技能能自动识别出当前关联的任务ID(从目录名或分支名解析),从而在生成的提交信息中自动添加[PROJ-123]前缀(如果配置开启)。
  • 当你运行/magic:pr时,技能能知道应该将feature/PROJ-123分支推送到哪个远程仓库,并且能准确地将PR链接回帖到Jira的PROJ-123任务下。
  • 甚至运行/magic:review/magic:resolve时,如果不在特定工作树,你也可以通过/magic:review PROJ-123来指定任务,技能会去查找该任务关联的PR。

这种设计避免了在每个技能中重复输入任务ID,让整个流程如行云流水。它模拟了人类开发者的心智模型:我当前正在“处理PROJ-123这件事”,那么所有后续操作都默认围绕这件事展开。

3. 七大核心技能深度解析与实操要点

理解了设计哲学,我们再来逐一拆解这七个技能,看看它们具体做了什么,以及在实际使用中需要注意哪些细节。

3.1/magic:start:智能任务启动器

这是整个工作流的入口,也是复杂度最高的技能之一。它的输入是一个标识符(Jira任务号如PROJ-123,或GitHub Issue号如42),输出是一个或多个配置好、可立即开始编码的Git工作树环境。

内部工作流程详解:

  1. 类型检测:根据输入格式判断是Jira Key(包含项目前缀和数字)还是GitHub Issue数字。
  2. 获取任务详情:通过对应的MCP服务器(Atlassian MCP或GitHub MCP)获取任务的标题、描述、标签、状态等信息。
  3. 仓库匹配与选择:如前所述,使用关键词评分算法计算每个配置仓库的关联度得分。
  4. 创建工作树:对于每个选中的仓库,执行git worktree add命令。这里有个贴心细节:它会检查配置中的worktreeFiles列表(例如[".env", ".env.local"]),并将这些文件从主仓库复制到新工作树中。这对于需要环境配置的项目非常实用,避免了每次手动复制.env文件。
  5. 生成Agent上下文:在工作树目录中,它会初始化一个用于Claude Code的“上下文”。这通常包括将Jira任务的标题和描述作为背景信息提供给AI,让Claude Code在后续编码对话中能理解当前的工作目标。

注意:工作树(worktree)与普通分支的区别:Git工作树允许你在同一个本地仓库克隆中,同时检出于多个不同的分支,并且每个分支都有自己独立的工作目录。这比git checkout来回切换要干净得多,避免了未提交更改的冲突。Magic Slash默认使用工作树,确保了每个任务环境的隔离性。

实操避坑指南:

  • 权限准备:首次运行前,务必确保Atlassian MCP和GitHub MCP的认证已完成。安装脚本会引导,但如果失败,需要手动检查~/.claude/settings.json中的配置。特别是GitHub Token需要repowrite:discussion等权限。
  • 仓库路径配置config.json中的repositories.<name>.path必须是绝对路径。使用相对路径或~缩写会导致工作树创建失败。
  • 分支冲突处理:如果feature/PROJ-123分支已存在,/magic:start会失败。此时应考虑使用/magic:continue来恢复现有工作,或者手动删除旧分支后再尝试。

3.2/magic:commit:原子提交与消息规范

这个技能的目标是将暂存区的更改,打包成一个符合团队规范的、语义清晰的提交。它远不止是git commit -m “...”的封装。

核心步骤解析:

  1. 暂存所有更改:相当于先执行git add .。确保所有修改都被纳入本次提交考量范围。
  2. 差异分析:技能会分析暂存区与HEAD的差异,评估更改的“内聚性”。这是一个高级功能:如果它检测到你的更改明显属于两个不相关的功能(比如同时修改了用户认证逻辑和支付页面样式),它会建议你拆分提交。这有助于保持提交历史的清晰。
  3. 生成提交信息:这是它的核心价值。它遵循你在commit.format中配置的规范(如conventional,angular,gitmoji),并基于代码差异,自动生成描述性的提交信息。例如,看到你添加了一个新的API路由,它可能会生成feat(api): add GET /user/profile endpoint
  4. 自动修复钩子错误:在最终提交前,它会运行项目的pre-commit钩子(如果存在)。如果钩子执行失败(如lint错误、格式问题),它会尝试调用Claude Code自动修复这些错误,然后重新尝试提交。这相当于一个自动化的“修复并提交”循环。
  5. 创建提交:最终执行git commit,并可能根据配置添加Co-author(Claude本身)。

配置详解与个性化:config.json的每个仓库配置下,commit部分提供了细粒度控制:

"commit": { "style": "single-line", // 或 "multi-line",后者会生成带详细正文的信息 "format": "angular", // "conventional", "angular", "gitmoji", "none" "coAuthor": true, // 是否添加 "Co-authored-by: Claude AI <...>" "includeTicketId": true // 是否在消息开头添加 [PROJ-123] }
  • format选择angular格式是<type>(<scope>): <subject>,适合有明确模块划分的项目。gitmoji则用表情符号增加可读性,但可能不适合严肃的企业环境。conventional是最通用的<type>: <subject>
  • includeTicketId:强烈建议开启。这能让提交历史与任务管理系统直接关联,在git log或GitHub上都能一眼看出提交属于哪个任务。

3.3/magic:pr:一键提交流水线

这个技能将开发者从“本地提交”到“代码进入评审队列”之间的所有手动步骤自动化。它的输入是当前工作树(隐含了分支和任务信息),输出是一个已创建的PR和更新了状态的Jira任务。

执行链路拆解:

  1. 推送分支:执行git push origin feature/PROJ-123
  2. 创建PR:通过GitHub MCP调用API创建Pull Request。这里有个智能点:它会尝试查找仓库根目录下的PULL_REQUEST_TEMPLATE.md文件,并以此作为PR描述的模板进行填充。同时,如果autoLinkTicketstrue,会自动在描述中插入Jira任务的链接。
  3. 更新Jira状态:通过Atlassian MCP,将任务状态流转到“待评审”(或你配置的对应状态)。
  4. 添加Jira评论:在Jira任务下添加一条评论,内容包含新创建的PR链接。这方便项目成员在不打开GitHub的情况下追踪代码进度。

多仓库场景下的协同:这是/magic:pr技能的一个亮点。如果你在/magic:start时选择了all(多个仓库),那么在每个仓库的工作树下运行/magic:pr,它会识别到这是一个跨仓库任务。它会为每个仓库分别创建PR,但可能会在PR描述中注明“此更改与[其他PR链接]相关”,从而帮助评审者理解全局上下文。

3.4/magic:review/magic:resolve:AI驱动的代码评审闭环

这两个技能构成了一个完整的“评审-修复”循环,极大地提升了处理代码评审的效率。

/magic:review:智能代码审查助手这个技能本身不修改代码,而是扮演一个极其细致的“第一轮评审员”角色。

  1. 定位PR:根据当前分支或指定的任务ID,找到对应的GitHub PR。
  2. 区分评审类型:判断是“自我评审”(自己的PR)还是“外部评审”(他人的PR)。对于自我评审,AI的评论可能会更侧重于代码风格、潜在bug和最佳实践;对于外部评审,则会更加客观。
  3. 差异分析与评论生成:获取PR的diff,对每个变更的文件进行分析。AI会检查:
    • 功能性错误:逻辑错误、边界条件处理不当。
    • 代码风格:是否符合项目lint规则、命名约定。
    • 安全与性能:潜在的安全漏洞(如SQL注入)、性能低下写法。
    • 可读性与架构:代码是否清晰、函数是否过于复杂、是否有重复代码。
  4. 提交评审意见:将发现的问题分类(Blocking必须修改、Suggestion建议、Praise值得表扬)并以GitHub内联评论(inline comment)的形式提交到PR中。

/magic:resolve:自动修复评审意见这是“魔法”浓度最高的技能之一。当PR收到评审意见后,运行此技能:

  1. 获取未解决的评论:从PR中拉取所有状态为PENDING或未解决的评论。
  2. 分析评论意图:AI会解读每一条评论,理解评审者要求修改的具体内容。例如,“这个变量名应该更达意”或“这里需要添加空值检查”。
  3. 应用代码变更:AI直接在本地工作树中修改代码,以满足评审意见。这可能涉及重命名、逻辑重构、添加注释或测试。
  4. 生成修复提交:根据resolve.commitMode配置,要么创建一个新的fixup commit(new模式),要么amend到上一个提交(amend模式)。新的提交信息会关联原评论。
  5. 强制推送与回复:使用git push --force-with-lease安全地更新远程分支。如果replyToComments开启,它还会在GitHub上每条被解决的评论下回复“Fixed in commit XXXX”,形成闭环。

重要警告/magic:resolve的自动修改和强制推送是高风险操作。务必在运行前确保:1)你理解并认可AI将要做的修改;2)你所在的分支只有你一个人在操作(避免覆盖他人的推送);3)最好在运行后自己再git diff检查一遍。对于复杂的逻辑修改,AI可能无法完全理解上下文,手动干预仍是必要的。

3.5/magic:done/magic:continue:流程的终点与断点续传

  • /magic:done:这是工作流的“收官”技能。它会在PR合并后,将Jira任务状态置为“完成”,并添加一条总结性评论。它确保了任务管理工具和代码仓库的状态同步,避免了“代码已合并,任务还挂着”的情况。
  • /magic:continue:这是一个实用性很强的“恢复”技能。当你中途切换了任务,或者第二天回来想继续工作时,不需要重新走/magic:start的流程(那会创建新的工作树)。只需运行/magic:continue PROJ-123,它就能帮你定位到之前为这个任务创建的工作树目录,并切换过去,恢复之前的开发上下文。

4. 桌面应用:一体化的开发指挥中心

Magic Slash不仅是一套CLI技能,它还提供了一个Electron构建的桌面应用。这个应用的价值在于它将所有分散的元素整合到了一个可视化界面中。

核心功能模块:

  1. 集成的Claude Code终端:应用内嵌了终端,可以直接与Claude Code对话,并且终端环境已经预设好了当前工作树和任务上下文,AI的回答会更精准。
  2. 项目管理侧边栏:这里以看板的形式展示了你通过/magic:start创建的所有任务及其状态(进行中、待PR、待评审、已完成),一目了然。你可以直接从侧边栏快速切换到某个任务的工作区。
  3. 技能快捷面板:提供按钮或快捷键来快速触发七个核心技能,比输入命令更便捷。
  4. 用户配置管理:图形化界面管理config.jsonprofile.md,特别是可视化地配置仓库关键词,比编辑JSON文件更直观。
  5. 更新管理:应用启动时自动检查更新,确保你始终使用最新版本。

开发与构建笔记:项目使用Electron + React + Tailwind CSS技术栈。对于想要贡献桌面端功能的开发者,需要注意:

# 安装依赖时,需要分别安装主项目和桌面应用的依赖 npm install cd desktop npm install # 开发模式运行,支持热重载 npm run desktop # 构建生产环境包(跨平台) npm run desktop:build # 打包为特定平台的可执行文件 npm run desktop:package

桌面应用的代码结构清晰,主进程(main)处理应用生命周期、配置管理和进程通信;渲染进程(renderer)是React构建的UI;预加载脚本(preload)安全地暴露Node.js API给渲染进程。

5. 配置详解与高级调优

Magic Slash的强大和灵活,很大程度上源于其详尽的配置文件。理解并正确配置~/.config/magic-slash/config.json是发挥其威力的关键。

5.1 多语言与个性化配置

每个仓库可以独立配置交互语言,这在国际化团队中非常有用。

"languages": { "commit": "en", "pullRequest": "fr", "jiraComment": "en", "discussion": "en" }
  • discussion:这个设置决定了Claude Code在与你就本仓库代码对话时使用的语言。如果你习惯用中文讨论代码,可以设为zh(如果Claude支持),但目前项目文档主要支持enfr

5.2 用户画像(Profile)驱动交互

~/.config/magic-slash/profile.md文件是Magic Slash实现个性化体验的核心。它不仅仅是一个配置文件,更是你与AI协作的“名片”。

name: 张三 role: Dev technical_level: Expert communication_style: Technical languages: [English, 中文] I prefer detailed, technical explanations and care a lot about performance and clean architecture. Please don't hesitate to suggest optimizations.
  • technical_level:设置为Expert时,Claude Code在生成代码或解释时,会默认使用更高级的术语、更复杂的模式,并省略一些基础解释。设置为Beginner则会更加循序渐进。
  • role:如果你是DesignProduct角色,AI在分析任务或生成PR描述时,可能会更侧重UI/UX或业务逻辑的描述。
  • 自由文本区:这里是黄金区域。你可以在这里定义你的编码偏好(“我喜欢用async/await而不是Promise.then”)、项目特定的约定(“我们项目的API响应格式统一是{code, data, message}”),或者要求AI避免某些模式。这些信息会被注入到AI的上下文中,使它的输出更贴合你的个人习惯。

5.3 分支与工作树策略

"branches": { "development": "develop" }, "worktreeFiles": [".env", ".env.local", "config/local.yaml"]
  • development:指定主开发分支。/magic:start创建的工作树和PR,都将基于这个分支。如果不配置,每次都会询问,比较麻烦。
  • worktreeFiles:这是提升开发体验的重要配置。将那些不属于版本控制但又是开发必需的文件(如本地环境配置、调试配置文件)列在这里。Magic Slash在创建工作树时,会自动将这些文件从主仓库目录复制到新工作树,省去手动配置环境的步骤。

6. 实战部署、问题排查与经验总结

6.1 安装与初始化踩坑实录

尽管提供了一键安装脚本,但在企业内网或特定环境下可能会遇到问题。

常见问题1:MCP认证失败

  • 症状:安装脚本卡在配置Atlassian或GitHub MCP步骤,提示认证错误。
  • 排查
    1. 检查网络连接,确保能访问api.atlassian.comapi.github.com
    2. 手动检查~/.claude/settings.json文件。对于Atlassian,应包含OAuth流程获取的access_token;对于GitHub,应包含具有足够权限的Personal Access Token。
    3. 对于企业GitHub/GitLab或自建Jira:安装脚本默认配置的是公有云地址。你需要手动编辑settings.json,将baseUrl修改为你公司的内部地址。例如,将https://api.github.com改为https://github.your-company.com/api/v3

常见问题2:Git工作树创建权限错误

  • 症状:运行/magic:start时提示fatal: ‘xxx’ is already a working tree或权限错误。
  • 解决
    1. 确保配置的仓库path是绝对路径,并且你有该目录的读写权限。
    2. 如果提示工作树已存在,可以先手动删除旧的目录(rm -rf /projects/my-api-PROJ-123),或者使用/magic:continue来恢复。
    3. 检查主仓库的.git目录是否正常,没有损坏。

6.2 与现有工作流的融合策略

引入Magic Slash不代表要抛弃所有现有工具,而是如何让它平滑接入。

  • Git Hook兼容:确保你的项目已有的pre-commitcommit-msg钩子与/magic:commit的自动修复功能能协同工作。有时AI的自动修复可能会与严格的钩子规则冲突,可以在仓库配置中暂时关闭commit步骤的自动修复,或者调整钩子脚本的宽容度。
  • CI/CD流水线/magic:pr创建的PR,其标题和描述格式是固定的。确保你们的CI系统(如Jenkins、GitLab CI、GitHub Actions)能正确解析这些信息来触发构建或进行关联。
  • 团队协作:如果团队中只有你一个人使用Magic Slash,而其他人用传统流程,需要注意:
    • PR描述中的自动链接可能对其他成员有帮助。
    • 使用/magic:resolve强制推送前,务必确认没有人在同一个分支上工作,避免覆盖他人的提交。
    • 可以向团队演示/magic:review技能,将其作为一个高效的“自动化代码审查助手”来推广,即使不用于自动修复,其评审建议也很有价值。

6.3 性能与稳定性考量

  • 网络依赖:所有技能严重依赖MCP服务器的网络连接。Jira或GitHub API的延迟或故障会直接影响技能执行。对于关键操作,考虑增加重试逻辑或超时处理(可能需要修改技能源码)。
  • AI生成的不确定性/magic:commit的消息生成和/magic:resolve的代码修改,质量取决于Claude Code的理解。虽然大部分时间很准确,但对于极其复杂或模糊的变更,生成的消息可能不贴切,修改可能有偏差。永远要把AI的输出作为建议,最终责任人是你自己。提交前看一眼消息,解决评审后diff一下修改,这是必须养成的好习惯。
  • 配置的版本管理:你的config.jsonprofile.md是个性化核心。建议将它们纳入你的dotfiles仓库进行版本管理,方便在新机器上快速恢复开发环境。

我个人在深度使用Magic Slash几个月后,最大的体会是:它最大的价值不在于完全取代人工,而在于消除上下文切换和机械操作带来的心智损耗。我不再需要记住Jira任务的准确描述,不再需要构思提交信息,不再需要手动复制PR链接回帖。它把所有这些“琐事”打包成了几个简单的意图。这让我能更长时间地保持在“深度编码”的心流状态中。当然,它目前更适合功能开发、Bug修复这类模式化较强的任务,对于需要大量探索性、架构性思考的全新任务,传统的、更自由的工作方式可能仍然更有效。它是一个强大的“加速器”和“标准化工具”,但如何驾驭它,让它服务于你的工作节奏,而不是被其流程所束缚,才是关键。

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

3个理由告诉你:为什么Element Plus是Vue 3开发者的必备UI组件库

3个理由告诉你&#xff1a;为什么Element Plus是Vue 3开发者的必备UI组件库 【免费下载链接】element-plus &#x1f389; A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus 你是不是正在寻找一个既美观又高…

作者头像 李华
网站建设 2026/4/27 17:25:07

从微博评论到产品洞察:手把手教你部署微调后的6分类情感模型到Flask API

从实验到生产&#xff1a;6分类情感分析模型的Flask API部署实战 在自然语言处理领域&#xff0c;训练出一个高准确率的情感分析模型只是第一步。真正创造价值的关键&#xff0c;在于如何将这个模型转化为可供产品调用的服务。本文将带你完整走过从PyTorch模型到生产级API的转化…

作者头像 李华