开发者社区 > 博文 > 直观易用的大模型开发框架LangChain,你会了没?
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

直观易用的大模型开发框架LangChain,你会了没?

  • 晴出一片天
  • 2024-03-29
  • IP归属:北京
  • 100浏览

    目前LangChain框架在集团大模型接入手册中的学习案例有限,为了让大家可以快速系统地了解LangChain大模型框架并开发,产出此文章。本文章包含了LangChain的简介、基本组件和可跑的代码案例(包含Embedding、Completion、Chat三种功能模型声明)。读完此文章,您可利用集团申请的api key+LangChain框架进行快速开发,体验大语言模型的魅力。

    一、简介

    LangChain 作为一个大语言模型(LLM)集成框架,旨在简化使用大语言模型的开发过程,包括如下组件:

    LangChain框架优点:

    1. 多模型支持:LangChain 支持多种流行的预训练语言模型,如 OpenAI GPT-3、Hugging Face Transformers 等,为用户提供了广泛的选择。
    2. 易于集成:LangChain 提供了简单直观的API,可以轻松集成到现有的项目和工作流中,无需深入了解底层模型细节。
    3. 强大的工具和组件:LangChain 内置了多种工具和组件,如文档加载器、文本转换器、提示词模板等,帮助开发者处理复杂的语言任务。
    4. 可扩展性:LangChain 允许开发者通过自定义工具和组件来扩展框架的功能,以适应特定的应用需求。
    5. 性能优化:LangChain 考虑了性能优化,支持高效地处理大量数据和请求,适合构建高性能的语言处理应用。
    6. Python 和 Node.js 支持:开发者可以使用这两种流行的编程语言来构建和部署LangChain应用程序。

    由于支持 Node.js ,前端大佬们可使用Javascript语言编程从而快速利用大模型能力,无需了解底层大模型细节。同时也支持JAVA开发,后端大佬同样适用。

    本篇文章案例聚焦Python语言开发。


    二、基本组件

    Chain中常见的components


    • Prompt【可选】
      • 告知LLM内system服从什么角色
      • 占位符:设置{input}以便动态填补后续用户输入
    • Retriever【可选】
      • LangChain一大常见应用场景就是RAG(Retrieval-Augmented Generation),RAG 为了解决LLM中语料的通用和时间问题,通过增加最新的或者垂类场景下的外部语料,Embedding化后存入向量数据库,然后模型从外部语料中寻找相似语料辅助回复
    • Models
      • 可做 Embedding化,语句补全,对话等

    支持的模型选择,OpenAI为例

    • Parser【可选】
      • StringParser,JsonParser 等
      • 将模型输出的AIMessage转化为string, json等易读格式

    上述介绍了Langchain开发中常见的components,接下来将通过一简单案例将上述组件串起来,让大家更熟悉Langchain中的组件及接口调用。


    三、小试牛刀

    import os
    # gpt 网关调用
    os.environ["OPENAI_API_KEY"] = "{申请的集团api key}"
    os.environ["OPENAI_API_BASE"] = "{您的url}"
    
    import openai
    
    from dotenv import load_dotenv, find_dotenv
    _ = load_dotenv(find_dotenv())
    
    openai.api_key = os.environ['OPENAI_API_KEY']
    
    from langchain.prompts import ChatPromptTemplate
    from langchain.chat_models import ChatOpenAI
    from langchain.schema.output_parser import StrOutputParser
    
    prompt = ChatPromptTemplate.from_template(
        "tell me a short joke about {topic}"
    )
    model = ChatOpenAI()
    output_parser = StrOutputParser()
    
    chain = prompt | model | output_parser
    
    chain.invoke({"topic": "bears"})

    输出:

    "Why don't bears wear shoes?\nBecause they have bear feet!"

    其中 chain = prompt | model | output_parser 按照数据传输顺序将上述声明的 prompt template、大语言模型、输出格式串联起来(Chain),逻辑清晰直接。


    代码案例:调用Embedding、Completion、Chat Model

    • 将文本转化为Embedding : langchain_community.embeddings <-> OpenAIEmbeddings
    from langchain_community.embeddings import OpenAIEmbeddings
    
    embeddings = OpenAIEmbeddings(
        model="text-embedding-ada-002",
        openai_api_key=os.environ["OPENAI_API_KEY"],
        openai_api_base=os.environ["OPENAI_API_BASE"]
    )
    
    text = "text"
    query_result = embeddings.embed_query(text)
    
    • 文本补全:langchain_community.llms <-> OpenAI completion
    from langchain_community.llms import OpenAI
    
    llm = OpenAI(
        model_name='gpt-35-turbo-instruct-0914',
        openai_api_key=os.environ["OPENAI_API_KEY"],
        base_url=base_url,
        temperature=0
    )
    
    llm.invoke("I have an order with order number 2022ABCDE, but I haven't received it yet. Could you please help me check it?")
    
    • 对话模型:langchain_openai <-> ChatOpenAI
    from langchain_openai import ChatOpenAI
    
    model = ChatOpenAI(model_name="gpt-35-turbo-1106") # "glm-4"
    model.invoke("你好,你是智谱吗?")

    四、总结

    LangChain作为一个使用流程直观的大模型开发框架,掌握它优势多多。希望您可以通过上述内容入门并熟悉LangChain框架,欢迎多多交流!

    文章数
    1
    阅读量
    0

    作者其他文章