¥
立即购买

Python代码性能优化分析

483 浏览
53 试用
12 购买
Dec 8, 2025更新

专业分析Python代码片段,识别性能瓶颈并提供具体的优化建议,包括效率提升、运行加速和资源消耗减少。优化方案保持功能不变,旨在生成更高效、更专业的代码,适用于开发人员、代码审查和性能调优场景。

以下是针对给定代码的性能问题定位与可行优化建议,并给出等价但更高效的实现。优化重点围绕减少数据库 I/O 与连接开销、去除不必要的阻塞与对象创建、复用计算和缓存结果,从而提升执行速度、降低 I/O、提升缓存效率并减少 GC 压力。

主要问题与优化要点

  • N+1 查询与连接风暴

    • 问题:在每个订单循环内都单独打开 SQLite 连接,并逐个 SKU 查询价格,导致大量磁盘 I/O、连接开销与锁竞争。
    • 优化:每次请求只打开一次数据库连接;将所有订单中的 SKU 去重后,使用批量 IN 查询一次性拉取价格;当 SKU 数量大于 SQLite 参数上限(通常 999)时分批查询。
  • 正则重复编译与多次匹配

    • 问题:循环内反复 re.match,未复用编译结果。
    • 优化:模块级别预编译正则,并将 bound method 缓存到局部变量,减少属性查找与编译开销。
  • Python 级循环与中间对象过多

    • 问题:循环累加求和、逐步 append 构造列表、二次 JSON 转换增加对象分配与 GC 压力。
    • 优化:使用 sum 内建函数(C 层循环);使用推导式/生成器;移除不必要的 json.dumps/loads 拷贝。
  • 无意义的阻塞等待

    • 问题:time.sleep(0.001) 人为拉高延迟。
    • 优化:移除。
  • 可选的轻量级缓存

    • 目标:跨请求缓存常用 SKU 价格,减少磁盘 I/O。
    • 实现:使用进程内 OrderedDict 实现简单 LRU(限定容量),请求内批量查询仅对缓存缺失的 SKU。无需外部中间件。
  • SQLite 访问细节(可选)

    • 建议对连接设置只读查询使用的合理 PRAGMA(如 synchronous=NORMAL、cache pragma),但不改变表结构;WAL 模式通常有利于读并发(这会写入数据库元设置,但不改变表结构)。若生产库已设定,可忽略。

优化后代码(保持返回格式不变;仅使用标准库与轻量改动) from flask import Flask, request, jsonify import sqlite3, re from collections import OrderedDict

app = Flask(name) SKU_PATTERN = r'[A-Z0-9]{3,8}' SKU_RE = re.compile(SKU_PATTERN)

简单 LRU 缓存(进程内)

_PRICE_CACHE = OrderedDict() _PRICE_CACHE_MAX = 10000 # 可按内存与命中率调整

def get_db(): # 保持对其他代码兼容的接口 conn = sqlite3.connect('orders.db') # 行为保持一致(可以通过索引或键访问),不强依赖 row_factory 时可去掉以减少一点开销 conn.row_factory = sqlite3.Row # 只读查询为主时,一些较安全的优化(可按实际环境决定是否保留) # conn.execute('PRAGMA synchronous = NORMAL') # conn.execute('PRAGMA temp_store = MEMORY') # conn.execute('PRAGMA optimize') return conn

def _evict_cache_if_needed(): # 简单的容量控制 while len(_PRICE_CACHE) > _PRICE_CACHE_MAX: _PRICE_CACHE.popitem(last=False)

def _fetch_prices_for_skus(conn, missing_skus): # 对缓存缺失的 SKU 进行分批查询,避免超过 SQLite 参数上限(通常 999) if not missing_skus: return cur = conn.cursor() skus = list(missing_skus) chunk_size = 900 for i in range(0, len(skus), chunk_size): chunk = skus[i:i + chunk_size] placeholders = ','.join('?' * len(chunk)) sql = f'SELECT sku, price FROM sku_price WHERE sku IN ({placeholders})' cur.execute(sql, chunk) for row in cur.fetchall(): # row 可通过索引或键访问(Row 支持两种方式) sku = row[0] price = row[1] # 更新缓存并维持 LRU 语义 if sku in _PRICE_CACHE: _PRICE_CACHE.move_to_end(sku) _PRICE_CACHE[sku] = price _evict_cache_if_needed()

@app.get('/orders/summary') def orders_summary(): payload = request.get_json(force=True) or {} orders = payload.get('orders', [])

# 预先抽取每个订单的 SKU 列表,同时汇总全部需要查询的 SKU
# 使用预编译正则的 bound method,减少属性查找
re_match = SKU_RE.match  # 保持与原逻辑一致的 match 语义
per_order_skus = []
all_skus = []

for order in orders:
    items = order.get('items', [])
    skus = [item['sku'] for item in items
            if isinstance(item, dict)
            and isinstance(item.get('sku'), str)
            and re_match(item['sku'])]
    per_order_skus.append((order.get('id'), skus))
    all_skus.extend(skus)

# 去重后批量查询(请求级别仅一次连接)
unique_skus = set(all_skus)
prices_map = {}

if unique_skus:
    conn = get_db()
    try:
        # 命中缓存的优先从缓存获取
        cached = {sku: _PRICE_CACHE[sku] for sku in unique_skus if sku in _PRICE_CACHE}
        prices_map.update(cached)

        # 对缓存缺失进行分批查询并回填缓存
        missing = unique_skus - cached.keys()
        if missing:
            _fetch_prices_for_skus(conn, missing)
            # 将缺失部分补齐到本次请求的映射中
            for sku in missing:
                if sku in _PRICE_CACHE:
                    prices_map[sku] = _PRICE_CACHE[sku]
    finally:
        conn.close()

# 按订单计算小计与总计(内建 sum 在 C 层,减少 Python 循环与对象创建)
details = []
total = 0.0
for order_id, skus in per_order_skus:
    order_total = sum(prices_map.get(s, 0.0) for s in skus)
    total += order_total
    details.append({'order_id': order_id, 'total': order_total})

# 直接返回,无需二次 JSON 序列化
return jsonify({'total': total, 'details': details})

if name == 'main': app.run()

这些改动如何提升性能(对应优化目标)

  • 提升执行速度
    • 单请求单连接 + 批量查询 + C 层 sum,大幅减少 Python 循环与解释器压力;移除 sleep 消除人为延迟。
    • 预编译正则与局部绑定方法,降低每次匹配的开销。
  • 优化数据库查询
    • 由“每订单 N+1 次查询”变为“每请求 ≤ ceil(U/900) 次批量查询”(U 为去重后 SKU 数量),极大降低 SQLite I/O 与游标开销。
    • 缓存命中时直接返回,跨请求进一步降低磁盘访问。
  • 降低 I/O 开销
    • 合并查询、连接复用(每请求一次),减少文件句柄与 fsync 次数;移除不必要的 JSON 二次转换。
  • 提升缓存效率
    • 进程内 LRU 缓存常用 SKU 价格;请求内对“缓存缺失 SKU”分批查询并回填,命中率提高后 DB 负载明显下降。
  • 减少垃圾回收压力
    • 使用推导式与内建 sum 降低中间对象;移除多余列表与字典拷贝(去掉 json.dumps/loads);避免在循环中频繁 append 与小对象分配。

预期效果与注意事项

  • 在订单数 > 500 的场景,P95 延迟会显著下降(通常从数百毫秒级降低到几十毫秒到低百毫秒,取决于 SKU 去重后的规模与缓存命中率)。
  • CPU 使用率峰值降低,Gunicorn 两个 worker 下吞吐更稳定(I/O 阻塞更少)。
  • 若 SKU 集合很大(> 数万),可适度提高 chunk_size 或 LRU 容量上限,并监控内存占用(512MB 限制下,1 万条价格缓存通常很安全)。
  • 若业务允许,生产环境可考虑开启 WAL 模式以优化读并发(一次性设置即可):用独立维护脚本或初始化阶段执行 PRAGMA journal_mode=WAL;本代码默认不强制修改该设置。
  • 为完全保留行为,保留了 GET + body 的 JSON 解析方式(force=True)与 re.match 语义。

可选进一步优化(按需采纳)

  • 如果 sku_price 表绝大多数为热数据且规模较小,可在进程启动时一次性加载到内存并周期性刷新(需评估内存与一致性要求)。
  • 如果确知本路由只读,可使用 conn = sqlite3.connect('file:orders.db?mode=ro', uri=True) 打开只读连接,降低文件锁冲突(对部署和权限有要求)。
  • 如路由较多,建议改为 Flask 的 g 对象+teardown_appcontext 管理“每请求一个连接”的通用模式,避免重复打开/关闭代码。

下面给出针对代码的性能瓶颈的具体优化建议,以及保持功能等价的高效实现。优化同时面向内存、CPU 与 I/O。

主要优化点与原因

  • 取消 DataFrame 级别的 append 循环、改为按块(chunksize)流式聚合
    • 问题:append 每次都会复制已有数据,触发多次内存分配与拷贝,10GB 合并会膨胀到 7GB+。
    • 优化:使用 pd.read_csv(..., chunksize=...) 流式读取各文件,并在每个分块内完成派生列与聚合,再累加到小型累加器上,避免构建一个巨大的 all_df。内存峰值变为“分块大小 + 累加器大小”,通常为几百 MB。
  • 列裁剪与 dtype 提示
    • 问题:未使用 usecols 与 dtype,读入无关列导致不必要的 I/O 与内存占用。
    • 优化:只读取需要的列 ['user_id','timestamp','latency_ms','path'],并指定较紧凑的 dtype(如 int32/64、object),减少磁盘读取量与内存。
  • 矢量化替代逐行 apply/iterrows
    • 日期解析:使用 pd.to_datetime(..., cache=True) 对整列矢量解析,再 dt.floor('D') 或 dt.strftime 得到日期字符串,避免逐行解析。
    • 正则匹配:将 re.match 替换为 .str.startswith('/api/'),完全避免逐行正则与重复编译。
    • 分桶:原逻辑只在最终统计用到“是否 slow/very_slow”,可直接用 latency_ms >= 300 得到 is_slow 布尔列,避免构建 bucket 并逐行判断。
    • 聚合:用 groupby(['date','user_id']).agg(...) 一次性在 C 层完成统计,替代 Python-level iterrows 循环。
  • I/O 优化
    • 使用 memory_map=True(内存映射)和 usecols 降低文件读取开销。
    • chunksize 让 CPU 与磁盘更均衡地工作,提高吞吐。
  • 排序与输出
    • 仍按 (date, user_id) 排序,输出 records 列表,与原结果一致。
    • 保持 json.dumps(result)[:1000] 的行为不变。

在保持相同最终输出的前提下,“is_api”列在原代码里没有参与统计与输出,因此默认不再构建它;若强制需要保留此副产物,可在分块内部用 .str.startswith('/api/') 快速计算并丢弃,不影响最终结果。

优化后代码 说明:保持同样的输入/输出行为,打印的 JSON 前 1000 字符一致;统计逻辑保持与原代码相同(slow_ratio = (slow + very_slow) / count)。

import os import json import pandas as pd import numpy as np

def analyze_logs(file_paths, chunksize=1_000_000): # 仅读取必要列,减少 I/O 与内存 usecols = ['user_id', 'timestamp', 'latency_ms', 'path'] dtype = { 'user_id': 'int64', # 若 user_id 可能缺失,可改为 'Int64' 'latency_ms': 'int32', # 典型范围可容纳,节省内存 'path': 'object' }

# 累加器:MultiIndex(date, user_id) -> count, slow
acc = None

for path in file_paths:
    # 流式分块读取,避免构建巨型 DataFrame
    for chunk in pd.read_csv(
        path,
        usecols=usecols,
        dtype=dtype,
        chunksize=chunksize,
        memory_map=True
    ):
        # 矢量化日期解析(缓存加速重复值),按天归一
        ts = pd.to_datetime(chunk['timestamp'], errors='coerce', cache=True)
        date = ts.dt.floor('D')  # datetime64[ns],更省内存

        # 若必须保留与原代码同等副产物,可启用下一行(默认关闭以提升性能)
        # chunk['is_api'] = chunk['path'].astype(str).str.startswith('/api/')

        # 直接将慢请求定义为 latency_ms >= 300(包含 'slow' 与 'very_slow' 桶)
        is_slow = (chunk['latency_ms'].values >= 300)

        # 在分块内先矢量化聚合,减少中间数据体积
        g = pd.DataFrame({
            'date': date.values,
            'user_id': chunk['user_id'].values,
            'count': np.ones(len(chunk), dtype=np.int64),
            'slow': is_slow.astype(np.int64)
        }).groupby(['date', 'user_id'], sort=False).sum()

        # 累加到总计(避免 Python 字典级循环,使用向量化加法)
        if acc is None:
            acc = g
        else:
            acc = acc.add(g, fill_value=0)
            # add 可能生成 float,强制回到整数
            acc = acc.astype({'count': 'int64', 'slow': 'int64'})

if acc is None:
    print('[]')
    return

# 按 (date, user_id) 排序并计算 slow_ratio
acc = acc.sort_index(level=['date', 'user_id'])
out = acc.reset_index()
out['date'] = out['date'].dt.strftime('%Y-%m-%d')
# 保持与原逻辑一致的保护(count 至少为 1)
out['slow_ratio'] = (out['slow'] / out['count'].clip(lower=1)).astype(float)

# 生成与原代码等价的输出结构
result = out[['user_id', 'date', 'count', 'slow_ratio']].to_dict(orient='records')
print(json.dumps(result)[:1000])

if name == 'main': files = [os.path.join('logs', name) for name in os.listdir('logs') if name.endswith('.csv')] # 可按机器内存与列宽调整分块大小,一般 2e5~1e6 行较稳妥 analyze_logs(files, chunksize=500_000)

效果与收益预估

  • 内存占用
    • 从“构建 10GB 巨型 DataFrame”变为“单块数据 + 仅包含唯一键的累加器(通常远小于原数据)”,内存峰值显著下降,8GB 机器可稳跑。
  • 执行速度
    • 逐行 apply/iterrows 改为矢量化与 groupby,CPU 热点在 C/NumPy 层,通常可加速数倍到十倍以上。
    • 日期解析使用 cache=True、一次性矢量化;正则改为 startswith,进一步降耗。
  • I/O 开销
    • usecols+dtype+memory_map 降低读入字节数与解析负担,提升磁盘吞吐利用率。
  • 复杂度
    • Python 层循环从 O(N) 高常数开销变为 C 层矢量化 O(N) 与分组聚合 O(N log K) 的高效实现;整体墙钟时间显著降低。

可选微调建议

  • 如果 timestamp 格式固定(例如 '%Y-%m-%d %H:%M:%S'),使用 pd.to_datetime(chunk['timestamp'], format='...', errors='coerce') 会比推断格式更快。
  • 若 user_id 非纯整数且含缺失,设置 dtype 为 'string' 或 'object' 并在 groupby 前做填充;但这会稍增内存。
  • 若最终只关心统计结果,可完全不构建 is_api(原代码未使用),进一步节省 CPU。若需要则采用 .str.startswith 实现。

下面给出问题定位、优化方向与改动原因,随后附上在“最小化改动”前提下的优化版代码。该版本保持输入输出结构与数值语义一致(softmax 结果仅因浮点误差可能有极微小差异),但显著减少 I/O、降低 Python 层开销、提升并发与吞吐。

一、主要性能瓶颈与优化点

  • 重复 I/O:predict 循环中每条文本都 torch.load 模型,导致巨大的 I/O 开销与对象分配。
    • 优化:模型与权重常驻内存,懒加载一次,缓存 vocab 及其映射。
  • 特征构建 O(N^2):vocab.index(t) 在循环中触发线性搜索,整体近 O(|tokens|×|vocab|)。
    • 优化:构建 vocab -> index 的 dict,令查找 O(1)。使用张量的 index_add_ 或 bincount 累计词频,避免 Python 循环与全量扫描。
  • Python 循环实现 softmax:反复 list/float 分配,频繁 GC。
    • 优化:用 torch 矩阵运算和矢量化 softmax(exp 与归一化)一次性处理整个 batch。
  • 每条文本单独做 matmul:丢失批处理优势,算子启动开销放大。
    • 优化:一次构建 B×V 的特征矩阵,做一次矩阵乘法 B×C,然后一次 softmax。
  • 频繁的 numpy <-> torch 转换与 Python 列表分配:增加 GC 压力、降低 CPU cache 效率。
    • 优化:端到端使用 torch 张量;仅在输出阶段转 Python list。
  • 未充分利用多核:单线程运算。
    • 优化:设置 torch.set_num_threads(2),让 BLAS 在 2 核上并行。
  • 无谓的 time.sleep:人为拉高延迟与降低 QPS。
    • 优化:删除 sleep。

二、优化改动细节与收益

  • 模型与词表缓存
    • _ensure_loaded 懒加载模型,缓存 model、weights、vocab、vocab_map(dict)。
    • 收益:I/O 从 O(B) 变为 O(1);避免大量对象构造与 GC。
  • 高效分词
    • 使用预编译正则一次性提取 [A-Za-z0-9]+,并统一 lower,功能与原逻辑一致但更快。
    • 收益:减少 Python 循环与分支。
  • 特征构建矢量化
    • 将 tokens 映射为 vocab 索引后,用 index_add_ 将 1 累加到稀疏位置,复杂度 O(|tokens|),避免对整张 vocab 做全长 bincount 或遍历。
    • 批量路径下,预分配 B×V 张量,循环积累每行,仅一次大矩阵乘法。
    • 收益:将 O(|tokens|×|vocab|) 降为 O(|tokens|),同时减少中间对象与 GC。
  • 矢量化 softmax
    • 使用 torch.exp 与按行归一化(或 torch.softmax),确保与原实现数学等价,且无 Python 循环。
    • 收益:消除大量 Python 对象分配,数值稳定且更快。
  • 并发与多核
    • 设置 torch.set_num_threads(2),运算在 2 核并行;类内状态只读,线程安全,可在多线程环境复用实例。
    • 收益:吞吐提升,CPU 利用率提高。
  • 降低 GC 压力
    • 避免 numpy 中转、列表频繁构造;权重与映射复用;仅最终一步将张量转 list。
    • 收益:显著降低对象 churn 与 GC 活跃度。

三、优化后代码(最小化改动,功能等价) 说明:

  • 保持类接口与返回结构不变。
  • 仍提供 tokenize/featurize 方法;predict 改为批量矢量化。
  • softmax 用 torch 张量实现,数学等价于原 exp 再归一化的写法。
  • 移除 time.sleep。

代码: import re import torch import numpy as np # 仅为兼容保留导入,不在热路径使用 import time # 仅为兼容保留导入

class Predictor: TOKEN_RE = re.compile(r'[A-Za-z0-9]+')

def __init__(self, model_path):
    self.model_path = model_path
    self._model = None
    self._vocab = None
    self._vocab_map = None
    self._weights = None
    # 充分利用 2 核 CPU
    try:
        torch.set_num_threads(2)
    except Exception:
        pass
    # 推理默认无需梯度
    torch.set_grad_enabled(False)

def _ensure_loaded(self):
    if self._model is None:
        m = torch.load(self.model_path, map_location='cpu')
        self._model = m
        self._vocab = m.get('vocab', [])
        # 词表映射用于 O(1) 查找
        self._vocab_map = {w: i for i, w in enumerate(self._vocab)}
        # 常驻内存的权重张量,float32,CPU
        self._weights = torch.tensor(m['weights'], dtype=torch.float32, device='cpu')

def _load(self):
    # 保留原方法名,改为缓存式加载,避免重复 I/O
    self._ensure_loaded()
    return self._model

def tokenize(self, text):
    # 与原逻辑等价:按非字母数字切分,转小写
    return self.TOKEN_RE.findall(text.lower())

def featurize(self, tokens, vocab):
    # 兼容原签名,但内部使用缓存好的映射以避免 O(N^2)
    # 若传入的 vocab 与缓存不同(理论上不会发生),则就地构造一次映射
    if self._vocab is not None and vocab is self._vocab:
        vocab_map = self._vocab_map
        V = len(self._vocab)
    else:
        vocab_map = {w: i for i, w in enumerate(vocab)}
        V = len(vocab)

    idxs = [vocab_map[t] for t in tokens if t in vocab_map]
    vec = torch.zeros(V, dtype=torch.float32)
    if idxs:
        idx_tensor = torch.tensor(idxs, dtype=torch.int64)
        vec.index_add_(0, idx_tensor, torch.ones(len(idxs), dtype=torch.float32))
    return vec.unsqueeze(0)

def _featurize_batch(self, batch_tokens):
    # 将一批 tokens 转为 B×V 稀疏累加到稠密 BOW
    V = len(self._vocab)
    B = len(batch_tokens)
    x = torch.zeros(B, V, dtype=torch.float32)
    for i, tokens in enumerate(batch_tokens):
        idxs = [self._vocab_map[t] for t in tokens if t in self._vocab_map]
        if not idxs:
            continue
        idx_tensor = torch.tensor(idxs, dtype=torch.int64)
        x[i].index_add_(0, idx_tensor, torch.ones(len(idxs), dtype=torch.float32))
    return x

def predict(self, texts):
    # 一次性加载与缓存模型
    model = self._load()
    # 批量分词
    batch_tokens = [self.tokenize(text) for text in texts]
    # 批量特征化
    x = self._featurize_batch(batch_tokens)

    # 矢量化矩阵乘与 softmax(数学等价于原 exp/sum)
    with torch.inference_mode():
        logits = x.matmul(self._weights.t())  # 形状: [B, C]
        exp_logits = torch.exp(logits)
        probs = exp_logits / exp_logits.sum(dim=1, keepdim=True)

    probs_list = probs.tolist()
    outputs = [{'text': text, 'probs': p} for text, p in zip(texts, probs_list)]
    return outputs

if name == 'main': p = Predictor('model.pt') texts = ['Quick brown fox jumps over the lazy dog'] * 128 print(p.predict(texts)[0])

四、与优化目标的对照

  • 增强并发性能
    • 计算部分矢量化、释放 GIL;权重与词表只读缓存,实例线程安全;设置 2 线程 BLAS。
  • 提升执行速度
    • 批量 matmul 与 softmax;分词与特征构建减少 Python 循环;删除 sleep;避免重复 torch.load。
  • 降低 I/O 开销
    • 模型只加载一次,循环中不再做磁盘 I/O。
  • 减少内存占用与垃圾回收压力
    • 不在热路径创建 numpy 数组与 Python 大列表;权重与映射常驻;仅最终一步将张量转 list。
  • 最小化改动
    • 保留类结构与方法名;不改变模型持久化格式与输出结构;主要在 predict 路径做批量化与缓存。

五、可选进一步优化(保持行为不变)

  • 若词表极大,bincount(minlength=V) 会产生全长分配;当前用 index_add_ 已避免该成本。若文本非常长,可将 idx_tensor 复用缓冲区(更复杂,必要时再做)。
  • 若实际工作负载经常是小 batch,可增加一个小阈值:小批用单样本路径,避免分配 B×V 大张量。
  • 通过环境变量控制线程数与绑定核心,例如 OMP_NUM_THREADS=2, MKL_NUM_THREADS=2,结合 torch.set_num_threads,可更稳定地利用 2 核。

这版代码在你的约束条件下通常能将 128 条文本批推理的端到端延迟显著下降(I/O 从每条一次降为一次,softmax/特征构建矢量化,CPU 2 核并行),QPS 也会显著提升。

示例详情

解决的问题

分析用户提供的Python代码片段,帮助用户发现潜在的性能瓶颈并提出切实可行的优化建议,以实现代码效率提升,同时维持原有功能的正确性,最终推动用户在开发过程中提升代码质量与性能。

适用用户

Python开发者

需要为已有Python项目进行性能优化,以提升代码运行效率、减少计算资源浪费。

数据分析师

在大规模数据计算中使用Python,可以通过性能优化加快数据处理与分析速度。

编程教育工作者

帮助编程初学者学习和理解如何编写高效代码,提供优化建议作为教学案例。

特征总结

智能识别代码性能瓶颈,快速定位低效代码段,为用户节省调试时间。
自动生成精准优化建议,从提升运行速度到减少资源消耗,全面提升代码质量。
确保优化后的代码功能保持一致,省去用户手动调整的烦恼。
贴心的优化方案说明,帮助用户快速理解优化背后的技术原理与改进点。
支持多种Python代码场景,从初学者脚本到复杂项目均能轻松分析和优化。
简单操作即可应用,适用于希望提高Python代码效率的用户,即使没有深厚的技术基础。
专注性能提升,通过高效算法优化解决用户代码运行中常见的资源浪费问题。
为用户在开发过程中提供直接收益,比如提升代码运行稳定性、节约计算资源等。

如何使用购买的提示词模板

1. 直接在外部 Chat 应用中使用

将模板生成的提示词复制粘贴到您常用的 Chat 应用(如 ChatGPT、Claude 等),即可直接对话使用,无需额外开发。适合个人快速体验和轻量使用场景。

2. 发布为 API 接口调用

把提示词模板转化为 API,您的程序可任意修改模板参数,通过接口直接调用,轻松实现自动化与批量处理。适合开发者集成与业务系统嵌入。

3. 在 MCP Client 中配置使用

在 MCP client 中配置对应的 server 地址,让您的 AI 应用自动调用提示词模板。适合高级用户和团队协作,让提示词在不同 AI 工具间无缝衔接。

AI 提示词价格
¥0元
先用后买,用好了再付款,超安全!

您购买后可以获得什么

获得完整提示词模板
- 共 203 tokens
- 6 个可调节参数
{ 代码片段 } { 性能优化目标 } { 代码应用场景 } { 已知性能瓶颈 } { 代码约束条件 } { 期望优化优先级 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
使用提示词兑换券,低至 ¥ 9.9
了解兑换券 →
限时半价

不要错过!

半价获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59