LangChain实战课 模型I/O:输入提示、调用模型、解析输出|豆包MarsCode AI刷题
一、课程背景
在本节课中,我们深入学习了LangChain框架的核心组件——模型(Model)。LangChain是一个用于构建基于大语言模型(LLM)的应用开发的框架,它为我们提供了灵活的工具,帮助我们更高效地创建智能应用。在这节课中,我们以鲜花文案生成作为例子,探讨了如何通过LangChain框架调用大语言模型,实现应用开发。
二、LangChain框架概述
LangChain框架的核心由六大组件组成,其中模型(LLM)是框架的底层组成部分,所有的应用都依赖于模型作为驱动核心。LangChain提供了高效的接口来处理模型的输入输出操作,使得我们可以轻松调用多种语言模型,如OpenAI、HuggingFace等。
模型I/O(Input/Output)
模型I/O是指我们如何与语言模型进行交互。这个过程分为三个主要环节:
- 输入提示(Prompt) :构建有效的输入提示是使用大语言模型的关键。我们可以创建LangChain的提示模板,动态地调整输入以满足不同任务的需求。
- 调用模型(Prediction) :LangChain允许我们通过统一接口调用不同的语言模型,这样可以提高开发的灵活性。
- 输出解析(Parsing) :LangChain为输出解析提供了多种工具,帮助我们从模型返回的文本中提取结构化数据,便于后续处理。
三、构建提示模板
在实际应用中,提示工程(Prompt Engineering)是一个非常重要的环节。构建好的提示模板能够帮助我们更加高效地与语言模型进行交互。我们创建了一个简单的提示模板,目的是为每种鲜花生成吸引人的文案。
提示模板代码示例:
from langchain.prompts import PromptTemplate
template = """您是一位专业的鲜花店文案撰写员。\n
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?
"""
prompt = PromptTemplate.from_template(template)
四、调用大语言模型生成文案
通过调用OpenAI的API,我们能够将生成的提示模板传递给模型,并获取返回的文案。以下是调用模型的代码示例:
调用模型代码:
import os
from langchain_openai import OpenAI
os.environ["OPENAI_API_KEY"] = '你的Open AI API Key'
model = OpenAI(model_name='gpt-3.5-turbo-instruct')
flowers = ["玫瑰", "百合", "康乃馨"]
prices = ["50", "30", "20"]
for flower, price in zip(flowers, prices):
input_prompt = prompt.format(flower_name=flower, price=price)
output = model.invoke(input_prompt)
print(output)
五、模型输出解析与结构化数据
在本节课的进一步学习中,我们使用了LangChain的输出解析器,将模型生成的文本转化为结构化数据。通过指定响应模式,模型可以按照我们的要求返回包含多个字段的数据,进一步优化了文案的处理流程。
输出解析代码:
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)
通过这个过程,模型返回的文案会被解析为结构化的数据,例如一个包含“description”和“reason”字段的字典。这为后续的数据处理提供了极大的便利,尤其是在需要将文案存储或进一步分析时。
六、总结与思考
在本节课中,我们不仅学习了如何使用LangChain框架来自动生成鲜花文案,还了解了如何通过提示模板、模型调用以及输出解析的方式,提高语言模型应用的效率和准确性。相比直接调用API,LangChain框架为我们提供了更多的灵活性和可维护性。
LangChain的优势:
- 模板管理:LangChain帮助我们集中管理多个提示模板,确保代码的简洁和清晰。
- 输出格式化:通过输出解析器,我们可以直接获得结构化的数据,方便后续处理。
- 模型切换:LangChain允许我们轻松切换不同的模型,只需更改模型名称,无需修改提示内容。