基于LangChain的大语言模型应用探索 | 豆包MarsCode AI刷题

5 阅读4分钟

实践目标与背景

在当前AI应用快速发展的背景下,大语言模型(LLM)成为构建智能应用的重要基石。LangChain作为一种新兴框架,极大地简化了语言模型的调用和功能扩展。本次实践目标是通过LangChain构建一个鲜花文案生成系统,帮助学习如何利用提示工程和模型I/O(输入/输出)实现应用开发。

具体实现包括:

  1. 提示模板的创建与动态生成。
  2. 调用大语言模型生成文案。
  3. 输出解析器将模型生成的内容转化为结构化数据。
  4. 结合工具和框架实现数据存储及交互。

实现步骤

  1. 提示模板构建:
    使用LangChain的PromptTemplate模块创建动态提示,定义输入变量如花名和价格。
  2. 调用大语言模型:
    使用LangChain支持的OpenAI或HuggingFace模型生成文案。
  3. 输出解析器使用:
    将生成的文案解析为结构化数据,方便后续处理。
  4. 数据存储与交互:
    将生成的结果存储为CSV文件,或通过前端页面展示。

工具说明

  1. LangChain 框架:
    • 模块化设计,支持链式调用。
    • 提供PromptTemplate和OutputParser用于构建和解析提示。
  2. OpenAI 模型:
    • 支持多种模型调用,包括gpt-3.5-turbo。
    • 高质量文本生成能力。
  3. HuggingFace 模型:
    • 开源模型支持,适合多种任务。
    • 案例中使用了flan-t5-large。
  4. 输出解析器:
    • 将模型的非结构化输出转化为JSON或其他数据格式。
    • 适用于多场景数据处理。

代码实践

以下是实现鲜花文案生成系统的核心代码。

"""
鲜花文案生成系统
利用LangChain框架结合OpenAI大语言模型实现一个文案生成与解析系统。
目标:生成针对不同鲜花的推广文案,并以结构化格式存储结果。
"""

import os
import pandas as pd
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from langchain.output_parsers import StructuredOutputParser, ResponseSchema

# 设置环境变量,加载 OpenAI API Key
os.environ["OPENAI_API_KEY"] = "你的Open AI API Key"

# ---------------------------
# 1. 提示模板定义
# ---------------------------
# 定义模板:文案撰写的背景、花名与价格变量
prompt_template = """您是一位专业的鲜花店文案撰写员。
对于售价为 {price} 元的 {flower_name} ,您能提供一个吸引人的简短描述吗?
{format_instructions}"""

# ---------------------------
# 2. 输出解析器定义
# ---------------------------
# 定义响应数据的格式:包含描述和原因两个字段
response_schemas = [
    ResponseSchema(name="description", description="鲜花的描述文案"),
    ResponseSchema(name="reason", description="为什么要这样写这个文案"),
]

# 创建结构化输出解析器
output_parser = StructuredOutputParser.from_response_schemas(response_schemas)

# 获取解析器的格式说明
format_instructions = output_parser.get_format_instructions()

# 创建动态提示模板,整合格式说明
prompt = PromptTemplate.from_template(
    template=prompt_template,
    partial_variables={"format_instructions": format_instructions},
)

# ---------------------------
# 3. 初始化模型
# ---------------------------
# 初始化OpenAI模型
llm = OpenAI(model_name="gpt-3.5-turbo")

# ---------------------------
# 4. 文案生成与解析
# ---------------------------
# 数据准备:鲜花名称及对应价格
flowers = ["玫瑰", "百合", "康乃馨"]
prices = ["50", "30", "20"]

# 创建一个空的DataFrame用于存储解析后的结果
df = pd.DataFrame(columns=["flower", "price", "description", "reason"])

# 遍历鲜花与价格列表,生成并解析文案
for flower, price in zip(flowers, prices):
    # 使用提示模板生成模型输入
    input_text = prompt.format(flower_name=flower, price=price)
    
    # 调用模型生成输出
    response = llm.predict(input_text)
    
    # 使用输出解析器解析模型的生成结果
    parsed_output = output_parser.parse(response)
    
    # 添加额外字段:花名和价格
    parsed_output["flower"] = flower
    parsed_output["price"] = price
    
    # 将解析后的结果添加到DataFrame中
    df.loc[len(df)] = parsed_output

# ---------------------------
# 5. 数据存储与输出
# ---------------------------
# 打印最终生成的结果
print(df.to_dict(orient="records"))

# 将结果保存到CSV文件
df.to_csv("flowers_with_descriptions.csv", index=False)

# ---------------------------
# 运行完成,文件保存在工作目录下
# ---------------------------

总结与反思

  1. LangChain 的优越性:
    • 提供高层封装,减少了直接调用API的繁琐工作。
    • 模板与解析器的结合提高了提示的重用性和灵活性。
  2. 大语言模型的潜力:
    • 模型生成的内容创意无限,但需通过提示工程优化质量。
    • 结合解析器可为生产应用提供更可靠的输出。
  3. 改进与延伸:
    • 使用更多开源模型以降低成本,如HuggingFace的flan-t5-large。
    • 集成前端UI,进一步提升用户体验。