17. LangChain实战项目2——易速鲜花宣传文案批量生成并导出
初始化
# 设置OpenAI API Key
import os
from dotenv import load_dotenv
load_dotenv()
# 导入LangChain中的提示模板
from langchain.prompts import PromptTemplate
# 创建原始模板
template = """您是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?
{format_instructions}
"""
定义了一个大模型的原始模板
定义输出模板拿到格式提示
# 导入结构化输出解析器和ResponseSchema
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
# 定义我们想要接收的响应模式
response_schemas = [
ResponseSchema(name="description", description="鲜花的描述文案"),
ResponseSchema(name="reason", description="问什么要这样写这个文案")
]
# 创建输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
# 获取格式指示
format_instructions = output_parser.get_format_instructions()
print(format_instructions)
初始化llm
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template, partial_variables={"format_instructions": format_instructions})
# 创建模型实例
from langchain_openai import ChatOpenAI
ai_model = os.getenv("OPENAI_MODEL")
model = ChatOpenAI(model_name=ai_model)
# 多种花的列表
flowers = ["玫瑰", "百合", "康乃馨"]
prices = ["50", "30", "20"]
调用大模型解析结果
# 创建一个空的DataFrame用于存储结果
import pandas as pd
df = pd.DataFrame(columns=["flower", "price", "description", "reason"])
# 生成多种花的文案
for flower, price in zip(flowers, prices):
# 输入提示
input = prompt.format(flower_name=flower, price=price)
# 得到模型的输出
output = model.invoke(input)
# 解析模型的输出(这是一个字典结构)
print(output.content)
parsed_output = output_parser.parse(output.content)
# 在解析后的输出中添加“flower”和“price”
parsed_output['flower'] = flower
parsed_output['price'] = price
# 将解析后的输出添加到DataFrame中
df.loc[len(df)] = parsed_output
# 打印字典
print(df.to_dict(orient='records'))
# 保存DataFrame到CSV文件
df.to_csv("flowers_with_descriptions.csv", index=False)