LangChain--(2)

发布于:2025-06-14 ⋅ 阅读:(18) ⋅ 点赞:(0)

3 LangChain Expression Language(LCEL)

LCEL是LangChain用于构建和编排AI工作流的声明式编程语言,通过标准化接口简化了大型语言模型(LLM)应用的开发流程。LCEL的所有组件(模型、提示模板、解析器等)均实现Runnable接口,支持一致的调用方法(invokestreambatch等)。即Langchain提供了一个顶级父类,Runnable,只要是Runnable的子类都可以放入chain中。

==声明式编程:==用户描述“做什么”而非“如何做”。

3.1 串行条构建

单个链条的构建

def qwen_single_chain():
    os.environ.setdefault("DASHSCOPE_API_KEY", load_key("DASHSCOPE_API_KEY"))

    # 提示词模板
    from langchain_core.prompts import ChatPromptTemplate
    prompt_template = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful assistant that translates {input_language} to {output_language}."),
        ("human", "{text}"),
    ])

    # 模型调用
    llm = ChatQwen(model="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

    # 结果解析器
    from langchain_core.output_parsers import StrOutputParser
    parser = StrOutputParser()

    # chain链
    chain = prompt_template | llm | parser


    print(chain.invoke({"input_language": "English", "output_language": "Chinese", "text": "I love programming."}))
------------------------------
我爱编程

注意事项:

串行链时,| 与 RunnableSequence不能直接替换。

# 等价关系
chain = prompt | llm | parser  
# RunnableSequence本应等价于|,但 | 操作符会自动插入许多组件、类型转化,所以会抛出异常: TypeError: Expected str, got PromptValue
chain = RunnableSequence([prompt, llm, parser]) 

# 原因分析:
# prompt_template 输出的是 PromptValue 类型
# llm 期望接收 str 类型(需调用 .to_string() 转换)
# RunnableSequence 不会自动插入类型转换步骤

差异对比如下:

在这里插入图片描述

3.2 并行链条构建

def qwen_parallel_chain():
    os.environ.setdefault("DASHSCOPE_API_KEY", load_key("DASHSCOPE_API_KEY"))
    from langchain_core.prompts import ChatPromptTemplate
    # 模板1
    prompt_template_zh = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful assistant that translates English to Chinese."),
        ("human", "{text}"),
    ])
    # 模板2
    prompt_template_fr = ChatPromptTemplate.from_messages([
        ("system", "You are a helpful assistant that translates English to French."),
        ("human", "{text}"),
    ])

    # 模型
    llm = ChatQwen(model="qwen-plus", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")

    # 结果解析器
    from langchain_core.output_parsers import StrOutputParser
    parser = StrOutputParser()

    # chain链
    chain_zh = prompt_template_zh | llm | parser
    chain_fr = prompt_template_fr | llm | parser

    # 并行执行两个链条(RunnableMap = RunnableParallel可以互相替换)
    from langchain_core.runnables import RunnableMap, RunnableLambda
    parallel_chains = RunnableMap({
        "Chinese": chain_zh,
        "French": chain_fr
    })

    # 合并结果
    final_chain = parallel_chains | RunnableLambda(lambda x: "\n".join([f"{k}: {v}" for k, v in x.items()]))

    # 调用chain
    print(final_chain.invoke({"text": "I love programming."}))

3.3 查看图形化链条

# 利用langgraph产看图形化链条
final_chain.get_graph().print_ascii()

在这里插入图片描述