×
¥
查看详情
🔥 会员专享 文生代码 代码

算法实现生成器

👁️ 552 次查看
📅 Nov 19, 2025
💡 核心价值: 本提示词可根据算法名称、功能目标及输入输出定义,自动生成多语言算法实现代码,并附实现思路说明。适用于算法学习、面试准备及项目开发,支持多语言选择与可直接运行的标准结构输出,帮助开发者快速验证算法逻辑、提高编程与复现效率。

🎯 可自定义参数(5个)

编程语言
指定生成算法代码的编程语言
算法名称
算法函数或类名称
算法目标说明
算法实现的功能目标或处理逻辑
输入描述
函数或类的输入参数类型和含义
输出描述
函数或类的返回值类型和含义

🎨 效果示例

函数说明

  • 算法名称:dijkstra_shortest_path
  • 目标:使用优先队列实现 Dijkstra 最短路径算法,支持有向/无向加权图(权重非负)。可计算:
    • 起点到所有顶点的最短距离
    • 起点到指定终点的最短路并重建路径
  • 输入:
    • graph: dict[节点, list[(邻接节点, 权重: float)]]
    • start: 节点标识(字符串或整数,需可哈希)
    • end: 可选节点标识,None 表示计算到所有节点
    • return_path: bool,true 时返回路径(当 end 为 None 时返回前驱表用于路径恢复)
  • 输出:
    • 若 end 为 None:
      • return_path = False:返回 dict[节点 -> 最短距离]
      • return_path = True:返回 (dict[节点 -> 最短距离], dict[节点 -> 前驱节点])
    • 若提供 end:
      • return_path = False:返回 distance: float(不可达为 math.inf)
      • return_path = True:返回 (distance: float, path: list[节点])(不可达为 (math.inf, []))
  • 约定:
    • 支持有向/无向图:无向图请在输入中为每条边提供双向邻接即可
    • 权重必须为非负且有限数值
    • 空图、孤立顶点可健壮处理

代码实现(可直接运行与单元测试)

from typing import Any, Dict, Iterable, List, Optional, Tuple, Union
import heapq
import math
import unittest


def dijkstra_shortest_path(
    graph: Dict[Any, Iterable[Tuple[Any, Union[int, float]]]],
    start: Any,
    end: Optional[Any] = None,
    return_path: bool = False,
):
    """
    使用优先队列的 Dijkstra 最短路径算法。

    参数:
        graph: 字典,key 为节点(可哈希),value 为邻接列表 (邻居, 权重)。
               示例: {"A":[("B",1.5),("C",2.0)], "B":[("C",1.0)]}
               注意:无向图请提供双向边。
        start: 起点(可哈希)
        end:   终点(可选,None 表示计算到所有节点)
        return_path: 若为 True:
            - 当 end is None:返回 (distances, predecessors)
            - 当 end is not None:返回 (distance, path)

    返回:
        - 如果 end is None:
            - return_path=False -> dict[node] = 最短距离
            - return_path=True  -> (dict[node] = 最短距离, dict[node] = 前驱节点)
        - 如果 end is not None:
            - return_path=False -> distance: float(不可达为 math.inf)
            - return_path=True  -> (distance: float, path: list[节点];不可达为 (math.inf, []))

    健壮性:
        - 空图处理: 若图为空,仅返回与 start 相关的结果(到自身 0,其余不存在)
        - 孤立顶点: 允许 start 不在图中,视为孤立点;若 end==start,距离为 0,否则不可达
        - 校验:
            - 节点需可哈希
            - 权重需为非负且有限的数值

    时间复杂度:
        - O(E log V),其中 V 为顶点数,E 为边数(使用最小堆)
    空间复杂度:
        - O(V + E) 用于距离、前驱、邻接表和堆

    """
    # ------------------------
    # 输入校验与规范化
    # ------------------------
    if graph is None:
        raise TypeError("graph 不能为 None,请提供字典形式的邻接表。")
    if not isinstance(graph, dict):
        raise TypeError("graph 必须为 dict[节点 -> 邻接列表]。")

    # 校验并收集节点集;邻接表标准化为 dict[node] -> List[(neighbor, weight)]
    adjacency: Dict[Any, List[Tuple[Any, float]]] = {}
    nodes = set()

    # 校验 start/end 可哈希
    try:
        hash(start)
    except Exception as e:
        raise TypeError(f"start 节点不可哈希: {start!r}") from e
    if end is not None:
        try:
            hash(end)
        except Exception as e:
            raise TypeError(f"end 节点不可哈希: {end!r}") from e

    for u, edges in graph.items():
        # 校验节点可哈希
        try:
            hash(u)
        except Exception as e:
            raise TypeError(f"节点不可哈希: {u!r}") from e

        nodes.add(u)
        # 支持空/None 邻接列表(视为空)
        if edges is None:
            edges = []
        # 校验邻接列表类型
        if not isinstance(edges, (list, tuple)):
            raise TypeError(f"节点 {u!r} 的邻接列表必须为 list/tuple[(邻居, 权重)]。")

        normalized_edges: List[Tuple[Any, float]] = []
        for item in edges:
            if not isinstance(item, (list, tuple)) or len(item) != 2:
                raise TypeError(f"邻接项需为 (neighbor, weight),收到: {item!r}")
            v, w = item
            try:
                hash(v)
            except Exception as e:
                raise TypeError(f"邻居节点不可哈希: {v!r}") from e
            # 权重校验:数值、有限、非负
            if not isinstance(w, (int, float)):
                raise TypeError(f"权重必须为数值 (int/float),收到: {w!r}")
            if not math.isfinite(w):
                raise ValueError(f"权重必须为有限数值,收到: {w!r}")
            if w < 0:
                raise ValueError(f"权重必须非负,收到: {w!r}")

            nodes.add(v)
            normalized_edges.append((v, float(w)))

        adjacency[u] = normalized_edges

    # 将 start/end 纳入节点集合(允许孤立点)
    nodes.add(start)
    if end is not None:
        nodes.add(end)

    # 确保每个节点在 adjacency 中有条目
    for n in nodes:
        adjacency.setdefault(n, [])

    # ------------------------
    # Dijkstra 主过程
    # ------------------------
    # 初始化距离与前驱
    dist: Dict[Any, float] = {n: math.inf for n in nodes}
    dist[start] = 0.0
    prev: Dict[Any, Any] = {}  # 记录最优前驱

    # 小顶堆:(距离, 节点)
    heap: List[Tuple[float, Any]] = [(0.0, start)]

    # 若 end 指定,可提前终止:当 end 首次弹出且距离最小,即已确定最短路
    target = end

    while heap:
        d_u, u = heapq.heappop(heap)
        if d_u > dist[u]:
            # 堆中旧条目,忽略
            continue

        if target is not None and u == target:
            # 最短路径已确定,提前结束
            break

        # 松弛
        for v, w in adjacency[u]:
            nd = d_u + w
            if nd < dist[v]:
                dist[v] = nd
                prev[v] = u
                heapq.heappush(heap, (nd, v))

    # ------------------------
    # 构造返回值
    # ------------------------
    def reconstruct_path(predecessor: Dict[Any, Any], s: Any, t: Any) -> List[Any]:
        if s == t:
            return [s]
        if dist.get(t, math.inf) == math.inf:
            return []
        path = []
        cur = t
        while cur != s:
            path.append(cur)
            cur = predecessor.get(cur)
            if cur is None:
                # 理论上不会发生;保护性处理
                return []
        path.append(s)
        path.reverse()
        return path

    if end is None:
        # 需求:返回到所有节点的最短距离;可选返回前驱表
        return (dist, prev) if return_path else dist
    else:
        # 需求:返回到 end 的距离;可选返回路径
        distance = dist.get(end, math.inf)
        if return_path:
            path = reconstruct_path(prev, start, end)
            return (distance, path)
        else:
            return distance


# ------------------------
# 示例调用
# ------------------------
def _demo():
    example_graph = {
        "A": [("B", 1.5), ("C", 2.0)],
        "B": [("C", 1.0)],
        # 无向图示例:请提供双向边
        # "C": [("A", 2.0), ("B", 1.0)]
    }

    print("示例:起点到所有节点的距离")
    dist_all = dijkstra_shortest_path(example_graph, start="A", end=None, return_path=False)
    print(dist_all)  # {'A': 0.0, 'B': 1.5, 'C': 2.5}

    print("示例:起点到终点的最短路与路径")
    distance, path = dijkstra_shortest_path(example_graph, start="A", end="C", return_path=True)
    print(distance, path)  # 2.5 ['A', 'B', 'C']


# ------------------------
# 单元测试
# ------------------------
class TestDijkstraShortestPath(unittest.TestCase):
    def test_directed_basic(self):
        g = {
            "A": [("B", 1.5), ("C", 2.0)],
            "B": [("C", 1.0)],
        }
        distance, path = dijkstra_shortest_path(g, "A", "C", return_path=True)
        self.assertEqual(distance, 2.5)
        self.assertEqual(path, ["A", "B", "C"])

    def test_all_distances(self):
        g = {
            "A": [("B", 2), ("C", 5)],
            "B": [("C", 1)],
            "C": [],
            "D": []  # 孤立节点
        }
        dist = dijkstra_shortest_path(g, "A", end=None, return_path=False)
        self.assertEqual(dist["A"], 0.0)
        self.assertEqual(dist["B"], 2.0)
        self.assertEqual(dist["C"], 3.0)
        self.assertTrue(math.isinf(dist["D"]))

        dist2, prev = dijkstra_shortest_path(g, "A", end=None, return_path=True)
        self.assertEqual(dist2["C"], 3.0)
        # 路径恢复 A->B->C
        path_c = []
        cur = "C"
        while cur in prev:
            path_c.append(cur)
            cur = prev[cur]
        path_c.append("A")
        path_c.reverse()
        self.assertEqual(path_c, ["A", "B", "C"])

    def test_unreachable(self):
        g = {
            1: [(2, 1.0)],
            2: [],
            3: []  # 不可达
        }
        distance = dijkstra_shortest_path(g, 1, end=3, return_path=False)
        self.assertTrue(math.isinf(distance))
        distance, path = dijkstra_shortest_path(g, 1, end=3, return_path=True)
        self.assertTrue(math.isinf(distance))
        self.assertEqual(path, [])

    def test_empty_graph(self):
        g = {}
        # 起点到自身为 0,其他不存在
        dist = dijkstra_shortest_path(g, "S", end=None, return_path=False)
        self.assertEqual(dist["S"], 0.0)
        # 指定终点且不可达
        d, p = dijkstra_shortest_path(g, "S", end="T", return_path=True)
        self.assertTrue(math.isinf(d))
        self.assertEqual(p, [])

    def test_isolated_start(self):
        g = {"A": [("B", 2.0)], "B": []}
        # start 不在图中,视为孤立点
        d = dijkstra_shortest_path(g, "Z", end=None, return_path=False)
        self.assertEqual(d["Z"], 0.0)
        self.assertTrue(math.isinf(d["A"]))
        self.assertTrue(math.isinf(d["B"]))
        # end==start
        distance, path = dijkstra_shortest_path(g, "Z", end="Z", return_path=True)
        self.assertEqual(distance, 0.0)
        self.assertEqual(path, ["Z"])

    def test_invalid_weight(self):
        g_neg = {"A": [("B", -1.0)]}
        with self.assertRaises(ValueError):
            dijkstra_shortest_path(g_neg, "A", end=None)

        g_inf = {"A": [("B", float("inf"))]}
        with self.assertRaises(ValueError):
            dijkstra_shortest_path(g_inf, "A", end=None)

    def test_non_hashable_node(self):
        g_bad = {["A"]: [("B", 1.0)]}  # 列表不可哈希
        with self.assertRaises(TypeError):
            dijkstra_shortest_path(g_bad, "A", end=None)


if __name__ == "__main__":
    _demo()
    unittest.main(argv=["-v"], exit=False)

简要实现思路与逻辑说明

  • 使用最小堆(heapq)维护当前已知的最短距离候选,弹出距离最小的节点进行松弛,复杂度 O(E log V)。
  • 使用 dist 记录起点到各节点的最短距离;使用 prev 记录到达每个节点的最佳前驱,用于路径重建。
  • 当指定了 end 时,首次从堆中弹出 end 即确定其最短路径,可提前结束。
  • 输入校验涵盖:
    • graph 类型与邻接项格式
    • 节点可哈希性与权重非负、有限
    • 空图与孤立顶点处理(将 start/end 纳入节点集合,保证算法健壮性)
  • 无向图支持通过在输入中提供双向边实现;函数不自动补全双向边以避免误判图类型。

代码实现(JavaScript ES6)

/**
 * LRUCache - 基于双向链表 + Map 的 O(1) LRU 缓存
 * 支持操作:get、put、clear、size
 * 键:string | number
 * 值:任意类型
 */
class LRUCache {
  /**
   * @param {number} capacity - 缓存容量,需为 > 0 的整数
   */
  constructor(capacity) {
    if (!Number.isInteger(capacity) || capacity <= 0) {
      throw new Error('LRUCache: capacity must be an integer > 0');
    }
    this.capacity = capacity;
    this.map = new Map(); // key -> node

    // 伪头尾哨兵结点,便于O(1)在头/尾插入删除
    this._head = { prev: null, next: null }; // 最近使用(MRU)在 head 之后
    this._tail = { prev: null, next: null }; // 最久未使用(LRU)在 tail 之前
    this._head.next = this._tail;
    this._tail.prev = this._head;
  }

  /**
   * 读取键的值,命中则移动至队首(MRU)
   * @param {string|number} key
   * @returns {*} 命中返回值,未命中返回 -1
   */
  get(key) {
    this._validateKey(key);
    const node = this.map.get(key);
    if (!node) return -1;
    this._moveToHead(node);
    return node.value;
  }

  /**
   * 写入键值对,存在则更新并移动至队首;不存在则插入,满时淘汰LRU
   * @param {string|number} key
   * @param {*} value
   * @returns {void}
   */
  put(key, value) {
    this._validateKey(key);
    let node = this.map.get(key);
    if (node) {
      node.value = value;
      this._moveToHead(node);
      return;
    }
    // 需要新插入
    if (this.map.size >= this.capacity) {
      this._evictLRU();
    }
    node = { key, value, prev: null, next: null };
    this.map.set(key, node);
    this._addAfterHead(node);
  }

  /**
   * 清空缓存
   * @returns {void}
   */
  clear() {
    this.map.clear();
    // 重置双向链表
    this._head.next = this._tail;
    this._tail.prev = this._head;
  }

  /**
   * 当前元素数
   * @returns {number}
   */
  size() {
    return this.map.size;
  }

  // ========== 内部私有工具方法(ES6下用下划线约定私有) ==========

  _validateKey(key) {
    const t = typeof key;
    if (t !== 'string' && t !== 'number') {
      throw new TypeError('LRUCache: key must be string or number');
    }
  }

  _addAfterHead(node) {
    // 插入到 head 之后 => 变为最新使用(MRU)
    node.prev = this._head;
    node.next = this._head.next;
    this._head.next.prev = node;
    this._head.next = node;
  }

  _removeNode(node) {
    node.prev.next = node.next;
    node.next.prev = node.prev;
    node.prev = node.next = null;
  }

  _moveToHead(node) {
    this._removeNode(node);
    this._addAfterHead(node);
  }

  _evictLRU() {
    // LRU在尾节点前一个
    const lru = this._tail.prev;
    if (lru === this._head) return; // 正常情况下不会发生
    this._removeNode(lru);
    this.map.delete(lru.key);
  }
}

/************** 使用示例(可直接运行) **************/
(function demo() {
  console.log('--- LRUCache Demo ---');
  const cache = new LRUCache(2);

  cache.put(1, 'A');          // 缓存: [1:A]
  cache.put('b', 2);          // 缓存: ['b':2, 1:'A']  (MRU在左侧)
  console.log(cache.get(1));  // 命中A,移动到MRU => 输出: A
  // 缓存: [1:'A', 'b':2]

  cache.put(3, 'C');          // 容量满,淘汰LRU('b') -> 插入3
  // 缓存: [3:'C', 1:'A']
  console.log(cache.get('b')); // 未命中 => -1

  console.log(cache.size());   // 2
  cache.clear();
  console.log(cache.size());   // 0
})();

函数/类接口与输入输出说明

  • 构造器:constructor(capacity: number > 0)
    • 输入:capacity 缓存容量(正整数)
    • 输出:无
  • get(key: string | number)
    • 输入:键
    • 输出:命中返回对应值;未命中返回 -1
  • put(key: string | number, value: any)
    • 输入:键、值
    • 输出:无;内部可能淘汰最久未使用项
  • clear()
    • 输入:无
    • 输出:无;清空缓存
  • size()
    • 输入:无
    • 输出:number,当前元素个数

实现思路与逻辑说明

  • 使用 Map 实现 key -> 双向链表节点 的 O(1) 查找。
  • 双向链表维护使用顺序:表头(head)后面是最近使用(MRU),表尾(tail)前面是最久未使用(LRU)。
  • get 命中:将节点移至表头后;未命中返回 -1。
  • put:
    • 若键已存在:更新值并移至表头后。
    • 若键不存在:容量满则从表尾淘汰一个节点;随后将新节点插入表头后。
  • clear 重置 Map 和链表;size 返回 Map 大小。

复杂度

  • 时间复杂度:get、put、clear、size 均为 O(1)。
  • 空间复杂度:O(capacity)。

算法名称

TokenBucketLimiter(令牌桶限流器)

功能目标

  • 并发安全的令牌桶限流器,用于控制接口 QPS 或并发。
  • 固定容量与补充速率生成令牌;调用方请求消费 n 个令牌,若不足则拒绝。
  • 支持:构造函数 NewTokenBucketLimiter、Allow(n)、Stop()。
  • 使用 mutex + ticker 保证线程安全与可见性。
  • 适用于多 goroutine 并发调用。

函数/方法定义与输入输出说明

  • NewTokenBucketLimiter(capacity int, refillRate float64) -> *TokenBucketLimiter

    • capacity:桶容量(最大令牌数,>0)
    • refillRate:令牌补充速率(个/秒,>0)
    • 返回:限流器实例(初始为满桶)
  • (l *TokenBucketLimiter) Allow(n int) -> bool

    • n:本次需要消费的令牌数(>0)
    • 返回:true 表示成功消费并通过,false 表示令牌不足被拒
  • (l *TokenBucketLimiter) Stop()

    • 停止内部 ticker 并释放资源,无返回值;可重复调用且并发安全

完整可运行代码(Go)

package main

import (
	"fmt"
	"math"
	"sync"
	"time"
)

// TokenBucketLimiter 是一个并发安全的令牌桶限流器。
// - capacity:桶容量(最大令牌数)
// - refillRate:令牌补充速率(个/秒)
// - tokens:当前桶内令牌数(可为浮点以承载分数累积)
// - lastRefill:上次补充时间
// - ticker:周期性触发补充的定时器
// - mu:互斥锁,保护 tokens/lastRefill 等共享状态
// - stopCh/stopOnce:优雅停止后台补充协程
type TokenBucketLimiter struct {
	capacity   float64
	refillRate float64

	mu         sync.Mutex
	tokens     float64
	lastRefill time.Time

	ticker   *time.Ticker
	stopCh   chan struct{}
	stopOnce sync.Once
}

// 可调的后台补充粒度;无需与 refillRate 严格绑定,
// 我们使用“按实际流逝时间 * 速率”的方式补充,确保精度。
const defaultTick = 100 * time.Millisecond

// 防浮点误差
const epsilon = 1e-9

// NewTokenBucketLimiter 创建并启动一个令牌桶限流器。
// - capacity > 0,refillRate > 0,否则将触发 panic。
// - 初始为满桶,允许突发量为 capacity。
func NewTokenBucketLimiter(capacity int, refillRate float64) *TokenBucketLimiter {
	if capacity <= 0 {
		panic("TokenBucketLimiter: capacity must be > 0")
	}
	if refillRate <= 0 {
		panic("TokenBucketLimiter: refillRate must be > 0")
	}

	l := &TokenBucketLimiter{
		capacity:   float64(capacity),
		refillRate: refillRate,
		tokens:     float64(capacity), // 初始满桶
		lastRefill: time.Now(),
		ticker:     time.NewTicker(defaultTick),
		stopCh:     make(chan struct{}),
	}

	// 后台补充协程:按实际 elapsed 计算补充量,精度不依赖 tick 粒度。
	go l.refillLoop()
	return l
}

// refillLoop 后台定时补充令牌。
func (l *TokenBucketLimiter) refillLoop() {
	for {
		select {
		case <-l.ticker.C:
			l.mu.Lock()
			now := time.Now()
			elapsed := now.Sub(l.lastRefill).Seconds()
			if elapsed > 0 {
				add := l.refillRate * elapsed
				l.tokens = math.Min(l.capacity, l.tokens+add)
				l.lastRefill = now
			}
			l.mu.Unlock()
		case <-l.stopCh:
			l.ticker.Stop()
			return
		}
	}
}

// Allow 尝试消费 n 个令牌。
// 返回 true 表示通过并扣减令牌;否则返回 false。
// 并发安全。在调用时会做一次“按需补充”,进一步提高精度。
func (l *TokenBucketLimiter) Allow(n int) bool {
	if n <= 0 {
		return false
	}
	// 请求超过桶容量,永远无法满足,直接拒绝。
	if float64(n) > l.capacity {
		return false
	}

	l.mu.Lock()
	defer l.mu.Unlock()

	// 按需补充:基于最后一次补充时间与当前时间计算新增令牌。
	now := time.Now()
	elapsed := now.Sub(l.lastRefill).Seconds()
	if elapsed > 0 {
		add := l.refillRate * elapsed
		l.tokens = math.Min(l.capacity, l.tokens+add)
		l.lastRefill = now
	}

	if l.tokens+epsilon >= float64(n) {
		l.tokens -= float64(n)
		return true
	}
	return false
}

// Stop 停止后台 ticker 并释放资源;可重复调用且并发安全。
func (l *TokenBucketLimiter) Stop() {
	l.stopOnce.Do(func() {
		close(l.stopCh)
	})
}

// 以下为使用示例
func main() {
	// 桶容量 5,每秒补充 10 个令牌
	limiter := NewTokenBucketLimiter(5, 10.0)
	defer limiter.Stop()

	var wg sync.WaitGroup

	// 并发模拟 20 次请求,单次消耗 1 个令牌
	fmt.Println("First burst:")
	wg.Add(20)
	for i := 0; i < 20; i++ {
		go func(id int) {
			defer wg.Done()
			if limiter.Allow(1) {
				fmt.Printf("req %02d: allowed\n", id)
			} else {
				fmt.Printf("req %02d: rejected\n", id)
			}
		}(i)
	}
	wg.Wait()

	// 等待 500ms,让令牌部分补充(约 5 个)
	time.Sleep(500 * time.Millisecond)

	fmt.Println("Second burst after 500ms:")
	wg.Add(10)
	for i := 0; i < 10; i++ {
		go func(id int) {
			defer wg.Done()
			if limiter.Allow(1) {
				fmt.Printf("req2-%02d: allowed\n", id)
			} else {
				fmt.Printf("req2-%02d: rejected\n", id)
			}
		}(i)
	}
	wg.Wait()
}

实现思路与逻辑说明

  • 数据结构
    • 使用浮点 tokens 表示当前令牌数,以支持分数级别的补充(refillRate 可为任意正浮点)。
    • capacity 上限与 tokens 取 min,避免溢出。
    • lastRefill 记录最近一次更新时刻,用实际 elapsedSeconds × refillRate 计算新增令牌,精度不依赖 tick 粒度。
  • 并发与可见性
    • 所有对 tokens/lastRefill 的读写均在同一把 mutex 保护下,保证线程安全与内存可见性。
    • 后台协程使用 time.Ticker 周期性触发;Allow 内部也执行一次“按需补充”,在高并发或 tick 粒度较大时减少误差与抖动。
    • Stop 使用 once+chan 使得重复停止安全,同时确保 ticker 资源释放。
  • 初始状态
    • 构造时令牌桶为满桶,允许 capacity 的突发访问,符合常见令牌桶语义。
  • 错误/边界
    • n <= 0 或 n > capacity 的请求会被直接拒绝。
    • 防御浮点误差,比较时加入 epsilon。

复杂度分析

  • Allow:时间复杂度 O(1),空间复杂度 O(1)。
  • 后台补充:每次 tick 的补充为 O(1),整体资源开销与 tick 频率线性相关。

使用注意

  • 请在不再使用时调用 Stop() 释放内部 ticker 资源。
  • refillRate 可为浮点数(如 2.5 tokens/s),实现支持分数累积。
  • 若负载极高或对平滑性敏感,可根据场景调整 defaultTick(例如 10ms~200ms 区间)在“精度”与“系统开销”之间平衡。
  • 若单次请求所需令牌 n 大于 capacity,将永远无法通过;请根据需求调整 capacity 或拆分请求。

示例详情

该提示词已被收录:
“程序员必备:提升开发效率的专业AI提示词合集”
让 AI 成为你的第二双手,从代码生成到测试文档全部搞定,节省 80% 开发时间
√ 立即可用 · 零学习成本
√ 参数化批量生成
√ 专业提示词工程师打磨

📖 如何使用

30秒出活:复制 → 粘贴 → 搞定
与其花几十分钟和AI聊天、试错,不如直接复制这些经过千人验证的模板,修改几个 {{变量}} 就能立刻获得专业级输出。省下来的时间,足够你轻松享受两杯咖啡!
加载中...
💬 不会填参数?让 AI 反过来问你
不确定变量该填什么?一键转为对话模式,AI 会像资深顾问一样逐步引导你,问几个问题就能自动生成完美匹配你需求的定制结果。零门槛,开口就行。
转为对话模式
🚀 告别复制粘贴,Chat 里直接调用
无需切换,输入 / 唤醒 8000+ 专家级提示词。 插件将全站提示词库深度集成于 Chat 输入框。基于当前对话语境,系统智能推荐最契合的 Prompt 并自动完成参数化,让海量资源触手可及,从此彻底告别"手动搬运"。
即将推出
🔌 接口一调,提示词自己会进化
手动跑一次还行,跑一百次呢?通过 API 接口动态注入变量,接入批量评价引擎,让程序自动迭代出更高质量的提示词方案。Prompt 会自己进化,你只管收结果。
发布 API
🤖 一键变成你的专属 Agent 应用
不想每次都配参数?把这条提示词直接发布成独立 Agent,内嵌图片生成、参数优化等工具,分享链接就能用。给团队或客户一个"开箱即用"的完整方案。
创建 Agent

✅ 特性总结

以自然语言描述需求,一键生成完整算法代码,快速实现编程目标
支持多种编程语言,根据用户需求动态切换语言生成最佳代码实现
提供详细的算法实现逻辑说明,帮助理解代码思路,降低学习曲线
自动优化输入与输出逻辑,为算法设计提供规范化指导,提升开发效率
场景化解决实际问题,如数据处理、图像操作、优化问题等智能代码生成
无需编程经验,小白用户也能快速生成可用的算法代码,简化复杂度
灵活定制参数化模板,满足特定业务需求,提升代码生成的精确性
适用于教育场景,可用于算法学习与训练,促进编程能力提升
开发速度显著提升,将重心放在业务逻辑上,减少重复性编码工作

🎯 解决的问题

帮助用户快速生成符合业务需求的算法代码及其实现说明,满足开发、学习或项目需求的场景,提升开发效率和知识掌握。

🕒 版本历史

当前版本
v2.1 2024-01-15
优化输出结构,增强情节连贯性
  • ✨ 新增章节节奏控制参数
  • 🔧 优化人物关系描述逻辑
  • 📝 改进主题深化引导语
  • 🎯 增强情节转折点设计
v2.0 2023-12-20
重构提示词架构,提升生成质量
  • 🚀 全新的提示词结构设计
  • 📊 增加输出格式化选项
  • 💡 优化角色塑造引导
v1.5 2023-11-10
修复已知问题,提升稳定性
  • 🐛 修复长文本处理bug
  • ⚡ 提升响应速度
v1.0 2023-10-01
首次发布
  • 🎉 初始版本上线
COMING SOON
版本历史追踪,即将启航
记录每一次提示词的进化与升级,敬请期待。

💬 用户评价

4.8
⭐⭐⭐⭐⭐
基于 28 条评价
5星
85%
4星
12%
3星
3%
👤
电商运营 - 张先生
⭐⭐⭐⭐⭐ 2025-01-15
双十一用这个提示词生成了20多张海报,效果非常好!点击率提升了35%,节省了大量设计时间。参数调整很灵活,能快速适配不同节日。
效果好 节省时间
👤
品牌设计师 - 李女士
⭐⭐⭐⭐⭐ 2025-01-10
作为设计师,这个提示词帮我快速生成创意方向,大大提升了工作效率。生成的海报氛围感很强,稍作调整就能直接使用。
创意好 专业
COMING SOON
用户评价与反馈系统,即将上线
倾听真实反馈,在这里留下您的使用心得,敬请期待。
加载中...