Langchain 笔记

[TOC]

AI大模型开发做什么

LangChain 是什么?

LangChain是一个用于开发由语言模型驱动的应用程序的框架。

Langchain是一个开源框架,它允许开发人员将像GPT-4这样的大型语言模型与外部的计算和数据
源结合起来。

  • 具有上下文感知能力:将语言模型连接到上下文来源(提示指令,少量的示例,需要回应的内容等)
  • 具有推理能力:依赖语言模型进行推理(根据提供的上下文如何回答,采取什么行动等)

核心组件

这个框架由几个部分组成。

  • LangChain 库:Python 和 JavaScript 库。包含了各种组件的接口和集成,一个基本的运行时,用于将这些组件组合成链和代理,以及现成的链和代理的实现。
  • LangChain 模板:一系列易于部署的参考架构,用于各种任务。
  • LangServe:一个用于将 LangChain 链部署为 REST API 的库。
  • LangSmith:一个开发者平台,让你可以调试、测试、评估和监控基于任何 LLM 框架构建的链,并且与 LangChain 无缝集成

这些产品一起简化了整个应用程序的生命周期:

  • 开发:在 LangChain/LangChain.js 中编写你的应用程序。使用模板作为参考,快速开始。
  • 生产化:使用 LangSmith 来检查、测试和监控你的链,这样你可以不断改进并有信心地部署。
  • 部署:使用 LangServe 将任何链转换为 API。

图示展示了 LangChain 框架的层次组织结构,显示了跨多个层次的部分之间的相互连接。

为什么要用LangChain ?

  1. 数据连接: 允许将大型语言模型链接到自己的数据源,数据库、pdf文件或其他文档
  2. 行动执行:根据信息执行特定操作 ,如发送邮件

LangChain 底层原理

应用场景:

个人助手

学习辅助

数据分析和数据科学

LangChain 库

LangChain 包的主要价值主张是:

  1. 组件:用于处理语言模型的可组合工具和集成。无论你是否使用 LangChain 框架的其余部分,组件都是模块化的,易于使用
  2. 现成的链:用于完成高级任务的组件的内置组合

现成的链使得开始变得容易。组件使得定制现有链和构建新链变得容易。

LangChain 库本身由几个不同的包组成。

  • langchain-core:基础抽象和 LangChain 表达式语言。
  • langchain-community:第三方集成。
  • langchain:构成应用程序认知架构的链、代理和检索策略

核心

开始使用

LangChain 环境和监控

LangChain 开发账户密码

zhzxweijing@126.com
PAq!@#00

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

openAPI_KEY = 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


#智谱清言
2333506a5aea4dcca0798aacd92ebb20.iqTdy7YjClLmTWsB

LangChain 调用LLM

import os

from langchain_core.output_parsers import StrOutputParser
from langchain_zhipu import ChatZhipuAI
from langchain_core.messages import HumanMessage, SystemMessage

# os.environ['http_proxy'] = '127.0.0.1:7890'
# os.environ['https_proxy'] = '127.0.0.1:7890'
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = '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'
os.environ["ZHIPUAI_API_KEY"] = '2333506a5aea4dcca0798aacd92ebb20.iqTdy7YjClLmTWsB'
# revoke llm
# LLM model  revoke api
# 1. create model
model = ChatZhipuAI(model='glm-4-0520')
# 2. msg
msg = [
    SystemMessage(content="你是个翻译助手"),
    HumanMessage(content=" 将下列文本内容翻译为英语 < 故宫、 天坛 都有着各自不错的风景>")
]
print("AI模型输出回复结果:")
result = model.invoke(msg)
print(result)
# 3. parser
#
# result_str = StrOutputParser().invoke(result)
# print(result_str)

parser = StrOutputParser()

# 4. chain
chain = model | parser
result = chain.invoke(msg)
print(result)

在Python中,chain = model | parser 这种语法并不是Python内置的语法,而是特定库(如langchain)中定义的链式操作符。它通常用于将多个操作或组件连接在一起,形成一个处理链。在这个例子中,modelparser 是两个组件,| 操作符将它们连接起来,形成一个处理链。

具体来说:
model 是一个语言模型(如ChatZhipuAI),用于生成文本。
parser 是一个输出解析器(如StrOutputParser),用于将模型的输出解析为字符串。

通过 chain = model | parser,你将模型和解析器连接在一起,形成一个处理链。当你调用 chain.invoke(msg) 时,输入 msg 会先经过 model 处理,生成的结果再传递给 parser 进行解析,最终输出解析后的结果。

这种链式操作符的使用方式类似于管道(pipe)操作,常见于流式处理或任务链的场景。它使得代码更加简洁和易读,尤其是在处理多个步骤的任务时。

如果你想了解更多关于链式调用的内容,可以参考和中的相关介绍。

LangChain提示模板(PromptTemplate)

prompt_template = ChatPromptTemplate.from_messages([
    ('system', '将下文内容翻译为{language}'),
    ('user', '{text}')])

# 4. chain
chain = prompt_template | model | parser
# result = chain.invoke(msg)
result = chain.invoke({"language": "韩语", "text": "故宫、天坛都有着各自不错的风景"})
print(result)

LangServer 部署应用程序

pip install "langserve[all]"

# 4. chain
chain = prompt_template | model | parser
# result = chain.invoke(msg)
result = chain.invoke({"language": "韩语", "text": "故宫、天坛都有着各自不错的风景"})
print(result)

app = FastAPI(title='我langchain 服务', version='0.0.1', description='我langchain翻译服务')
from langserve import add_routes  # 导入add_routes函数
add_routes(app,chain,path="/chain")


if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host="localhost", port=8000)

聊天机器人:

需要安装:  `pip install langchain_community`
  • Chat History: 机器人

  • 流式输出

    循环:往复 ==流式== 输出

向量数据库和检索器

支持从向量数据库和其他来源检索数据,以便与LLM(大型语言言模型)工作流程集成。它们对于应用程序来说非常重要,这些应用程序需要获取数据以作为模型推理的一部分进行推理,就像检索增强生成(RAG)的情况一样

需要安装

pip install langchain-chroma

检索器和模型结合

image-20250331110054964

Tavily 检索工具

LangChain 构建代理

语言模型本身无法执行动作,它们只能输出文本。代理是使用大型语语言模型(LLM)作为推理引擎来确定要执行的操作以及这些操作的输入应该是什么。然后,这些操作的结果可以反馈到代理中,代理将决定是否需要更多的操作,或者是否可以结束。
pip install langgraph 用来创建代理的API

  • 定义工具
      1. 无代理场景
    

<img src="https://i0.hdslb.com/bfs/article/1905237a9989e920709f0bdc3dfd281b376490467.png" style="zoom: 90%;" />

  1. 有代理场景

    • Travily 作为代理使用
  • 创建代理

Agent代理使用

LangChaing构建RAG 的对话应用

  1. 加载

  1. 分割

注: 检索器 也需要引入上下文 理解

LangChain 读取数据库

采用链模式

采用代理模式

整合数据库

LangChain 检索视频字幕

sqlite: 小型数据库, 实际存储的是元文件, 实际数据存储在文件目录里

根据检索条件进行检索

提取结构化数据

自动生成数据

langChain文本分类

langChain 自动摘要

填充Stuff :

注:只能处理 token限制范围内的 ,小文本

映射-归约Map-reduce: 【分而治之】 思想

注:超出文本数量, 切割 → 进行汇总 ;适合大文本

细化refine:

详解 TransFormer

TransFormer 之位置编码

注 : 自注意力机制 → 特征提取 ( 提取到有用的句子)
  • Scale → 缩小规模
  • Mask →掩码
  • SoftMax → 归一概率 0~1

多头注意力机制:

  • 位置编码

    RNN 网络: 不需要位置编码 ,为何transform 需要

    RNN: 向后传 → 自带前后顺序 → 并行机制

    transform: 不考虑顺序,并行处理 ,需要位置编码

    embedding : i 词向量长度、2i偶数位、 sin角度 , Dmodel 超参数

Decoder

全部传递 → Mssk Inference(推理)

输出层

​ decode → Linear + Softmax

Bert

注:预训练 双向深度 →

本文由mdnice多平台发布


Young
10 声望1 粉丝