学习内容
- 9 链(上):写一篇完美鲜花推文?用SequencialChain链接不同的组件
课后思考题
思考题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中,PromptTemplate和PromptTemplate.from_template方法都是用于创建提示模板的,但它们之间有一些区别:
-
使用方式:
PromptTemplate是一个类,需要实例化后使用。你需要提供模板字符串和输入变量的名称。PromptTemplate.from_template是一个静态方法,可以直接从模板字符串创建PromptTemplate实例。
-
灵活性:
PromptTemplate提供了更多的灵活性,你可以在实例化时指定模板字符串、输入变量的名称,以及其他一些参数,如模板格式(template_format)等。PromptTemplate.from_template方法则相对简单,它只接受一个模板字符串,并自动推断输入变量的名称。
-
代码示例:
使用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方法会更方便。