Skip to content

提示词系统

MyDeskBot 的提示词系统是核心组件,负责生成和管理与 AI 模型交互的提示词。

提示词原理

什么是提示词

提示词(Prompt)是与 AI 模型交互的输入文本,它:

  • 📝 定义任务 - 明确告诉 AI 要做什么
  • 🎯 提供上下文 - 给 AI 足够的背景信息
  • 📋 指定格式 - 定义输出的格式和结构
  • ⚙️ 设置约束 - 限制 AI 的行为和输出

提示词结构

MyDeskBot 的提示词通常包含:

  1. 系统提示词(System Prompt)

    • 定义 AI 的角色和目标
    • 设置行为准则
    • 指定响应风格
  2. 用户提示词(User Prompt)

    • 用户的具体请求
    • 相关的上下文信息
    • 输入数据
  3. 辅助信息

    • 示例(Few-shot)
    • 约束条件
    • 输出格式

内置提示词

代码补全

你是一个代码补全助手。 根据提供的上下文,补全代码片段。 保持代码风格一致,遵循最佳实践。

上下文: [相关代码、文件]

待补全的代码: [选中的代码]

补全后的代码:

:::

代码审查

你是一个专业的代码审查专家。 审查以下代码,指出问题和改进建议。

审查标准:

  1. 代码质量:可读性、可维护性
  2. 潜在问题:bug、安全漏洞
  3. 性能:性能优化机会
  4. 最佳实践:遵循行业最佳实践

代码: [代码片段]

请以以下格式输出: 🔴 严重问题 🟡 中等问题 🟢 改进建议 ✅ 良好实践

代码重构

你是一个代码重构专家。 重构以下代码,提高可读性、可维护性和性能。

重构原则:

  1. 保持功能不变
  2. 提高代码质量
  3. 遵循 SOLID 原则
  4. 添加必要的注释

原代码: [代码片段]

重构后的代码: [重构后的代码]

重构说明: [重构的说明]

文档生成

你是一个技术文档写作专家。 为以下代码生成清晰的文档。

文档要求:

  1. 包含函数/类的用途说明
  2. 参数说明(类型、含义)
  3. 返回值说明
  4. 使用示例
  5. 注意事项

代码: [代码片段]

生成的文档:

自定义提示词

提示词格式

MyDeskBot 提示词支持两种变量格式:

V1 格式(传统方式)

使用 Handlebars 模板语法,变量用三个大括号包裹:

{{{ input }}}
{{{ @currentFile }}}
{{{ @codebase }}}

V1 格式需要显式指定用户输入 {{{ input }}}

V2 格式(推荐)

使用 @ 符号引用上下文提供者,更简洁直观:

@currentFile
@codebase
@file

V2 格式会自动将用户输入追加到提示词末尾,无需手动指定。

本文档示例统一使用 V2 格式。

格式识别规则

MyDeskBot 通过以下规则自动识别提示词格式:

  1. 识别为 V1 格式:提示词包含 {{{ input }}}
  2. 否则识别为 V2 格式

如果提示词中同时包含 {{{ input }}}@variable,会被识别为 V1 格式。此时 @variable 需要用 {{{ }}} 包裹才能被渲染。

因此,实际使用中不应混合两种格式,应统一选择其中一种。

提示词变量

提示词使用 @ 符号引用上下文提供者:

提供者说明
@file引用特定文件
@url引用 URL 内容
@clipboard剪贴板内容
@repo-map仓库映射
@currentFile当前文件
@os操作系统信息
@problems问题列表
@codebase代码库内容
@tree文件树
@open打开的文件
@debugger调试信息
@terminal终端输出
@diff差异内容

创建自定义提示词

你可以通过两种方式创建自定义提示词:

方式一:配置文件

config.yaml 中定义提示词:

yaml
# ~/.mydeskbot/config.yaml
prompts:
  - name: "我的自定义提示词"
    description: "用于特定任务的提示词"
    prompt: |
      你是一个专业的开发者助手

      当前文件:

      @currentFile

方式二:提示词文件

~/.mydeskbot/prompts/ 目录下创建独立的提示词文件:

yaml
# ~/.mydeskbot/prompts/code-review.prompt
name: "代码审查"
description: "审查代码质量、安全性和性能"
prompt: |
  你是一个资深的代码审查工程师,专注于代码质量、安全性和性能。

  审查以下代码:

  @currentFile

  输出格式:
  1. 问题列表
  2. 严重级别
  3. 修复建议

使用提示词文件时,会自动转换为可用的斜杠命令。

使用自定义提示词

在聊天输入框中输入 / 触发斜杠命令,然后选择你定义的提示词:

/prompt-name

你也可以在 / 后直接输入提示词名称来使用它。

高级技巧

Few-shot 学习

提供示例提高效果:

你是一个代码转换助手。将 JavaScript 代码转换为 TypeScript。

示例 1: 输入:

javascript
function greet(name) {
  return "Hello " + name;
}

输出:

typescript
function greet(name: string): string {
  return "Hello " + name;
}

示例 2: 输入:

javascript
const users = [
  { name: "Alice", age: 25 },
  { name: "Bob", age: 30 },
];

输出:

typescript
interface User {
  name: string;
  age: number;
}

const users: User[] = [
  { name: "Alice", age: 25 },
  { name: "Bob", age: 30 },
];

现在转换以下代码: 输入:

javascript
{
  code;
}

输出:

typescript

链式思考

引导 AI 逐步推理:

你是一个问题解决专家。请逐步思考并解决问题。

问题:具体问题描述

请按以下步骤思考:

  1. 理解问题
  2. 分析需求
  3. 设计方案
  4. 实现方案
  5. 验证结果

步骤 1:理解问题 AI 的思考过程

步骤 2:分析需求 ...

最终答案:

自我修正

要求 AI 检查和改进:

你是一个代码审查专家。

任务:

  1. 生成代码
  2. 审查生成的代码
  3. 如果有问题,修正代码
  4. 再次审查

原始请求:用户的请求

步骤 1:生成代码 AI 生成代码

步骤 2:审查代码 AI 审查自己的代码

步骤 3:修正代码(如果需要) AI 修正代码

最终代码:

最佳实践

1. 清晰的指令

好的提示词:

创建一个 Python 函数,计算两个日期之间的工作日数量(排除周末和节假日)。 函数签名:def count_workdays(start_date: date, end_date: date) -> int

不好的提示词:

写个函数计算日期

2. 提供上下文

提供上下文:

这是一个 Django 视图函数,处理用户注册。 当前代码存在的问题:

  1. 没有验证邮箱格式
  2. 密码未加密存储

请改进这个函数。

代码:

python
实际代码内容

缺少上下文:

改进这个函数

3. 指定格式

指定格式:

解释以下概念,用以下格式:

  1. 定义
  2. 示例代码
  3. 使用场景
  4. 注意事项

概念:JavaScript 闭包

未指定格式:

解释闭包

4. 设置约束

设置约束:

生成一个快速排序算法。 约束:

  • 语言:Python
  • 代码行数:不超过 20 行
  • 添加详细注释
  • 包含使用示例