青训营X豆包MarsCode 技术训练营第四课 | 豆包MarsCode AI 刷题

159 阅读4分钟

学习笔记: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驱动的应用程序提供了坚实基础。