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

源码地址

源码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容