LangChain入门实践4:LLMChain创建第一个链快速入门

LLMChain:创建第一个链快速入门

1. 输出解析器

OutputParsers是LangChain框架中的关键组件,它们负责将LLM的原始输出转换为可以在下游使用的格式。输出解析器有几种主要类型:

  • 将LLM的文本转换为结构化信息(例如JSON)
  • 将ChatMessage转换为字符串
  • 将除消息之外的其他信息(如OpenAI函数调用)转换为字符串

有关此方面的详细信息,会在后续实践学习中深入探讨。

在这次实践中,我们将编写自己的输出解析器,其功能是将逗号分隔的列表转换为Python列表。

代码示例:自定义输出解析器

from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""

    def parse(self, text: str):
        """Parse the output of an LLM call."""
        return text.strip().split(", ")

# 测试输出解析器
print(CommaSeparatedListOutputParser().parse("Hi,Bye"))

执行结果:

['Hi,Bye']

代码说明:

  • 继承BaseOutputParser基类创建自定义解析器
  • 实现parse方法处理LLM的原始输出
  • 使用字符串的split方法按逗号分隔转换为列表
  • 这是一个简单的解析器示例,实际应用中可能需要更复杂的逻辑

2. 创建链示例

现在,我们可以结合前文的实践,将所有这些组件组合成一个完整的链。这个链将接收输入变量,将其传递给提示模板创建提示,将提示传递给LLM,然后通过输出解析器处理输出。这是一种方便地将模块化逻辑捆绑在一起的方式。

完整链实现代码

from langchain_community.llms import Tongyi
from langchain.prompts.chat import (
    ChatPromptTemplate,
    SystemMessagePromptTemplate,
    HumanMessagePromptTemplate,
)
from langchain.schema import BaseOutputParser

class CommaSeparatedListOutputParser(BaseOutputParser):
    """Parse the output of an LLM call to a comma-separated list."""

    def parse(self, text: str):
        """Parse the output of an LLM call."""
        return text.strip().split(", ")

# 定义系统提示模板
template = """You are a helpful assistant who generates comma separated lists.
A user will pass in a category, and you should generate 5 objects in that category in a comma separated list.
ONLY return a comma separated list, and nothing more."""
system_message_prompt = SystemMessagePromptTemplate.from_template(template)

# 定义用户输入模板
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

# 初始化LLM
llm = Tongyi()

# 组合聊天提示模板
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

# 创建链:提示词 -> LLM -> 输出解析器
chain = chat_prompt | llm | CommaSeparatedListOutputParser()

# 执行链
result = chain.invoke("colors")
print(result)

执行结果:

['red', 'blue', 'green', 'yellow', 'orange']

链的执行流程详解

  1. 输入处理:接收用户输入的"colors"
  2. 提示词构建:通过ChatPromptTemplate构建完整的提示词
  3. LLM调用:将构建好的提示词传递给通义千问模型
  4. 输出解析:使用自定义的CommaSeparatedListOutputParser处理LLM输出
  5. 结果返回:返回格式化的列表结果

链的管道操作符说明

LangChain使用|操作符来连接不同的组件,这种设计使得链的构建直观且易于理解:

chain = chat_prompt | llm | output_parser

这相当于:

prompt_output = chat_prompt.invoke(input)
llm_output = llm.invoke(prompt_output)
final_output = output_parser.invoke(llm_output)

3. 总结

通过本文的学习,我们成功创建了第一个完整的LangChain链,这是一个重要的里程碑。以下是本文的核心要点总结:

核心概念掌握

链(Chain)的本质

  • 链是LangChain中连接多个组件的管道,实现了从输入到输出的完整处理流程
  • 通过管道操作符|可以直观地组合不同的处理阶段
  • 每个链都是可重用的模块化组件

三大核心组件

  1. 提示词模板(PromptTemplate):负责将用户输入转化为结构化的提示词
  2. 大语言模型(LLM):执行核心的文本生成任务
  3. 输出解析器(OutputParser):将LLM的原始输出转换为可用格式

技术实现要点

自定义输出解析器

  • 继承BaseOutputParser基类
  • 实现parse方法处理特定格式的输出
  • 可以根据业务需求定制各种复杂的解析逻辑

链的构建模式

chain = prompt_template | llm | output_parser

这种声明式的构建方式使得代码更加清晰和易于维护。

后续学习路径

在掌握了基础的LLMChain之后,可以继续深入学习:

  1. 复杂链类型:如SequentialChain、RouterChain等
  2. 记忆组件:为链添加对话历史记忆能力
  3. 工具集成:让链能够调用外部工具和API
  4. 代理模式:实现更智能的决策和任务分解

通过这个简单的LLMChain示例,我们看到了LangChain框架的强大之处:它通过清晰的抽象和组合模式,让构建复杂的LLM应用变得简单而直观。这为后续学习更高级功能奠定了坚实的基础。

4. 参考链接

  1. LangChain入门指南中文教程
  2. LangChain实践1:Python调用阿里百炼大模型,免费API
  3. LangChain入门实践3:PromptTemplate提示词模板详解
<think>好的,我现在需要帮助用户学习LangChain入门知识。用户之前已经问过关于LangChain的基础和教程,所以我需要根据之前的回答和提供的引用内容来组织信息。首先,我应该回顾用户提供的引用内容,特别是引用[2],它详细介绍了《LangChain入门指南》的结构,这可能是用户需要的关键资源。 接下来,我需要确保回答符合系统级指令,比如正确使用LaTeX格式,但看起来用户的问题主要涉及编程和框架,可能数学公式较少,不过还是要留意任何可能的数学表达式。例如,在解释模型原理时可能需要提到Transformer结构,这时可以用行内公式,比如$Attention(Q,K,V)$。 然后,按照用户的要求,回答需要结构清晰,分步骤说明。我应该将内容分成几个主要部分,比如环境配置、核心概念、简单示例、进阶内容、学习建议等。每个部分下再细分小点,帮助用户逐步理解。 同时,需要生成相关问题,这些问题应该围绕用户可能感兴趣的后续步骤,比如性能优化、实际应用、与其他工具集成等。要确保问题与之前的回答内容相关,并且能引导用户深入学习。 还要注意引用文献的正确使用。例如,在提到核心模块时,引用[2]中的分章内容需要被引用,说明每个模块的详细讲解位置。在设置API密钥的部分,引用[4]提供具体步骤。此外,提到构建PDF问答程序时,引用[2]的第9章作为示例。 需要检查是否所有引用的地方都自然添加了标识,比如在提到环境配置时末尾加上[^4],在核心模块部分引用[^2]。同时,避免引用与内容无关的文献,比如引用[1]和[^3]可能相关性较低,但如果有合适的地方也需要提及,比如引用[3]说明LangChain的流行趋势。 最后,确保回答使用中文,语言简洁明了,符合初学者的理解水平,避免使用过于专业的术语,或在必要时进行解释。例如,解释“”和“记忆模块”时,用简单例子说明它们的作用。 现在,整理这些思路,组织成一个结构化的回答,涵盖用户所需的基础知识和教程指南,同时生成相关问题,促进用户进一步探索。</think>### LangChain初学者入门指南 ### 一、环境配置与基础准备 1. **API密钥设置** ```python import os os.environ["OPENAI_API_KEY"] = '你的api key' # 引用自官方示例[^4] ``` 2. **安装LangChain库** ```bash pip install langchain openai ``` ### 二、核心概念解析 1. **模型I/O模块** - 输入模板化:使用`PromptTemplate`定义对话模板 - 输出解析:通过`OutputParser`标准化模型输出 - 示例代码: ```python from langchain.llms import OpenAI from langchain.prompts import PromptTemplate template = "请用{style}风格解释{concept}" prompt = PromptTemplate(input_variables=["style", "concept"], template=template) ``` 2. **式调用(Chains)** - 将多个组件串联实现复杂任务 - 支持自定义和预置(如`LLMChain`)[^2] 3. **记忆模块(Memory)** - 实现对话状态管理 - 支持短期记忆(会话历史)和长期记忆(知识库) ### 三、第一个完整示例 ```python from langchain.chains import LLMChain from langchain.llms import OpenAI llm = OpenAI(temperature=0.7) chain = LLMChain(llm=llm, prompt=prompt) print(chain.run(style="通俗易懂", concept="机器学习")) ``` ### 四、进阶学习路径 1. **数据增强技术** - 文档加载器(Document Loaders) - 文本分割器(Text Splitters) - 向量数据库集成(Vector Stores) 2. **复杂构建** ```mermaid graph LR A[用户输入] --> B(预处理) B --> C(推理) C --> D(后处理) ``` 3. **应用开发实践** - PDF问答系统构建(参考第9章案例)[^2] - 客服对话机器人 - 智能文档分析 ### 五、学习资源推荐 1. 官方文档:https://python.langchain.com 2. 《LangChain入门指南》完整学习路线: - 第1-2章:技术背景与设计理念 - 第3-8章:6大核心模块详解 - 第10章:第三方服务集成[^2] 3. 社区资源:GitHub仓库(200+示例代码)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值