1. 设置OpenAI API密钥和创建模型实例
首先,通过环境变量设置OpenAI API密钥,然后使用LangChain库创建一个OpenAI的模型实例。本文选择了gpt-3.5-turbo-instruct作为大语言模型。
import os
os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
from langchain import OpenAI
model = OpenAI(model_name='gpt-3.5-turbo-instruct')
2. 定义输出数据的格式
使用Pandas创建一个空的DataFrame用于存储结果,并定义了一个Pydantic的BaseModel类FlowerDescription,用于描述期望的数据格式。Pydantic的特点包括数据验证、数据转换、易于使用和JSON支持。
import pandas as pd
df = pd.DataFrame(columns=["flower_type", "price", "description", "reason"])
from pydantic import BaseModel, Field
class FlowerDescription(BaseModel):
flower_type: str = Field(description="鲜花的种类")
price: int = Field(description="鲜花的价格")
description: str = Field(description="鲜花的描述文案")
reason: str = Field(description="为什么要这样写这个文案")
3. 创建输出解析器
使用LangChain库中的PydanticOutputParser创建了输出解析器,该解析器用于解析模型的输出,确保其符合FlowerDescription的格式。然后,使用解析器的get_format_instructions方法获取了输出格式的指示。
from langchain.output_parsers import PydanticOutputParser
output_parser = PydanticOutputParser(pydantic_object=FlowerDescription)
format_instructions = output_parser.get_format_instructions()
print("输出格式:",format_instructions)
4. 创建提示模板
定义了一个提示模板,该模板用于为模型生成输入提示。模板中包含需要模型填充的变量(如价格和花的种类),以及之前获取的输出格式指示。使用PromptTemplate类根据模板创建提示,并在提示中加入输出解析器的说明。
from langchain import PromptTemplate
prompt_template = """您是一位专业的鲜花店文案撰写员。
对于售价为 {price} 元的 {flower} ,您能提供一个吸引人的简短中文描述吗?
{format_instructions}"""
prompt = PromptTemplate.from_template(prompt_template,
partial_variables={"format_instructions": format_instructions})
print("提示:", prompt)
三、学习心得
-
Pydantic的强大功能:
- Pydantic通过类型注解,能够自动进行数据验证和转换,大大简化了数据处理的流程。
- 支持JSON格式的数据,使得在处理API交互等场景时更加便捷。
-
LangChain的灵活性:
- LangChain提供了丰富的API和工具,能够方便地集成各种模型和解析器,实现复杂的文本生成和处理任务。
- 通过PromptTemplate等类,能够灵活地定义和生成输入提示,提高了模型生成的效率和准确性。
-
模板化思维:
- 通过定义提示模板,可以方便地生成符合要求的输入提示,避免了重复劳动。
- 模板化思维在处理大量相似任务时,能够提高工作效率和准确性。
-
结合实际应用:
- 在本次重构中,将Pydantic和LangChain库结合应用,实现了鲜花文案的自动化生成。
- 通过将理论知识应用于实际项目中,加深了对Pydantic和LangChain库的理解和使用。
-
持续学习和探索:
- 在学习过程中,不断遇到新的问题和挑战,通过查阅资料、请教他人等方式,不断解决问题和提升自己的能力。
- 保持对新技术和新方法的好奇心和探索精神,不断拓宽自己的知识面和视野。
通过这次重构项目,不仅加深了对Pydantic和LangChain库的理解和使用,还提高了自己的编程能力和解决问题的能力。未来,将继续保持学习和探索的精神,不断提升自己的技能和素养。