AI提示词

后端生成markdown格式的API文档

1
2
3
4
5
6
请根据这个模块,输出指定文件夹下的所有接口文档,并存储到 docs/xxx.md 路径下,如docs/base.md,docs/user.md,docs/tg_capcut.md。
要求尽可能的详细,方便前端对接。

# 后端域名
生产环境:https://api.xxx.com
测试环境:http://127.0.0.1

初始化前端项目,生成代码提示词

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
请根据 ./docs 中的所有接口,实现一个完整的视频剪辑系统,包括用户登录模块、剪映草稿任务管理模块、阿里云oss上传等

实现以下页面:
1. 用户登录页面(参考 docs/user.md)
2. 个人中心页面,支持修改昵称、修改密码等(参考 docs/user.md)
3. 剪映草稿任务管理页面(参考 docs/tg_capcut.md)

技术栈:
- Vue 3 - 渐进式 JavaScript 框架
- Vite - 下一代前端构建工具
- Element Plus - Vue 3 UI 组件库
- Vue Router - 官方路由管理器
- Pinia - Vue 状态管理库
- Axios - HTTP 请求库
- TypeScript - 类型安全的 JavaScript 超集
- Sass - CSS 预处理器

要求:
- 本地开发调试时,支持代码热更新
- 统一的API请求封装
- 统一的错误处理
- Token认证处理
- 路由守卫
- 使用axios进行API调用
- 统一loading状态管理
- oss文件默认上传到目录:xxx-front

Vue

使用 Vite 构建 Vue 项目的流程非常简洁

  1. 创建项目:npm create vite@latest
  2. 安装依赖:cd my-project && npm install
  3. 开发调试:npm run dev
  4. 生产环境构建部署:npm run build;测试环境构建部署:npm run build:test
  5. 预览生产版本:npm run preview
1
2
3
4
5
6
7
# package.json
"scripts": {
    "dev": "vite",
    "build": "vue-tsc -b && vite build",
    "build:test": "vue-tsc -b && vite build --mode development",
    "preview": "vite preview"
},

环境文件

Vite 根据运行的命令自动选择对应的环境文件:

Node.js

Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,它允许开发者在 服务器端 运行 JavaScript 代码,而不仅仅局限于浏览器。

核心定位

  1. Node.js 不是新的编程语言,而是让 JavaScript 脱离浏览器运行的 运行环境(包含执行引擎、内置 API 等)。
  2. 核心价值:统一前后端开发语言(均使用 JavaScript),降低开发成本;同时利用 V8 引擎的高性能,实现高效的服务器端编程。

node

1
2
brew install node
node -v

MacOS Node 升级

非洲鼓

咚、嘟、哒

  1. 低音(B,Bass)

    对应发声 “咚”,是最厚重沉稳的音。演奏时用并拢的手掌(大拇指张开)拍打鼓面中心,靠手掌的重力和发力带动鼓腔共振,发出饱满的 “咚” 声,这也是非洲鼓的基础核心音。

企业微信收费项目

  1. 企业微信认证审核服务费:收费标准根据企业规模每年收费,小型企业(员工数≤1000人)300元/年,中型企业(1001-10000人)3000元/年,大型企业(≥10001人)30000元/年,具体以企微收费为准。
  2. 可添加客户数量:每个企业免费 2000 人的外部联系人规模,若超过该规模,企业可根据需求购买更大规模后继续使用。5000位需要500元/年,2万位需要2000元/年,以此类推,相当于每1人需0.1元/年。
  3. 使用侧边栏功能:按员工维度收费,用于购买接口调用许可
  4. 会话存档:按员工维度收费,服务版405元/人/年,企业版810元/人/年,私有化部署50/人/年
  5. 企微其他高级功能(如获客助手、私密会议)

企微外部联系人收费

AI提示词示例

标题生成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#角色设定
你是一位顶级的短视频内容策划,一个B站“标题党”克星,深谙爆款标题的创作逻辑。你的任务是为**一批**视频话题,生成**1个**最佳的、高质量、高点击率但**绝不脱离原文**的标题。

## 核心原则
1.  **忠于原文**: 标题的立意必须直接源自片段内容,严禁无中生有。
2.  **拒绝夸张**: 避免使用“震惊”、“惊呆了”等过度营销的词汇。
3.  **突出亮点**: 标题需精准捕捉片段最核心的观点、最激烈的情绪或最有价值的信息。
4.  **精炼有力**: 标题必须简洁、有冲击力,能迅速抓住用户眼球。

## 输入格式
你将收到一个JSON数组,其中包含**多个**待处理的高分片段。每个片段都有一个唯一的`id``title`字段。
```json
[
  {
    "id": "1",
    "title": "科技股操作策略",
    "content": ["算力基建是核心", "AI基建值得关注", "避免追高"],
    "recommend_reason": "观点犀利,信息密度极高,精准剖析了当前科技股的核心投资逻辑。"
  },
  {
    "id": "2",
    "title": "年轻人消费观的变化",
    "content": ["不再迷信大牌", "更注重性价比和国货", "理性消费成为主流"],
    "recommend_reason": "视角独特,紧贴年轻消费趋势,具有很强的话题性和讨论潜力。"
  }
]

任务要求

为输入的每一个话题片段,生成1个最佳标题。

AI提示词拟人化

拟人化Prompt

一个优秀的拟人化 Prompt 需要具备完整的人设架构和细致的行为规则。接下来我以李乐儿的 Prompt 为例,为大家详细拆解制作流程。

  1. 基础人设搭建

    首先需要确定角色的基本信息,这是整个人设的基础框架:

图片水印

图片平铺水印

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
package main

import (
    "flag"
    "fmt"
    "image"
    "image/draw"
    "image/jpeg"
    "image/png"
    "log"
    "math"
    "os"
    "path/filepath"
    "strings"
)

// 配置参数
type Config struct {
    SourcePath       string  // 原图路径
    WatermarkPath    string  // 水印图路径
    OutputPath       string  // 输出图片路径
    WatermarkScale   float64 // 水印缩放比例 (0.1-1.0)
    WatermarkDensity int     // 水印密集程度 (间隔像素)
}

// 加载图片
func loadImage(filePath string) (image.Image, error) {
     file, err := os.Open(filePath)
     if err != nil {
          return nil, err
     }
     defer file.Close()

     // 优先自动识别图片格式
     img, _, err := image.Decode(file)
     if err == nil {
          return img, nil
     }

     // fallback: 用后缀判断
     ext := strings.ToLower(filepath.Ext(filePath))
     _, _ = file.Seek(0, 0) // 重置文件指针
     switch ext {
     case ".jpg", ".jpeg":
          img, err = jpeg.Decode(file)
     case ".png":
          img, err = png.Decode(file)
     default:
          return nil, fmt.Errorf("不支持的图片格式: %s", ext)
     }
     return img, err
}

// 保存图片
func saveImage(img image.Image, outputPath string) error {
    file, err := os.Create(outputPath)
    if err != nil {
        return err
    }
    defer file.Close()

    ext := strings.ToLower(filepath.Ext(outputPath))

    switch ext {
    case ".jpg", ".jpeg":
        err = jpeg.Encode(file, img, &jpeg.Options{Quality: 90})
    case ".png":
        err = png.Encode(file, img)
    default:
        return fmt.Errorf("不支持的输出格式: %s", ext)
    }

    return err
}

// 调整水印图片大小
func resizeWatermark(watermark image.Image, scale float64) image.Image {
    bounds := watermark.Bounds()
    width := int(float64(bounds.Dx()) * scale)
    height := int(float64(bounds.Dy()) * scale)

    // 确保宽高至少为1像素
    if width < 1 {
        width = 1
    }
    if height < 1 {
        height = 1
    }

    resized := image.NewRGBA(image.Rect(0, 0, width, height))

    // 简单的缩放算法
    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            srcX := x * bounds.Dx() / width
            srcY := y * bounds.Dy() / height
            resized.Set(x, y, watermark.At(srcX, srcY))
        }
    }

    return resized
}

// 添加平铺水印
func addTiledWatermark(src image.Image, watermark image.Image, density int) image.Image {
    srcBounds := src.Bounds()
    watermarkBounds := watermark.Bounds()

    // 创建输出图像
    result := image.NewRGBA(srcBounds)
    draw.Draw(result, srcBounds, src, image.Point{}, draw.Src)

    // 计算水印平铺的行列数
    cols := int(math.Ceil(float64(srcBounds.Dx()) / float64(watermarkBounds.Dx()+density)))
    rows := int(math.Ceil(float64(srcBounds.Dy()) / float64(watermarkBounds.Dy()+density)))

    // 平铺水印
    for row := 0; row < rows; row++ {
        for col := 0; col < cols; col++ {
            x := col * (watermarkBounds.Dx() + density)
            y := row * (watermarkBounds.Dy() + density)

            // 水印位置
            watermarkPos := image.Rect(
                x,
                y,
                x+watermarkBounds.Dx(),
                y+watermarkBounds.Dy(),
            )

            // 确保水印不超出原图范围
            if watermarkPos.Max.X > srcBounds.Max.X || watermarkPos.Max.Y > srcBounds.Max.Y {
                watermarkPos = watermarkPos.Intersect(srcBounds)
            }

            // 绘制水印
            draw.Draw(result, watermarkPos, watermark, image.Point{}, draw.Over)
        }
    }

    return result
}

func main() {
    // 解析命令行参数
    config := Config{
        SourcePath:       "/Users/xxx/Downloads/yuantu.jpg",
        WatermarkPath:    "/Users/xxx/Downloads/shuiyin.png",
        OutputPath:       "/Users/xxx/Downloads/output.png",
        WatermarkScale:   0.8,
        WatermarkDensity: 50,
    }

    // flag.StringVar(&config.SourcePath, "src", "", "原图路径 (必填)")
    // flag.StringVar(&config.WatermarkPath, "watermark", "", "水印图路径 (必填)")
    // flag.StringVar(&config.OutputPath, "output", "output.jpg", "输出图片路径")
    // flag.Float64Var(&config.WatermarkScale, "scale", 0.3, "水印缩放比例 (0.1-1.0)")
    // flag.IntVar(&config.WatermarkDensity, "density", 50, "水印密集程度 (间隔像素)")

    flag.Parse()

    // 验证必填参数
    if config.SourcePath == "" || config.WatermarkPath == "" {
        fmt.Println("使用方法:")
        fmt.Println("  watermark -src <原图路径> -watermark <水印图路径> [选项]")
        fmt.Println("\n选项:")
        flag.PrintDefaults()
        os.Exit(1)
    }

    // 验证缩放比例范围
    if config.WatermarkScale < 0.1 || config.WatermarkScale > 1.0 {
        log.Fatal("水印缩放比例必须在 0.1 到 1.0 之间")
    }

    // 验证密集程度范围
    if config.WatermarkDensity < 0 {
        log.Fatal("水印密集程度必须大于等于 0")
    }

    // 加载原图
    srcImg, err := loadImage(config.SourcePath)
    if err != nil {
        log.Fatalf("加载原图失败: %v", err)
    }

    // 加载水印图
    watermarkImg, err := loadImage(config.WatermarkPath)
    if err != nil {
        log.Fatalf("加载水印图失败: %v", err)
    }

    // 调整水印大小
    resizedWatermark := resizeWatermark(watermarkImg, config.WatermarkScale)

    // 添加平铺水印
    resultImg := addTiledWatermark(srcImg, resizedWatermark, config.WatermarkDensity)

    // 保存结果
    if err := saveImage(resultImg, config.OutputPath); err != nil {
        log.Fatalf("保存图片失败: %v", err)
    }

    fmt.Printf("水印添加成功,已保存到: %s\n", config.OutputPath)
}

视频切割

这是一个使用 ffmpeg+MoviePy 库开发的视频切割工具,可以将一个视频文件按照指定时长切割成多个片段。

安装依赖

1
2
3
4
5
brew install python
brew install ffmpeg
cd ./qiege && python3 -m venv venv # 创建虚拟环境,只需创建一次
source venv/bin/activate # 后续运行程序前都需要先激活虚拟环境,然后在虚拟环境中运行你的程序
pip install -r requirements.txt

使用方法

使用命令行运行程序,格式如下: