【Augment】 Augment技巧之 Rewrite Prompt(重写提示) 有神奇的魔法

作者:煎饼果子卷AI

原文:mp.weixin.qq.com/s/qzbnaJtbB...

🔥AI助手总是理解错你的意思?这个隐藏功能让准确率暴增60%!

前言

说真的,augment在某体验上面已经强过Cursor,那就是Rewrite Prompt(重写提示)把非结构化自然语言输入转换为更适合 AI 模型理解的结构化格式。

人话:把你口语化(非结构化)的文字,根据窗口上下文聊天记录和代码索引库对你的输入内容进行针对性优化。

三大核心

1. 提示标准化

  • • 将用户的非结构化自然语言输入转换为更适合 AI 模型理解的结构化格式
  • • 统一不同用户输入风格,减少模型理解的歧义性

2. 上下文增强

  • • 基于项目上下文和历史对话,为用户输入添加必要的背景信息
  • • 结合代码库知识,提供更精确的技术术语和概念

3. 内容分类和提炼

  • • 自动识别用户输入的意图类型(如代码生成、问题解答、重构建议等)
  • • 根据不同类型应用相应的优化策略

示例

1️⃣ 提示标准化

你的原始输入:

复制代码
帮我写个函数

AI收到的实际指令:

markdown 复制代码
作为一个专业的软件开发助手,请基于以下用户输入提供准确的技术建议:
用户问题:帮我写个函数
请在回答时考虑:
1. 代码的可读性和维护性
2. 性能优化的可能性
3. 安全性最佳实践
4. 与现有代码库的兼容性
请提供具体的代码示例和详细的解释。

看到区别了吗?你随口一句话,AI接收到的却是一个结构化、专业化的技术需求!这就像是给AI配了个"翻译官"------把你的大白话翻译成AI最容易理解的"专业术语"。

2️⃣ 上下文增强

它还能"读懂"你的项目环境。就像一个新来的同事,不仅要听懂你的需求,还要了解公司的技术栈、编码规范、项目背景...

看个实际例子:

你问:"如何处理数据库连接?"

普通AI可能会给你一堆通用的数据库连接教程。

但经过上下文增强后,AI收到的是:

erlang 复制代码
基于当前 Java Spring Boot 项目上下文,请分析以下需求:如何处理数据库连接?

项目背景:
 - 使用 Spring Boot 2.7+ 框架
 - 集成 JPA 和 MySQL 数据库
 - 遵循 RESTful API 设计规范
 - 采用分层架构模式
请提供符合项目架构的解决方案...

这样AI就能给出针对你具体项目的专业建议,而不是泛泛而谈的通用方案!

3️⃣ 内容分类提炼

这是最智能的部分------AI能自动识别你的意图类型!

是想生成代码?还是修复bug?或者是性能优化?不同的需求,AI会采用不同的"回答策略"。
分类逻辑示例:

kotlin 复制代码
// 智能分类机制(简化版)
if (userInput.contains("写") || userInput.contains("生成")) {
    // 代码生成模式:强调完整性和规范性
    return codeGenerationTemplate;
} else if (userInput.contains("错误") || userInput.contains("bug")) {
    // 问题诊断模式:重点分析原因和解决方案  
    return bugFixingTemplate;
}

场景1 - 代码生成:

  • • 你说:"写个排序算法"
  • • AI理解为:"代码生成请求,需要提供完整可运行的代码,包含注释和错误处理"

场景2 - 问题诊断:

  • • 你说:"程序报NullPointerException"
  • • AI理解为:"问题诊断请求,需要分析根本原因,提供修复步骤和预防措施"

这就像是给AI装了个"读心术"------它能根据你的话判断你真正想要什么!

源码剖析

重写提示词的核心代码部分,其实没啥好讲,但是我喜欢收集放在文章里面,不喜欢可以跳过~

核心内容:
  • FeatureFlagManager.promptEnhancerEnabled() 方法详解
  • AugmentWebviewChatServiceImpl.applyClassifyAndDistillPrompt() 核心实现
  • ChatInitializeResponseData 配置字段分析
  • memoriesParamsclassify_and_distill_prompt 配置机制
  • • 数据流转和处理逻辑

AugmentWebviewChatServiceImpl.applyClassifyAndDistillPrompt() 方法

方法签名和核心实现
scss 复制代码
// 文件: com/augmentcode/intellij/chat/AugmentWebviewChatServiceImpl.java
privatefinalbooleanapplyClassifyAndDistillPrompt(
    ChatUserMessageRequest request, 
    ChatRequest chatRequest
) {
    // 1. 获取特性标志管理器
    FeatureFlagManagerfeatureFlagManager= FeatureFlagManager.Companion.getInstance();
    
    // 2. 获取记忆参数配置
    StringmemoriesParams= featureFlagManager.memoriesParams(true);
    JsonObjectmemoriesParamsJson= (JsonObject)(newGson()).fromJson(memoriesParams, JsonObject.class);
    
    // 3. 提取分类和提炼提示模板
    JsonElementvar10000= memoriesParamsJson.get("classify_and_distill_prompt");
    StringclassifyAndDistillPrompt= var10000 != null ? var10000.getAsString() : null;
    
    // 4. 验证模板有效性
    if (classifyAndDistillPrompt == null || classifyAndDistillPrompt.length() == 0) {
        logger.error("Classify and distill prompt missing.");
        returnfalse;
    }
    
    // 5. 应用模板到主消息
    StringuserText= request.getData().getText();
    chatRequest.message = StringsKt.replace$default(
        classifyAndDistillPrompt, 
        "{message}", 
        userText, 
        false, 4, (Object)null
    );
    
    // 6. 处理节点内容(如果存在)
    if (request.getData().getNodesCount() > 0) {
        // 遍历所有节点,对文本节点应用重写
        for (ChatRequestNode node : request.getData().getNodesList()) {
            if (node.getType() == ChatRequestNodeType.TEXT.getNumber() && node.hasTextNode()) {
                // 重写文本节点内容
                ChatRequestTextupdatedTextNode= node.getTextNode().toBuilder()
                    .setContent(StringsKt.replace$default(
                        classifyAndDistillPrompt, 
                        "{message}", 
                        node.getTextNode().getContent(), 
                        false, 4, (Object)null
                    ))
                    .build();
                
                // 更新节点
                ChatRequestNodeupdatedNode= node.toBuilder()
                    .setTextNode(updatedTextNode)
                    .build();
            }
        }
    }
    
    returntrue;
}
scss 复制代码
// 核心处理流程
publicbooleanenhancePrompt(ChatUserMessageRequest request, ChatRequest chatRequest) {
    try {
        // 1. 获取优化模板
        Stringtemplate= getEnhancementTemplate();
        
        // 2. 提取用户输入
        StringuserInput= request.getData().getText();
        
        // 3. 模板替换
        StringenhancedPrompt= template.replace("{message}", userInput);
        
        // 4. 更新请求
        chatRequest.message = enhancedPrompt;
        
        returntrue;
    } catch (Exception e) {
        // 异常时使用原始输入,确保功能稳定性
        returnfalse;
    }
}

// 配置更新不阻塞主流程
@Async
public CompletableFuture<Void> updateConfigurationAsync() {
    return CompletableFuture.runAsync(() -> {
        // 后台更新配置,用户无感知
        updateLatestConfiguration();
    });
}

实际应用示例

示例1:Java 开发场景

用户原始输入:

复制代码
我的 Spring Boot 应用启动很慢,怎么优化?

系统处理过程:

    1. 特性标志检查promptEnhancerEnabled(true)true
    1. 配置获取 :从 memoriesParams 获取优化模板
    1. 意图分类:识别为"性能优化"类型
    1. 模板应用:使用性能优化专用模板

最终重写结果:

markdown 复制代码
基于 Spring Boot 项目的性能优化分析请求:我的 Spring Boot 应用启动很慢,怎么优化?
项目上下文:
- Spring Boot 2.7+ 框架环境
- JVM 性能调优需求
- 生产环境部署考虑
请提供系统性的优化方案:
1. 启动时间瓶颈分析方法
2. 具体的配置优化建议
3. JVM 参数调优策略
4. 监控和测试验证方法
5. 预期性能提升效果评估
请包含可执行的优化步骤和相关代码示例。

重写前后对比

方面 重写前 重写后
明确性 模糊的自然语言 结构化的技术需求
上下文 缺乏背景信息 包含项目和技术上下文
质量要求 未明确标准 明确的质量和规范要求
输出格式 随机格式 标准化的响应结构

功能在这~

🤔 写在最后

Rewrite Prompt 技术的魅力就在于此------看似复杂的问题,往往有着优雅简洁的解决方案。

最关键的是,这一切都是透明的 ------你还是用原来的方式跟AI对话,但得到的却是质量提升60%的专业回答!

一个 Rewrite Prompt 就能让AI的理解能力提升一个档次。这种"四两拨千斤"的设计思路,真的值得我们(Curosr)学习。 :tieba_025:

相关推荐
袁煦丞4 分钟前
数据库设计神器DrawDB:cpolar内网穿透实验室第595个成功挑战
前端·程序员·远程工作
天天扭码11 分钟前
从图片到语音:我是如何用两大模型API打造沉浸式英语学习工具的
前端·人工智能·github
Liudef0613 分钟前
2048小游戏实现
javascript·css·css3
鱼樱前端2 小时前
今天介绍下最新更新的Vite7
前端·vue.js
coder_pig2 小时前
跟🤡杰哥一起学Flutter (三十四、玩转Flutter手势✋)
前端·flutter·harmonyos
万少2 小时前
01-自然壁纸实战教程-免费开放啦
前端
yuki_uix3 小时前
AI辅助网页设计:从图片到代码的实践探索
前端
我想说一句3 小时前
事件机制与委托:从冒泡捕获到高效编程的奇妙之旅
前端·javascript
陈随易3 小时前
MoonBit助力前端开发,加密&性能两不误,斐波那契测试提高3-4倍
前端·后端·程序员