智能代码补全助手

383 浏览
33 试用
8 购买
Nov 14, 2025更新

该提示词可智能识别输入的功能目标与代码片段,自动补全并生成完整、可运行的代码方案。支持多语言、多场景开发任务,适用于快速原型搭建与复杂功能实现,有效减少调试与开发时间。

import csv import json import argparse import logging import sys from typing import List, Dict, Any, Tuple

def load_csv(path: str) -> List[Dict[str, str]]: """ 打开并读取CSV文件,跳过空行,返回每一行为dict(列名->字符串值)。 自动处理可能存在的BOM并清理列名中的BOM。 """ rows: List[Dict[str, str]] = [] try: # 首先尝试以utf-8读取,如遇到BOM等问题再降级到utf-8-sig try: f = open(path, mode="r", newline="", encoding="utf-8") except UnicodeDecodeError: f = open(path, mode="r", newline="", encoding="utf-8-sig")

    with f:
        reader = csv.DictReader(f)
        # 可能存在BOM,清理字段名
        if reader.fieldnames:
            fieldnames = [fn.lstrip("\ufeff") if isinstance(fn, str) else fn for fn in reader.fieldnames]
        else:
            fieldnames = None

        for raw_row in reader:
            # 清理每个键的BOM
            cleaned_row = {}
            for k, v in raw_row.items():
                cleaned_key = k.lstrip("\ufeff") if isinstance(k, str) else k
                cleaned_row[cleaned_key] = v
            # 跳过空行(所有值为空或仅空白)
            if all((val is None) or (str(val).strip() == "") for val in cleaned_row.values()):
                continue
            rows.append(cleaned_row)
except FileNotFoundError:
    logging.error(f"输入文件不存在: {path}")
    raise
except Exception as e:
    logging.error(f"读取CSV时发生错误: {e}")
    raise

logging.info(f"已读取行数: {len(rows)}")
return rows

def to_float(s: str) -> Tuple[bool, float]: """ 尝试将字符串解析为float。 支持去除千分位逗号与下划线,忽略空值和非数字。 返回 (是否解析成功, 值或0.0) """ if s is None: return False, 0.0 txt = str(s).strip() if txt == "" or txt.lower() in {"nan", "none"}: return False, 0.0 # 处理千分位和下划线分隔 txt = txt.replace(",", "").replace("", "") # 处理可能的括号负数表示 (123) -> -123 if txt.startswith("(") and txt.endswith(")"): txt = "-" + txt[1:-1] try: return True, float(txt) except ValueError: return False, 0.0

def _median(sorted_vals: List[float]) -> float: """ 计算已排序列表的中位数。 """ n = len(sorted_vals) if n == 0: return float("nan") mid = n // 2 if n % 2 == 1: return sorted_vals[mid] else: return (sorted_vals[mid - 1] + sorted_vals[mid]) / 2.0

def _iqr_bounds(sorted_vals: List[float]) -> Tuple[float, float]: """ 使用IQR法计算异常值边界。 Q1/Q3基于“中位数拆分”方法: - 奇数长度:排除中位数后两侧分别计算中位数作为Q1/Q3 - 偶数长度:直接按两半计算各自中位数作为Q1/Q3 返回 (下界, 上界)。 当样本过小(<4)或IQR为0时,返回(-inf, +inf)表示不进行过滤。 """ n = len(sorted_vals) if n < 4: return float("-inf"), float("inf") mid = n // 2 if n % 2 == 1: lower = sorted_vals[:mid] upper = sorted_vals[mid + 1 :] else: lower = sorted_vals[:mid] upper = sorted_vals[mid:]

q1 = _median(lower)
q3 = _median(upper)
iqr = q3 - q1
if iqr <= 0:
    return float("-inf"), float("inf")
lower_bound = q1 - 1.5 * iqr
upper_bound = q3 + 1.5 * iqr
return lower_bound, upper_bound

def compute_stats(rows: List[Dict[str, str]], numeric_field: str) -> Dict[str, Any]: """ 根据指定的numeric_field计算统计信息(计数、均值、 中位数)。 - 仅提取可解析为数字的值 - 使用IQR方法过滤异常值 - 同时返回原始与过滤后的统计结果 """ # 提取数字 numeric_vals: List[float] = [] invalid_count = 0 for r in rows: if numeric_field not in r: invalid_count += 1 # 当某行缺少该字段时视为无效 continue ok, val = _to_float(r.get(numeric_field)) if ok: numeric_vals.append(val) else: invalid_count += 1

total_rows = len(rows)
count_numeric = len(numeric_vals)
if count_numeric == 0:
    logging.warning("没有可用的数字数据用于统计。")
    return {
        "field": numeric_field,
        "count_total_rows": total_rows,
        "count_numeric": 0,
        "count_invalid": invalid_count,
        "outlier_method": "IQR",
        "outlier_bounds": None,
        "count_outliers": 0,
        "mean": None,
        "median": None,
        "mean_raw": None,
        "median_raw": None,
    }

# 排序用于统计与IQR计算
sorted_vals = sorted(numeric_vals)

# 原始统计
mean_raw = sum(sorted_vals) / count_numeric
median_raw = _median(sorted_vals)

# IQR异常值过滤
lb, ub = _iqr_bounds(sorted_vals)
filtered_vals = [v for v in sorted_vals if lb <= v <= ub]
count_outliers = count_numeric - len(filtered_vals)

# 过滤后的统计
if len(filtered_vals) == 0:
    # 若过滤后为空,则回退到原始统计以避免None
    mean_filtered = mean_raw
    median_filtered = median_raw
else:
    mean_filtered = sum(filtered_vals) / len(filtered_vals)
    median_filtered = _median(filtered_vals)

logging.info(
    f"数值条目: {count_numeric}, 无效条目: {invalid_count}, "
    f"异常值剔除: {count_outliers} (方法: IQR)"
)

return {
    "field": numeric_field,
    "count_total_rows": total_rows,
    "count_numeric": count_numeric,
    "count_invalid": invalid_count,
    "outlier_method": "IQR",
    "outlier_bounds": {"lower": lb, "upper": ub} if lb != float("-inf") else None,
    "count_outliers": count_outliers,
    "mean": mean_filtered,
    "median": median_filtered,
    "mean_raw": mean_raw,
    "median_raw": median_raw,
}

def main(): parser = argparse.ArgumentParser(description="CSV metrics calculator") parser.add_argument("-i", "--input", required=True, help="Path to CSV file") parser.add_argument("-f", "--field", required=True, help="Numeric column name") parser.add_argument("-o", "--output", default="", help="Optional output JSON path") # 解析参数 args = parser.parse_args()

# 简要日志配置
logging.basicConfig(
    level=logging.INFO,
    format="%(levelname)s: %(message)s",
    stream=sys.stderr,
)

# 读取CSV
try:
    rows = load_csv(args.input)
except FileNotFoundError:
    # 文件不存在
    sys.exit(1)
except Exception:
    # 其他读取错误
    sys.exit(1)

# 字段校验:至少有一行包含该字段
if not rows or all(args.field not in r for r in rows):
    logging.error(f"指定的列名不存在: {args.field}")
    sys.exit(2)

# 计算统计
try:
    stats = compute_stats(rows, args.field)
except Exception as e:
    logging.error(f"计算统计信息失败: {e}")
    sys.exit(4)

# 若没有数值数据
if stats.get("count_numeric", 0) == 0:
    logging.error("没有可统计的数值数据。")
    # 也输出一个空结果,以便调用方获知情况
    result = {"file": args.input, **stats}
    print(json.dumps(result, ensure_ascii=False, indent=2))
    sys.exit(3)

# 组装输出JSON
result = {
    "file": args.input,
    **stats,
}

# 输出到文件或stdout
try:
    if args.output:
        with open(args.output, "w", encoding="utf-8") as f:
            json.dump(result, f, ensure_ascii=False, indent=2)
        logging.info(f"结果已写入: {args.output}")
    else:
        print(json.dumps(result, ensure_ascii=False, indent=2))
except Exception as e:
    logging.error(f"写入输出失败: {e}")
    sys.exit(4)

# 正常退出
sys.exit(0)

if name == "main": main()

const express = require('express'); const app = express(); app.use(express.json());

app.use((req, res, next) => { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,POST,PUT,PATCH,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type,Authorization'); if (req.method === 'OPTIONS') return res.sendStatus(204); next(); });

const items = [ { id: 1, name: 'Apple iPhone 15', tags: ['phone', 'apple', 'ios'] }, { id: 2, name: 'Samsung Galaxy S24', tags: ['phone', 'android', 'samsung'] }, { id: 3, name: 'Apple MacBook Pro', tags: ['laptop', 'apple', 'macos'] }, { id: 4, name: 'Dell XPS 13', tags: ['laptop', 'windows', 'dell'] }, { id: 5, name: 'Sony WH-1000XM5', tags: ['headphones', 'sony', 'audio'] }, { id: 6, name: 'Nintendo Switch', tags: ['gaming', 'console', 'nintendo'] }, { id: 7, name: 'Kindle Paperwhite', tags: ['ereader', 'amazon', 'reading'] }, { id: 8, name: 'Apple iPad Air', tags: ['tablet', 'apple', 'ios'] }, { id: 9, name: 'Google Pixel 9', tags: ['phone', 'android', 'google'] }, { id: 10, name: 'Logitech MX Master 3S', tags: ['mouse', 'logitech', 'accessory'] }, { id: 11, name: 'Razer Blade 15', tags: ['laptop', 'gaming', 'windows'] }, { id: 12, name: 'Bose QuietComfort Ultra', tags: ['headphones', 'bose', 'audio'] } ];

function paginate(array, page, size) { const total = array.length; const p = Math.max(1, Number.isInteger(page) ? page : 1); const s = Math.max(1, Number.isInteger(size) ? size : 10); const start = (p - 1) * s; if (start >= total) return []; return array.slice(start, Math.min(start + s, total)); }

const cache = new Map(); function getCache(key) { const entry = cache.get(key); if (!entry) return null; if (entry.exp < Date.now()) { cache.delete(key); return null; } return entry.value; } function setCache(key, value, ttlMs = 60000) { cache.set(key, { value, exp: Date.now() + ttlMs }); }

function httpError(status, code, message, details) { const err = new Error(message); err.status = status; err.code = code; if (details) err.details = details; return err; }

app.get('/api/items', (req, res, next) => { try { const { q = '', page = '1', size = '10' } = req.query; const pageNum = Number.parseInt(page, 10); const sizeNum = Number.parseInt(size, 10);

const details = {};
if (!Number.isFinite(pageNum) || pageNum < 1) details.page = 'page must be a positive integer';
if (!Number.isFinite(sizeNum) || sizeNum < 1 || sizeNum > 100) details.size = 'size must be an integer between 1 and 100';
if (typeof q !== 'string') details.q = 'q must be a string';
if (typeof q === 'string' && q.length > 100) details.q = 'q length must be <= 100';
if (Object.keys(details).length) throw httpError(400, 'INVALID_QUERY', 'Invalid query parameters', details);

const keyword = (q || '').trim().toLowerCase();
const cacheKey = `filtered:q=${keyword}`;
let filtered = getCache(cacheKey);
if (!filtered) {
  if (keyword.length === 0) {
    filtered = items.slice();
  } else {
    filtered = items.filter(it => {
      const inName = it.name.toLowerCase().includes(keyword);
      const inTags = Array.isArray(it.tags) && it.tags.some(t => String(t).toLowerCase().includes(keyword));
      return inName || inTags;
    });
  }
  setCache(cacheKey, filtered, 60000);
}

const data = paginate(filtered, pageNum, sizeNum);
res.json({
  data,
  meta: { page: pageNum, size: sizeNum, total: filtered.length }
});

} catch (err) { next(err); } });

app.use((err, req, res, next) => { const status = err.status || 500; const code = err.code || (status === 500 ? 'INTERNAL_ERROR' : 'ERROR'); const payload = { error: { code, message: err.message || 'Internal Server Error' } }; if (process.env.NODE_ENV !== 'production' && err.details) payload.error.details = err.details; res.status(status).json(payload); });

app.listen(3000, () => console.log('Server started on 3000'));

以下是补全并优化后的完整 Go 代码,支持并发抓取多个 URL、超时控制与重试、简单 LRU 缓存加速,并返回汇总 JSON。已添加必要注释。

package main

import ( "context" "encoding/json" "errors" "io" "log" "net/http" "sync" "time" )

// CacheEntry 表示缓存内容 type CacheEntry struct { URL string Body string FetchedAt time.Time }

// LRUCache 简化版 LRU 缓存(基于 map + slice 的顺序队列) type LRUCache struct { mu sync.Mutex data map[string]CacheEntry order []string // order[0] 为最近使用,末尾为最久未使用 limit int }

// NewLRUCache 初始化缓存 func NewLRUCache(limit int) *LRUCache { return &LRUCache{ data: make(map[string]CacheEntry, limit), order: make([]string, 0, limit), limit: limit, } }

// removeKey 从顺序队列移除指定 key func (c *LRUCache) removeKey(key string) { for i, k := range c.order { if k == key { c.order = append(c.order[:i], c.order[i+1:]...) return } } }

// Get 获取缓存并提升至最近使用 func (c *LRUCache) Get(key string) (CacheEntry, bool) { c.mu.Lock() defer c.mu.Unlock() entry, ok := c.data[key] if !ok { return CacheEntry{}, false } // 提升到队列头部 c.removeKey(key) c.order = append([]string{key}, c.order...) return entry, true }

// Set 设置缓存,若超出限制则淘汰最久未使用项 func (c *LRUCache) Set(key string, entry CacheEntry) { c.mu.Lock() defer c.mu.Unlock() if _, ok := c.data[key]; ok { // 更新已有项并提升 c.data[key] = entry c.removeKey(key) c.order = append([]string{key}, c.order...) return } // 若容量已满,淘汰队列末尾(最久未使用) if len(c.order) >= c.limit { old := c.order[len(c.order)-1] delete(c.data, old) c.order = c.order[:len(c.order)-1] } c.data[key] = entry c.order = append([]string{key}, c.order...) }

// fetchURL 使用 context 控制超时/取消,并内置重试逻辑 func fetchURL(ctx context.Context, url string) (string, error) { client := &http.Client{} // 超时由 ctx 控制 const maxRetries = 3 baseBackoff := 100 * time.Millisecond

for attempt := 0; attempt < maxRetries; attempt++ {
    // 若已取消或超时,尽早退出
    if ctx.Err() != nil {
        return "", ctx.Err()
    }

    req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
    if err != nil {
        return "", err
    }
    req.Header.Set("Accept", "text/plain,*/*")

    resp, err := client.Do(req)
    if err != nil {
        // 网络错误或 ctx 取消
        if ctx.Err() != nil {
            return "", ctx.Err()
        }
        // 退避重试
        if attempt < maxRetries-1 {
            backoff := baseBackoff * time.Duration(1<<attempt) // 指数退避
            select {
            case <-time.After(backoff):
            case <-ctx.Done():
                return "", ctx.Err()
            }
            continue
        }
        return "", err
    }

    // 确保关闭 Body
    bodyBytes := []byte{}
    if resp.StatusCode >= 200 && resp.StatusCode < 300 {
        var readErr error
        bodyBytes, readErr = io.ReadAll(resp.Body)
        resp.Body.Close()
        if readErr != nil {
            // 读失败可重试
            if attempt < maxRetries-1 && ctx.Err() == nil {
                backoff := baseBackoff * time.Duration(1<<attempt)
                select {
                case <-time.After(backoff):
                case <-ctx.Done():
                    return "", ctx.Err()
                }
                continue
            }
            return "", readErr
        }
        return string(bodyBytes), nil
    } else {
        // 非 2xx 状态视为错误,尝试重试
        io.Copy(io.Discard, resp.Body)
        resp.Body.Close()
        if attempt < maxRetries-1 && ctx.Err() == nil {
            backoff := baseBackoff * time.Duration(1<<attempt)
            select {
            case <-time.After(backoff):
            case <-ctx.Done():
                return "", ctx.Err()
            }
            continue
        }
        return "", errors.New("non-2xx response")
    }
}
return "", errors.New("fetch failed after retries")

}

type CollectResult struct { URL string json:"url" Ok bool json:"ok" Length int json:"length" }

var cache *LRUCache

// handleCollect 并发抓取多个 URL,支持 LRU 缓存、超时与重试,返回结果 JSON func handleCollect(w http.ResponseWriter, r http.Request) { // 期望: /collect?url=https://a.com&url=https://b.com start := time.Now() ctx, cancel := context.WithTimeout(r.Context(), 3time.Second) defer cancel()

urls := r.URL.Query()["url"]
if len(urls) == 0 {
    http.Error(w, "missing url params", http.StatusBadRequest)
    return
}

// 预分配结果,保持与输入顺序一致
results := make([]CollectResult, len(urls))

// 将相同 URL 的索引聚合,避免重复抓取
urlIndices := make(map[string][]int, len(urls))
for i, u := range urls {
    urlIndices[u] = append(urlIndices[u], i)
}

// 先尝试缓存命中,命中的不再抓取
toFetch := make([]string, 0)
for u, idxs := range urlIndices {
    if entry, ok := cache.Get(u); ok {
        // 缓存命中:直接填充各索引结果
        for _, i := range idxs {
            results[i] = CollectResult{
                URL:    u,
                Ok:     true,
                Length: len(entry.Body),
            }
        }
        continue
    }
    toFetch = append(toFetch, u)
}

// 并发抓取未命中的 URL(一个 URL 一次抓取,结果映射到多个索引)
var wg sync.WaitGroup
for _, u := range toFetch {
    idxs := urlIndices[u]
    wg.Add(1)
    go func(u string, idxs []int) {
        defer wg.Done()
        body, err := fetchURL(ctx, u)
        if err != nil {
            for _, i := range idxs {
                results[i] = CollectResult{URL: u, Ok: false, Length: 0}
            }
            return
        }
        // 写入缓存
        cache.Set(u, CacheEntry{URL: u, Body: body, FetchedAt: time.Now()})
        for _, i := range idxs {
            results[i] = CollectResult{URL: u, Ok: true, Length: len(body)}
        }
    }(u, idxs)
}
wg.Wait()

tookMs := time.Since(start).Milliseconds()

// 输出 JSON
w.Header().Set("Content-Type", "application/json")
_ = json.NewEncoder(w).Encode(map[string]any{
    "results": results,
    "tookMs":  tookMs,
})

}

func main() { // 初始化 LRU 缓存,限制容量为 64 cache = NewLRUCache(64)

http.HandleFunc("/collect", handleCollect)
log.Println("Listening on :8080")
log.Fatal(http.ListenAndServe(":8080", nil))

}

示例详情

解决的问题

通过智能补全功能,帮助开发者快速生成完整可运行的代码实现,从而提升开发效率、减少编码错误,并加速目标功能的实现。

适用用户

后端开发人员

通过该提示词快速补全业务逻辑代码,减少重复性工作并提升接口开发效率,专注于核心功能实现。

初学编程者

为新手提供有效的代码示例和指导,帮助快速学习语言特性与实现常见功能,降低学习曲线。

全栈开发人员

高效生成前后端代码片段,无需频繁查阅文档或资料,提升开发一体化效率。

特征总结

根据输入的代码片段与目标功能,智能生成完整可运行的代码,实现快速开发与迭代。
支持多种编程语言,让程序员可以在多语言项目中轻松切换,提升开发效率。
自动优化代码结构并添加注释,让代码不仅高效,还易于维护和阅读。
基于上下文理解与目标要求,提供高质量的功能实现,减少出错率。
一键生成复杂功能模块,轻松满足业务需求,无需从零开始开发。
针对开发需求定制生成逻辑,可灵活调整,实现针对性输出。
提升团队协作效率,通过统一的代码风格与逻辑帮助开发者保持一致性。
简化学习过程,让新手开发者在指导下快速掌握代码实现,缩短上手时间。

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

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

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

2. 发布为 API 接口调用

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

3. 在 MCP Client 中配置使用

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

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

您购买后可以获得什么

获得完整提示词模板
- 共 87 tokens
- 4 个可调节参数
{ 编程语言类型 } { 代码片段内容 } { 目标功能说明 } { 是否添加注释 }
获得社区贡献内容的使用权
- 精选社区优质案例,助您快速上手提示词
限时免费

不要错过!

免费获取高级提示词-优惠即将到期

17
:
23
小时
:
59
分钟
:
59