• 什么是langchain


    1. 概念

    LangChain 是一个用于开发由语言模型驱动的应用程序的框架。他主要拥有 2 个能力:

    -可以将 LLM 模型(大规模语言模型)与外部数据源进行连接
    -允许与 LLM 模型进行交互
    
    • 1
    • 2
    1. 基础功能

    支持多种模型接口,比如 OpenAI、Hugging Face、AzureOpenAI …
    Fake LLM,用于测试缓存的支持,比如 in-mem(内存)、SQLite、Redis、SQL用量记录
    支持流模式(就是一个字一个字的返回,类似打字效果)
    在这里插入图片描述
    3. 核心模块
    Langchain有6大核心模块:
    Models:模型,是各种类型的模型和模型集成。
    Prompts:提示,包括提示管理、提示优化和提示序列化。
    Memory:记忆,用来保存和模型交互时的上下文状态。
    Indexes:索引,用来结构化文档,以便和模型交互。包括文档加载程序、向量存储器、文本分割器和检索器等。
    Agents:代理,决定模型采取哪些行动,执行并且观察流程,直到完成为止。
    Chains:链,一系列对各种组件的调用。

    1. 用途
      LangChain 通常被用作「粘合剂」,将构建 LLM 应用所需的各个模块连接在一起。使用Langchain中不同组件的特性和能力,可以构建不同场景下的应用,如聊天机器人、基于文档的问答、知识管理、个人助理、Agent智能体等等。

    2. 落地实践
      1)通过 Loader 加载远程文档

    2)通过 Splitter 基于 Token 进行文档拆分

    3)加载 summarize 链,链类型为 refine,迭代进行总结

    
    from langchain.prompts import PromptTemplate
    from langchain.document_loaders import PlaywrightURLLoader
    from langchain.chains.summarize import load_summarize_chain
    from langchain.text_splitter import RecursiveCharacterTextSplitter
    from azure_chat_llm import llm
    
    loader = PlaywrightURLLoader(urls=["https://content.jr.jd.com/article/index.html?pageId=708258989"])
    data = loader.load()
    
    text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
        model_name="gpt-3.5-turbo",
        allowed_special="all",
        separators=["\n\n", "\n", "。", ","],
        chunk_size=7000,
        chunk_overlap=0
    )
    
    prompt_template = '''
    作为一个资深编辑,请针对 >>><<< 中间的文本写一段摘要。 
    >>> {text} <<<
    '''
    refine_template = '''
    作为一个资深编辑,基于已有的一段摘要:{existing_answer},针对 >>><<< 中间的文本完善现有的摘要。 
    >>> {text} <<<
    '''
    
    PROMPT = PromptTemplate(template=prompt_template, input_variables=["text"])
    REFINE_PROMPT = PromptTemplate(
        template=refine_template, input_variables=["existing_answer", "text"]
    )
    
    chain = load_summarize_chain(llm, chain_type="refine", question_prompt=PROMPT, refine_prompt=REFINE_PROMPT, verbose=False)
    
    docs = text_splitter.split_documents(data)
    result = chain.run(docs)
    print(result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    Qt5开发及实例V2.0-第十四章-Qt多国语言国际化
    【就业必备知识】大学毕业如何处理档案和户口,小心变成死档和黑户
    如何在3dMax中使用Python返回场景内所有对象的列表?
    Spark SQL 的总体工作流程
    【数据结构】数据结构基础概念
    博客系统(升级(Spring))(二)获取当前用户信息、对密码进行加密、设置统一数据格式、设置未登录拦截、线程池
    react-native实践日记--5.ReactNative 项目版本升级,0.61到0.72升级的问题记录(一)
    友元和优化
    华为数字能源,开启超充新纪元
    关于信息安全软考的记录3
  • 原文地址:https://blog.csdn.net/weixin_41709748/article/details/138186491