介紹
提示詞是一種與大模型交互的對話格式,它以 JSON 格式定義了一個消息列表(messages),包含了系統消息和用戶消息。
我們向AI提問時,其實發給AI的都是提示詞,別看我們只是簡單輸入了一句話,但大模型內部其實自動幫我們把這句話轉換為提示詞的形式了。
但是我們現在如何手動來設置提示詞呢?請看下文
設置提示詞
總的流程就是:聲明 chatTemplate 表示提示詞模板,聲明?input 用于填充?chatTemplate 模板中的占位符,最終二者結合得到prompt。
package mainimport ("context""fmt""github.com/tmc/langchaingo/llms""github.com/tmc/langchaingo/llms/openai""github.com/tmc/langchaingo/prompts"
)func main() {// 初始化大模型llmllm, _ := openai.New(openai.WithModel("deepseek-reasoner"),openai.WithToken("sk-2c4e9ad917cf48d8ad834dc5b98e7e01"),openai.WithBaseURL("https://api.deepseek.com"),)// 什么提示詞模板chatTemplate := prompts.NewChatPromptTemplate([]prompts.MessageFormatter{prompts.NewSystemMessagePromptTemplate("你是一個有幫助的助手,擅長回答天氣相關問題。", nil),prompts.NewHumanMessagePromptTemplate("{{.greeting}}!今天{{.city}}的天氣怎么樣?", []string{"greeting", "city"}),})// input 用于填充?chatTemplate 模板中的占位符變量input := map[string]interface{}{"greeting": "早上好","city": "北京",}// 根據模板和變量生成為最終的提示詞prompt, _ := chatTemplate.Format(input)// 通過大模型llm調用APIctx := context.Background()completion, _ := llms.GenerateFromSinglePrompt(ctx,llm,prompt,)// 輸出大模型生成的答復fmt.Println(completion)
}
使用提示詞的好處
好處1.?支持對話上下文
messages 數組允許你提供多輪對話的歷史記錄,模型可以根據之前的消息生成更符合上下文的回復。
"messages": [{"role": "system", "content": "You are a helpful assistant."}, // 開啟對話時生成的{"role": "user", "content": "What is the capital of France?"}, // 用戶生成的{"role": "assistant", "content": "The capital of France is Paris."}, // ai生成的{"role": "user", "content": "What about Spain?"} // 用戶生成的
]
在這個例子中,模型知道用戶之前問了法國的首都,現在問西班牙的首都,可以直接回答:“The capital of Spain is Madrid.”,而不需要重復澄清。
好處2. 區分角色
通過 role 字段,模型可以區分不同身份(系統、用戶、AI)發送消息,從而采取不同的處理方式。
- role: "system":設置模型的全局行為或角色,通常只在對話開始時提供一次。
- role: "user":表示用戶的輸入,模型會直接回應。
- role: "assistant":表示模型的回復,通常由模型生成,但也可以手動添加以模擬對話歷史。
好處3.?兼容性和標準化
這種 messages 格式是 OpenAI 的 Chat API 標準格式(Chat Completions API),被廣泛采用。
許多 LLM 提供商(如 DeepSeek、Anthropic)都兼容這種格式,因為它已經成為行業標準。