使用Pydantic和LangChain重构鲜花文案生成程序

71 阅读3分钟
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)

三、学习心得

  1. Pydantic的强大功能

    • Pydantic通过类型注解,能够自动进行数据验证和转换,大大简化了数据处理的流程。
    • 支持JSON格式的数据,使得在处理API交互等场景时更加便捷。
  2. LangChain的灵活性

    • LangChain提供了丰富的API和工具,能够方便地集成各种模型和解析器,实现复杂的文本生成和处理任务。
    • 通过PromptTemplate等类,能够灵活地定义和生成输入提示,提高了模型生成的效率和准确性。
  3. 模板化思维

    • 通过定义提示模板,可以方便地生成符合要求的输入提示,避免了重复劳动。
    • 模板化思维在处理大量相似任务时,能够提高工作效率和准确性。
  4. 结合实际应用

    • 在本次重构中,将Pydantic和LangChain库结合应用,实现了鲜花文案的自动化生成。
    • 通过将理论知识应用于实际项目中,加深了对Pydantic和LangChain库的理解和使用。
  5. 持续学习和探索

    • 在学习过程中,不断遇到新的问题和挑战,通过查阅资料、请教他人等方式,不断解决问题和提升自己的能力。
    • 保持对新技术和新方法的好奇心和探索精神,不断拓宽自己的知识面和视野。

通过这次重构项目,不仅加深了对Pydantic和LangChain库的理解和使用,还提高了自己的编程能力和解决问题的能力。未来,将继续保持学习和探索的精神,不断提升自己的技能和素养。