LangChain实战课 — 课后思考题02 | 豆包MarsCode AI刷题

67 阅读2分钟

学习内容

LangChain 实战课

  • 9 链(上):写一篇完美鲜花推文?用SequencialChain链接不同的组件

课后思考题

思考题1

题目

  1. 第4课中,我们曾经用提示模板生成过一段鲜花的描述,代码如下:
for flower, price in zip(flowers, prices):
    # 根据提示准备模型的输入
    input = prompt.format(flower_name=flower, price=price)
    # 获取模型的输出
    output = model(input)    
    # 解析模型的输出
    parsed_output = output_parser.parse(output)

请你使用LLMChain重构提示的format和获取模型输出部分,完成相同的功能。

提示:

    llm_chain = LLMChain(
        llm=model,
        prompt=prompt)

代码实现

可以通过传入LLMChain中的prompt参数,将提示模板整合在LLMChain中。

import os
from langchain import PromptTemplate, LLMChain
from langchain_openai import ChatOpenAI

template = """您是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?
"""

prompt = PromptTemplate(
    input_variables=["price", "flower_name"], template=template)

llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"), temperature=0)

llm_chain = LLMChain(llm=llm, prompt=prompt)

input_list = [
    {"price": "50", "flower_name": "玫瑰"},
    {"price": "30", "flower_name": "百合"},
    {"price": "20", "flower_name": "康乃馨"},
]

result = llm_chain.apply(input_list)
print(result)

提示模板构建问题

在使用PromptTemplate类方法时,我对创建类和使用类方法比较模糊,询问了AI助手之后得到了解答。 在LangChain中,PromptTemplatePromptTemplate.from_template方法都是用于创建提示模板的,但它们之间有一些区别:

  1. 使用方式

    • PromptTemplate是一个类,需要实例化后使用。你需要提供模板字符串和输入变量的名称。
    • PromptTemplate.from_template是一个静态方法,可以直接从模板字符串创建PromptTemplate实例。
  2. 灵活性

    • PromptTemplate提供了更多的灵活性,你可以在实例化时指定模板字符串、输入变量的名称,以及其他一些参数,如模板格式(template_format)等。
    • PromptTemplate.from_template方法则相对简单,它只接受一个模板字符串,并自动推断输入变量的名称。
  3. 代码示例

使用PromptTemplate

from langchain.prompts import PromptTemplate

template = "你正在写关于{topic}的文章,以下是一些关键点:{points}"
prompt = PromptTemplate(template=template, input_variables=["topic", "points"])

使用PromptTemplate.from_template

from langchain.prompts import PromptTemplate

template = "你正在写关于{topic}的文章,以下是一些关键点:{points}"
prompt = PromptTemplate.from_template(template)

在这个例子中,两种方法创建的prompt对象是等价的,但使用PromptTemplate类提供了更多的控制和灵活性。

总的来说,如果你需要更多的自定义选项,比如指定模板格式或部分变量,那么使用PromptTemplate类会更合适。如果你只需要一个简单的提示模板,并且不需要额外的自定义,那么PromptTemplate.from_template方法会更方便。