初识Prompt工程与LangChain

94 阅读3分钟

我正在参加「豆包MarsCode AI练中学体验活动」详情请看:掘金小册上线 AI练中学功能 | 你的 AI 编程助教喊你免费领小册啦!

初识Prompt工程与LangChain

Prompt,也就是我们所说的“指令”,是我们与大模型交互的基础。

大模型通过理解我们的prompt来生成对应的回答,一个好的prompt能够更好的教会大模型往哪些方面思考、如何思考。简而言之,Prompt是沟通人类意图与机器智能的桥梁,它决定了模型输出的质量和相关性。因此,学会prompt工程是至关重要。

1. Prompt模板的分类

在LangChain框架中,存在两种核心的提示模板类型:StringPromptTemplate用于构建字符串形式的提示,而BaseChatPromptTemplate则用于构建聊天场景中的提示。

基于这两种基础模板,LangChain进一步发展出了多种定制化的提示模板,以适应各种特定的应用场景。

为了更好的说明每种模板,并进行对比,在结合小册的例子基础上,我给每类模板总结了详细的示例——

第一类 PromptTemplate 示例

用途:构建简单的提示,用于直接询问或命令。

示例

"今天的天气如何?"

在这个例子中,PromptTemplate 用于生成一个简单的查询,模型需要根据这个直接的问题提供答案。

第二类 ChatPromptTemplate 示例

用途:模拟聊天场景中的对话,可以包含不同角色的互动。

示例

[
  {"role": "user", "content": "你好,我需要帮助选择一款笔记本电脑。"},
  {"role": "assistant", "content": "当然可以,你打算用笔记本电脑做什么呢?"}
]

在这个例子中,ChatPromptTemplate 用于创建一个用户和助手之间的对话,模拟了一个真实的问答场景。

第三类 FewShotPromptTemplate 示例

用途:通过提供少量示例来引导模型理解并完成类似的任务。

示例

{
  "examples": [
    {"input": "上海", "output": "上海是中国的一个城市"},
    {"input": "自由女神像", "output": "自由女神像是美国的一个雕像"}
  ],
  "prompt": "埃菲尔铁塔"
}

在这个例子中,FewShotPromptTemplate 提供了几个示例输入和输出对,模型通过这些示例学习如何回答关于“埃菲尔铁塔”的问题。

2. Prompt模板的构建:以豆包为例

大多数情况下,在经过专业人员的调试后,我们的模板是保持不变的。改变的仅仅是少部分模板的参数。

QQ_1730199944256.png

以豆包大模型提供的上述“写文章”例子为例,我们只需要改变文章的主题发布平台,这两个主要关键参数。豆包就能帮我们生成最匹配的文章内容。

整个prompt可以理解为——

帮我写一篇关于{theme}的{platform}文章

实际在编码过程中,编码为——

prompt = PromptTemplate(
    input_variables=["theme", "platform"],
    template="帮我写一篇关于{theme}的{platform}文章",
)
print(prompt.format(theme="大模型", platform="掘金"))

那么,最终生成的模板即为(见控制台)

{3559B87C-CAF2-473F-AB5B-8C80957AE648}.png

这样的模板工程,极大的简化了用户的输入工作量,同时,也不会让模型回答跑偏。

总结

通过学习Prompt工程和LangChain,我更加理解了在提示词上,如何有效地与大模型进行交互。

在实际应用中,我们需要不断探索和实践,以找到最适合特定任务的Prompt构建方法和示例选择策略。这不仅是技术的提升,也是对人工智能应用深度理解的过程。