langchain简版教程附案例

简介

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 ConversationChainllm = 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, AgentTypellm = 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.rhkb.cn/news/30132.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10年首次登顶!CVPR 2023大奖揭晓:上海AI实验室/武大/商汤破纪录夺魁,西工大斩获最佳学生论文...

新智元报道 编辑:编辑部 【新智元导读】CVPR 2023大奖终于来了!上海AI实验室、武大、商汤科技联合提出的自动驾驶通用大模型斩获本届最佳论文,西北工业大学团队夺得最佳学生论文。中国原创AI实力闪耀国际顶会,华人科研团队大放异…

微软又向OpenAI狂砸100亿美元!巨头AI大棋下4年,谁是最大赢家?

视学算法报道 编辑:编辑部 【导读】AI领域群雄激战,到了2023年,微软逐渐显出了「赢家」的势头。 2023年刚开始,微软就显示出了AI领域「大赢家」的派头。 最近,大火的ChatGPT和微软之间,不断擦出火花。 微…

关于QTcreator总是卡死无响应解决办法

网上找了很多原因,但是最终定位到的是显卡不兼容,只需要以下设置一下就行。 方法1: 删除~\AppData\Roaming\QtProject文件夹,然后再打开Qt Creator即可。 Linux下,~是/home/YourUserName Windows下,~是C:\…

本地PostMan双击无响应解决方法

本地PostMan双击无响应解决方法 解决步骤 解决步骤 本地安装postman后,一直使用正常,现突然双击无响应,网上查了一些解决方法,可能是我本地自动更新导致此问题,以下是我解决的过程。猜想可能是高版本不稳定&#xff0…

程序员是最好的结婚对象选择?

更多内容关注公众号:matinal 大部分程序员都比较辛苦,比如你晚上加班到快通宵了,困得快睁不开眼了,女上司很关心,问你要不要吃宵夜。结果你没好气地说:宵夜就算了,能让我睡一觉就行了。女上司红…

女程序员被瞧不起?92年程序媛发帖晒薪资,网友:老妹你可以了

当下,是一个“向钱看,向厚赚”的社会。快节奏的生活下,家庭、工作各方面压力很容易使年轻人陷入迷茫和焦虑。 与其他行业相比,程序员的高薪让人羡慕。但是是女程序员大多数会被瞧不起,觉得没有那种头脑,我…

两个程序员在一起谈恋爱......?

在一起的第一天: 女程序员:亲爱的,加需求了,要不今晚视频聊天下次吧 男程序员:好的,好的我也是 在一起的第二天: 女程序员:宝贝,今天加班改BUG,可能不能陪你…

TUSHARE绘制股票分时图

1.注册网站https://tushare.pro/,获取积分 2. 点右上角的登陆,点击个人头像,复制token 3.调取模块,并加载你的token import tushare as ts pro ts.pro_api(你的token) 4.调取分钟数据 df ts.pro_bar(…

Twitter 能否预测股市?

http://www.guokr.com/article/62535/ Lithium锂 2011-09-06 20:30 今年5月,世界首家基于社交媒体的对冲基金 Derwent Capital Markets 在屡次跳票后终于上线。它会即时关注 Twitter 中的公众情绪指导投资。正如基金创始人保罗•郝汀(Paul Hawtin&#…

chatgpt给的代码时有bug的

今天时2023-4-19,我想获取上个季度的起始日期,就再chatgpt上问了下 from datetime import date, timedeltadef get_last_quarter_dates():today date.today()month (today.month - 1) % 3last_quarter_end date(today.year, month 1, 1) - timedelta…

解决 error: failed to push some refs to ‘https://github.com/mxp520/test-spring-cloud-base.git‘

在使用git对源代码进行push的到github时,可能会出现错误,如下图所示 出现错误的主要原因是github中的README.md文件不在本地代码目录中 可以通过如下命令进行代码合并【注:pullfetchmerge] 执行上面代码后可以看到本地代码库中多了README.md文…

如何搭建一个自己的 cli 脚手架

搭建脚手架的目的:快速搭建项目的基本结构并提供项目规范和约定。 搭建 cli 脚手架 1.npm init -y // 快速初始化一个项目 2.新建命令行的入口文件 /bin/cli.js #! /usr/bin/env node //用于解释程序的脚本console.log(Hello World!) //为了测试是否正常3…

GPT系列:GPT1 -> 2 -> 3 -> InstructGPT ->ChatGPT

2018年6月 GPT-1:【无监督预训练有监督微调】 大量数据(约5GB文本)上无监督训练,然后针对具体任务在小的有监督数据集上做微调; 关键词:“scalable, task-agnostic system”;8个GPU上训练一个月…

【通览一百个大模型】Anthropic LLM(Anthropic)

【通览一百个大模型】Anthropic LLM(Anthropic) 作者:王嘉宁,本文章内容为原创,仓库链接:https://github.com/wjn1996/LLMs-NLP-Algo 订阅专栏【大模型&NLP&算法】可获得博主多年积累的全部NLP、大…

chatgpt写小代码的能力很可以

最近做财务报销单时遇到了一点小问题:有11项比较零散的报销单,费用分别是 180 ,160 ,235,260,320,520,375 ,155,255,1050,135元&#…

TTS算法笔记:MusicLM- Generating Music From Text(AI生成音乐)

1. 介绍 摘要: 介绍了一个以文本作为条件,生成高保真、长时间片的音乐音频。比如文本为“由扭曲的吉他重复段伴奏的平静的小提琴旋律”,MusicLM可以可以根据文本条件,生成24kHz采样率,分钟级别的连续音乐音频。 从摘…

神经网络训练中的Tricks之高效BP(反向传播算法)

神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09qq.com http://blog.csdn.net/zouxy09 Tricks!这是一个让人听了充满神秘和好奇的词。对于我们这些所谓的尝试应用机器学习技术解决某些问题的人,更是如此。曾记得&#xf…

Chainlink 预言机的原理解析

本文来自于 8 月19 日 Chainlink 开发者社区中国负责人 Frank ,在 DApp Learning 分享会上对于 Chainlink 预言机的原理的讲解,以下是这节分享会的总结内容。有兴趣的小伙伴可以结合视频一起学习: 为什么区块链无法主动获取外界数据 区块链…

预言机(Oracle)

文章目录 一、概述1.1、为什么需要1.2、应用场景1.3、现有的预言机产品1.4、基本原理 二、蚂蚁区块链 BaaS 平台–外部数据源服务三、主流预言机:Oraclize3.1 使用举例3.2 数据源3.3 收费3.4 真实性:3.5 解析助手3.6 加密查询3.7 原理 四、参考 一、概述…

第147篇 笔记-预言机(Oracle)

定义:区块链预言机是将区块链连接到外部系统的实体,从而使智能合约能够基于现实世界的输入和输出执行。 预言机为分散的 Web3 生态系统提供了一种访问现有数据源、遗留系统和高级计算的方式。去中心化预言机网络(DON)支持创建混合…