使用大语言模型集成工具 LangChain 创建自己的论文汇总和查询工具

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: Langchain可以帮助开发人员构建由大型语言模型(llm)支持的应用程序。它提供一个框架将LLM与其他数据源(如互联网或个人文件)连接起来。这允许开发人员将多个命令链接在一起,以创建更复杂的应用程序。包括最近比较火爆的AutoGPT等都是使用了Langchain框架进行开发的。所以本文将介绍如何使用LangChain来创建我们自己的论文汇总工具。

LangChain的基本使用方法

我们先了解LangChain的基本使用情况,所以这里使用HuggingFace为例,介绍LangChain最基本的用法。

1、整合transformer

 from langchain import PromptTemplate, HuggingFaceHub, LLMChain
 from langchain.embeddings import HuggingFaceEmbeddings
 from langchain.indexes import VectorstoreIndexCreator
 from langchain.callbacks.base import CallbackManager
 from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
 from langchain.chains.qa_with_sources import load_qa_with_sources_chain
 from langchain.document_loaders import DirectoryLoader
 from langchain.text_splitter import RecursiveCharacterTextSplitter
 from langchain.vectorstores import FAISS
 from huggface_hub import hf_hub_download
 import textwrap
 import glob

这里需要HuggingFace的API key,如果你没有也不要紧,因为后面我们会使用OPEN AI的API,这里只是介绍基本功能

 HUGGING_FACE_API_KEY = "hf_...."

然后就可以为我们的问答模型创建一个提示的模板。这是传递给问答模型的默认模板,其中包含一个包含问题的变量。例如:

 template = """ You are going to be my assistant.
 Please try to give me the most beneficial answers to my
 question with reasoning for why they are correct.

  Question: {input} Answer: """
 prompt = PromptTemplate(template=template, input_variables=["input"])

从Huggingface加载模型。我们以facebook/mbart-large-50为例

 model = HuggingFaceHub(repo_id="facebook/mbart-large-50",
                        model_kwargs={"temperature": 0, "max_length":200},
                        huggingfacehub_api_token=HUGGING_FACE_API_KEY)
 chain = LLMChain(prompt=prompt, llm=model)

temperature表示输出的随机性程度。max_length则为我们令牌的最大长度

现在就可以载入模型:

 hf_embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2')

2、创建langchain索引

Langhchain支持多种数据加载器和多种数据格式,需要通过它的数据加载器将我们的数据集加载并且放入索引中:

 my_loader = DirectoryLoader('my_data', glob='**/*.txt')
 docs = my_loader.load()
 text_split = RecursiveCharacterTextSplitter(chunk_size = 700, chunk_overlap = 0)
 text = text_split.split_documents(docs)

Langchain支持很多类型的矢量存储,每个向量中的值表示相应文档中每个术语的重要性或频率。这种表示允许通过测量向量之间的余弦相似度来轻松计算文档相似度。

向量存储通常用于信息检索系统和自然语言处理任务,如文档分类、搜索引擎和推荐系统。它们还可以用于主题建模和集群等任务。

这个示例将使用FAISS (Facebook AI相似度搜索),这是一个用于高效相似度搜索和密集向量聚类的开源库。它用于构建大规模的向量数据库,可以通过查询来检索与给定查询向量最相似的向量。

在FAISS矢量数据库中,每个矢量都表示为高维空间中的一个点。可以使用不同的索引方法对向量进行快速最近邻搜索,例如IVF、HNSW和PQ。FAISS还支持用于计算相似度的各种距离度量,例如L2、内积和余弦相似度。

 vectorstore = FAISS.from_documents(text, hf_embeddings)

3、提问

然后我们就可以创建最有趣的部分,问答(QA) LLM链。因为我们希望能够检查答案的来源,所以可以使用“load_qa_with_sources_chain”:

 my_chain = load_qa_with_sources_chain(model, chain_type="refine")
 query = "Any question that you want to ask the model"
 documents = vectorstore.similarity_search(query)
 result = with_sources_chain({"input_documents": documents, "question": query})

这样在result变量中就能获得我们问题的答案了。

以上就是LangChain的基本使用方法,下面我们来将他与OpenAI金正整合,创建一个我们自己的项目。

论文汇总和查询

langchain里面包含了很多实用的工具,比如pdf文件的读取,openai API的对接,所以我们可以直接拿来使用:

 from langchain.chains.summarize import load_summarize_chain
 from langchain.document_loaders import PyPDFLoader
 from langchain import OpenAI, PromptTemplate
 import glob

然后就可以通过OpenAI对象来与openai的API进行对接:

 llm = OpenAI(temperature=0.2)

PyPDFLoader对象已经为我们封装好了PDF的操作,所以可以直接使用,这里我们遍历目录,读取目录中的所有文件进行操作:

 def summarize_pdfs_from_folder(pdfs_folder):
     summaries = []
     for pdf_file in glob.glob(pdfs_folder + "/*.pdf"):
         loader = PyPDFLoader(pdf_file)
         docs = loader.load_and_split()
         chain = load_summarize_chain(llm, chain_type="map_reduce")
         summary = chain.run(docs)
         print("Summary for: ", pdf_file)
         print(summary)
         print("\n")
         summaries.append(summary)

     return summaries

将摘要保存为文本文件:

 with open("summaries.txt", "w") as f:
     for summary in summaries:
         f.write(summary + "\n"*3)

然后使用VectorStoreIndexCreator来对摘要进行索引:

 from langchain.indexes import VectorstoreIndexCreator
 from langchain.document_loaders import PyPDFDirectoryLoader
 loader = PyPDFDirectoryLoader("./pdfs/")

 docs = loader.load()
 index = VectorstoreIndexCreator().from_loaders([loader])

索引创建完成后就可以查询了:

 query = "What is the core idea behind the CoOP (context optimization) paper?"
 index.query(query)

 # Output
 # " The core idea behind the CoOP paper is to model 
 # a prompt's context words with learnable vectors 
 # while keeping the entire pre-trained parameters fixed, 
 # in order to adapt CLIP-like vision-language models for 
 # downstream image recognition tasks."

或者:

 query = "What is the central idea that can allow for scaling transformers to 1 million tokens?"

 index.query(query)

 # Output
 # ' The central idea is to use the Recurrent Memory Transformer (RMT) architecture to extend the context length of BERT, allowing it to store and process both local and global information across up to 2 million tokens.'

看样子还不错。

总结

使用LangChain来总结和查询研究论文非常的简单,LangChain很容易使用,也很容易学习。我们可以通过它来完成我们自己的自定义任务,这个论文汇总的代码在这里:

https://avoid.overfit.cn/post/72755915e57545dfa6673c1c4335ef0b

如果你测试可以直接下载来使用。

相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
2月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
928 1
|
2月前
|
机器学习/深度学习 算法 物联网
面向能效和低延迟的语音控制智能家居:离线语音识别与物联网集成方案——论文阅读
本文提出一种面向能效与低延迟的离线语音控制智能家居方案,通过将关键词识别(KWS)集成至终端设备,结合去中心化Mesh网络与CoAP协议,实现本地化语音处理。相较云端方案,系统能耗降低98%,延迟减少75%以上,显著提升响应速度与能源效率,为绿色智能家居提供可行路径。(236字)
256 17
面向能效和低延迟的语音控制智能家居:离线语音识别与物联网集成方案——论文阅读
|
2月前
|
安全 JavaScript 前端开发
安全漏洞检测集成及实践:SAST/DAST工具集成指南
通过合理集成和配置SAST/DAST工具,可以显著提升应用程序的安全性,并在开发早期发现和修复漏洞,降低安全风险和维护成本
298 4
|
2月前
|
人工智能 自然语言处理 安全
代码静态扫描工具集成与实践
代码静态扫描工具(Static Application Security Testing, SAST)是在不运行代码的情况下,通过分析源代码或二进制代码来发现潜在安全漏洞、代码缺陷和质量问题的工具
413 4
|
2月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
146 6
编解码 算法 vr&ar
246 0
|
3月前
|
存储 人工智能 前端开发
​​LangChain默认工具正在污染你的知识库!PDF解析崩溃真相​
本文深入探讨RAG项目中PDF解析的痛点与解决方案,分析LangChain默认工具的局限性,提出专业级文档处理架构设计与工具选型策略,涵盖表格图像处理、多模态解析与可扩展管道实现,助力提升RAG系统效果。
286 6
|
3月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
762 1
|
4月前
|
人工智能 数据可视化 BI
【2025】项目管理API集成工具指南:提升协作效率的17个必备模块
项目管理API集成工具通过连接不同平台,实现数据自动同步与流程自动化,提升团队协作效率。它支持跨系统操作,如任务同步、文档生成及可视化报表,减少人为错误,增强信息流通。随着技术发展,这类工具在企业数字化转型中扮演关键角色。
356 0

热门文章

最新文章