跳到主要内容

提示模板

与语言模型交互的一个重要部分是使用某种模板格式化输入。这在LangChain中非常简单,以下是一个简单的例子:

import "github.com/tmc/langchaingo/prompts"

func main() {
prompt := prompts.NewPromptTemplate(
"为生产{{.product}}的公司起一个好名字。",
[]string{"product"},
)

result, err := prompt.Format(map[string]any{
"product": "彩色袜子",
})
if err != nil {
log.Fatal(err)
}

fmt.Println(result)
}
为生产彩色袜子的公司起一个好名字。

提示模板可以接受任意数量的输入,如下所示:

prompt := prompts.NewPromptTemplate(
"给我讲一个关于{{.content}}的{{.adjective}}笑话。",
[]string{"adjective", "content"},
)

result, err := prompt.Format(map[string]any{
"adjective": "有趣的",
"content": "鸡",
})
if err != nil {
log.Fatal(err)
}

fmt.Println(result)
给我讲一个关于鸡的有趣笑话。

为聊天消息创建提示模板

聊天模型需要接收一系列聊天消息作为输入,这一系列消息通常被称为提示。这些聊天消息与直接传递给LLM模型的原始字符串不同,每个消息都关联了一个角色。

例如,在OpenAI Chat Completion API中,一条聊天消息可以与AI、人类或系统角色相关联。模型应该更严格地遵循来自系统聊天消息的指令。

建议在查询聊天模型时使用这些与聊天相关的提示模板,以充分利用底层聊天模型的功能。

import "github.com/tmc/langchaingo/prompts"

func main() {
prompt := prompts.NewChatPromptTemplate([]prompts.MessageFormatter{
prompts.NewSystemMessagePromptTemplate(
"你是一个只能翻译文本而不能解释的翻译引擎。",
nil,
),
prompts.NewHumanMessagePromptTemplate(
`将{{.inputLang}}语言的这段文字翻译成{{.outputLang}}:\n{{.input}}`,
[]string{"inputLang", "outputLang", "input"},
),
})

result, err := prompt.Format(map[string]any{
"inputLang": "英语",
"outputLang": "中文",
"input": "我爱编程",
})
if err != nil {
log.Fatal(err)
}

fmt.Println(result)
}
[{你是一个只能翻译文本而不能解释的翻译引擎。} {将英语语言的这段文字翻译成中文:\n我爱编程}]

深入了解