偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

超實(shí)用!Prompt程序員使用指南,大模型各角色代碼實(shí)戰(zhàn)案例

開(kāi)發(fā) 前端 人工智能
提示詞(Prompt)是輸入給大模型(LLM)的文本指令,用于明確地告訴大模型你想要解決的問(wèn)題或完成的任務(wù),也是大語(yǔ)言模型理解用戶(hù)需求并生成準(zhǔn)確答案的基礎(chǔ)。因此 prompt 使用的好壞,直接決定了大模型生成結(jié)果的質(zhì)量(是否符合預(yù)期)。

提示詞(Prompt)是輸入給大模型(LLM)的文本指令,用于明確地告訴大模型你想要解決的問(wèn)題或完成的任務(wù),也是大語(yǔ)言模型理解用戶(hù)需求并生成準(zhǔn)確答案的基礎(chǔ)。因此 prompt 使用的好壞,直接決定了大模型生成結(jié)果的質(zhì)量(是否符合預(yù)期)。

圖片圖片

Prompt 基本使用

為了讓大模型生成更符合預(yù)期的結(jié)果,我們?cè)谑褂?Prompt 時(shí),可以使用以下模版。

圖片圖片

其內(nèi)容組成為:

  • 背景:介紹與任務(wù)緊密相關(guān)的背景信息。這一環(huán)節(jié)有助于 LLM 深入理解討論的具體環(huán)境,從而保證其生成內(nèi)容與話題高度相關(guān)。
  • 目的:明確指出您期望 LLM 完成的具體任務(wù)。通過(guò)設(shè)定清晰、精確的目標(biāo)指令,可引導(dǎo) LLM 聚焦于實(shí)現(xiàn)既定任務(wù),提升輸出的有效性。
  • 風(fēng)格:指定您希望 LLM 輸出的寫(xiě)作風(fēng)格,可以是某個(gè)具體名人、具體流派或者某類(lèi)專(zhuān)家的寫(xiě)作風(fēng)格。
  • 語(yǔ)氣:定義輸出內(nèi)容應(yīng)有的語(yǔ)氣,比如正式、詼諧、溫馨、關(guān)懷等,以便適應(yīng)不同的使用場(chǎng)景和使用目的。
  • 受眾:明確指出內(nèi)容面向的讀者群體,無(wú)論是專(zhuān)業(yè)人士、入門(mén)學(xué)習(xí)者還是兒童等,這樣 LLM 就能調(diào)整語(yǔ)言和內(nèi)容深度,使之更加貼合受眾需求。
  • 輸出:規(guī)定輸出內(nèi)容的具體形式,確保 LLM 提供的成果能直接滿(mǎn)足后續(xù)應(yīng)用的需求,比如列表、JSON 數(shù)據(jù)格式、專(zhuān)業(yè)分析報(bào)告等形式。

以下為阿里云提供的 Prompt 案例:

圖片圖片

在未使用 Prompt 模版時(shí),LLM 輸出雖表現(xiàn)尚可,但顯得過(guò)于泛化,缺乏必要的細(xì)節(jié)和針對(duì)特定群體的吸引力。而在使用 Prompt 框架時(shí),框架不僅提醒您考慮需求的其它方面,特別是一般 Prompt 中缺少的風(fēng)格、語(yǔ)氣和受眾,還幫助 LLM 生成更針對(duì)年輕群體、細(xì)節(jié)更多、語(yǔ)言表達(dá)更加富有張力的輸出。

Prompt 優(yōu)化工具

當(dāng)然,我們也可以使用一些工具來(lái)進(jìn)行 Prompt 優(yōu)化,例如阿里云百煉平臺(tái) Prompt 優(yōu)化工具擴(kuò)寫(xiě)等,如下圖所示:

圖片圖片

Prompt 發(fā)展演化

從程序的角度來(lái)看 Prompt 的發(fā)展演化經(jīng)過(guò)了以下幾個(gè)階段:

  • 簡(jiǎn)單字符串:最初的 Prompt 只是簡(jiǎn)單的文本字符串。
  • 占位符:引入占位符(如 {USER})以動(dòng)態(tài)插入內(nèi)容。
  • 多角色消息:將消息分為不同角色(如用戶(hù)、助手、系統(tǒng)等),增強(qiáng)交互的復(fù)雜性和上下文感知能力。

Spring AI Prompt 組成

以 Spring AI 中的 Prompt 來(lái)看,它的實(shí)現(xiàn)源碼如下:

public class Prompt implements ModelRequest<List<Message>> {
    private final List<Message> messages;
    private ChatOptions chatOptions;
}

Prompt 實(shí)現(xiàn)了 ModelRequest 接口,并且包含了 messages 和 chatOptions 屬性,其中:

  • messages:包含多個(gè) Message 對(duì)象,每個(gè)消息代表對(duì)話中的一個(gè)部分。
  • chatOptions:配置選項(xiàng),用于設(shè)置模型的某些屬性。

Message API 關(guān)系圖

Message 對(duì)象是 Content 的子類(lèi),Spring AI Message API 關(guān)系如下圖所示:

圖片圖片

Prompt 角色分類(lèi)

Prompt 中的主要角色(Role)包括以下幾個(gè):

  • 系統(tǒng)角色(System Role):設(shè)定 AI 行為邊界。指導(dǎo) AI 的行為和響應(yīng)方式,設(shè)置 AI 如何解釋和回復(fù)輸入的參數(shù)或規(guī)則。
  • 用戶(hù)角色(User Role):接收用戶(hù)原始輸入。代表用戶(hù)的輸入他們向 AI 提出的問(wèn)題、命令或陳述。這個(gè)角色至關(guān)重要,因?yàn)樗鼧?gòu)成了 AI 響應(yīng)的基礎(chǔ)。
  • 助手角色(Assistant Role):AI 返回的響應(yīng)信息,定義為“助手角色”消息。用它可以確保上下文能夠連貫的交互。
  • 工具/功能角色(Tool/Function Role):橋接外部服務(wù),可以進(jìn)行函數(shù)調(diào)用如,支付/數(shù)據(jù)查詢(xún)等操作。

角色在 Spring AI 枚舉中被定義,如下源碼所示:

public enum MessageType {
    USER("user"),
    ASSISTANT("assistant"),
    SYSTEM("system"),
    TOOL("tool");
    // .....
}

系統(tǒng)和用戶(hù)角色使用

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/prompt")
publicclass PromptController {
    privatefinal ChatClient chatClient;
    public PromptController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }
    @RequestMapping("/system")
    public String system(@RequestParam String city) {
        String result = chatClient.prompt()
        .system("你是一個(gè)旅行規(guī)劃助手")
        .user(city)
        .call()
        .content();
        System.out.println(result);
        return result;
    }
}

以上程序執(zhí)行結(jié)果如下:

圖片圖片

助手角色使用

AssistantMessage 助手消息類(lèi)型可用于接收上次執(zhí)行結(jié)果,并實(shí)現(xiàn)上下文連續(xù)對(duì)話,實(shí)現(xiàn)代碼如下:

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/prompt")
publicclass PromptController {
    privatefinal ChatClient chatClient;
    //使用集合記錄消息歷史
    List<Message> messages = new ArrayList<>();

    public PromptController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @RequestMapping("/assistant")
    public String assistant(@RequestParam String msg) {
        messages.add(new UserMessage(msg));
        // 助手消息
        AssistantMessage response = chatClient.prompt()
        .messages(messages)
        .call()
        .chatResponse()
        .getResult()
        .getOutput();
        messages.add(response);
        return response.getText();
    }
}

程序執(zhí)行結(jié)果如下:

圖片圖片

從結(jié)果可以看出,第二次交互是在第一次交互的基礎(chǔ)上執(zhí)行的。

小結(jié)

除了 Prompt 以上內(nèi)容之外,還有 PromptTemplate 以及 Prompt 使用技巧,例如為模型提供輸出樣例、設(shè)定完成任務(wù)步驟、使用思維鏈(Chain of Thought,COT)引導(dǎo)模型“思考”等具體技巧,咱們后期文章再慢慢聊。


責(zé)任編輯:武曉燕 來(lái)源: 磊哥和java
相關(guān)推薦

2022-12-07 10:21:19

谷歌搜索技巧

2025-05-08 08:10:25

大模型DeepSeekAPI

2018-04-23 11:00:06

程序員養(yǎng)生健康

2015-07-28 17:58:22

程序員指南

2013-07-04 13:50:14

2018-01-15 10:38:04

2009-06-22 09:06:57

程序員技術(shù)升級(jí)

2018-09-07 23:38:45

小程序開(kāi)發(fā)框架

2022-04-22 14:05:43

數(shù)據(jù)庫(kù)MongoDBMySQL

2022-09-29 09:07:08

DataGrip數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)庫(kù)

2015-03-13 09:45:27

2012-02-01 09:30:54

HTML 5

2022-02-16 18:21:33

程序員跳槽架構(gòu)

2024-12-13 08:02:55

大模型GPT后端

2009-11-04 11:41:01

程序員職業(yè)感悟軟件開(kāi)發(fā)

2020-08-06 13:05:10

程序員網(wǎng)頁(yè)數(shù)據(jù)

2025-02-18 10:25:10

2018-08-02 17:00:15

Vue.js學(xué)習(xí)iOS開(kāi)發(fā)

2017-10-23 19:17:09

程序員

2013-06-28 13:28:09

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)