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

相关文章

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

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

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