美文网首页
LangChain快速开始

LangChain快速开始

作者: 汇集 | 来源:发表于2023-07-11 20:36 被阅读0次

    什么是LangChain

    langchain 是一个框架, 用于连接大语言模型的框架, 它提供了一整套工具、组件和接口,简化上层应用与大语言模型,聊天模型的的过程,可轻松管理与模型的交互,以及跟多组件链接起来。

    在 LangChain 中 提供 5 大模块助力于引用的开发

    • 模型(models) : LangChain 支持的各种模型类型和模型集成。
    • 提示(prompts) : 包括提示管理、提示优化和提示序列化。
    • 内存(memory) : 内存是在链/代理调用之间保持状态的概念。LangChain 提供了一个标准的内存接口、一组内存实现及使用内存的链/代理示例。
    • 索引(indexes) : 与您自己的文本数据结合使用时,语言模型往往更加强大——此模块涵盖了执行此操作的最佳实践。
    • 链(chains) : 链不仅仅是单个 LLM 调用,还包括一系列调用(无论是调用 LLM 还是不同的实用工具)。LangChain 提供了一种标准的链接口、许多与其他工具的集成。LangChain 提供了用于常见应用程序的端到端的链调用。
    • 代理(agents) : 代理涉及 LLM 做出行动决策、执行该行动、查看一个观察结果,并重复该过程直到完成。LangChain 提供了一个标准的代理接口,一系列可供选择的代理,以及端到端代理的示例。

    以上内容引用于LangChain 🦜️🔗 中文网

    使用 LangChain前期准备

    前期准备内容

    1. Python 环境 version>=3.0

    2. OPENAI_API_KEY 自行准备,用于体验与语言模型交互

    3. 安装 LangChain依赖

      pip install langchain openai

    简单实用示例

    构建简单的 LLM 模型

    from langchain import OpenAI
    llm = OpenAI(
        temperature=0,
        openai_api_key='<OPENAI_API_KEY>',
        model_name="gpt-3.5-turbo-16k"
    )
    # --------- 不具备上下文理解能的调用方式
    while True:
        print("输入问题")
        ls = input()
        print("\n-----\n")
        print(track_tokens_usage(llm, ls))
        print("\n 回答结束 \n")
    

    具体的使用结果

    [图片上传失败...(image-db2c43-1689201283644)]

    <img src="https://blogimg.50xr.com/markdown/202307122158605.png" alt="image-20230712215815549" style="zoom:50%;" />

    从以上简单的示例中可以看出,在每次简单调用的时候, 不具备理解上下文的内容, 这个使用我们需要结合使用memory模型了,

    memory模式的使用

    1. ConversationBufferMemory
    2. ConversationSummaryMemory

    以上两个类都是在调用接口的时候使用内存存储上下文内容, 但是存在本质上的区别

    区别 ConversationBufferMemory ConversationSummaryMemory
    存储形式 使用原始内容进行记录 会调用接口生成摘要
    token消耗 与聊天内容成正比 整体为正比关系,但是后期消耗 token 比前期少
    请求次数 只有一次请求 有两次请求, 其中一次会回去全部聊天内容的摘要

    使用示例

    1. 具体代码
    from langchain.memory import ConversationBufferMemory, ConversationSummaryMemory
    from langchain.chains import ConversationChain
    from langchain.chat_models import ChatOpenAI
    # 定义 LLM 模型
    llm = OpenAI(
        temperature=0,
        openai_api_key='<OPENAI_API_KEY>',
        model_name="gpt-3.5-turbo-16k"
    )
    # 定义 memory 对象
    conversation = ConversationChain(llm=llm, memory=ConversationBufferMemory())
    # conversation = ConversationChain(llm=llm, memory=ConversationSummaryMemory(llm=llm))
    while True:
        print("输入问题")
        ls = input()
        print("\n-----\n")
        # 这里可以去掉空格,标点
        print(chain_tokens_usage(conversation, ls))
        print("***********************   打印具体的保存内容 *************************")
        print(conversation.memory.buffer)
        print("***********************   打印具体的保存内容 *************************")
        print("\n 回答结束 \n")
    
    
    1. 执行结果, 提问与上面相同

    [图片上传失败...(image-c58378-1689201283645)]

    [图片上传失败...(image-9786b1-1689201283645)]

    上图是采用ConversationSummaryMemory 模式进行的问答,从上图中可以看出已经具备一定的上下文理解能力。 采用 ConversationBufferMemory 模式的可以自己尝试一下

    统计 token 使用以及费用

    具体代码如下

    from langchain.callbacks import get_openai_callback
    def track_tokens_usage(llm, query):
        """直接使用大模型进行调用openai 接口"""
        with get_openai_callback() as cb:
            result = llm(query)
            # 以下为打印真实的消耗和具体费用
            print(f"Total Tokens: {cb.total_tokens}")
            print(f"Prompt Tokens: {cb.prompt_tokens}")
            print(f"Completion Tokens: {cb.completion_tokens}")
            print(f"Successful Requests: {cb.successful_requests}")
            print(f"Total Cost (USD): ${cb.total_cost}")
    
        return result
    
    
    def chain_tokens_usage(chain, query):
        """使用 chain 调用 openai 接口"""
        with get_openai_callback() as cb:
            result = chain.run(query)
            # 以下为打印真实的消耗和具体费用
            print(f"Total Tokens: {cb.total_tokens}")
            print(f"Prompt Tokens: {cb.prompt_tokens}")
            print(f"Completion Tokens: {cb.completion_tokens}")
            print(f"Successful Requests: {cb.successful_requests}")
            print(f"Total Cost (USD): ${cb.total_cost}")
    
        return result
    

    写在最后

    1. 这只是一个简单的使用示例, langchain 还有很多强大而有用的内容等待一步步的学习
    2. 第一次学习 python 相关内容, 如有用词不当,不正确的地方,敬请谅解

    源码地址

    源码

    相关文章

      网友评论

          本文标题:LangChain快速开始

          本文链接:https://www.haomeiwen.com/subject/tyduudtx.html