You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LangChain技术问询:如何添加前置层基于关键词选择调用对应Chain

解决方案:给LangChain聊天Chain添加关键词检测前置层

完全可以通过添加规则式关键词检测前置层来实现Chain路由,避开LLM性能不足的问题,直接用轻量的规则逻辑决定调用哪个Chain。下面是具体实现思路和代码示例:

核心思路

不用依赖LLM的Thought/Action机制,直接通过关键词匹配+简单规则的前置函数,判断用户输入是否触发特定Chain(比如检测到"Look this up"时调用问答Chain),否则默认走带记忆的聊天Chain。

具体实现步骤

1. 编写关键词检测函数

定义一个轻量函数,接收用户输入(可选结合对话历史),匹配预设关键词后返回对应Chain类型:

def detect_chain_trigger(user_input, chat_history=None):
    # 自定义触发不同Chain的关键词列表
    qa_triggers = ["Look this up", "帮我查一下", "搜索相关内容", "检索信息"]
    # 忽略大小写,提升匹配容错性
    input_lower = user_input.lower()
    for trigger in qa_triggers:
        if trigger.lower() in input_lower:
            return "qa_chain"
    # 默认返回聊天Chain
    return "chat_chain"

2. 整合现有Chain与前置路由

把检测函数和你已有的带记忆聊天Chain、问答Chain整合为统一入口:

# 假设你已经初始化好以下组件:
# your_open_source_llm:你部署的开源LLM实例
# your_vectorstore_retriever:问答Chain用到的向量检索器

from langchain.chains import ConversationChain, RetrievalQA
from langchain.memory import ConversationBufferMemory

# 已有的带记忆聊天Chain
chat_memory = ConversationBufferMemory()
chat_chain = ConversationChain(memory=chat_memory, llm=your_open_source_llm)

# 已有的问答Chain(示例为基于检索的QA链)
qa_chain = RetrievalQA.from_chain_type(
    llm=your_open_source_llm,
    chain_type="stuff",
    retriever=your_vectorstore_retriever
)

# 统一路由入口
def process_user_input(user_input):
    chain_type = detect_chain_trigger(user_input)
    if chain_type == "qa_chain":
        # 若需要结合对话历史,可将历史内容拼接进user_input
        result = qa_chain.run(user_input)
    else:
        result = chat_chain.run(user_input)
    return result

优化扩展建议

  • 模糊匹配优化:如果需要处理拼写错误或近似表达,可以引入fuzzywuzzy库做模糊匹配,提升触发准确率
  • 对话历史结合:在检测函数中加入聊天历史参数,比如判断用户是否在之前的对话中提到过特定主题,再结合当前关键词做路由
  • 多Chain扩展:后续如果需要新增其他Chain,只需在检测函数中添加对应关键词和返回值即可

内容的提问来源于stack exchange,提问作者sultan aljahwary

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:56:18