• 杂记 | 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

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

  • 相关阅读:
    〖Python 数据库开发实战 - MySQL篇⑳〗- 数据表的内连接
    Flink 状态编程
    带你走进知识图谱的世界
    Linux·进程相关概念知识点
    C#网站代码防止漏洞和攻击 增强网站安全性方法
    Apache Maven 3.6.0的下载安装和环境配置(详细图解+不限速下载链接)
    工地临时用电之智慧用电:全方位保障用电安全
    JSD-2204-WebServer(项目终章)-Day18
    IDEA中使用Tomcat Maven 插件
    【Mybatis】Mybatis 二级缓存 @CacheNamespace 注解介绍
  • 原文地址:https://blog.csdn.net/xuzhongyi103/article/details/133171545