tnblog
首页
视频
资源
登录

LangChain 提示词(学习笔记)

3373人阅读 2023/9/9 18:14 总访问:3511467 评论:0 收藏:0 手机
分类: python

LangChain 提示词(学习笔记)

什么是提示词?


提示词(Prompt)是指向模型提供的输入。
这个输入通常由多个元素构成。
LangChain 提供了一系列的类和函数,简化构建和处理提示词的过程。
——提示词模板(Prompt Template):对提示词参数化,提高代码的重用性。
——示例选择器(Example Selector):动态选择要包含在提示词中的示例

提示词模板


提示词模板提供了可重用提示词的机制。
用户通过传递一组参数给模板,实例化图一个提示词。一个提示模板可以包含:
1.对语言模型的指令
2.一组少样本示例,以帮助语言模型生成更好的回复
3.向语言模型提出的问题

一个简单的例子:

  1. from langchain import PromptTemplate
  2. template = """
  3. 你精通多种语言,是专业的翻译官。你负责{src_lang}到{dst_lang}的翻译工作。
  4. """
  5. prompt = PromptTemplate.from_template(template)
  6. prompt.format(src_lang="英文", dst_lang="中文")

创建模板


PromptTemplate 类是 LangChain 提供的模版基础类,它接收两个参数:

参数 描述
input_variables 输入变量
template 模版


模版中通过 {} 符号来引用输入变量,比如 PromptTemplate(input_variables=["name"], template="My name is {name}.")
模版的实例化通过模板类实例的 format函数实现。例子如下:

  1. multiple_input_prompt = PromptTemplate(
  2. input_variables=["color", "animal"],
  3. template="A {color} {animal} ."
  4. )
  5. multiple_input_prompt.format(color="black", animal="bear")

聊天提示词模板


聊天模型,比如 OpenAI 的GPT模型,接受一系列聊天消息作为输入,每条消息都与一个角色相关联。这个消息列表通常以一定格式串联,构成模型的输入,也就是提示词。

例如,在OpenAI Chat Completion API中,聊天消息可以与assistant、human或system角色相关联。

为此,LangChain提供了一系列模板,以便更轻松地构建和处理提示词。建议在与聊天模型交互时优先选择使用这些与聊天相关的模板,而不是基础的PromptTemplate,以充分利用框架的优势,提高开发效率。SystemMessagePromptTemplate, AIMessagePromptTemplate, HumanMessagePromptTemplate 是分别用于创建不同角色提示词的模板。

我们来看一个综合示例:

  1. from langchain.prompts import (
  2. ChatPromptTemplate,
  3. PromptTemplate,
  4. SystemMessagePromptTemplate,
  5. AIMessagePromptTemplate,
  6. HumanMessagePromptTemplate,
  7. )
  8. from langchain.schema import (
  9. AIMessage,
  10. HumanMessage,
  11. SystemMessage
  12. )
  13. system_template="You are a professional translator that translates {src_lang} to {dst_lang}."
  14. system_message_prompt = SystemMessagePromptTemplate.from_template(system_template)
  15. human_template="{user_input}"
  16. human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
  17. chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
  18. chat_prompt.format_prompt(
  19. src_lang="English",
  20. dst_lang="Chinese",
  21. user_input="Did you eat in this morning?"
  22. ).to_messages()


你应该能看到如下输出:

样本选择器


在LLM应用开发中,可能需要从大量样本数据中,选择部分数据包含在提示词中。
样本选择器(Example Selector)正是满足该需求的组件,它也通常与少样本提示词配合使用。
LangChain 提供了样本选择器的基础接口类 BaseExampleSelector,每个选择器类必须实现的函数为 select_examplesLangChain 实现了若干基于不用应用场景或算法的选择器:
—— LengthBasedExampleSelector
—— MaxMarginalRelevanceExampleSelector
—— NGramOverlapExampleSelector
—— SemanticSimilarityExampleSelector

本讲以基于长度的样本选择器(输入越长,选择的样本越少;输入越短,选择的样本越多)LengthBasedExampleSelector 为例,演示用法。

  1. from langchain.prompts import PromptTemplate
  2. from langchain.prompts import FewShotPromptTemplate
  3. from langchain.prompts.example_selector import LengthBasedExampleSelector
  4. # These are a lot of examples of a pretend task of creating antonyms.
  5. examples = [
  6. {"input": "happy", "output": "sad"},
  7. {"input": "tall", "output": "short"},
  8. {"input": "energetic", "output": "lethargic"},
  9. {"input": "sunny", "output": "gloomy"},
  10. {"input": "windy", "output": "calm"},
  11. ]
  12. example_prompt = PromptTemplate(
  13. input_variables=["input", "output"],
  14. template="Input: {input}\nOutput: {output}",
  15. )
  16. example_selector = LengthBasedExampleSelector(
  17. # 可选的样本数据
  18. examples=examples,
  19. # 提示词模版
  20. example_prompt=example_prompt,
  21. # 格式化的样本数据的最大长度,通过get_text_length函数来衡量
  22. max_length=25
  23. )
  24. dynamic_prompt = FewShotPromptTemplate(
  25. example_selector=example_selector,
  26. example_prompt=example_prompt,
  27. prefix="Give the antonym of every input",
  28. suffix="Input: {adjective}\nOutput:",
  29. input_variables=["adjective"],
  30. )
  31. # 输入量极小,因此所有样本数据都会被选中
  32. print(dynamic_prompt.format(adjective="big"))


你应该能看到如下输出:

注:选择器实例化时,我们没有改变 get_text_length 函数实现,其默认实现为:

总结


本节课程中,我们简要介绍了LLM中的重要概念 提示词 并学习了如何使用 Langchain 的重要组件 提示词模板

相关文档资料链接:


Python Langchain官方文档
五里墩茶社


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

LangChain 简单应用(学习笔记)

LangChain 简单应用(学习笔记)[TOC] Langchain 简介大型语言模型(LLM)正在成为一种具有变革性的技术,使开发人员能够构...

LangChain 模型(学习笔记)

LangChain 模型(学习笔记)[TOC] Langchain 模型简介Langchain所封装的模型分为两类:——大语言模型 (LLM)——聊天模型 (C...

LangChain 数据连接(学习笔记)

LangChain 数据连接(学习笔记)[TOC] 什么是数据连接?LLM应用往往需要用户特定的数据,而这些数据并不属于模型的训练集。L...

LangChain 输出解析器(学习笔记)

LangChain 输出解析器(学习笔记)[TOC] 简介LLM的输出为文本,但在程序中除了显示文本,可能希望获得更结构化的数据。这就...

LangChain 链(学习笔记)

LangChain 链(学习笔记)[TOC] 单一的LLM对于简单的应用场景已经足够,但是更复杂的应用程序需要将LLM串联在一起,需要多LL...

LangChain 记忆组件(学习笔记)

LangChain 记忆组件(学习笔记)[TOC] 单一的LLM对于简单的应用场景已经足够,但是更复杂的应用程序需要将LLM串联在一起,需...

LangChain 代理 Agent(学习笔记)

LangChain 代理 Agent(学习笔记)[TOC] 简介Agent 也就是代理,它的核心思想是利用一个语言模型来选择一系列要执行的动作。...

LangChain 回调 (Callback)

LangChain 回调 (Callback)[TOC] 简介Callback 是 LangChain 提供的回调机制,允许我们在 LLM 应用程序的各个阶段使用 Hoo...

LangChain 一个完整的例子

LangChain 一个完整的例子[TOC] 简介这是该 LangChain 极简入门系列的最后一讲。我们将利用过去9讲学习的知识,来完成一个...
这一世以无限游戏为使命!
排名
2
文章
642
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术