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 WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到进阶讲解Python自动化Playwright实战指南

《从入门到进阶讲解Python自动化Playwright实战指南》Playwright是针对Python语言的纯自动化工具,它可以通过单个API自动执行Chromium,Firefox和WebKit... 目录Playwright 简介核心优势安装步骤观点与案例结合Playwright 核心功能从零开始学习

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析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