langchain入门系列之一 初识langchain

2024-08-25 06:52
文章标签 初识 入门 系列 langchain

本文主要是介绍langchain入门系列之一 初识langchain,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LangChain 是一个用于开发由语言模型驱动的应用程序的框架。它使得应用程序能够:

  • 具有上下文感知能力:将语言模型连接到上下文来源(提示指令,少量的示例,需要回应的内容等)

  • 具有推理能力:依赖语言模型进行推理(根据提供的上下文如何回答,采取什么行动等)

    在我们以往使用大模型的时候,往往是比较单一的,一般都是直白的你问我答的形式,Langchain的出现是在你问大模型答的时候做若干处铺垫,使得大模型回答的更好。把使用大模型比喻成和老虎搏斗,以前的你赤手空拳跟老虎搏斗,Langchain的作用就是现在和老虎搏斗,你可以选择趁手合适的道具,看我一个滑铲(bushi)。

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

  • LangChain 库:Python 和 JavaScript 库。包含了各种组件的接口和集成,一个基本的运行时,用于将这些组件组合成链和代理,以及现成的链和代理的实现。
  • langchain-core: 基础抽象和 LangChain 表达式。
  • langchain-community: 第三方集成
    • 像本教程所用的百度千帆大模型就是例子
  • Langchain模板:一系列易于部署的参考架构,用于各种任务。
  • LangServe:一个用于将 LangChain 链部署为 REST API 的库。
  • LangSmith:一个开发者平台,让你可以调试、测试、评估和监控基于任何 LLM 框架构建的链,并且与 LangChain 无缝集成。
  • 下面是langchain结构图:
    在这里插入图片描述
    上面说了这么多,听起来是云里雾里,聪明的你只需谨记一点:框架的作用在于有丰富的工具去处理一件事,使得这件事可以规范化、流程化、多样化。

开启新世界大门的第一步,安装所需环境:

安装环境

pip install langchain
pip install qianfan
pip install langchain_community

本教程所用大模型,因为要照顾不能科学冲浪的伙伴,所用大模型均是百度千帆大模型,我们只需了解大模型在langchain扮演的角色即可,实际应用的时候,自己可选择合适的模型!!!

聪明的你应该,注册一个百度千帆开发者账号,然后在左侧应用栏开通应用,然后创建应用,再然后开通付费。

我假设聪明的你已经完成了上面一系列流程,下面进入正题:

初探Langchain
import os
from langchain_community.llms import QianfanLLMEndpoint# 设置API
os.environ["QIANFAN_AK"] = ""
os.environ["QIANFAN_SK"] = ""# 实例化
llm = QianfanLLMEndpoint()
res = llm("刻舟求剑的故事说明了什么")
print(res)
---------------------------------------------------------------
“刻舟求剑”是一则典型的寓言故事,其含义在于表明一些人在对待事情的态度和行为方式上的刻板、僵硬、墨守成规。它表达了一些重要观点和人生道理,包括以下几点:1. 世界在不断变化,应该适应现实世界,而不能仅靠刻板成见来处理问题。
2. 事物的变化和发展是客观存在的,不能以静止的眼光看待问题。
3. 人的思维方式和行为方式应该具有灵活性,不能一成不变。

通过上面寥寥几行代码,聪明的你就完成了第一次Langchain的使用,是不是很简单,当我们要去做一件复杂的事情的时候,我们应该先从简单的事情着手!
由上面代码可以知道,我们是通过langchain-community调的第三方的大模型完成的langchain构建,而前面设置是百度千帆的密钥,具体可见其网站的开发文档。
Langchain 百度千帆文档链接

langchain基本结构

LangChain应用程序的核心构建模块是LLMChain。它结合了三个方面:
LLM : 语言模型是核心推理引擎。要使用LangChain,您需要了解不同类型的语言模型以及如何使用它们。
Prompt Templates : 提示词。这控制了语言模型的输出,因此了解如何构建提示和不同的提示策略至关重要。
Output Parsers : 将LLM的原始响应转换为更易处理的格式,使得在下游使用输出变得容易。
LLM
LangChain中有两种类型的语言模型,称为:
LLMs: 这是一个以字符串作为输入并返回字符串的语言模型
ChatModels: 这是一个以消息列表作为输入并返回消息的语言模型
LLMs的输入/输出简单易懂 - 字符串。但是ChatModels呢?那里的输入是一个ChatMessage列表,输出是一个单独的ChatMessage。 一个ChatMessage具有两个必需的组件:
content : 这是消息的内容。
role: 这是ChatMessage来自的实体的角色。
LangChain提供了几个对象,用于方便地区分不同的角色:
HumanMessage : 来自人类/用户的ChatMessage。
AIMessage : 来自AI/助手的ChatMessage。
SystemMessage : 来自系统的ChatMessage。
FunctionMessage : 来自函数调用的ChatMessage。
下面是一个 HumanMessage simple:

import os
from langchain_community.chat_models import QianfanChatEndpoint
from langchain_core.messages import HumanMessage# 设置API
os.environ["QIANFAN_AK"] = ""
os.environ["QIANFAN_SK"] = ""chat = QianfanChatEndpoint(model="ERNIE-Bot-turbo")
messags = [HumanMessage(content="刻舟求剑求的真的是🗡吗")
]res = chat(messags)
print(res)-----------------------------------content='**刻舟求剑求的并不是剑,而是剑掉进水里时,船工在船上刻下记号,希望通过寻找刻下的记号找到剑**。这里的“求”是寻找的意思。' 
additional_kwargs={'finish_reason': '', 'request_id': 'as-1rmgewhain', 'object': 'chat.completion', 'search_info': []} 
response_metadata={'token_usage': {'prompt_tokens': 12, 'completion_tokens': 46, 'total_tokens': 58}, 'model_name': 'ERNIE-Bot-turbo', 'finish_reason': 'stop', 'id': 'as-1rmgewhain', 'object': 'chat.completion', 'created': 1724056784, 'result': '**刻舟求剑求的并不是剑,而是剑掉进水里时,船工在船上刻下记号,希望通过寻找刻下的记号找到剑**。这里的“求”是寻找的意思。', 'is_truncated': False, 'need_clear_history': False, 'usage': {'prompt_tokens': 12, 'completion_tokens': 46, 'total_tokens': 58}} id='run-61243e44-03f4-4529-a1e4-607b0457a93c-0' usage_metadata={'input_tokens': 12, 'output_tokens': 46, 'total_tokens': 58}

Prompt Templates

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
import os
from langchain_community.llms import QianfanLLMEndpoint# 设置API
os.environ["QIANFAN_AK"] = ""
os.environ["QIANFAN_SK"] = ""# 实例化
llm = QianfanLLMEndpoint()prompt = PromptTemplate.from_template("给我起一个很土但很好养活的{对象}小名")
chain = LLMChain(llm=llm,prompt=prompt)
chain.run("小狗")

Output Parsers
OutputParsers将LLM的原始输出转换为可以在下游使用的格式。输出解析器有几种主要类型,包括:

将LLM的文本转换为结构化信息(例如JSON)
将ChatMessage转换为字符串

这个没有示例,读者可自行查看文档。

以上我们完成了第一步,千里之行始于足下,后面我们将继续这一段旅程。感兴趣的可以关注博主。

Langchain官方文档链接

这篇关于langchain入门系列之一 初识langchain的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104856

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

Linux操作系统 初识

在认识操作系统之前,我们首先来了解一下计算机的发展: 计算机的发展 世界上第一台计算机名叫埃尼阿克,诞生在1945年2月14日,用于军事用途。 后来因为计算机的优势和潜力巨大,计算机开始飞速发展,并产生了一个当时一直有效的定律:摩尔定律--当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。 那么相应的,计算机就会变得越来越快,越来越小型化。