【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式)

这篇具有很好参考价值的文章主要介绍了【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方教程非常长,我看了很认可,但是看完了之后呢就需要一些整理得当的笔记让我自己能更快地找到需求。所以有了这篇文章。【写给自己看的,里面半句废话的解释都没有,如果看不懂的话直接看官方教程再看我的】

我是不打算一开始就用OpenAI的,打算先用一下开源模型。之后我还会写一篇OpenAI的速通版。

前置准备

pip install langchain
curl -fsSL https://ollama.com/install.sh | sh # linux装llama2的指令
# 如果用的是Windows或者MacOS,前往这里下载:https://ollama.com/

用Prompt模板

from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

output_parser = StrOutputParser()

llm = Ollama(model="llama2")
prompt = ChatPromptTemplate.from_messages([
    ("system", "You are world class technical documentation writer."),
    ("user", "{input}")
])
chain = prompt | llm | output_parser

print(chain.invoke({"input": "how can langsmith help with testing?"}))

增加context:自定义文档内容

from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain

llm = Ollama(model="llama2")

prompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context:

<context>
{context}
</context>

Question: {input}""")

document_chain = create_stuff_documents_chain(llm, prompt)

from langchain_core.documents import Document
docs = [Document(page_content="langsmith can let you visualize test results")]

document_chain.invoke({
    "input": "how can langsmith help with testing?",
    "context": docs
})

增加context:从网页中获取文档内容

下面这个代码会读网页的内容到docs里,可以替代上一节的docs = Document(page_content="langsmith can let you visualize test results")部分。

from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://bbs.csdn.net/topics/618378840")

docs = loader.load()

增加context:从PDF中获取文档内容

from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("3399.pdf")

docs = loader.load()

注意,根据我的观察,LangChain的PDF loader 是基于 pypdf 的,而实际上pypdf 不是很好用,对表格之类的信息更是一塌糊涂,我更喜欢自己解析一下PDF文件。详情可以看这篇文章:【记录】Python|处理PDF的第三方库的对比大全(2024年)

用文档检索器 (RAG方法)

文档检索器的作用是根据一些加权,来判断所有的文档列表中哪一个文档是最适合当前的提问的。

下面的代码中增加了矢量检索器,详细的原理介绍见这里(具体原理我也没看,直觉上就是给文本加权重然后算一算这样)。根据官方说,它还可以加SQL 表、互联网等,我也没看懂。

from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain

llm = Ollama(model="llama2")

prompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context:

<context>
{context}
</context>

Question: {input}""")

document_chain = create_stuff_documents_chain(llm, prompt)

from langchain_core.documents import Document
docs = [Document(page_content="langsmith can let you visualize test results")]

from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)

from langchain_community.embeddings import OllamaEmbeddings
embeddings = OllamaEmbeddings()
from langchain_community.vectorstores import FAISS
vector = FAISS.from_documents(documents, embeddings)

from langchain_community.embeddings import OllamaEmbeddings
embeddings = OllamaEmbeddings()
from langchain_community.vectorstores import FAISS
vector = FAISS.from_documents(documents, embeddings)

from langchain.chains import create_retrieval_chain

retriever = vector.as_retriever()
retrieval_chain = create_retrieval_chain(retriever, document_chain)

response = retrieval_chain.invoke({"input": "how can langsmith help with testing?"})
print(response["answer"])

增加chat_history:利用MessagesPlaceholder

总之就是改了Prompt结构,再多引入了一个create_history_aware_retriever函数。

from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains.combine_documents import create_stuff_documents_chain

llm = Ollama(model="llama2")

from langchain_core.prompts import MessagesPlaceholder
prompt = ChatPromptTemplate.from_messages([
    ("system", """Answer the user's questions based on the below context:

<context>
{context}
</context>"""),
    MessagesPlaceholder(variable_name="chat_history"),
    ("user", "{input}"),
]) ## Add MessagesPlaceholder

document_chain = create_stuff_documents_chain(llm, prompt)

from langchain_core.documents import Document
docs = [Document(page_content="langsmith can let you visualize test results")]

from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter()
documents = text_splitter.split_documents(docs)

from langchain_community.embeddings import OllamaEmbeddings
embeddings = OllamaEmbeddings()
from langchain_community.vectorstores import FAISS
vector = FAISS.from_documents(documents, embeddings)

from langchain_community.embeddings import OllamaEmbeddings
embeddings = OllamaEmbeddings()
from langchain_community.vectorstores import FAISS
vector = FAISS.from_documents(documents, embeddings)

from langchain.chains import create_retrieval_chain

##-- Start changing --##
retriever = vector.as_retriever()

from langchain.chains import create_history_aware_retriever
retriever_chain = create_history_aware_retriever(llm, retriever, prompt)

from langchain.chains import create_retrieval_chain
retrieval_chain = create_retrieval_chain(retriever_chain, document_chain)

from langchain_core.messages import HumanMessage, AIMessage

chat_history = [HumanMessage(content="Can LangSmith help test my LLM applications?"), AIMessage(content="Yes!")]
response = retrieval_chain.invoke({
    "chat_history": chat_history,
    "input": "Tell me how",
    "context": "" # I don't know why the 'context' variable is needed here, but it is required by the 'prompt' variable.
})

print(response)

运行结果:
【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式),# 琐碎小记录,langchain,llama

切换LLM model

ollama中包含了许多开源大模型,llama2只是其中的只有3.8G的一个小模型llama2:7b罢了。
为了实现更好的效果,建议用更大的模型比如13b或者70b。

运行大模型只需要对应的内存满足要求就可以了,不需要像训练那样需要太多的GPU开销啥的,挺划算的也挺好部署的,你们也可以试试用比较大的开源模型而不是用初始的那个llama2:7b。

切换模型很简单,步骤如下:

  1. 打开https://ollama.com/library找到你想要的模型。
  2. 以llama2:13b为例。切换分支到13b,关注指令pull后接的名称(这里是llama2:13b)。【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式),# 琐碎小记录,langchain,llama
  3. 复制pull指令并粘贴到终端:ollama run llama2:13b
  4. 修改代码,把model=后面的llama2改成对应的名称即可,如下所示:
    from langchain_community.llms import Ollama
    llm = Ollama(model="llama2:13b")
    

后话

代理那一节,官方说本地模型的代理不可靠,而且这个也只是调用一些其他工具API,有需求的话自己看一下,我对这个没需求。

至于后面的 langserve 的介绍,对我挺有用的但是暂时不需要写这个部分的代码,所以我寻思着以后要用了再写下一篇博客吧,这篇博客差不多长度了。文章来源地址https://www.toymoban.com/news/detail-850951.html

到了这里,关于【记录】LangChain|Ollama结合LangChain使用的速通版(包含代码以及切换各种模型的方式)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LangChain Demo | 如何调用stackoverflow并结合ReAct回答代码相关问题

    楼主决定提升与LLM交互的质量,之前是直接prompt-answer的范式,现在我希望能用上ReAct策略和能够检索StackOverflow,让同一款LLM发挥出更大的作用。 1. 怎样调用StackOverflow step1 pip install stackspi step 2 注:stackoverflow是stackexchange的子网站  2. 交互次数太多token输入超出了llm限制 appro

    2024年04月09日
    浏览(39)
  • 【LangChain】结合代理和向量存储(Combine agents and vector stores)

    本笔记本介绍了如何组合代理和向量存储。其用例是,您已将数据提取到向量存储中,并希望以 代理 方式与其进行交互。 下文讲述的方法是创建 RetrievalQA ,然后将其用作整体代理中的工具。 #请注意,在上面的示例中,代理在查询 RetrievalQAChain 后做了一些额外的工作。您可

    2024年02月13日
    浏览(39)
  • 从LangChain+LLM的本地知识库问答到LLM与知识图谱、数据库的结合

    过去半年,随着ChatGPT的火爆,直接带火了整个LLM这个方向,然LLM毕竟更多是基于过去的经验数据预训练而来,没法获取最新的知识,以及各企业私有的知识 为了获取最新的知识,ChatGPT plus版集成了bing搜索的功能,有的模型则会调用一个定位于 “链接各种AI模型、工具”的

    2024年02月12日
    浏览(68)
  • Linux压缩和归档命令的速查表

    在Linux系统中,有多种命令可用于压缩和归档文件和目录。这些命令使我们能够将文件和目录打包成单个文件,并可以选择压缩以节省存储空间。本文将提供一个Linux压缩和归档命令的速查表,帮助您快速查找和了解各种常用命令及其用法。 Gzip gzip file :压缩指定的文件,并

    2024年02月07日
    浏览(48)
  • 给LLM装上知识:从LangChain+LLM的本地知识库问答到LLM与知识图谱的结合

    过去半年,随着ChatGPT的火爆,直接带火了整个LLM这个方向,然LLM毕竟更多是基于过去的经验数据预训练而来,没法获取最新的知识,以及各企业私有的知识 为了获取最新的知识,ChatGPT plus版集成了bing搜索的功能,有的模型则会调用一个定位于 “链接各种AI模型、工具”的

    2024年02月12日
    浏览(67)
  • Mac x86 Ollama使用入门

    Mac上可以本地运行大模型,作为Mac x86硬件,比较好的选择是Ollama,但有一些准备工作,需要明确一下,否则坑也会比较多。 1、下载地址: 官网 2、也可以通过安装Docker Desktop(下载: x86 Docker Desktop),再下载Docker官方的Ollama。 3、安装Ollama并运行命令:ollama run gemma 4、安装

    2024年04月26日
    浏览(38)
  • 开源模型应用落地-工具使用篇-Ollama(六)

    一、前言     在AI大模型百花齐放的时代,很多人都对新兴技术充满了热情,都想尝试一下。但是,实际上要入门AI技术的门槛非常高。除了需要高端设备,还需要面临复杂的部署和安装过程,这让很多人望而却步。不过,随着开源技术的不断进步,使得入门AI变得越来越容易

    2024年03月08日
    浏览(53)
  • Spring AI 使用本地 Ollama Embeddings

    使用 OpenAI 的 Embeddings 接口是有费用的,如果想对大量文档进行测试,使用本地部署的 Embeddings 就能省去大量的费用,所以我们尝试使用本地的 Ollama Embeddings。 首先本地安装 Ollama: https://ollama.com/download 即使你电脑没有性能很强的显卡,仅仅依靠 CPU 也能运行一些参数量较小的

    2024年04月27日
    浏览(44)
  • 如何在本地使用Ollama运行开源LLMs

    本文将指导您下载并使用Ollama,在您的本地设备上与开源大型语言模型(LLMs)进行交互的强大工具。 与像ChatGPT这样的闭源模型不同,Ollama提供透明度和定制性,使其成为开发人员和爱好者的宝贵资源。 我们将探索如何下载Ollama并与两个令人兴奋的开源LLM模型进行交互:Me

    2024年04月27日
    浏览(36)
  • 小白Windows下通过Ollama部署使用本地模型

    运行环境为 windows R9000P2021拯救者笔记本 AMD R7-5800H 32G 内存 NVIDIA RTX 3070 Laptop GPU Ollama下载exe,直接下一步下一步没有设置可以更改 windows默认安装路径: C:UserswbigoAppDataLocalProgramsOllama 安装后会自动将该路径加入环境变量 双击图标运行后状态栏会出现小图标,右键有退出、

    2024年03月13日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包