首页 > 其他分享 >langchain + ollama 实现本地文档搜索

langchain + ollama 实现本地文档搜索

时间:2024-04-23 15:35:05浏览次数:14  
标签:stdout self langchain sys 文档 query import ollama

from langchain.document_loaders import OnlinePDFLoader
from langchain.vectorstores import Chroma
from langchain.embeddings import GPT4AllEmbeddings
from langchain import PromptTemplate
from langchain.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain.chains import RetrievalQA
import sys
import os

class SuppressStdout:
    def __enter__(self):
        self._original_stdout = sys.stdout
        self._original_stderr = sys.stderr
        sys.stdout = open(os.devnull, 'w')
        sys.stderr = open(os.devnull, 'w')

    def __exit__(self, exc_type, exc_val, exc_tb):
        sys.stdout.close()
        sys.stdout = self._original_stdout
        sys.stderr = self._original_stderr

# load the pdf and split it into chunks
loader = OnlinePDFLoader("https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf")
data = loader.load()

from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)

with SuppressStdout():
    vectorstore = Chroma.from_documents(documents=all_splits, embedding=GPT4AllEmbeddings())

while True:
    query = input("\nQuery: ")
    if query == "exit":
        break
    if query.strip() == "":
        continue

    # Prompt
    template = """Use the following pieces of context to answer the question at the end.
    If you don't know the answer, just say that you don't know, don't try to make up an answer.
    Use three sentences maximum and keep the answer as concise as possible.
    {context}
    Question: {question}
    Helpful Answer:"""
    QA_CHAIN_PROMPT = PromptTemplate(
        input_variables=["context", "question"],
        template=template,
    )

    llm = Ollama(model="llama3", callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]))
    qa_chain = RetrievalQA.from_chain_type(
        llm,
        retriever=vectorstore.as_retriever(),
        chain_type_kwargs={"prompt": QA_CHAIN_PROMPT},
    )

    result = qa_chain({"query": query})

标签:stdout,self,langchain,sys,文档,query,import,ollama
From: https://www.cnblogs.com/qcy-blog/p/18152969

相关文章

  • Ollama
    Ollama简介一个简明易用的本地大模型运行框架,Ollama官网:https://ollama.com/ollama命令ollama有类似docker的命令。下面是一些模型(largelanguagemodels)的操作命令:ollamalist:显示模型列表ollamashow:显示模型的信息ollamapull:拉取模型ollamapush:推送模型ollama......
  • 推荐一款好用的文档工具:docsify
    docsify是什么docsify可以快速帮你生成文档网站。不同于GitBook、Hexo的地方是它不会生成静态的.html文件,所有转换工作都是在运行时。如果你想要开始使用它,只需要创建一个index.html就可以开始编写文档并直接部署在GitHubPages。编写一些团队内部研发规范、api接口文档......
  • 自动生成数据库设计文档,支持多数据源批量生成(Word文档)
       在做项目时通常使用PowerDesigner设计数据库,但在项目完成交付项目给客户的时候常常需要一份Word版本的数据库文档给客户,你不能指望每个客户都会用PowerDesigner,所以基于当前开发数据库生成数据库文档就是最佳选择,如果手动编写数据库文档那将是一件非常痛苦的费力不讨好的......
  • windows右键菜单新建markdown文档
    typora的官网上有相应的教程[1],就是更改windows的注册表,这样可以直接右键新建markdown文件,就不用朴素地新建txt文件然后再改后缀了,typora给出的注册表是:WindowsRegistryEditorVersion5.00[HKEY_CLASSES_ROOT\.md]@="markdown"[HKEY_CLASSES_ROOT\.md\ShellNew]"NullFil......
  • sh004基于springboot的MES生产制造执行系统【带LW文档】
    介绍基于springboot的MES生产制造执行系统管理员功能主要包括:生成计划管理、产品信息管理、销售订单管理、客户信息管理、物料信息管理、工业线路管理工序信息管理、员工管理、部门管理、个人中心等功能。员工功能结构图。其中员工查看工序信息,查看工艺线路,查看物料信息,查看产......
  • sh005基于springboot的景区订票系统【带LW文档】
    介绍基于springboot的景区订票系统管理员功能主要包括:个人中心、景点类型管理、公告类型管理、景点信息管理、公告信息管理、论坛管理、用户信息管理、轮播图管理、景点留言管理、景点收藏管理、景点预定管理等功能。由于本系统的功能模块设计比较全面,所以使得整个基于springbo......
  • 使用ollama + AnythingLLM快速且简单的在本地部署llm3
    使用ollama+AnythingLLM快速且简单的在本地部署llm3不多说,直接开始一、安装ollamaollama官网:https://ollama.com/下载地址:https://ollama.com/download打开以后注册并下载即可安装没有什么好说的,找到自己的系统安装即可,因为我的电脑没有搞虚拟机,所以就直接安装Windows的......
  • sh001基于springboot+vue的线上医院挂号系统[带LW文档]
    介绍线上医院挂号系统管理员功能主要包括:个人信息管理、用户管理、论坛管理、医生管理、医生留言管理、单页数据管理、个人中心基础数据管理、医生挂号订单管理、轮播图设置等功能由于本系统的功能模块设计比较全面,所以使得整个线上医院挂号系统信息管理的过程得以实现。获取......
  • 前端页面渲染(文档+数据)不同模式
    一张可被用户访问的页面,可以被拆分为主文档(html)和数据两个部分,这两个部分既可以是组合在一起的(SSR),也可以是分离的(SPA、异步渲染)。比如一些活动搭建平台,可以增加一个数据网关,实现SSR,提升用户体验。服务端渲染(Server-SideRendering,SSR)服务端渲染是一种在服务器上生成完整......
  • 使用ollama分别在我的window、mac、小米手机上部署体验llama3-8b
    1、ollama到底是个什么玩意一句话来说,Ollama是一个基于Go语言开发的简单易用的本地大模型运行框架。可以将其类比为docker(有类似docker中的一些常规命令list,pull,push,run等等),事实上确实也制定了类似docker的一种模型应用标准,在后边的内容中,你能更加真切体会到这一点。......