langchain简版教程附案例

news2025/1/11 20:42:07

简介

LangChain是一个开源的应用开发框架。基于该开源框架,我们可以把大模型与各种工具结合从而实现各种功能,比如基本文档的问答,解析网页内容、查询表格数据等。目前支持Python和TypeScript两种编程语言。当前Python框架支持的模型和功能最全面。

Modules

按照官方wiki的描述,可以将Langchain的支持的功能划分为以下几个模块。

Models

该模块主要是集成了多个模型。主要分为三类:

Large Language Models (LLMs)

Large Language Models是指使用深度学习技术训练的大规模语言模型,例如GPT-3、BERT、XLNet等。这些模型具有超过数十亿个参数,可以通过学习大量的文本数据,自动学习自然语言的语法、语义和上下文等知识。这些模型可以用于各种自然语言处理任务,例如文本生成、文本分类、问答系统等。由于这些模型的规模和能力越来越大,它们在自然语言处理领域引起了广泛的关注和应用,同时也带来了一些挑战,例如模型的计算和存储成本、模型的可解释性等问题。这些模型可以作为最近特别火的问答模型的基座。

截至当前,langchain共提供了以下模型的接口。

Integrations — 🦜🔗 LangChain 0.0.176

Chat Models

即问答模型,如chatGPT3.5等,这些可以理解为大语言模型的一种应用。

截至当前,langchain共提供了以下问答模型的接口。

Integrations — 🦜🔗 LangChain 0.0.178

Text Embedding Models

该类模型的作用主要是将单词、短语或文本转换成连续向量空间。转换为向量空间后,我们即可对这些单词、短语或者文本在数学上进行比较和计算。这种比较和计算在自然语言处理和机器学习中经常被用于各种任务,例如文本分类、语义搜索、词语相似性计算等。

Text Embedding Models — 🦜🔗 LangChain 0.0.176

Pompts

第二个模块就是我们熟知的Prompt提示。

langchain本身提供了多种Prompt模板,比如ChatPromptTemplate模板,但是无论使用哪种模板,最终都是将拼接好的一段文字送入大语言模型。举个例子

template="You are a helpful assistant that translates {input_language} to {output_language}."
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template="{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)

部分源码如下

class SystemMessagePromptTemplate(BaseStringMessagePromptTemplate):
    def format(self, **kwargs: Any) -> BaseMessage:
        text = self.prompt.format(**kwargs)
        return SystemMessage(content=text, additional_kwargs=self.additional_kwargs)

其实际作用类似于Java中的String.format()

Memory

默认情况下,各类大模型都是无状态的,即没有上下文的概念。如果我们想在对话模型中实现上下文关联功能,就需要对聊天记录进行保存,然后每次请求时将之前的聊天内容传递给对话模型。langchain的Memory模块就是为了便于保存历史记录而设计的。langchain提供了多种保存方式,比如内存、向量数据库等。以下举了一个例子来说明Memory模块的方便性。

from langchain.llms import OpenAI
from langchain.chains import ConversationChain

llm = OpenAI(temperature=0)
conversation = ConversationChain(
    llm=llm, 
    verbose=True, 
    memory=ConversationBufferMemory()
)

conversation.predict(input="Hi there!")

如果要自己实现这部分的话,就需要考虑如何设计存储历史记录,会更麻烦些。

Indexes

索引是指文本文档的一种存储方式,正常的文本文件无法直接与语言模型进行交互,因此我们需要做一下转换。在langchain中,转换的功能就是由Indexes这个模块实现的。

Indexes模块又可继续细分,细分为Document Loaders(文件加载)、Text Splitters(文本切分)、VectorStores(向量存储)、Retrievers(检索)四部分

在向量存储部分,langchain支持 ElasticSearch、• Redis以及• Tair等我们较为熟悉的数据库(需要IP直连

当我们需要提取数据时,就可以使用langchain提供的Retrievers模块去进行数据提取。Retrievers模块支持多种与信息检索相关的算法,比如• TF-IDF、• ElasticSearch BM25等,也支持我们常见的额机器学习算法如• kNN、• SVM。

Chains

我们可以把一个任务理解为一个chain,langchain支持我们自定义拼装chain,组成一条任务链,也就是chains。

Agents

Agents我们可以理解为代理人,我们可以理解这个模块可以帮助我们将任务分解,即可以根据用户输入的不同产生不同的任务链(chains),以下是一个官方案例。

from langchain.chat_models import ChatOpenAI
from langchain.agents import load_tools, initialize_agent, AgentType

llm = ChatOpenAI(temperature=0.0)
tools = load_tools(
    ["arxiv"], 
)

agent_chain = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
)

agent_chain.run(
    "What's the paper 1605.08386 about?",
)

输出为:

> Entering new AgentExecutor chain...
I need to use Arxiv to search for the paper.
Action: Arxiv
Action Input: "1605.08386"
Observation: Published: 2016-05-26
Title: Heat-bath random walks with Markov bases
Authors: Caprice Stanley, Tobias Windisch
Summary: Graphs on lattice points are studied whose edges come from a finite set of
allowed moves of arbitrary length. We show that the diameter of these graphs on
fibers of a fixed integer matrix can be bounded from above by a constant. We
then study the mixing behaviour of heat-bath random walks on these graphs. We
also state explicit conditions on the set of moves so that the heat-bath random
walk, a generalization of the Glauber dynamics, is an expander in fixed
dimension.
Thought:The paper is about heat-bath random walks with Markov bases on graphs of lattice points.
Final Answer: The paper 1605.08386 is about heat-bath random walks with Markov bases on graphs of lattice points.

> Finished chain.

快速上手

安装Python环境

  1. 安装Anaconda https://www.anaconda.com/download
  2. 安装jupyter notebook https://zhuanlan.zhihu.com/p/33105153
  3. 安装langchain pip install langchain.如果pip安装比较慢,可以参考https://www.runoob.com/w3cnote/pip-cn-mirror.html使用国内的镜像源,推荐清华源。

具体案例-实现一个基于本地文本的问答机器人

该案例是在Jupyter Notebook上开发完成的。

安装相关依赖

pip install openai  # 安装openai依赖库,需调用openai的模型
pip install faiss-cpu
pip install tiktoken
import os
from langchain.document_loaders import PyPDFLoader #加载PDF文件需要的工具类
from langchain.vectorstores import FAISS  # 开源向量库
from langchain.embeddings.openai import OpenAIEmbeddings #分词模型
from langchain.prompts import PromptTemplate #langchain提供的prompt工具

os.environ["OPENAI_API_KEY"] = "**********"

# 提取文本文件并存入向量库
loader = PyPDFLoader("/home/ubuntu/langchain/美团简要介绍.pdf")
pages = loader.load_and_split()
faiss_index = FAISS.from_documents(pages, OpenAIEmbeddings())

template = """answer the question base on {history} and {content}"""
prompt_template = PromptTemplate.from_template(template)

def answer_with_content(question):
    docs = faiss_index.similarity_search(question,k=2)
    result = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": prompt_template.format(content=docs, history='')},
      {"role":"user", "content":question}
  ],
    temperature=0.2
    )
    print(result['choices'][0]['message']['content'])

测试输出

answer_with_content("美团什么时候收购的钱袋宝")
# 美团收购钱袋宝是在2016年9月份。

answer_with_content("今天的天气如何")
# 抱歉,我无法回答这个问题,因为我是一个语言模型,没有实时获取天气信息的能力。建议您查看天气预报或者问问当地的气象部门。

answer_with_content("OPENAI是什么公司")
# OpenAI是一家人工智能研究公司,成立于2015年,总部位于美国加利福尼亚州旧金山。该公司的目标是推动人工智能技术的发展,同时确保其对人类的利益和安全不会造成威胁。OpenAI的创始人包括伊隆·马斯克、萨姆·阿尔特曼、格雷戈里·科赫、伊莉莎白·霍姆斯和约翰·赫维兹。该公司的研究重点包括自然语言处理、计算机视觉、强化学习等领域。

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

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

相关文章

腾讯云服务器ping不通解决方法(公网IP/安全组/系统多维度)

腾讯云服务器ping不通什么原因?ping不通公网IP地址还是域名?新手站长从云服务器公网IP、安全组、Linux系统和Windows操作系统多方面来详细说明腾讯云服务器ping不通的解决方法: 目录 腾讯云服务器ping不通原因分析及解决方法 安全组ICMP协…

智能计价器-第14届蓝桥杯省赛Scratch中级组真题第5题

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第140讲。 智能计价器,本题是2023年5月7日举行的第14届蓝桥杯省赛Scratch图形化编程中级组真题第5题&#…

楼宇租赁管理系统-什么是楼宇租赁系统

楼宇租赁管理系统是一种综合管理平台,它为不同规模楼宇的租赁管理提供了全面的解决方案。楼宇租赁管理系统的主要功能包括租赁管理、财务管理、维修管理、报告管理以及客户服务管理等。让我们逐一介绍每一个功能点。 一、租赁管理 楼宇租赁管理系统通过集成租户信息…

路径规划算法:基于群居蜘蛛优化的路径规划算法- 附代码

路径规划算法:基于群居蜘蛛优化的路径规划算法- 附代码 文章目录 路径规划算法:基于群居蜘蛛优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

博学谷学习记录】超强总结,用心分享 | 架构师 MySQL调优MVCC学习总结

文章目录 1 概述2 快照读与当前读当前读快照读隔离级别:undo log版本链: 3 Read View3.1 什么是Read View?3.2 实现原理3.3 Read View规则(可见性算法) 4 MVCC整体流程4.1 可重复读是如何工作的?4.2 读提交是如何工作…

ChatGPT国内镜像,以及如何使用ChatGPT帮你制作PPT

一:前言 ChatGPT:智能AI助你畅聊天地 在现代人日益忙碌的生活中,难免需要一些轻松愉快的聊天来放松身心。而现在,有了 ChatGPT,轻松愉快的聊天变得更加智能、有趣且不受时间、地点限制! 什么是 ChatGPT&…

Python中模块的使用方法4

1 模块、包和库的区别 Python中,模块的英文是“module”,是一个以py为后缀名的文件;包的英文是“package”,是一个包含了多个模块的目录;库的英文是“library”,包含了具有相关功能的包和模块。 2 模块的…

ChatGPT 在自动化测试领域的应用,我们真的要被代替了吗?

目录 前言 一、ChatGPT 简介 二、ChatGPT 的应用场景 三、ChatGPT 的优势 四、ChatGPT 的局限性 五、ChatGPT 在自动化测试领域的拓展应用 六、ChatGPT真的可以代替软件测试人员吗 七、结语 前言 人工智能技术在近年来得到了快速发展,不少领域都开始尝试融合…

入理解深度学习——正则化(Regularization):多任务学习

分类目录:《深入理解深度学习》总目录 多任务学习是通过合并几个任务中的样例(可以视为对参数施加的软约束)来提高泛化的一种方式。正如额外的训练样本能够将模型参数推向具有更好泛化能力的值一样,当模型的一部分被多个额外的任务…

redis主从复制策略的原理:主从节点间如何同步数据?

redis的主从复制原理经历了多个版本的更新。 redis2.8之前的SYNC方案 命令: SYNChttps://www.yuque.com/snailclimb/mf2z3k/ks9olb19hc9wse5k#5935f46a 存在的问题: slave加载RDB的过程中不能对外提供读服务slave和master断开连接后,sla…

HCIA-VLAN间通信之路由器

目录 路由信息获取方式: 最佳路由条目选择(根据路由的优先级和开销选择): VLAN间通信 方案1,使用路由器的物理接口来实现不同vlan间的通信 方案2:使用路由器的子接口来实现 路由:指导报文转…

【Vue】二:Vue核心处理---计算属性 监视属性

文章目录 1.计算属性示例2. 监听属性3.补充 1.计算属性示例 实际上计算属性与methods中定义方法基本上没有什么区别,只是计算属性基于响应式依赖缓存,只要数据没有发生改变,计算属性从缓存中取值,只有当数据发送改变,才…

Linux 用户与组群管理

1 用户账户与群组概念 Linux操作系统是多用户多任务的操作系统,允许多个用户同时登录到系统,使 用系统资源。用户账户是用户的身份标识。用户通过用户账户可以登录到系统, 并且访问已经被授权的资源。系统依据账户来区分属于每个用户的文件…

Flutter 笔记 | Flutter 动画

Flutter中的动画抽象 为了方便开发者创建动画,不同的UI系统对动画都进行了一些抽象, Flutter中也对动画进行了抽象,主要涉及 Animation、Curve、Controller、Tween这四个角色,它们一起配合来完成一个完整动画,下面我们…

整数在内存中原来是这样存储的,看完表示头好痒,感觉要长脑子了!

本篇文章来介绍一下整形在内存中的存储,内容丰富,干货慢慢。 目录 1.整形家族 2.整形在内存中的存储 3.大端小端存储 4.练习 1.整形家族 在开始之前,我们先来简单回顾一下整形家族: char unsigned char signed char short u…

chatgpt赋能python:Python补0——让你的数字更规整

Python 补0——让你的数字更规整 在编写代码的过程中,我们经常需要将数字格式化,以便更好地呈现给用户。例如,一个价格可能需要显示为“$100.00”而不是“$100”或“$100.0”。这时候,我们就需要使用 Python 的补0功能。本文将为…

【015】C++的函数详解

C的函数详解 引言一、函数介绍1.1、函数的概述1.2、函数的分类 二、函数定义、声明、调用等2.1、定义函数2.2、函数声明2.3、调用函数2.4、默认参数2.5、函数重载2.6、函数的调用过程 三、函数的传参3.1、普通变量作为函数的参数3.2、数组作为函数的参数 总结 引言 &#x1f4a…

浅浅入门SpringCloud

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有…

如何在Linux机器中测试存储/磁盘I/O性能?

在Linux环境中,了解存储/磁盘I/O性能对于评估系统性能和优化存储子系统非常重要。通过测试存储/磁盘I/O性能,我们可以确定磁盘的读写速度、延迟和吞吐量等指标。本文将介绍几种常用的方法来测试Linux机器中的存储/磁盘I/O性能。 方法一:使用d…

测试开发工程师必问面试题

1.对测试开发的理解 测试开发首先离不开测试,而软件测试是指,在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 而且,现在不仅仅是通过手工测试来发…