LangChain实战 | 路由机制让AI助手更聪明,专业问题交给专业模块!

路由机制是 LangChain 处理复杂任务的核心设计之一,它通过动态调度不同子模块,实现了“专业问题由专家处理”的智能化分工。无论是数学物理问题的精准分类,还是多工具协作场景(如搜索、计算、数据库查询),路由都能显著提升系统的可靠性和效率。

  • \1. 路由的核心思路

  • \2. 路由机制设计

    • 2.1 核心组件
    • 2.2 路由的工作流程
  • \3. 代码实现

    • 3.1 环境变量和模型的定义
    • 3.1 硬编码的路由方式
    • 3.3 相似度的路由方式
  • \4. 典型应用场景

假设你正在开发一个智能助手,它需要调用不同类型的模型、或者要处理数学方程求解、物理问题分析以及文本翻译等不同的任务。

如果所有请求都交给同一个模型处理,可能会导致效率低下或结果不精准。

例如,用翻译模型处理微积分问题,显然不合理。如果让一个通用模型处理所有问题,可能面临两个挑战:

  1. 专业性问题:模型对数学公式、物理定律等专业内容理解不足;
  2. 资源浪费:用大模型处理简单问题(如“1+1=?”)效率低下。

此时,路由机制的价值便凸显出来——它能像人类一样,根据问题类型自动选择最佳解决方案。

路由的核心价值是通过 “专业的事交给专业模块” 的设计,让路由机制实现了:

  1. 精准性:提升专业领域回答质量
  2. 高效性:根据问题,选择不同的模型,避免资源浪费

1. 路由的核心思路

  1. 动态分支选择路由允许系统根据输入内容(如用户问题)自动决定使用哪个子链(Sub-Chain)、工具(Tool)或提示模板(Prompt Template)来处理请求。例如:

    • 如果用户问数学问题,路由到数学专用链;
    • 如果用户需要翻译,调用翻译工具。
  2. 基于条件或语义的决策路由的决策可以是:

    • 硬编码条件(如关键词匹配);
    • 语义相似度(通过向量检索判断);

2. 路由机制设计

以调用不同专家能力模型(deepseek专家、langchain专家链)举例

2.1 核心组件

  1. 路由链基于输入问题的语义,判断问题的专业,是 deepseek 相关问题、langchain 相关问题还是通用问题。

  2. 目标子链

    • deepseek_chain:deepseek专家链,处理 deepseek 的相关问题。
    • langchain_chain:langchain专家链,处理 langchain 的相关问题。
    • general_chain:处理其他问题。
  3. 决策逻辑通过关键词匹配或语义匹配判断问题的类型。

2.2 路由的工作流程

image-20250307210134342

  1. 接收输入:用户提交查询(如 “如何使用 deepseek?”)。
  2. 路由决策路由链分析输入,决定调用哪个子链(如 deepseek_chain)。
  3. 执行子链:目标链处理请求并生成结果。
  4. 返回输出:将子链的结果返回给用户。

3. 代码实现

3.1 环境变量和模型的定义

import os  # 导入操作系统模块

os.environ['OpenAI_API_KEY'] = 'sk-3c68b629b5e'
##########

from langchain_openai import OpenAI, ChatOpenAI
llm = ChatOpenAI(  # 创建ChatOpenAI的实例
    model="deepseek-chat",  # 指定模型
    temperature=0,  # 设置温度
    base_url="https://api.deepseek.com"  # 设置基础URL
)

3.1 硬编码的路由方式

定义路由链:

##########
from langchain_core.output_parsers import StrOutputParser  # 导入字符串输出解析器
from langchain_core.prompts import PromptTemplate  # 导入提示模板

# 创建问题分类链
chain = (
    PromptTemplate.from_template(  # 创建提示模板
        """根据下面的用户问题,将问题分类为`LangChain`,`deepseek`或`其他`.

回答不要超过一个词.

<question>
{question}
</question>

分类:"""
    )
    | llm  # 连接语言模型
    | StrOutputParser()  # 连接字符串输出解析器
)

定义子链:

##########
# 创建LangChain专家链
langchain_chain = PromptTemplate.from_template(
    """你是 langchain 的专家。 \
总是以“langchain:”开头回答问题 \
回答以下问题:

Question: {question}
Answer:"""
) | llm  # 连接语言模型

# 创建DeepSeek专家链
deepseek_chain = PromptTemplate.from_template(
    """你是 deepseek 的专家。 \
总是以“deepseek:”开头回答问题. \
回答以下问题:

Question: {question}
Answer:"""
) | llm  # 连接语言模型

# 创建通用问题回答链
general_chain = PromptTemplate.from_template(
    """回答以下问题:

Question: {question}
Answer:"""
) | llm  # 连接语言模型

使用自定义函数配合路由链进行路由:

##########
def route(info):
    """
    根据主题路由到相应的链
    
    Args:
        info (dict): 包含主题信息的字典
        
    Returns:
        Chain: 返回对应的处理链
    """
    print("info : ",info)
    if"deepseek"in info["topic"].lower():
        return deepseek_chain
    elif"langchain"in info["topic"].lower():
        return langchain_chain
    else:
        return general_chain

##########
from langchain_core.runnables import RunnableLambda  # 导入可运行Lambda

# 创建完整链
full_chain = (
    # 组合两个输入:
    # 1. 使用chain处理后的topic分类结果
    #   - chain会在full_chain被调用时自动运行
    #   - 它会先对输入的问题进行分类
    # 2. 直接传递question参数
    {"topic": chain, "question": lambda x: x["question"]} 
    # 将组合后的结果传递给路由函数
    | RunnableLambda(route)  
    # 整体流程:
    # 1. 输入问题 -> 
    # 2. chain自动运行,对问题进行分类 ->
    # 3. 根据分类结果选择处理链 -> 
    # 4. 返回处理结果
    # 注意:chain的运行是惰性的,只有在full_chain被调用时才会执行
)

deepseek问题:

full_chain.invoke({"question": "如何使用deepseek"})  # 调用链处理DeepSeek问题

image-20250307210711607

LangChain问题:

full_chain.invoke({"question": "如何使用 LangChain?"})  # 调用链处理LangChain问题

image-20250307210726565

其他问题:

full_chain.invoke({"question": "2 + 2 等于几"})  # 调用链处理数学问题

image-20250307210744701

3.3 相似度的路由方式

定义不同能力的提示词模板:

##########
from langchain_community.utils.math import cosine_similarity  # 导入余弦相似度计算
from langchain_core.output_parsers import StrOutputParser  # 导入字符串输出解析器
from langchain_core.prompts import PromptTemplate  # 导入提示模板
from langchain_core.runnables import RunnableLambda, RunnablePassthrough  # 导入可运行Lambda和Passthrough
from langchain_openai import OpenAIEmbeddings  # 导入OpenAI嵌入

# 物理问题模板
physics_template = """你是一位非常聪明的物理教授. \
擅长用简洁易懂的方式回答物理问题. \
如果遇到自己不知道的问题,你会承认.

Here is a question:
{query}"""

# 数学问题模板
math_template = """你是一位出色的数学家. 擅长解答数学问题. \
你的厉害之处在于能把复杂问题拆解成小部分,先解决每个部分,再把它们组合起来回答整个问题.

Here is a question:
{query}"""

# 创建OpenAI嵌入实例
embeddings = OpenAIEmbeddings(base_url="https://api.openai-hk.com/v1",openai_api_key="hk-iwtbie91e427",)
prompt_templates = [physics_template, math_template]  # 模板列表
prompt_embeddings = embeddings.embed_documents(prompt_templates)  # 生成模板嵌入

定义模板路由函数:

def prompt_router(input):
    """
    根据问题内容路由到最合适的模板
    
    Args:
        input (dict): 包含查询信息的字典
        
    Returns:
        PromptTemplate: 返回对应的提示模板
    """
    # 生成查询问题的嵌入向量
    query_embedding = embeddings.embed_query(input["query"])
    # 计算查询与所有模板的余弦相似度
    similarity = cosine_similarity([query_embedding], prompt_embeddings)[0]
    # 找到最相似的模板
    most_similar = prompt_templates[similarity.argmax()]
    print("数学 :"if most_similar == math_template else"物理 :")
    return PromptTemplate.from_template(most_similar)


# 创建问题路由链
chain = (
    {"query": RunnablePassthrough()}  # 传递查询
    | RunnableLambda(prompt_router)  # 路由到合适的模板
    | llm  # 连接语言模型
    | StrOutputParser()  # 连接字符串输出解析器
)

物理问题:

print(chain.invoke("什么是相对论"))  # 调用链处理物理问题

image-20250307211058687

数学问题:

print(chain.invoke("什么是积分"))  # 调用链处理数学问题

image-20250307211213834

4. 典型应用场景

  1. 多领域问答系统根据问题类型路由到不同领域的专家模型(如法律、医疗、技术)。
  2. 混合工具调用动态选择使用搜索引擎、数据库查询或代码执行工具。
  3. A/B 测试将请求路由到不同版本的模型,比较效果。

总结

路由机制是 LangChain 处理复杂任务的核心设计之一,它通过动态调度不同子模块,实现了“专业问题由专家处理”的智能化分工。无论是数学物理问题的精准分类,还是多工具协作场景(如搜索、计算、数据库查询),路由都能显著提升系统的可靠性和效率。

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭优快云大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值