提示词系统
MyDeskBot 的提示词系统是核心组件,负责生成和管理与 AI 模型交互的提示词。
提示词原理
什么是提示词
提示词(Prompt)是与 AI 模型交互的输入文本,它:
- 📝 定义任务 - 明确告诉 AI 要做什么
- 🎯 提供上下文 - 给 AI 足够的背景信息
- 📋 指定格式 - 定义输出的格式和结构
- ⚙️ 设置约束 - 限制 AI 的行为和输出
提示词结构
MyDeskBot 的提示词通常包含:
系统提示词(System Prompt)
- 定义 AI 的角色和目标
- 设置行为准则
- 指定响应风格
用户提示词(User Prompt)
- 用户的具体请求
- 相关的上下文信息
- 输入数据
辅助信息
- 示例(Few-shot)
- 约束条件
- 输出格式
内置提示词
代码补全
你是一个代码补全助手。 根据提供的上下文,补全代码片段。 保持代码风格一致,遵循最佳实践。
上下文: [相关代码、文件]
待补全的代码: [选中的代码]
补全后的代码:
:::
代码审查
你是一个专业的代码审查专家。 审查以下代码,指出问题和改进建议。
审查标准:
- 代码质量:可读性、可维护性
- 潜在问题:bug、安全漏洞
- 性能:性能优化机会
- 最佳实践:遵循行业最佳实践
代码: [代码片段]
请以以下格式输出: 🔴 严重问题 🟡 中等问题 🟢 改进建议 ✅ 良好实践
代码重构
你是一个代码重构专家。 重构以下代码,提高可读性、可维护性和性能。
重构原则:
- 保持功能不变
- 提高代码质量
- 遵循 SOLID 原则
- 添加必要的注释
原代码: [代码片段]
重构后的代码: [重构后的代码]
重构说明: [重构的说明]
文档生成
你是一个技术文档写作专家。 为以下代码生成清晰的文档。
文档要求:
- 包含函数/类的用途说明
- 参数说明(类型、含义)
- 返回值说明
- 使用示例
- 注意事项
代码: [代码片段]
生成的文档:
自定义提示词
提示词格式
MyDeskBot 提示词支持两种变量格式:
V1 格式(传统方式)
使用 Handlebars 模板语法,变量用三个大括号包裹:
{{{ input }}}
{{{ @currentFile }}}
{{{ @codebase }}}V1 格式需要显式指定用户输入 {{{ input }}}。
V2 格式(推荐)
使用 @ 符号引用上下文提供者,更简洁直观:
@currentFile
@codebase
@fileV2 格式会自动将用户输入追加到提示词末尾,无需手动指定。
本文档示例统一使用 V2 格式。
格式识别规则
MyDeskBot 通过以下规则自动识别提示词格式:
- 识别为 V1 格式:提示词包含
{{{ input }}} - 否则识别为 V2 格式
如果提示词中同时包含 {{{ input }}} 和 @variable,会被识别为 V1 格式。此时 @variable 需要用 {{{ }}} 包裹才能被渲染。
因此,实际使用中不应混合两种格式,应统一选择其中一种。
提示词变量
提示词使用 @ 符号引用上下文提供者:
| 提供者 | 说明 |
|---|---|
@file | 引用特定文件 |
@url | 引用 URL 内容 |
@clipboard | 剪贴板内容 |
@repo-map | 仓库映射 |
@currentFile | 当前文件 |
@os | 操作系统信息 |
@problems | 问题列表 |
@codebase | 代码库内容 |
@tree | 文件树 |
@open | 打开的文件 |
@debugger | 调试信息 |
@terminal | 终端输出 |
@diff | 差异内容 |
创建自定义提示词
你可以通过两种方式创建自定义提示词:
方式一:配置文件
在 config.yaml 中定义提示词:
# ~/.mydeskbot/config.yaml
prompts:
- name: "我的自定义提示词"
description: "用于特定任务的提示词"
prompt: |
你是一个专业的开发者助手
当前文件:
@currentFile方式二:提示词文件
在 ~/.mydeskbot/prompts/ 目录下创建独立的提示词文件:
# ~/.mydeskbot/prompts/code-review.prompt
name: "代码审查"
description: "审查代码质量、安全性和性能"
prompt: |
你是一个资深的代码审查工程师,专注于代码质量、安全性和性能。
审查以下代码:
@currentFile
输出格式:
1. 问题列表
2. 严重级别
3. 修复建议使用提示词文件时,会自动转换为可用的斜杠命令。
使用自定义提示词
在聊天输入框中输入 / 触发斜杠命令,然后选择你定义的提示词:
/prompt-name你也可以在 / 后直接输入提示词名称来使用它。
高级技巧
Few-shot 学习
提供示例提高效果:
你是一个代码转换助手。将 JavaScript 代码转换为 TypeScript。
示例 1: 输入:
javascriptfunction greet(name) { return "Hello " + name; }输出:
typescriptfunction greet(name: string): string { return "Hello " + name; }示例 2: 输入:
javascriptconst users = [ { name: "Alice", age: 25 }, { name: "Bob", age: 30 }, ];输出:
typescriptinterface User { name: string; age: number; } const users: User[] = [ { name: "Alice", age: 25 }, { name: "Bob", age: 30 }, ];现在转换以下代码: 输入:
javascript{ code; }输出:
typescript
链式思考
引导 AI 逐步推理:
你是一个问题解决专家。请逐步思考并解决问题。
问题:具体问题描述
请按以下步骤思考:
- 理解问题
- 分析需求
- 设计方案
- 实现方案
- 验证结果
步骤 1:理解问题 AI 的思考过程
步骤 2:分析需求 ...
最终答案:
自我修正
要求 AI 检查和改进:
你是一个代码审查专家。
任务:
- 生成代码
- 审查生成的代码
- 如果有问题,修正代码
- 再次审查
原始请求:用户的请求
步骤 1:生成代码 AI 生成代码
步骤 2:审查代码 AI 审查自己的代码
步骤 3:修正代码(如果需要) AI 修正代码
最终代码:
最佳实践
1. 清晰的指令
好的提示词:
创建一个 Python 函数,计算两个日期之间的工作日数量(排除周末和节假日)。 函数签名:def count_workdays(start_date: date, end_date: date) -> int
不好的提示词:
写个函数计算日期
2. 提供上下文
提供上下文:
这是一个 Django 视图函数,处理用户注册。 当前代码存在的问题:
- 没有验证邮箱格式
- 密码未加密存储
请改进这个函数。
代码:
python实际代码内容
缺少上下文:
改进这个函数
3. 指定格式
指定格式:
解释以下概念,用以下格式:
- 定义
- 示例代码
- 使用场景
- 注意事项
概念:JavaScript 闭包
未指定格式:
解释闭包
4. 设置约束
设置约束:
生成一个快速排序算法。 约束:
- 语言:Python
- 代码行数:不超过 20 行
- 添加详细注释
- 包含使用示例