LangChain快速开始

什么是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-20230712214651704

image-20230712215815549

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

memory模式的使用

  1. ConversationBufferMemory
  2. ConversationSummaryMemory

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

区别ConversationBufferMemoryConversationSummaryMemory
存储形式使用原始内容进行记录会调用接口生成摘要
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-20230712221415259

image-20230712221441950

上图是采用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 相关内容, 如有用词不当,不正确的地方,敬请谅解

源码地址

github源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dqliangjun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值