全面解析 Coze 工作流与 AI Agent 实例搭建
全面解析了 Coze 开源 AI Agent 开发平台,介绍了其核心价值、智能体构建、工作流自动化、知识库管理及部署功能。通过实例演示了如何搭建一个成语视频生成的 AI Agent 工作流,涵盖提示词编写、图像生成、视频合成等步骤。文章对比了在线版与开源版 Coze 的优缺点,包括功能完整性、数据安全、定制化能力及适用人群,为开发者选择合适的部署方案提供参考。

全面解析了 Coze 开源 AI Agent 开发平台,介绍了其核心价值、智能体构建、工作流自动化、知识库管理及部署功能。通过实例演示了如何搭建一个成语视频生成的 AI Agent 工作流,涵盖提示词编写、图像生成、视频合成等步骤。文章对比了在线版与开源版 Coze 的优缺点,包括功能完整性、数据安全、定制化能力及适用人群,为开发者选择合适的部署方案提供参考。

近日,Coze 开源引起科技圈激烈讨论。Coze 开源是 AI 领域的重要举措,既通过 Apache 2.0 协议降低了智能体开发门槛,让开发者可自由部署、二次开发及商用,推动技术普惠与行业标准化,又能借助开源社区构建开发者生态,助力字节跳动推广豆包大模型和云服务,重塑行业竞争格局;但同时也面临功能生态短板(如缺失部分高级功能、插件较少)、可持续性风险(算力需求与变现压力)及安全治理挑战(漏洞风险与劣质应用泛滥)等问题,是一把兼具机遇与挑战的'双刃剑'。

扣子空间是新一代 AI Agent 开发平台。凭借'低代码'功能,使开发门槛降低。开发的 AI 智能体,可以通过 API 或 SDK 将 AI 应用集成到你的业务系统中。提高了编码效率。
这是 Coze 的基础且核心能力,支持零代码或低代码搭建专属 AI 智能体。
即前文提到的'工作流',用于将复杂任务拆解为自动化流程,是提升 Bot 效率的关键工具。
用于存储和管理 Bot 的'专属知识',确保 Bot 回复的准确性与针对性。
适合多人共同开发或企业级使用。
| 对比维度 | Coze | Dify | n8n |
|---|---|---|---|
| 定位 | 字节跳动推出的开源无代码 AI 聊天机器人平台,主打快速构建对话式 AI 应用 | 开源的大语言模型 (LLM) 应用开发平台,融合后端即服务(Backend as Service)和 LLMOps 理念,专注于基于大语言模型的智能应用全生命周期管理 | 开源的、可扩展的工作流自动化工具,核心能力是跨系统集成与复杂工作流编排 |
| 开源情况 | 开源,采用 Apache 2.0 协议 | 开源 | 开源,采用'公平代码'(Fair Code)许可,允许商业化使用,鼓励对开源贡献者补偿 |
| 核心设计理念 | '即用即走',通过可视化界面和预制模板降低 AI 开发门槛 | 融合后端即服务和 LLMOps 理念,提供从原型到生产部署全流程支持 | 以流程为核心,通过节点拼接实现系统间数据流转,强调灵活性和扩展性 |
| 工作流搭建 | 通过可视化界面拖拽节点搭建工作流,支持基础流程设计,部分节点支持简单脚本 | 有 Chatflow(面向对话类情景)和 Workflow(面向自动化及批处理情景),通过节点配置和变量串联搭建,支持条件分支等复杂逻辑 | 可视化拖拽高度灵活,支持条件分支、循环、并行执行等复杂逻辑,可嵌入 JavaScript/Python 代码实现复杂逻辑 |
| 模型支持 | 内置多模型对话系统,支持接入主流大语言模型,模型选择相对有限 | 支持数百种开源 / 专有模型,可本地部署,能动态切换模型,如白天用国产模型,夜间用 GPT-4 | 可将 LLM 接入流程,通过插件或 API 集成多种主流大语言模型,能根据业务场景动态切换模型 |
| 连接器数量 | 约 50 + 官方连接器,依赖官方支持,可通过 API 触发工作流,配置相对基础 | 未明确提及连接器数量,但插件机制完善,可扩展 API 和第三方工具 | 超过 400 个内置节点,支持 600 + 应用和服务连接,可连接几乎所有有 API 的应用程序 |
| 数据处理能力 | 可通过插件和脚本进行数据处理,能力相对有限,侧重于智能体对话和简单任务自动化 | 内置 RAG 框架,可一键上传企业文档构建知识库,实现精准问答,在与 AI 相关的数据处理上能力较强 | 可通过 JavaScript/Python 处理数据,如合并表格、加密敏感信息等,数据处理能力灵活且强大 |
| 部署方式 | 仅提供云服务(SaaS) | 支持私有化部署和云服务,可根据企业需求定制部署 | 支持本地部署、云服务和 Kubernetes 集群部署,部署灵活性高 |
| 数据安全与合规性 | 提供加密传输和数据隔离,符合基础安全标准,闭源导致透明度较低 | 通常注重数据安全与合规,一般提供相应的数据安全措施和合规支持,但未提及具体细节 | 支持加密、RBAC 权限管理、审计日志,企业版通过 ISO 27001 认证,支持 GDPR、HIPAA 等合规要求,数据安全性和合规性较高 |
| 团队协作 | 具备基础团队协作功能,如共享工作流 | 支持多工作区、权限控制,适合团队协作 | 支持团队协作,可通过权限管理等功能实现多人协同开发 |
| 适用场景 | 适合个人、小型团队的轻量级自动化需求,以及快速搭建对话式 AI,如智能客服、社交媒体聊天机器人等 C 端场景,可快速部署到字节系产品及微信等平台 | 适合企业级 AI 应用开发,如智能客服系统、企业级知识库问答系统、以 AI 为底层能力的 SaaS 系统开发等,可满足对模型运维和复杂工作流有较高要求的场景 | 适用于个人、中小型企业,尤其是有复杂自动化需求场景,如电商自动化运营、营销自动触发、企业 IT 自动化等,可实现跨系统的数据自动化流转 |
| 学习门槛 | 零代码操作,通过自然语言操作和拖拽式工作流,中文文档完善,学习门槛低,适合零基础用户 | 需一定技术基础,了解大模型相关知识和开发流程,适合有技术能力的团队,但提供了较为完善的文档和工具,上手难度适中 | 需理解 API 接口和数据处理逻辑,对技术能力有一定要求,适合自动化流程开发者、技术型运营等,但可视化设计也降低了部分难度 |
| 成本模型 | 目前免费,未来或按交互量收费 | 开源部分可免费使用,私有化部署等企业级服务可能需付费,按 Token 计费 + 企业订阅 | 社区版开源免费,需自托管且自行维护;企业版按用户 / 工作流付费,支持私有云部署 |
| 生态优势 | 深度整合抖音、飞书等字节系产品,可一键发布触达用户 | 社区活跃度高,功能迭代快速,可与多种开源模型和工具集成 |
智能体,也就是我们常说的 AI Agent,但它到底是什么呢?我们可以用一个简单的公式进行描述:AI Agent = Processing(流程处理)+ LLM(语言模型)+ Memory(长期记忆)+ Tools(工具)。
有没有发现这个 AI Agent 跟我们人有点相似,LLM 就像是我们的大脑,帮助我们做决策和分析,Processing 是我们将一件事拆分成的每一个步骤,Memory 就像是我们人类的记忆和经验,Tools 就像是我们为了完成一件事所需要用到的工具。
单纯的 LLM 就是 Large Language Model 大语言模型,简称大模型,主要被用来理解文本和生成自然语言文本,也就是我们前些年最火所谓的 AI。通常没有特定的目标和任务,就是你一句我一句这种根据输入的文本给出相应的回答的形式,大家所熟知的 ChatGpt、Deepseek、豆包、Kimi、元宝、通义千问这些其实都是大语言模型。
但是单一的大语言模型能做到的对话再厉害,它也只是一个对话模型,无法真正做到某件事情,其实 AI Agent 就是自动化机器人,可以给它设定很多个功能,我只需要一个指令,它就可以帮我们完成一系列动作,这和前几年火的 RPA 有异曲同工之妙。
我们来使用 Coze 在空间中设计一个智能体。
首先,我们要明白我们的目的,我要设计一个能生成成语视频的智能体。我通过输入成语,他就能给我生成一个完整的讲解视频。生成视频,我们需要有文案,图片,声音。我们可以做以下部署:





请围绕某一成语故事,生成一段成语类短视频口播文案,需遵循以下结构:
1. **悬念开场**:以'【成语相关场景/背景】+ 反常识疑问/断言'开篇,激发观众兴趣。
2. **身份代入**:用第二人称'你'描述在成语故事背景下的身份、所处情境及面临的核心难题,包含具体情境信息,直接进入主题。
3. **冲突升级**:依次展现事件发展中的外部阻碍、内部矛盾、关键抉择三层冲突。
4. **破局细节**:主角采取 3 个递进动作,包含:具体行动(如实地考察/制定策略)、巧思运用(如借助外力/变换方法)、核心举措(如关键言行/决定性行为)。
5. **主题收尾**:通过事件结局引出成语的形成,以'这一刻你终于明白…'句式点题,揭示成语蕴含的道理。
要求:每段不超过 3 句话,多用短句制造节奏;加入至少 2 处与成语相关的文化常识;在关键转折点使用感官描写(如动作触感/场景视觉/氛围感受);生成 200-300 字左右口播文案,由长短句构成,长句用逗号分隔,每个短句不超 19 个汉字。**输出要求**:只输出口播字幕文案,不要输出其他任何额外内容,不输出分段说明
参考实例:
1:完璧归赵'蔺相如捧着和氏璧,真的只是靠嘴皮子退敌吗?你是赵王派去的护卫,手按剑柄站在秦宫廊下,玉璧的冰凉透过锦盒传来,像块寒冰贴在掌心。秦王把玩玉璧时,侍臣的笑声震得梁上灰尘簌簌落,没人提割城的事,你摸出靴中短刀,刀柄的纹路已被冷汗浸软。赵军在边境被秦军牵制,国内大臣吵着要毁玉避祸,你收到密信,若玉璧留秦,家眷立斩。蔺相如突然捧玉后退,指尖抵着柱角,石屑硌进肉里。他先说玉有瑕疵,骗回璧后举过头顶,扬言要撞碎在柱上,声音比殿角铜钟还响。你看见秦王眼角抽搐,侍臣摸向腰间的剑,寒光映在玉璧上。蔺相如让秦王斋戒五日,你趁机带着玉璧混在商队里,用炭笔在璧上刻下微小记号。五日后秦宫,他指着空盒笑说,玉已归赵,要杀要剐悉听尊便。秦王摔碎案上酒樽,酒液溅湿你裤脚,却终究没下令动手。你摸着袖中带回的玉璧,刻痕还带着体温。这一刻你终于明白,'完璧归赵'靠的从不是鲁莽,是把生死当筹码的精准算计。'
2:负荆请罪'廉颇光着脊背负荆,真的只是服软那么简单吗?你是廉颇的亲兵,捧着荆条跟在他身后,石板路的凉气透过草鞋往上窜,棘刺在他背上划出红痕。蔺相如的门客拦在巷口,投来的白眼比冬日寒风还冷,军中副将在街角跺脚,骂将军辱没了上卿身份。秦军在边境集结,扬言要趁赵国内斗来犯,赵王的诏书催了三次,让廉颇去蔺相如府中议事,他却关在帐中喝闷酒。廉颇突然摔碎酒坛,抓起荆条就往外走,你想给他披件衣服,被他一胳膊肘推开,掌心的老茧蹭过你手背,比荆条还硬。他在蔺相如门前跪下,脊背挺得笔直,荆条的尖刺扎进皮肉,血珠滴在青石板上,像撒了把红豆。蔺相如慌忙扶起他时,你看见两人手扣在一起,指节都在用力。三日后联军出征,蔺相如坐帐筹谋,廉颇挥师冲锋,你们跟着将军杀进敌阵,听见他吼着'蔺相如信我'。刀光剑影里,你摸着腰间的令牌,上面刻着'赵'字。这一刻你终于明白,'负荆请罪'藏的不是卑微,是能屈能伸的家国大义。'
3:草木皆兵'苻坚望见八公山草木,真的是吓破了胆吗?你是前秦的传令兵,站在山顶瞭望台,晋军的旗帜在风里猎猎作响,像一片翻涌的红海压过来。帐篷里传来争吵,鲜卑将领说要退军,氐族老将拍着案大叫,说晋军不过是纸老虎,苻坚的手指在地图上乱点,墨迹晕染了'淝水'二字。粮草车队在山坳被劫,士兵嚼着树皮骂娘,你去查岗时,看见哨兵把树影当成晋军,弓弦拉得咯吱响,冷汗顺着他的下颌线往下淌。苻坚突然下令全军后撤,让晋军渡过淝水来决战,你传达命令时,马蹄踩在落叶上,沙沙声像背后有人追。晋军趁势渡河,喊杀声震得山摇地动。你看见士兵们掉头就跑,铠甲撞在一起叮当乱响,有人被自己人推倒,惨叫淹没在惊呼声里。苻坚的轿子在乱军里颠簸,他掀帘张望时,脸色比头盔还白。退到淮北时,你捡了面掉在地上的战鼓,鼓皮上还沾着泥和血。风一吹,周围的草叶沙沙动,你突然觉得那都是举着刀的晋兵。这一刻你终于明白,'草木皆兵'怕的从来不是草木,是败亡前夕,自己吓垮自己的人心。'

# 角色 根据故事信息生成故事主角开场绘画提示词 desc_prompt。
## 技能
### 技能 1: 生成绘画提示
1. 根据故事信息,生成主角任务绘画提示词 desc_promopt,详细描述人物动作、表情、服装,色彩风格等细节。
- 风格要求:古代动漫宫崎骏插画风格,卡通风格,明亮色彩,柔和线条,适合儿童观看的古代成语故事插画,主角正面视角面对屏幕,位于画面正中间,表情亲切可爱,穿着鲜艳的古代服饰,背景简洁留白,画面清晰,人物特写,高清,低对比度,色彩高饱和,浅景深,氛围轻松愉快,充满童趣
# 限制
1. 只输出绘画提示词,不要输出其他额外内容。将这段提示词改一下,我要生成的图片应该是适合小孩观看的成语故事。提示词用汉语回答。









# 角色 你是一位专业的故事创意转化师,你能够深入理解故事文案的情节、人物、场景等元素,用生动且具体的语言为绘画创作提供清晰的指引。
## 技能
### 技能 1:生成分镜字幕
1. 当用户提供故事文案时,仔细分析文案中的关键情节、人物形象、场景特点等要素。
2. 文案分镜,生成字幕 cap:
- 字幕文案分段:第一句单独生成一个分镜,后续每个段落均由 2 句话构成,语句简洁明了,表达清晰流畅,同时具备节奏感。
- 分割文案后特别注意前后文的关联性与一致性,必须与用户提供的原文完全一致,不得进行任何修改、删减。字幕文案必须严格按照用户给的文案拆分,不能修改提供的内容更不能删除内容
===回复示例===
[{ "cap":"字幕文案" }]
===示例结束===
## 限制:
- 只围绕用户提供的故事文案进行分镜绘画提示词生成和主题提炼,拒绝回答与该任务无关的话题。
- 所输出的内容必须条理清晰,分镜绘画提示词要尽可能详细描述画面,主题必须为 2 个字。
- 视频文案及分镜描述必须保持一致。
- 输出内容必须严格按照给定的 JSON 格式进行组织,不得偏离框架要求。
- 只对用户提示的内容进行分镜,不能更改原文
- 严格检查输出的 json 格式正确性并进行修正,特别注意 json 格式不要少括号,逗号等


# 角色 根据分镜字幕 cap 生成绘画提示词 desc_prompt。
## 技能
### 技能 1: 生成绘画提示
1. 根据分镜字幕 cap,生成分镜绘画提示词 desc_promopt,每个提示词要详细描述画面内容,包括人物动作、表情、服装,场景布置、色彩风格等细节。
- 风格要求:古代动漫宫崎骏插画风格,卡通风格,明亮色彩,柔和线条,适合儿童观看的古代成语故事插画,主角正面视角面对屏幕,位于画面正中间,表情亲切可爱,穿着鲜艳的古代服饰,背景简洁留白,画面清晰,人物特写,高清,低对比度,色彩高饱和,浅景深,氛围轻松愉快,充满童趣,高清,高对比度,色彩高饱和,浅景深。
- 第一个分镜画面中不要出现人物,只需要一个画面背景
===回复示例===
[ { "cap": "字幕文案", "desc_promopt": "分镜图像提示词" } ]
===示例结束===
## 限制:
- 只对用户提供的 json 内容补充 desc_prompt 字段,不能更改原文
- 严格检查输出的 json 格式正确性并进行修正,特别注意 json 格式不要少括号,逗号等
批处理

插入视频内容生成大模型

插入选择器

优化提示词


配置选择的另一条单线。尝试生成图像

插入代码,修改格式
// 在这里,您可以通过'params'获取节点中的输入变量,并通过'ret'输出结果
// 'params'和'ret'已经被正确地注入到环境中
// 下面是一个示例,获取节点输入中参数名为'input'的值:
// const input = params.input;
// 下面是一个示例,输出一个包含多种数据类型的'ret'对象:
// const ret = { "name": '小明', "hobbies": ["看书", "旅游"] };
async function main({ params }: Args): Promise<Output> {
var image1 = params.image1;
var image2 = params.image2;
if (!image1) { image1 = image2; }
// 构建输出对象
const ret = { "image_url": image1 };
return ret;
}

插入字幕合成模型

获取视频时长


连接

配置批处理



插入数据整合代码
// 在这里,您可以通过'params'获取节点中的输入变量,并通过'ret'输出结果
// 'params'和'ret'已经被正确地注入到环境中
async function main({ params }: Args): Promise<Output> {
// 关键:为所有依赖的参数添加默认值,避免 undefined
const { image_list = [], audio_list = [], duration_list = [], scenes = [], role_img_url = "", title = "" } = params;
// 处理音频数据
const audioData = [];
let audioStartTime = 0;
const audioTimelines = [];
let maxDuration = 0;
const imageData = [];
// 关键:添加数组长度校验,避免因空数组导致循环异常
const loopLength = Math.min(audio_list.length, duration_list.length, image_list.length);
for (let i = 0; i < loopLength; i++) {
// 用最小长度限制循环,避免越界
const duration = duration_list[i] || 0; // 避免 duration 为 undefined
audioData.push({
audio_url: audio_list[i],
duration,
start: audioStartTime,
end: audioStartTime + duration
});
audioTimelines.push({
start: audioStartTime,
end: audioStartTime + duration
});
if ((i - 1) % 2 === 0) {
imageData.({
: image_list[i],
: audioStartTime,
: audioStartTime + duration,
: ,
: ,
: ,
:
});
} {
imageData.({
: image_list[i],
: audioStartTime,
: audioStartTime + duration,
: ,
:
});
}
audioStartTime += duration;
maxDuration = audioStartTime;
}
roleImgData = [];
(role_img_url && duration_list. > ) {
roleImgData.({
: role_img_url,
: ,
: duration_list[],
: ,
:
});
}
captions = scenes.( item?. || ).();
subtitleDurations = duration_list;
{ textTimelines, processedSubtitles } = (captions, subtitleDurations);
title_list = [title || ];
title_timelines = duration_list. > ? [{ : , : duration_list[] }] : [];
kc_audio_url = ;
bg_audio_url = ;
bg_audio_data = [];
(maxDuration > ) {
bg_audio_data.({
: bg_audio_url,
: maxDuration,
: ,
: maxDuration
});
}
kc_audio_data = [];
kc_audio_data.({
: kc_audio_url,
: ,
: ,
:
});
ret = {
: .(audioData),
: .(bg_audio_data),
: .(kc_audio_data),
: .(imageData),
: textTimelines,
: processedSubtitles,
: title_list,
: title_timelines,
: .(roleImgData)
};
ret;
}
= {
: ,
: [, , , , , , , , , , ],
:
};
() {
( text !== ) text = (text || );
(text. <= maxLen) [text];
( delimiter .) {
pos = text.(delimiter, maxLen - );
(pos > ) {
splitPos = pos + ;
[
text.(, splitPos).(),
...(text.(splitPos).(), maxLen)
];
}
}
startPos = .(maxLen, text.) - ;
( i = startPos; i > ; i--) {
(.(text[i])) {
[
text.(, i + ).(),
...(text.(i + ).(), maxLen)
];
}
}
splitPos = .(maxLen, text.);
[
text.(, splitPos).(),
...(text.(splitPos).(), maxLen)
];
}
= () => {
cleanRegex = ;
processedSubtitles = [];
processedSubtitleDurations = [];
safeLength = .(captions., subtitleDurations.);
( index = ; index < safeLength; index++) {
text = captions[index];
totalDuration = subtitleDurations[index] || ;
phrases = (text, .);
phrases = phrases.( p.(cleanRegex, ).()).( p. > );
(phrases. === ) {
processedSubtitles.();
processedSubtitleDurations.(totalDuration);
;
}
totalChars = phrases.( sum + p., );
accumulatedUs = ;
phrases.( {
ratio = totalChars > ? phrase. / totalChars : ;
durationUs = i === phrases. - ? totalDuration - accumulatedUs : .(totalDuration * ratio);
processedSubtitles.(phrase);
processedSubtitleDurations.(durationUs);
accumulatedUs += durationUs;
});
}
textTimelines = [];
currentTime = startTimeUs;
processedSubtitleDurations.( {
start = currentTime;
end = start + (durationUs || );
textTimelines.({ start, end });
currentTime = end;
});
{ textTimelines, processedSubtitles };
};

创建草稿

字幕音频生成

视频画面生成








关键帧代码
import json
async def main(args: Args) -> Output:
params = args.params
segment_ids = params['segment_ids']
times = params['duration_list']
seg = params['segment_infos']
# 验证参数长度一致性
if len(segment_ids) != len(times):
raise ValueError("segment_ids 与 times 数组长度不一致")
keyframes = []
for idx, seg_id in enumerate(segment_ids):
if idx == 0: # 跳过第一张图片
continue
# 获取对应音频时长并转换微秒
audio_duration = int(float(times[idx]))
# 根据循环索引决定缩放方向
cycle_idx = idx - 1
# 计算排除第一个元素后的循环索引
if cycle_idx % 2 == 0: # 偶数索引:1.0->1.5
start_scale = 1.0
end_scale = 1.5
else: # 奇数索引:1.5->1.0
start_scale = 1.5
end_scale = 1.0
# 起始关键帧(0 秒位置)
keyframes.append({"offset": 0, "property": "UNIFORM_SCALE", "segment_id": seg_id, "value": start_scale, "easing": "linear"})
# 结束关键帧(同步音频时长)
keyframes.append({: audio_duration,
: , : seg_id, : end_scale, : })
keyframes.append({: , : , : seg[][], : , : })
keyframes.append({: , : , : seg[][], : , : })
keyframes.append({: seg[][] - seg[][],
: , : seg[][], : , : })
{: json.dumps(keyframes)}

添加关键帧

制作字幕数据

添加字幕


批量添加字幕


输出

结束

这样我们的工作流就做好了,后续会更新制作后的视频


2025 年 7 月 26 日,Coze 宣布开源,发布了 Coze Studio 和 Coze Loop 两大项目,采用 Apache 2.0 协议,允许免费使用、修改甚至商业化部署。开发者可通过 Coze Studio GitHub 和 Coze Loop GitHub 获取开源代码。
ChatSDK与 API,无法部署到扣子商店、豆包、抖音小程序等流量平台,难以触达 C 端用户或外部客户。| 版本类型 | 核心适用场景 | 适配人群 |
|---|---|---|
| 在线版 Coze | 1. 零基础用户学习 AI Agent 开发;2. 个人 / 小型团队轻量级任务(如简单智能客服、短视频脚本生成);3. 需快速部署至多平台(如微信、抖音)触达用户的场景 | 零基础小白、非技术团队、小型企业、内容创作者 |
| 开源版(本地部署)Coze | 1. 对数据隐私要求极高的企业(金融、医疗);2. 需深度定制化智能体的场景(如企业内部定制化办公助手);3. 高并发、高频次自动化任务且需无功能限制的场景 | 具备技术能力的中大型企业、IT 团队、技术开发者 |

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
| 有丰富的社区资源和大量的工作流模板分享,可通过第三方插件扩展功能,生态较为丰富 |