学习笔记:LangChain中的模型组件
LangChain模型组件概述
在LangChain框架中,模型(LLM,Large Language Model)是核心元素,因为大语言模型驱动了LangChain应用的整个逻辑流程。模型组件负责从提示输入、模型调用到输出解析的整个I/O过程,贯穿LangChain应用的底层逻辑。以下将详细介绍如何在LangChain中使用模型组件,构建并调用提示模板,以及使用输出解析器来从模型输出中提取有结构的信息。
一、模型I/O流程
模型I/O过程可以分为三部分:输入提示(Format)、调用模型(Predict)和输出解析(Parse)。每一步都可以通过LangChain提供的工具来实现。
1. 输入提示(提示模板)
在LangChain中,输入提示是向模型提供的文本信息,用于指引模型的生成。通过使用提示模板,可以动态构建适合不同场景的提示内容。以下示例展示了如何创建一个用于生成花店文案的提示模板:
from langchain.prompts import PromptTemplate
# 创建一个用于生成花店文案的原始模板
template = """您是一位专业的鲜花店文案撰写员。
对于售价为 {price} 元的 {flower_name},您能提供一个吸引人的简短描述吗?
"""
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template)
print(prompt)
在该代码中,template是一个f-string模板,其中{flower_name}和{price}是占位符,将在实际调用时被具体的值替换。
2. 调用模型
LangChain支持多种大语言模型(LLM),如OpenAI的text-davinci-003、Facebook的LLaMA等。这些模型允许开发者使用统一的接口进行调用,便于灵活切换。
以下是使用LangChain调用OpenAI模型的代码示例:
import os
from langchain_openai import OpenAI
# 设置OpenAI API Key
os.environ["OPENAI_API_KEY"] = '你的Open AI API Key'
# 创建模型实例
model = OpenAI(model_name='gpt-3.5-turbo-instruct')
# 使用提示模板生成输入并调用模型
input_text = prompt.format(flower_name="玫瑰", price="50")
output = model.invoke(input_text)
print(output)
在这里,model.invoke(input_text)方法调用模型,并返回生成的文案描述。
3. 输出解析
输出解析是模型I/O过程中的最后一步。LangChain提供了输出解析器(Output Parser)来将模型输出转化为结构化的数据,便于程序直接使用。例如,创建一个结构化的输出解析器来生成描述和原因的字段:
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)
# 使用输出解析器对模型输出进行结构化解析
parsed_output = output_parser.parse(output)
print(parsed_output)
二、LangChain模型组件的优势
LangChain提供的提示模板、模型接口和输出解析器,使模型I/O过程更加规范化和自动化,具有以下优势:
- 简洁高效:提示模板支持占位符,动态生成不同的输入内容,简化了代码编写。
- 灵活性强:使用通用接口可轻松切换模型,且支持不同类型的LLM调用。
- 结构化输出:通过输出解析器自动化解析输出,便于将非结构化文本转为程序可处理的结构化数据。
三、模型I/O示例应用:鲜花文案生成器
利用LangChain可以构建一个基于LLM的自动化鲜花文案生成器,能够为不同鲜花生成个性化描述并返回结构化数据。完整代码如下:
import pandas as pd
# 多种花的列表
flowers = ["玫瑰", "百合", "康乃馨"]
prices = ["50", "30", "20"]
# 创建DataFrame用于存储结果
df = pd.DataFrame(columns=["flower", "price", "description", "reason"])
# 生成文案并存入DataFrame
for flower, price in zip(flowers, prices):
input_text = prompt.format(flower_name=flower, price=price)
output = model.invoke(input_text)
parsed_output = output_parser.parse(output)
parsed_output['flower'] = flower
parsed_output['price'] = price
df.loc[len(df)] = parsed_output
# 保存为CSV文件
df.to_csv("flowers_with_descriptions.csv", index=False)
print(df)
总结
LangChain提供了一个标准化的框架来调用大语言模型。通过LangChain,开发者可以轻松构建提示模板、调用模型和解析输出,灵活实现多种应用。对于复杂的生成任务和数据解析,LangChain的模型组件能够极大简化实现过程,提高代码的可读性和可维护性。这种模块化结构为构建AI驱动的应用程序提供了坚实基础。