您的位置:首页 > 财经 > 产业 > langchain入门系列之一 初识langchain

langchain入门系列之一 初识langchain

2024/10/6 12:33:07 来源:https://blog.csdn.net/qq_40244755/article/details/141506945  浏览:    关键词: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官方文档链接

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com