更新时间:2024-08-29 GMT+08:00
分享

Prompt(提示词模板)

提示词模板模块提供模板格式化、自定义配置、few-shot管理功能。

  • 模板格式化
    import com.huaweicloud.pangu.dev.sdk.template.KV;
    import com.huaweicloud.pangu.dev.sdk.template.PromptTemplate;
    import org.junit.jupiter.api.Assertions;
    
    import java.util.HashMap;
    
    // 初始化Prompt模板对象
    PromptTemplate promptTemplate = new PromptTemplate("Tell me a {{adjective}} joke about {{content}}");
    
    // 支持Map<String, Object>格式匹配替换Prompt模板
    String format1 = promptTemplate.format(new HashMap<String, Object>() {
                {
                    put("adjective", "funny");
                    put("content", "chickens");
                }
            });
    Assertions.assertEquals("Tell me a funny joke about chickens", format1);
    
    // 支持KV格式匹配替换Prompt模板
    String format2 = promptTemplate.format(KV.of("adjective", "funny"), KV.of("content", "chickens"));
    Assertions.assertEquals("Tell me a funny joke about chickens", format2);
  • few-shot
    // 构造Prompt模板
    interface Antonyms {
        String FIND_ANTONYMS = "给定一个单词:{{word}},返回一个反义词:{{antonym}}";
    }
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    // 构造示例
    public interface ExampleSample {
        interface Antonyms {
            List<Map<String, Object>> antonyms = new ArrayList<Map<String, Object>>() {
                {
                    add(new HashMap<String, Object>() {
                        {
                            put("word", "short");
                            put("antonym", "long");
                        }
                    });
                    add(new HashMap<String, Object>() {
                        {
                            put("word", "energetic");
                            put("antonym", "lethargic");
                        }
                    });
                    add(new HashMap<String, Object>() {
                        {
                            put("word", "windy");
                            put("antonym", "calm");
                        }
                    });
                }
            };
        }
    }
    import com.huaweicloud.pangu.dev.sdk.prompts.exampleselector.LengthBasedES;
    import com.huaweicloud.pangu.dev.sdk.template.PromptTemplate;
    import com.huaweicloud.pangu.dev.sdk.prompts.FewShotPromptTemplate;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    // 构造prompt模板
    PromptTemplate promptTemplate = new PromptTemplate(Antonyms.FIND_ANTONYMS);
    
    // 构造fewshotPrompt模板:
    // 基于长度策略(长度限制50)
    // 传入prompt的开头 "参考以下示例,给出给定单词的反义词:"
    // 传入分隔符  "\n\n"
    // 传入prompt的结尾 "给定一个单词:{{word}},返回一个反义词:"
    FewShotPromptTemplate fewShotPromptTemplate =
        new FewShotPromptTemplate(new LengthBasedES(ExampleSample.Antonyms.antonyms, promptTemplate, 50),
        promptTemplate, "参考以下示例,给出给定单词的反义词:", "给定一个单词:{{word}},返回一个反义词:", "\n\n");
    
    // 输入
    Map<String, Object> inputs = new HashMap<String, Object>() {
        {
            put("word", "hard");
        }
    };
    
    // 根据输入匹配替换fewShotPromptTemplate,得到最终fewShotPrompt
    String prompt = fewShotPromptTemplate.format(inputs);
  • 自定义prompt
    // 按约定的格式准备prompt文件; 
    // 文档结构和文件名参考提供的系统预置prompts文件
    
    文档结构示例:
    ……
      prompts
        -- default
          -- documents
            -- stuff.pt
    // 配置sdk配置项,指定prompt文件根路径,以 /home 目录下为例
    sdk.prompt.path=/home/prompts/default

相关文档