AI创想

标题: 模型 I/O 与 LangChain 实践 [打印本页]

作者: dehuana    时间: 5 小时前
标题: 模型 I/O 与 LangChain 实践
作者:CSDN博客
模型 I/O 与 LangChain 实践

本文是《LangChain 实战课》第 4 节——模型 I/O:输入提示、调用模型、解析输出的一些学习笔记与总结。这篇文章将围绕模型 I/O 的基本概念、LangChain 提供的最佳实践以及如何通过 LangChain 实现高效的结构化数据处理展开。

什么是模型 I/O?

模型 I/O 是指与机器学习模型的输入(Input)和输出(Output)相关的操作和设计。它决定了如何将数据传递给模型,以及如何从模型返回结果,是模型开发和应用中的核心环节。有效的模型 I/O 设计可以显著提升模型的性能、易用性和应用效果。
在实际开发中,模型 I/O 通常包括三个关键环节:
LangChain 框架专注于语言模型的应用开发,在模型 I/O 领域提供了系统化的解决方案,其核心功能涵盖了上述三个环节。

LangChain 提供的模型 I/O 最佳实践

在 LangChain 中,模型 I/O 的工作流程被清晰地划分为输入提示(对应图中的Format)、调用模型(对应图中的Predict)和输出解析(对应图中的Parse)三个部分,对应开发中的核心步骤。
(, 下载次数: 0)


1. 输入提示

输入提示的质量直接影响模型的输出质量。LangChain 提供了灵活的提示模板功能,开发者可以根据具体任务动态调整输入内容。例如,针对不同的应用场景(如文本生成、问答系统等),可以自定义变量化的模板,以便更精确地控制模型行为。
在大型项目中,LangChain 的模板功能能够有效管理大量的提示模板,使代码更清晰、逻辑更紧凑,同时减少出错的可能性。
2. 调用模型

LangChain 提供了统一的模型调用接口,使开发者可以轻松切换不同的语言模型(如 OpenAI、Hugging Face 或其他本地模型)。这种灵活性不仅降低了开发难度,还提升了代码的可维护性。
例如,如果你希望尝试不同的模型,只需修改模型名称而无需重构整个调用逻辑。这对于快速迭代和验证模型效果尤为重要。
3. 输出解析

大语言模型的输出通常是非结构化文本,对于需要高质量数据的应用场景,这种输出可能难以直接使用。LangChain 的输出解析功能,可以将这些非结构化文本精确提取为结构化数据,方便后续处理。例如,通过定义输出格式的模板,可以直接生成 JSON、表格或其他程序可读的格式化结果。
这种机制在大规模数据搜集、自动化报告生成以及知识抽取等场景中,尤为实用。

为什么模型 I/O 设计如此重要?

在大语言模型(LLMs)的应用中,开发的核心在于如何输入高质量的数据获得理想的输出。这意味着:
LangChain 的模型 I/O 框架恰好针对这些痛点,提供了从输入到输出的全流程支持,大大提升了开发效率和模型应用效果。

LangChain 模型 I/O 的优势

总结 LangChain 在处理模型 I/O 时的主要优势,可以归纳为以下几点:

实践:基于 LangChain 实现结构化古诗数据搜集

下面是一个具体的实践案例,展示如何使用LangChain 框架和豆包大模型,完成古诗的结构化数据搜集。目标是根据指定场景,生成符合要求的诗句,并将其整理为结构化数据。
实践步骤

代码示例

以下为实践代码:
  1. from langchain.output_parsers import StructuredOutputParser, ResponseSchema
  2. from langchain.prompts import PromptTemplate
  3. from langchain_openai import ChatOpenAI
  4. import os
  5. import pandas as pd
  6. # 定义输出模式
  7. response_schemas =[
  8.     ResponseSchema(name="scence", description="古诗的场景"),
  9.     ResponseSchema(name="num", description="该场景展示的古诗总数量"),
  10.     ResponseSchema(name="seq", description="该场景古诗原文的序号"),
  11.     ResponseSchema(name="poem", description="古诗原文"),
  12.     ResponseSchema(name="reason", description="展示这首诗的理由"),]
  13. output_parser = StructuredOutputParser.from_response_schemas(response_schemas)
  14. format_instructions = output_parser.get_format_instructions()# 定义提示模板
  15. prompt_template ="""
  16. 您是一位专业的古诗文研究员。
  17. 请展示与{scence}相关的优美古诗,共需要展示{num}首。
  18. 输出需严格按照以下格式:
  19. {format_instructions}
  20. 如果不足指定数量,请继续生成,直至满足数量要求。
  21. """
  22. prompt = PromptTemplate.from_template(
  23.     prompt_template, partial_variables={"format_instructions": format_instructions})# 初始化模型
  24. model = ChatOpenAI(model=os.environ.get("LLM_MODELEND"), temperature=0)# 数据准备
  25. scences =["春风","雨夜","秋天"]
  26. nums =[2,1,0]# 创建 DataFrame 存储结果
  27. df = pd.DataFrame(columns=["scence","num","seq","poem","reason"])# 优化生成逻辑for scence, num inzip(scences, nums):
  28.     poems =[]
  29.     seq =1# 初始化序号whilelen(poems)< num:
  30.         input_prompt = prompt.format(scence=scence, num=num -len(poems))
  31.         output = model.invoke(input_prompt)try:
  32.             parsed_output = output_parser.parse(output.content)except Exception as e:print(f"解析失败,模型输出: {output.content}, 错误: {e}")break# 提取数据并避免重复
  33.         new_poem = parsed_output.get("poem","")if new_poem and new_poem notin poems:
  34.             poems.append(new_poem)
  35.             df = pd.concat([df, pd.DataFrame({"scence":[scence],"num":[num],"seq":[seq],"poem":[new_poem],"reason":[parsed_output.get("reason","")]})], ignore_index=True)
  36.             seq +=1# 打印进度print(f"已完成场景 {scence} 的古诗生成,共生成 {len(poems)} 首。")# 打印结果print(df.to_dict(orient="records"))# 保存到 CSV
  37. df.to_csv("poems_with_reasons.csv", index=False)
复制代码

运行结果

(, 下载次数: 0)


(, 下载次数: 0)

可以看到,由于豆包模型推理能力有限,返回了两首相同的关于春风的古诗:第一首截取了原文四句,第二首截取了两句,籍此来区别为两首诗,哈哈哈,有点好笑。
总结与展望

通过 LangChain 框架对模型 I/O 的标准化设计,开发者可以更高效地完成复杂任务,例如大规模数据生成与解析。结合豆包 MarsCode 模型,LangChain 展现出了在自然语言处理领域的强大优势。未来,随着大模型能力的提升和框架功能的完善,模型 I/O 将成为推动人工智能落地应用的重要基础设施。

原文地址:https://blog.csdn.net/liukuande/article/details/144010604




欢迎光临 AI创想 (https://www.llms-ai.com/) Powered by Discuz! X3.4