langchain的构成

news2024/9/24 16:37:43

1.简介

langchain的构成其包含langchain-core,langchain-community,langchain,langgraph,langserve,langSmith。
在这里插入图片描述

2,构件的详解

‌LangChain Core‌
‌LangChain Core‌是LangChain框架的核心组成部分,它包含了不同组件的基本抽象以及将它们组合在一起的方法。这个包定义了核心组件的接口,如LLM(大型语言模型)、向量存储、检索器等,并没有定义第三方集成,依赖项被设计得非常轻量级。LangChain Core为LangChain生态系统的其余部分提供了基础的抽象,使得任何提供商都可以实现所需的接口,然后轻松地在LangChain生态系统的其余部分中使用。这种设计使得开发人员不需要理解如何进行模型底层API调用,从而简化了开发过程。

LangChain Core的概念之一是Runnable,这是大多数LangChain Core组件实现的接口,为它们提供了一个通用的调用接口(调用、批处理、流等),并提供了用于重试、回退、模式和运行时可配置性的内置实用程序。使用LangChain表达式语言(LCEL)可以声明式地使用LangChain Core对象,或者通过命令式方式直接调用它们。此外,LangChain Core还允许通过LangServe轻松部署应用程序。

LangChain框架的目标是为各种大型语言模型应用提供通用接口,从而简化应用程序的开发流程。通过LangChain Core,开发人员可以更容易地将大型语言模型的多样形态与向量数据库、灵活多变的交互层、外部世界的广阔知识海洋以及高效的外部代理工具巧妙地编织在一起,构建出独一无二的LLM应用‌。

langchain-community
‌LangChain的langchain-community是一个包含由LangChain社区维护的第三方集成的集合。
合作伙伴包(例如 langchain-openai,langchain-anthropic等):一些集成已进一步拆分为自己的轻量级包,仅依赖于langchain-core。
上图中可以看出,大概分为三大类第三方集成包。
模型的输入和输出,model I/O 模型,提示词、示例、输出解释器。
Retrieval(rag相关) ,Retrieval ,文本加载器,向量数据库,文档切分,嵌入模型(将文件切分后进行向量化)
Agent Tooling(工具),比如搜索工具等

langchain
其主要作用是构成应用程序认知架构的链、代理和检索策略。
Chains链路,将提示词、大模型、输出解释器就构成了一个链,在代码中用|进行分隔。
Agents, 通过大模型和第三方工具做成一个agents智体,如Chains就是其中一部分。

langgraph
通过将步骤建模为图中的边和节点,使用LLM构建健壮且有状态的多角色应用程序。
LangGraph 的核心概念
LangGraph 将应用程序的工作流程表示为一个图结构,其中:

节点(Nodes):代表不同的操作或步骤,例如调用一个 LLM、访问一个数据库、处理用户输入等。
边(Edges):代表步骤之间的关系或流程,例如数据流、决策路径等。
这种图形结构允许创建复杂的、有状态的多角色应用程序,每个角色可以独立执行操作,互相通信,并根据前一步骤的结果动态调整。

LangGraph 的主要特点
高级接口:LangGraph 提供了用于创建常见代理的高级接口,使开发者可以快速构建代理应用。
低级 API:允许开发者自定义和组合自己的工作流程,以满足特定需求。
状态管理:支持构建有状态的应用程序,能够在多步骤和多角色之间传递和管理状态。
动态调整:基于前一步骤的结果,可以动态调整工作流程,适应不同的情况和需求。

langserve
将langChain链部署为REST API。

LangSmith
一个开发者平台,可让你调试、测试、评估和监控LLM应用程序,并与LangChain无缝集成。

3,LCEL相关代码

langchain开发表达式(LCEL)
LCEL表达式语言,这块在之前文章里展示过,就是文章中的一个实例,里面就有LCEL。
那么什么是LCEL了,它是一种使用注解轻松的构建链的声明式方法。

  • 强大的流支持
  • 异步支持
  • 优化的并行执行
  • 输入和输出样式
  • 无缝LangSmith追踪
  • 无缝LangServe步骤

例子:

import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel,RunnablePassthrough


os.environ["QIANFAN_AK"] = "*****"  # 这里需要修改为自己的实际值
os.environ["QIANFAN_SK"] = "****"  # 这里需要修改为自己的实际值
#例子1
#提示词
prompt = ChatPromptTemplate.from_template(
    "中国有哪些{topic}"
)
#输出介绍解释器
output_parser = StrOutputParser()
#语言模型
model = QianfanChatEndpoint(
    streaming=True,
    model="ERNIE-Bot",
)
#这里是管道处理
chain = (
    {"topic":RunnablePassthrough()}
    | prompt
    | model
    | output_parser
)
chain.invoke("节日")
print(chain)
print(output_parser)

这里用的是千帆语言模型

流式传输例子:

import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel,RunnablePassthrough


os.environ["QIANFAN_AK"] = "*****"  # 这里需要修改为自己的实际值
os.environ["QIANFAN_SK"] = "****"  # 这里需要修改为自己的实际值

prompt = ChatPromptTemplate.from_template(
    "请给我讲一个笑话,主题是:{topic}"
)
output_parser = StrOutputParser()
model = QianfanChatEndpoint(
    streaming=True,
    model="ERNIE-Bot",
)
chain = prompt | model | output_parser
chain.invoke({"topic": "小鸭子"})
print(chain)

迷你RAG例子:

import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableParallel,RunnablePassthrough
from langchain_community.embeddings.huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
#例子3
def load_embedding_mode():
    return HuggingFaceEmbeddings(model_name='text2vec-base-chinese',
                                   model_kwargs={'device': 'cpu'})
vectorstore = FAISS.from_texts(
    ["张三在华为工作","熊喜欢吃蜂蜜"],
    load_embedding_mode(),
)
retriever = vectorstore.as_retriever()
model = QianfanChatEndpoint(
    streaming=True,
    model="ERNIE-Bot",
)

template = """仅根据以下上下文回答问题:
{context}
问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)
output_parser = StrOutputParser()

setup_and_retrieval = RunnableParallel(
    {"context": retriever, "question": RunnablePassthrough()}
)
chain = setup_and_retrieval | prompt | model | output_parser
chain.invoke("张三在哪里工作?")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160828.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ruoyi-flowable流程设计配置的表单时,级联选择如何配置??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

为什么自学python那么难?

在科技日新月异的今天,编程能力已成为一项备受追捧的技能。仿佛一夜之间,各种编程学习资源如雨后春笋般涌现,让人眼花缭乱。然而,许多人投身于自学编程的行列,却往往在半路折戟沉沙。究竟是什么原因让自学编程变得如此…

如何重置企业/媒体/组织/个体户类型管理员微信号

请您通过浏览器打开该网页https://mp.weixin.qq.com/acct/findacct?actionscan重置公众号绑定邮箱和管理员微信号, 在申请找回帐号的页面填写的对公账户信息和运营者信息可以和注册不一致,完成找回后,管理员微信号会同步更新; …

【小程序】微信小程序课程 -3 快速上手之常用方法

目录 1、 对话框 1.1 模态对话框 1.2 消息对话框 2、 存储 2.1 同步 2.1.1 同步保存数据 2.1.2 同步获取数据 2.1.3 同步删除数据 2.1.4 同步清空数据 2.2 异步 2.2.1 异步保存数据 2.2.2 异步获取数据 2.2.3 异步删除数据 2.2.4 异步清空数据 3、 上拉加载更多…

代码随想录算法训练营第三十八天 | 322. 零钱兑换,279.完全平方数,139.单词拆分,多重背包

322.零钱兑换 题目链接 解题过程 递推公式写对了&#xff0c;但对于特殊情况的案例没有想清楚&#xff0c;如不能凑成则需返回-1dp[i] min(dp[i], dp[i - coin] 1); 完全背包 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector…

SSM影院订票系统—计算机毕业设计源码35370

摘 要 随着互联网时代的到来&#xff0c;同时计算机网络技术高速发展&#xff0c;网络管理运用也变得越来越广泛。因此&#xff0c;建立一个SSM影院订票系统&#xff1b;订票系统的管理工作系统化、规范化&#xff0c;也会提高平台形象&#xff0c;提高管理效率。 本影院订票系…

11周年 | 初心不改,焕新前行,奔赴下一个10年!

2024年8月13日&#xff0c;爱加密正式迎来了11岁生日&#xff0c;在爱加密肩负着崇高使命踏浪而行的10年间&#xff0c;蓝绿色的品牌标识一直伴于左右。随着时代的变迁以及市场需求的不断变化&#xff0c;企业同样也需要在品牌上做出创新递进&#xff0c;从而更加适应市场竞争的…

AI知识库助力电商企业打造精准营销策略

在数字化时代&#xff0c;电商行业的竞争日益激烈&#xff0c;消费者需求的多样化和个性化趋势愈发明显。为了在这场没有硝烟的战争中脱颖而出&#xff0c;电商企业纷纷借助人工智能技术&#xff0c;特别是AI知识库&#xff0c;来打造更加精准、高效的营销策略。本文将深入探讨…

【运维自动化-作业平台】如何使用全局变量之命名空间类型?

命名空间类型的全局变量主要适用场景是同一批主机在多个步骤间需要传递独立的变量值&#xff0c;比如内网ip、hostame&#xff0c;每台主机都是不同的变量值。而字符串变量是全局针对所有主机所有步骤都是一样的变量值。实操演示 例&#xff1a;定义一个local_ip的命名空间变量…

单利复利计算器使用方法

单利复利计算器使用方法 背景 这个工具主要是小部分人用&#xff0c;因为以前要算个单利复利的时候&#xff0c;搜索出来的工具上来就要获取你的手机号&#xff0c;进去之后再收费。如果使用频繁的话&#xff0c;可以购买他们的更多服务&#xff0c;产品功能更多更完善。偶尔…

年轻用户对Facebook的使用趋势分析

在社交媒体的蓬勃发展中&#xff0c;Facebook作为全球最大的社交平台之一&#xff0c;尽管面临着来自新兴平台的竞争&#xff0c;仍然在年轻用户中扮演着重要角色。然而&#xff0c;年轻用户对Facebook的使用方式和趋势却在不断变化。本文将探讨年轻用户对Facebook的使用趋势&a…

性能测试工具——JMeter

目录 一、JMeter介绍 1、下载安装JMeter 2、打开JMeter 方式一&#xff1a; 方式二&#xff1a; 3、JMeter基础设置 4、JMeter基本使用流程 &#xff08;1&#xff09;启动JMeter &#xff08;2&#xff09;在测试计划下添加线程组 &#xff08;3&#xff09;在 “线…

防止企业数据泄露 | 信息数据电脑保护系统 | 天锐DLP数据安全

在当今这个高度信息化的时代&#xff0c;数据已跃升为企业运营不可或缺的核心战略资源&#xff0c;而面对企业内部终端上海量的数据信息&#xff0c;及时、准确地识别出重要的敏感数据是一项关键任务&#xff0c;它直接关系到企业的数据安全、合规性以及业务风险的控制。 【地址…

鸿蒙HarmonyOS NEXT系统揭秘:跨端迁移与多端协同

随着科技的飞速发展&#xff0c;万物互联的时代已经悄然来临。 在这个背景下&#xff0c;华为鸿蒙HarmonyOS NEXT系统的最新动向无疑成为了业界关注的焦点。 近日&#xff0c;关于鸿蒙操作系统将多设备协同功能细分为“跨端迁移”与“多端协同”的消息不胫而走&#xff0c;这…

基于单片机的太阳能热水器控制系统的研究-设计说明书

设计摘要&#xff1a; 本研究旨在设计和实现基于单片机的太阳能热水器控制系统。太阳能热水器是一种有效利用太阳能来加热水的设备&#xff0c;在节能和环保方面具有显著的优势。本研究通过使用单片机技术&#xff0c;将传统的太阳能热水器与智能控制相结合&#xff0c;提高了…

QT 中的信号与槽机制详解

目录 一、引言 二、信号与槽的基本概念 1.信号&#xff08;Signals&#xff09; 2.槽&#xff08;Slots&#xff09; 三、声明信号和槽 1.声明信号和槽 2.发射信号 3.连接信号和槽 四、高级特性 1.多信号连接到一个槽 2.一个信号连接到多个槽 3.断开信号和槽的连…

多融合的信息收集工具--Mitan

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

北京市朝阳区自闭症寄宿学校:为孩子提供优质照顾与学习环境

北京市朝阳区自闭症寄宿学校的愿景与广州星贝育园的卓越实践 在北京市朝阳区&#xff0c;乃至全国范围内&#xff0c;自闭症儿童的教育与照护一直是社会各界关注的焦点。家长们渴望为孩子找到一所能够提供优质照顾与学习环境的学校&#xff0c;让他们在爱与专业的滋养下茁壮成…

trl中的PPO代码解析(炒冷饭版)

不说其他的解释&#xff0c;上来就看代码。建议先对PPO的整体流程有了解。 trl的版本为0.4.0&#xff0c;注&#xff1a;【新版的trl中代码更复杂&#xff0c;如果只是想读懂PPO具体怎么用trl实现的&#xff0c;0.4.0版本即可】 step1: rollout ppo_trainer.generate()函数…

从入门到精通:QT 100个关键技术关键词

Qt基础概念 Qt Framework - 一个跨平台的C图形用户界面应用程序开发框架。它不仅提供了丰富的GUI组件&#xff0c;还包括网络、数据库访问、多媒体支持等功能。 Qt Creator - Qt官方提供的集成开发环境&#xff08;IDE&#xff09;&#xff0c;集成了代码编辑器、项目管理工具、…