大模型深度学习面试指南:Transformer 架构与 LLM 核心原理
本文涵盖大模型(LLMs)与深度学习面试的 11 个核心问题。内容包括大型语言模型定义及工作原理、Transformer 架构详解、注意力机制与位置编码、预训练与微调策略、上下文处理与并行化实现。此外还对比了 GPT-3 与 GPT-4 的差异,并探讨了医疗、法律、金融等特定领域的模型适配应用。文章结合代码示例阐述了自注意力、多头注意力及前馈网络等关键组件的实现细节。

本文涵盖大模型(LLMs)与深度学习面试的 11 个核心问题。内容包括大型语言模型定义及工作原理、Transformer 架构详解、注意力机制与位置编码、预训练与微调策略、上下文处理与并行化实现。此外还对比了 GPT-3 与 GPT-4 的差异,并探讨了医疗、法律、金融等特定领域的模型适配应用。文章结合代码示例阐述了自注意力、多头注意力及前馈网络等关键组件的实现细节。

大型语言模型(LLMs)是设计用来理解、处理和生成类似人类文本的高级人工智能系统。例子包括GPT(Generative Pre-trained Transformer)、BERT(Bidirectional Encoder Representations from Transformers)、Claude和Llama。
这些模型彻底改变了自然语言处理任务,如翻译、摘要和问答。
LLMs 基于Transformer 架构构建,该架构使用带有多头自注意力机制的 Transformer 块网络。这使得模型能够在更广泛的文本中理解单词的上下文。
class TransformerBlock(nn.Module):
def __init__(self, embed_dim, num_heads):
super().__init__()
self.attention = nn.MultiheadAttention(embed_dim, num_heads)
self.feed_forward = nn.Sequential(
nn.Linear(embed_dim, 4 * embed_dim),
nn.ReLU(),
nn.Linear(4 * embed_dim, embed_dim)
)
self.layer_norm1 = nn.LayerNorm(embed_dim)
self.layer_norm2 = nn.LayerNorm(embed_dim)
def forward(self, x):
attn_output, _ = self.attention(x, x, x)
x = self.layer_norm1(x + attn_output)
ff_output = self.feed_forward(x)
return self.layer_norm2(x + ff_output)
LLMs 通过将文本分解成标记并将其转换为嵌入来处理文本——这是捕捉语义含义的高维数值表示。
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")
text = "Hello, how are you?"
inputs = tokenizer(text, return_tensors="pt")
outputs = model(**inputs)
embeddings = outputs.last_hidden_state
这种机制允许模型在处理每个标记时关注输入的不同部分,使其能够捕捉文本中的复杂关系。
无监督预训练:模型从大量未标记的文本数据中学习语言模式。
微调:在特定任务或领域上进一步训练预训练模型以提高性能。
基于提示的学习:模型学习基于特定提示或指令生成响应。
持续学习:持续训练以使模型更新新信息和语言趋势。
不同的 LLMs 使用编码器 - 解码器框架的不同配置:
GPT模型使用仅解码器架构进行单向处理。
BERT使用仅编码器架构进行双向理解。
T5(Text-to-Text Transfer Transformer)同时使用编码器和解码器进行多功能文本处理任务。
Transformer 模型架构由于其能够捕捉长期依赖关系并超越以前的方法,彻底改变了自然语言处理(NLP)。它的基础建立在注意力机制上。
编码器 - 解码器结构:原始的 Transformer 具有分别处理输入序列的编码器和生成输出的解码器。然而,像 GPT(Generative Pre-trained Transformer)这样的变体使用仅编码器来处理语言模型等任务。
自注意力机制:这允许模型在处理每个元素时权衡输入序列的不同部分,形成编码器和解码器的核心。
编码器由多个相同的层组成,每个层包含:
多头自注意力模块
前馈神经网络
class EncoderLayer(nn.Module):
def __init__(self, d_model, num_heads, d_ff):
super().__init__()
self.self_attn = MultiHeadAttention(d_model, num_heads)
self.feed_forward = FeedForward(d_model, d_ff)
self.norm1 = nn.LayerNorm(d_model)
self.norm2 = nn.LayerNorm(d_model)
def forward(self, x):
x = x + self.self_attn(self.norm1(x))
x = x + self.feed_forward(self.norm2(x))
return x
解码器也由多个相同的层组成,每个层包含:
掩蔽多头自注意力模块
多头编码器 - 解码器注意力模块
前馈神经网络
为了纳入序列顺序信息,位置编码被添加到输入嵌入中:
def positional_encoding(max_seq_len, d_model):
pos = np.arange(max_seq_len)[:, np.newaxis]
i = np.arange(d_model)[np.newaxis, :]
angle_rates = 1 / np.power(10000, (2 * (i//2)) / np.float32(d_model))
angle_rads = pos * angle_rates
sines = np.sin(angle_rads[:, 0::2])
cosines = np.cos(angle_rads[:, 1::2])
pos_encoding = np.concatenate([sines, cosines], axis=-1)
return torch.FloatTensor(pos_encoding)
多头注意力机制允许模型联合关注不同表示子空间的信息:
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.num_heads = num_heads
self.d_model = d_model
assert d_model % num_heads == 0
self.depth = d_model // num_heads
self.wq = nn.Linear(d_model, d_model)
self.wk = nn.Linear(d_model, d_model)
self.wv = nn.Linear(d_model, d_model)
self.dense = nn.Linear(d_model, d_model)
def split_heads(self, x, batch_size):
x = x.view(batch_size, -1, self.num_heads, self.depth)
return x.permute(0, 2, 1, 3)
def forward(self, q, k, v, mask=None):
batch_size = q.size(0)
q = self.split_heads(self.wq(q), batch_size)
k = self.split_heads(self.wk(k), batch_size)
v = self.split_heads(self.wv(v), batch_size)
scaled_attention = scaled_dot_product_attention(q, k, v, mask)
concat_attention = scaled_attention.permute(0, 2, 1, 3).contiguous()
concat_attention = concat_attention.view(batch_size, -1, self.d_model)
return self.dense(concat_attention)
每个编码器和解码器层都包括一个全连接的前馈网络:
class FeedForward(nn.Module):
def __init__(self, d_model, d_ff):
super().__init__()
self.linear1 = nn.Linear(d_model, d_ff)
self.linear2 = nn.Linear(d_ff, d_model)
def forward(self, x):
return self.linear2(F.relu(self.linear1(x)))
编码器 - 解码器模型:在训练期间使用教师强制。
GPT 风格模型:采用自学习计划,仅使用编码器。
可扩展性:Transformer 模型可以扩展到处理单词级或子词级标记。
适应性:该架构可以适应多种输入模式,包括文本、图像和音频。
LLMs:基于带有自注意力机制的Transformer架构。它们能够处理和理解跨广泛上下文的文本中的长期依赖关系。
传统模型:通常使用更简单的架构,如N-gram或隐马尔可夫模型。它们依赖于固定长度的上下文,并且在处理长期依赖关系方面存在困难。
LLMs:通常具有数十亿参数,并在庞大的数据集上进行训练,使它们能够捕捉复杂的语言模式并泛化到各种任务。
传统模型:通常具有较少的参数,并在较小的、特定于任务的数据集上进行训练,限制了它们的泛化能力。
LLMs:通常使用无监督预训练在大型语料库上进行训练,然后针对特定任务进行微调。它们采用掩蔽语言模型和下一句预测等技术。
传统模型:通常以监督方式在特定任务上进行训练,需要每个应用的标记数据。
LLMs:可以处理可变长度输入并将文本作为标记序列进行处理,通常使用字节对编码(BPE)或SentencePiece等子词标记方法。
传统模型:通常需要固定长度输入或使用更简单的标记方法,如单词级或字符级分割。
LLMs:为单词生成上下文嵌入,根据周围上下文捕获其含义。这允许更好地处理多义词和同音词。
传统模型:通常使用静态词嵌入或更简单的表示,可能无法有效地捕获依赖上下文的含义。
LLMs:可以应用于广泛的自然语言处理任务,只需最少的任务特定微调,展现出强大的少样本和零样本学习能力。
传统模型:通常设计和训练用于特定任务,需要为不同应用单独建模。
LLMs:需要大量的计算资源进行训练和推理,通常需要专门的硬件,如 GPU 或 TPU。
传统模型:通常具有较低的计算需求,更适合资源受限的环境。
注意力机制是 Transformer 模型中的一个关键创新,使它们能够同时处理整个序列。与 RNN 或 LSTM 等序列模型不同,Transformer 可以并行化操作,使它们对长序列高效。
对于每个单词或位置,Transformer 生成三个向量:查询、键和值。
这些向量用于加权和,以专注于输入序列的特定部分。
使用点积方法计算:将查询和键向量相乘,然后通过 softmax 函数进行归一化。
缩放点积方法调整键向量以获得更好的数值稳定性:
其中 $d_k$ 是键向量的维度。
允许模型学习多个表示子空间:
将向量空间划分为独立的子空间。
在这些子空间上分别进行注意力操作。
每个头提供单词表示的加权和,然后进行组合。
使模型能够同时关注输入序列的不同方面。
向输入中添加位置信息,因为注意力机制本身不考虑序列顺序。
通常实现为正弦函数或学习到的嵌入:
编码器 - 解码器架构:由处理输入序列的编码器和生成输出序列的解码器组成。
堆叠层:多层注意力和前馈网络,允许逐步细化表示。
import tensorflow as tf
# 输入序列:10 个单词,每个由 3 维向量表示
sequence_length, dimension, batch_size = 10, 3, 2
input_sequence = tf.random.normal((batch_size, sequence_length, dimension))
# 多头注意力层,有 2 个注意力头
num_attention_heads = 2
multi_head_layer = tf.keras.layers.MultiHeadAttention(num_heads=num_attention_heads, key_dim=dimension)
# 自注意力:查询、键和值都从输入序列中派生
output_sequence = multi_head_layer(query=input_sequence, value=input_sequence, key=input_sequence)
print(output_sequence.shape) # 输出:(2, 10, 3)
位置编码是大型语言模型(LLMs)中解决 Transformer 架构在捕获序列信息方面的固有局限性的关键组件。
基于 Transformer 的模型通过自注意力机制同时处理所有标记,使它们对位置不敏感。位置编码向模型中注入位置信息,使其能够理解序列中单词的顺序。
加性方法:位置编码被添加到输入词嵌入中,将静态词表示与位置信息结合起来。
正弦函数:许多 LLMs,包括 GPT 系列,使用三角函数生成位置编码。
给定位置 pos 和维度 i 的位置编码(PE)计算如下:
$$ PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{model}}) $$ $$ PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{model}}) $$
其中:
pos 是序列中的位置
i 是维度索引(0 ≤ i < d_model/2)
d_model 是模型的维度
使用正弦和余弦函数允许模型学习相对位置。
不同的频率分量捕获不同尺度的关系。
常数 10000 防止函数饱和。
以下是位置编码的 Python 实现:
import numpy as np
def positional_encoding(seq_length, d_model):
position = np.arange(seq_length)[:, np.newaxis]
div_term = np.exp(np.arange(0, d_model, 2) * -(np.log(10000.0) / d_model))
pe = np.zeros((seq_length, d_model))
pe[:, 0::2] = np.sin(position * div_term)
pe[:, 1::2] = np.cos(position * div_term)
return pe
# 示例用法
seq_length, d_model = 100, 512
positional_encodings = positional_encoding(seq_length, d_model)
预训练和微调是在大型语言模型(LLMs)的开发和应用中的重要概念。这些过程使 LLMs 能够在各种自然语言处理(NLP)任务中取得令人印象深刻的性能。
预训练是 LLM 开发的初始阶段,其特点是:
大量数据摄入:LLMs 暴露在大量的文本数据中,通常是数百千兆字节甚至数太字节。
自监督学习:模型使用以下技术从无标记数据中学习:
掩蔽语言模型(MLM)
下一句预测(NSP)
因果语言模型(CLM)
通用语言理解:预训练导致模型具有广泛的语言模式、语义和世界知识。
import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer
# 加载预训练的 GPT-2 模型和标记器
model = GPT2LMHeadModel.from_pretrained('gpt2')
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
# 生成文本
prompt = "人工智能的未来是"
input_ids = tokenizer.encode(prompt, return_tensors='pt')
output = model.generate(input_ids, max_length=50, num_return_sequences=1)
print(tokenizer.decode(output[0], skip_special_tokens=True))
微调使预训练模型适应特定任务或领域:
任务特定适应:调整模型以执行特定 NLP 任务,如:
文本分类
命名实体识别(NER)
问答
摘要
迁移学习:利用预训练的一般知识在特定任务上表现良好,通常只需有限的标记数据。
效率:与从头开始训练相比,需要的时间和精力显著减少。
from transformers import BertForSequenceClassification, BertTokenizer, AdamW
from torch.utils.data import DataLoader
# 加载预训练的 BERT 模型和标记器
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
# 准备数据集和数据加载器(假设'texts'和'labels'已定义)
dataset = [(tokenizer(text, padding='max_length', truncation=True, max_length=128), label) for text, label in zip(texts, labels)]
dataloader = DataLoader(dataset, batch_size=16, shuffle=True)
# 微调循环
optimizer = AdamW(model.parameters(), lr=2e-5)
for epoch in range(3):
for batch in dataloader:
inputs = {k: v.to(model.device) for k, v in batch[0].items()}
labels = batch[1].to(model.device)
outputs = model(**inputs, labels=labels)
loss = outputs.loss
loss.backward()
optimizer.step()
optimizer.zero_grad()
# 保存微调后的模型
model.save_pretrained('./fine_tuned_bert_classifier')
少样本学习:使用少量示例进行微调,利用模型的预训练知识。
提示工程:精心设计的提示以指导模型的行为,无需大量微调。
持续学习:用新知识更新模型,同时保留先前学到的信息。
现代 LLMs 的基石是注意力机制,它允许模型在处理每个单词时关注输入的不同部分。这种方法显著提高了处理上下文和长期依赖关系的能力。
自注意力,Transformer 架构的关键组成部分,使序列中的每个单词能够关注所有其他单词,捕获复杂关系:
def self_attention(query, key, value):
scores = torch.matmul(query, key.transpose(-2, -1))
attention_weights = torch.softmax(scores, dim=-1)
return torch.matmul(attention_weights, value)
为了纳入序列顺序信息,LLMs 使用位置编码。这种技术向词嵌入中添加位置依赖信号:
def positional_encoding(seq_len, d_model):
position = torch.arange(seq_len).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000.0) / d_model))
pos_encoding = torch.zeros(seq_len, d_model)
pos_encoding[:, 0::2] = torch.sin(position * div_term)
pos_encoding[:, 1::2] = torch.cos(position * div_term)
return pos_encoding
多头注意力允许模型同时关注输入的不同方面,增强其捕获多样化上下文信息的能力:
class MultiHeadAttention(nn.Module):
def __init__(self, d_model, num_heads):
super().__init__()
self.num_heads = num_heads
self.attention = nn.MultiheadAttention(d_model, num_heads)
def forward(self, query, key, value):
return self.attention(query, key, value)
Transformer架构,构成了许多现代 LLMs 的基础,有效地并行处理序列,捕获局部和全局依赖关系:
编码器:处理输入序列,捕获上下文信息。
解码器:根据编码信息和先前生成的标记生成输出。
BERT 使用双向方法,考虑前后文:
class BERT(nn.Module):
def __init__(self, vocab_size, hidden_size, num_layers):
super().__init__()
self.embedding = nn.Embedding(vocab_size, hidden_size)
self.transformer = nn.TransformerEncoder(
nn.TransformerEncoderLayer(hidden_size, nhead=8),
num_layers=num_layers
)
def forward(self, x):
x = self.embedding(x)
return self.transformer(x)
GPT 模型使用单向方法,基于先前的标记预测下一个标记:
class GPT(nn.Module):
def __init__(self, vocab_size, hidden_size, num_layers):
super().__init__()
self.embedding = nn.Embedding(vocab_size, hidden_size)
self.transformer = nn.TransformerDecoder(
nn.TransformerDecoderLayer(hidden_size, nhead=8),
num_layers=num_layers
)
def forward(self, x):
x = self.embedding(x)
return self.transformer(x, x)
为了处理极长序列,一些模型采用技术如:
稀疏注意力:只关注标记的一个子集以减少计算复杂性。
滑动窗口注意力:关注固定大小的周围标记窗口。
层次注意力:在多个粒度级别上处理文本。
Transformer 在实现大型语言模型(LLMs)的并行化中发挥着关键作用,无论是推理还是训练。它们的架构使得高效并行处理输入序列成为可能,显著提高了计算速度。
Transformer 架构由三个主要组件组成:
输入嵌入
自注意力机制
前馈神经网络
自注意力机制对并行化尤为重要,因为它允许序列中的每个标记同时关注所有其他标记。
自注意力过程涉及两个主要步骤:
QKV(查询、键、值)计算
加权和计算
没有并行化,这些步骤可能成为计算瓶颈。然而,Transformer 通过矩阵操作实现高效的并行处理。
import torch
def parallel_self_attention(Q, K, V):
# 计算注意力分数
attention_scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(K.size(-1)))
# 应用 softmax
attention_weights = torch.softmax(attention_scores, dim=-1)
# 计算输出
output = torch.matmul(attention_weights, V)
return output
# 假设 batch_size=32, num_heads=8, seq_length=512, d_k=64
Q = torch.randn(32, 8, 512, 64)
K = torch.randn(32, 8, 512, 64)
V = torch.randn(32, 8, 512, 64)
parallel_output = parallel_self_attention(Q, K, V)
这个示例演示了如何使用矩阵操作在多个维度(批量、头和序列长度)上并行计算自注意力。
为了进一步加速计算,LLMs 利用:
矩阵操作:将多个操作以矩阵表示法表达以进行并发执行。
优化库:利用高性能库,如cuBLAS、cuDNN和TensorRT,在 GPU 上实现最大并行性。
虽然并行化提供了显著的速度提升,但也引入了与学习依赖关系和资源分配相关的挑战。为了解决这些问题,LLMs 采用几种技术:
分桶:对相似大小的输入进行分组,以实现高效的并行处理。
注意力掩蔽:控制哪些标记彼此关注,实现选择性并行化。
层归一化:连接计算步骤,以减轻并行化对学习表示的影响。
import torch
def masked_self_attention(Q, K, V, mask):
attention_scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(K.size(-1)))
# 应用掩蔽
attention_scores = attention_scores.masked_fill(mask == 0, float('-inf'))
attention_weights = torch.softmax(attention_scores, dim=-1)
output = torch.matmul(attention_weights, V)
return output
# 创建一个简单的因果掩蔽序列,长度为 4
mask = torch.tril(torch.ones(4, 4))
Q = torch.randn(1, 1, 4, 64)
K = torch.randn(1, 1, 4, 64)
V = torch.randn(1, 1, 4, 64)
masked_output = masked_self_attention(Q, K, V, mask)
大型语言模型(LLMs)以其多功能性彻底改变了各个行业。以下是一些最引人注目的应用:
文本生成:LLMs 在产生类人文本方面表现出色,推动了以下应用:
情感分析:确定文本的情感基调。
命名实体识别(NER):在文本中识别和分类实体。
文本摘要:将长文档压缩成简洁的摘要。
内容扩展:对简要的想法或大纲进行阐述。
风格转换:用不同风格或语调重写文本。
以高准确度翻译多种语言之间的文本。
支持通信应用中的实时翻译。
聊天机器人:为客服机器人和虚拟助手提供动力。
问答系统:为用户提供准确的响应。
根据自然语言描述生成代码片段。
协助代码审查和缺陷检测。
个性化学习:根据个人学生的需求调整内容。
自动评分:评估书面回应并提供反馈。
病历分析:从患者记录中提取洞察。
药物发现:协助识别潜在的药物候选物。
市场分析:从财务数据中生成报告和洞察。
欺诈检测:识别交易中的不寻常模式。
故事生成:创建情节大纲或整个叙事。
诗歌创作:以各种风格生成诗句。
文献综述:总结和综合学术论文。
趋势分析:在大型数据集中识别模式。
文本转语音:将书面文本转换为自然听起来的语音。
语音识别:将口头单词转录为文本。
合同分析:审查和总结法律文件。
监管合规:确保遵守法律标准。
GPT-3:于 2020 年发布,拥有 1750 亿参数,为大型语言模型树立了新标准。
GPT-4:虽然确切的参数数量未披露,但据信比 GPT-3 大得多,可能在万亿级别。它还采用了更先进的神经网络架构。
GPT-3:主要使用无监督学习对文本数据进行训练。
GPT-4:引入了包括文本和图像在内的多模态训练,使其能够理解并生成基于视觉输入的内容。
GPT-3:展示了令人印象深刻的自然语言理解和生成能力。
GPT-4:在以下方面显示出显著改进:
推理:更好地进行复杂问题解决和逻辑推理。
一致性:在更长的对话和任务中保持连贯性。
事实准确性:减少了幻觉,提高了事实可靠性。
多语言能力:在各种语言中的性能得到增强。
GPT-3:广泛应用于聊天机器人、内容生成和代码辅助。
GPT-4:扩展应用,包括:
高级分析:更好地解释复杂数据并提供洞察。
创意任务:在故事写作和诗歌创作等任务中的能力得到改进。
视觉理解:能够分析和描述图像,适用于辅助工具。
道德决策:对细微的道德场景有了更好的理解。
GPT-3:引发了关于偏见和潜在误用的担忧。
GPT-4:纳入了更先进的安全措施:
改进的内容过滤:更好地避免不适当或有害的输出。
增强的偏见减轻:努力减少回应中的各种偏见。
GPT-3:能够生成简单的代码片段和解释。
GPT-4:在代码生成和理解方面显著改进:
GPT-3:擅长在单个提示中保持上下文。
GPT-4:在更长的对话和多个对话回合中表现出更好的上下文保持能力。
LLMs在各个领域表现出了显著的适应性,导致了为特定行业和任务量身定制的专用模型的发展。以下是一些值得注意的特定领域 LLMs 适配:
医疗诊断:在大量医疗文献上训练的 LLMs 可以协助诊断复杂疾病。
药物发现:像MolFormer这样的模型使用自然语言处理技术预测分子属性,并加速药物开发。
生物医学文献分析:LLMs 可以从庞大的生物医学数据库中概括研究论文并提取关键发现。
合同分析:专门模型可以审查法律文件,识别潜在问题并提出修改建议。
案例法研究:在法律先例上训练的 LLMs 可以协助律师查找相关案例和法规。
市场分析:像FinBERT这样的模型在财务文本上进行微调,以对市场报告和新闻进行情感分析。
欺诈检测:LLMs 可以分析交易模式并识别潜在的欺诈活动。
个性化学习:LLMs 可以根据学生的学习风格和进度调整教育内容。
自动评分:模型可以评估文章并提供有关写作风格和内容的详细反馈。
气候建模:LLMs 可以处理和分析大量气候数据,以改进预测和理解长期趋势。
生物多样性研究:专门模型可以从文本描述和图像中协助物种识别和生态系统分析。
设计优化:LLMs 可以根据规格和历史数据建议产品设计的改进。
预测性维护:模型可以分析传感器数据和维护日志,以预测设备故障。
低资源语言翻译:像mT5这样的适应专注于改善有限训练数据的语言的翻译质量。
代码翻译:像CodeT5这样的模型专门从事不同编程语言之间的翻译。
威胁检测:LLMs 可以分析网络日志并识别潜在的安全漏洞或不寻常模式。
漏洞分析:专门模型可以审查代码并识别潜在的安全漏洞。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online