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']
链的执行流程详解
- 输入处理:接收用户输入的"colors"
- 提示词构建:通过
ChatPromptTemplate构建完整的提示词 - LLM调用:将构建好的提示词传递给通义千问模型
- 输出解析:使用自定义的
CommaSeparatedListOutputParser处理LLM输出 - 结果返回:返回格式化的列表结果
链的管道操作符说明
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中连接多个组件的管道,实现了从输入到输出的完整处理流程
- 通过管道操作符
|可以直观地组合不同的处理阶段 - 每个链都是可重用的模块化组件
三大核心组件:
- 提示词模板(PromptTemplate):负责将用户输入转化为结构化的提示词
- 大语言模型(LLM):执行核心的文本生成任务
- 输出解析器(OutputParser):将LLM的原始输出转换为可用格式
技术实现要点
自定义输出解析器:
- 继承
BaseOutputParser基类 - 实现
parse方法处理特定格式的输出 - 可以根据业务需求定制各种复杂的解析逻辑
链的构建模式:
chain = prompt_template | llm | output_parser
这种声明式的构建方式使得代码更加清晰和易于维护。
后续学习路径
在掌握了基础的LLMChain之后,可以继续深入学习:
- 复杂链类型:如SequentialChain、RouterChain等
- 记忆组件:为链添加对话历史记忆能力
- 工具集成:让链能够调用外部工具和API
- 代理模式:实现更智能的决策和任务分解
通过这个简单的LLMChain示例,我们看到了LangChain框架的强大之处:它通过清晰的抽象和组合模式,让构建复杂的LLM应用变得简单而直观。这为后续学习更高级功能奠定了坚实的基础。

157

被折叠的 条评论
为什么被折叠?



