• 杂记 | Langchain中few-shot提示词模板的使用(给提示词添加示例)



    Langchain是一个集成多个大语言模型的开源框架,可以使用它来快速开发大语言模型应用。

    本文的代码使用到的模块:

    from typing import List, Dict
    from langchain import PromptTemplate, FewShotPromptTemplate, LLMChain, OpenAI
    
    • 1
    • 2

    01 普通的提示词模板

    先来看看普通的提示词模板如何使用,效果如何:

    # 创建大语言模型对象 这里使用gpt-3.5最新的指令模型
    llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0)
    
    # 设置提示词模板 其中的{input}为等待用户填充问题的插槽
    template = "我会给你一种物品名称的输入,你需要输出该类物品的一种具体事物,且使用量词开头。\nInput: {input}"
    
    # 提示词模板对象 指定接收参数的参数名为input 也就是上述插槽中的内容
    prompt = PromptTemplate(input_variables=["input"], template=template)
    
    # 大语言模型 + 提示词模板对象 -> 生成一个chian
    chain = LLMChain(llm=llm, prompt=prompt)
    
    # 执行chain并查看结果
    print(chain.run(input="手机"))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这个示例中,对大模型的输入为:

    我会给你一种物品名称的输入,你需要输出该类物品的一种具体事物,且使用量词开头。
    Input: 手机
    
    • 1
    • 2

    大模型的输出为:

    Output: 一部手机
    
    • 1

    可以看到输出并不能很好地满足我们的需求,因为我希望输出的是该类物品的一件具体的事物,例如:一部华为手机,而它只是简单的给我添加了个量词就完事了。而且它还自己添加了output前缀。

    02 few-shot提示词模板

    下面使用few-shot提示词模板试试:

    # 创建大语言模型
    llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0)
    
    # 创建一个实例列表
    examples: List[Dict[str, str]] = [
        {"input": "水果", "output": "一个苹果"},
        {"input": "宠物", "output": "一只猫"},
        {"input": "家电", "output": "一台冰箱"}
    ]
    
    # 创建提示词模板对象 该对象中的template部分插槽需要与示例中的键对应
    example_prompt = PromptTemplate(input_variables=["input", "output"], template="Input: {input}\n{output}")
    
    # 合成few-shot提示词模板对象
    prompt = FewShotPromptTemplate(
        prefix="我会给你一种物品名称的输入,你需要输出该类物品的一种具体事物,且使用量词开头。",  # 示例提示词之前添加的内容
        examples=examples,  # 示例列表
        example_prompt=example_prompt,  # 容纳示例的提示词模板对象
        suffix="Input: {input}",  #  示例提示词之后添加的内容
        input_variables=["input"]  # 等待用户输入的参数插槽
    )
    
    # 创建一个chain
    chain = LLMChain(llm=llm, prompt=prompt)
    
    # 执行chain并查看结果
    print(chain.run(input="手机"))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    使用few-shot提示词模板后,对大模型的输入为:

    我会给你一种物品名称的输入,你需要输出该类物品的一种具体事物,且使用量词开头。
    
    Input: 水果
    一个苹果
    
    Input: 宠物
    一只猫
    
    Input: 家电
    一台冰箱
    
    Input: 手机
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    大模型的输出为:

    一部iPhone
    
    • 1

    比起无示例版本,输出结果有了明显改观。

  • 相关阅读:
    【工具】Linux常用命令
    深度学习-个人自用
    docker部署zabbix 6.0高可用集群实验
    燃烧化学平衡判据
    Akshare获取分红数据
    全志V853 NPU 转换部署 YOLO V5 模型
    Vue2:MVVM 设计模式、Vue指令、模板语法
    QT实现凸凹边形等距缩放
    一道思考题所引起动态跟踪 ‘学案’
    【ACM数论】和式变换技术,也许是最好的讲解之一
  • 原文地址:https://blog.csdn.net/xuzhongyi103/article/details/133171545