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 ?
- 数据连接: 允许将大型语言模型链接到自己的数据源,数据库、pdf文件或其他文档
- 行动执行:根据信息执行特定操作 ,如发送邮件
LangChain 底层原理
应用场景:
个人助手
学习辅助
数据分析和数据科学
LangChain 库
LangChain 包的主要价值主张是:
- 组件:用于处理语言模型的可组合工具和集成。无论你是否使用 LangChain 框架的其余部分,组件都是模块化的,易于使用
- 现成的链:用于完成高级任务的组件的内置组合
现成的链使得开始变得容易。组件使得定制现有链和构建新链变得容易。
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
)中定义的链式操作符。它通常用于将多个操作或组件连接在一起,形成一个处理链。在这个例子中,model
和parser
是两个组件,|
操作符将它们连接起来,形成一个处理链。具体来说:
•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
检索器和模型结合
Tavily 检索工具
LangChain 构建代理
语言模型本身无法执行动作,它们只能输出文本。代理是使用大型语语言模型(LLM)作为推理引擎来确定要执行的操作以及这些操作的输入应该是什么。然后,这些操作的结果可以反馈到代理中,代理将决定是否需要更多的操作,或者是否可以结束。
pip install langgraph 用来创建代理的API
定义工具
1. 无代理场景
<img src="https://i0.hdslb.com/bfs/article/1905237a9989e920709f0bdc3dfd281b376490467.png" style="zoom: 90%;" />
有代理场景
- Travily 作为代理使用
创建代理
Agent代理使用
LangChaing构建RAG 的对话应用
- 加载
分割
注: 检索器 也需要引入上下文 理解
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多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。