研究的未来是混合式的

过去几年,我们见证了旨在颠覆研究工作的新型AI工具爆发式增长。诸如ChatPDF和Consensus专注于从文档中提取洞见,而Perplexity等工具则擅长从网络抓取信息。但关键在于:目前还没有任何工具能在统一的情境研究流程中同时整合网络和本地文档搜索功能。
这就是为什么我很高兴向大家介绍GPT Researcher的最新进展——现在能够对任何给定任务和文档进行混合研究。
网络驱动的研究往往缺乏具体情境,存在信息过载的风险,并可能包含过时或不可靠的数据。另一方面,本地驱动的研究仅限于历史数据和现有知识,可能形成组织内部的信息茧房,错失关键市场趋势或竞争对手动向。这两种方法若单独使用,都可能导致不完整或有偏见的见解,从而影响您做出全面知情决策的能力。
今天,我们将改变游戏规则。通过本指南的学习,您将掌握如何进行混合研究,结合网络与本地资源的双重优势,从而开展更全面、更相关且更具洞察力的研究工作。
为什么混合研究方法更有效
通过结合网络和本地资源,混合研究解决了这些限制并提供了几个关键优势:
-
基于本地文档的上下文: 本地文档提供了经过验证的、组织专属信息的基础。这使研究扎根于既定知识,降低了偏离核心概念或误解行业特定术语的风险。
示例: 某制药公司在研究新药开发机会时,可以以其内部研究论文和临床试验数据为基础,然后通过网络补充最新的已发表研究和监管更新。
-
提高准确性:网络来源提供最新信息,而本地文档则提供历史背景。这种结合可以实现更准确的趋势分析和决策制定。
示例:一家金融服务公司在分析市场趋势时,可以将其历史交易数据与实时市场新闻和社交媒体情绪分析相结合,从而做出更明智的投资决策。
-
减少偏见:通过同时利用网络和本地资源,我们降低了单一来源可能存在的偏见风险。
示例:一家科技公司在评估其产品路线图时,可以平衡内部功能需求和使用数据与外部客户评价及竞争对手分析,确保获得全面的视角。
-
改进的规划和推理能力: 大型语言模型可以利用本地文档的上下文信息,更好地规划其网络研究策略,并对在线发现的信息进行推理。
示例: 一个由AI驱动的市场研究工具可以利用公司过去的营销活动数据来指导其搜索当前市场趋势,从而获得更具相关性和可操作性的见解。
-
定制化洞察: 混合研究可以将专有信息与公共数据整合,从而产生独特的、针对特定组织的洞察。
示例: 一家零售连锁企业可以将其销售数据与网络抓取的竞争对手定价和经济指标相结合,以优化其在不同地区的定价策略。
这些只是企业可以利用混合研究的几个用例示例,闲话少说——让我们开始构建吧!
构建混合研究助手
在深入细节之前,值得指出的是GPT Researcher具备开箱即用的混合研究能力!但为了真正理解其运作原理并让您更深入地了解整个过程,我们将剖析其内部机制。

GPT Researcher根据本地文档自动生成的计划进行网络研究,如上图架构所示。然后从本地和网络数据中检索相关信息,生成最终的研究报告。
我们将探讨如何利用LangChain处理本地文档,这是GPT Researcher文档处理的核心组件。随后,我们将展示如何运用GPT Researcher开展混合研究,将网络搜索的优势与您的本地文档知识库相结合。
使用Langchain处理本地文档
LangChain提供了多种文档加载器,使我们能够处理不同类型的文件。在处理多样化的本地文档时,这种灵活性至关重要。以下是设置方法:
from langchain_community.document_loaders import (
PyMuPDFLoader,
TextLoader,
UnstructuredCSVLoader,
UnstructuredExcelLoader,
UnstructuredMarkdownLoader,
UnstructuredPowerPointLoader,
UnstructuredWordDocumentLoader
)
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
def load_local_documents(file_paths):
documents = []
for file_path in file_paths:
if file_path.endswith('.pdf'):
loader = PyMuPDFLoader(file_path)
elif file_path.endswith('.txt'):
loader = TextLoader(file_path)
elif file_path.endswith('.csv'):
loader = UnstructuredCSVLoader(file_path)
elif file_path.endswith('.xlsx'):
loader = UnstructuredExcelLoader(file_path)
elif file_path.endswith('.md'):
loader = UnstructuredMarkdownLoader(file_path)
elif file_path.endswith('.pptx'):
loader = UnstructuredPowerPointLoader(file_path)
elif file_path.endswith('.docx'):
loader = UnstructuredWordDocumentLoader(file_path)
else:
raise ValueError(f"Unsupported file type: {file_path}")
documents.extend(loader.load())
return documents
# Use the function to load your local documents
local_docs = load_local_documents(['company_report.pdf', 'meeting_notes.docx', 'data.csv'])
# Split the documents into smaller chunks for more efficient processing
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(local_docs)
# Create embeddings and store them in a vector database for quick retrieval
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings)
# Example of how to perform a similarity search
query = "What were the key points from our last strategy meeting?"
relevant_docs = vectorstore.similarity_search(query, k=3)
for doc in relevant_docs:
print(doc.page_content)
使用GPT Researcher进行网络研究
既然我们已经学会了如何处理本地文档,现在让我们快速了解一下GPT Researcher的内部工作原理:

如上所示,GPT Researcher会根据给定的任务创建研究计划,通过生成潜在的研究查询来共同提供对该主题的客观且全面的概述。一旦生成这些查询,GPT Researcher会使用像Tavily这样的搜索引擎来查找相关结果。每个抓取的结果随后会被保存在向量数据库中。最后,检索与研究任务最相关的top k数据块以生成最终的研究报告。
GPT Researcher支持混合研究模式,该模式在检索最相关信息前会额外执行一个本地文档分块步骤(通过Langchain实现)。经过社区大量评估验证,我们发现混合研究能将最终结果的准确率提升40%以上!
使用GPT Researcher进行混合研究
现在您对混合研究的工作原理有了更深入的理解,让我们展示一下使用GPT Researcher可以多么轻松地实现这一目标。
步骤1:使用PIP安装GPT Researcher
pip install gpt-researcher
步骤2:设置环境
我们将使用OpenAI作为大语言模型供应商和Tavily作为搜索引擎来运行GPT Researcher。在继续之前,您需要获取两者的API密钥。然后,在您的CLI中按以下方式导出环境变量:
export OPENAI_API_KEY={your-openai-key}
export TAVILY_API_KEY={your-tavily-key}
步骤3:使用混合研究配置初始化GPT Researcher
GPT Researcher可以通过参数轻松初始化,以指示其进行混合研究。您可以开展多种形式的研究,前往文档页面了解更多信息。
要让GPT Researcher执行混合研究,您需要将所有相关文件包含在my-docs目录中(如果不存在则创建该目录),并如下所示将实例report_source设置为"hybrid"。一旦报告来源设置为混合模式,GPT Researcher将在my-docs目录中查找现有文档并将其纳入研究。如果不存在任何文档,它将忽略此操作。
from gpt_researcher import GPTResearcher
import asyncio
async def get_research_report(query: str, report_type: str, report_source: str) -> str:
researcher = GPTResearcher(query=query, report_type=report_type, report_source=report_source)
research = await researcher.conduct_research()
report = await researcher.write_report()
return report
if __name__ == "__main__":
query = "How does our product roadmap compare to emerging market trends in our industry?"
report_source = "hybrid"
report = asyncio.run(get_research_report(query=query, report_type="research_report", report_source=report_source))
print(report)
如上所示,我们可以运行以下示例的研究:
- 研究任务:"我们的产品路线图与行业新兴市场趋势相比如何?"
- 网络:当前市场趋势、竞争对手公告和行业预测
- 本地:内部产品路线图文档和功能优先级列表
经过多次社区评估,我们发现这项研究的结果将调研质量和准确性提升了40%以上,并减少了50%的幻觉现象。更重要的是,如上所述,本地信息能帮助大语言模型改进规划推理能力,使其做出更优决策并调研更相关的网络资源。
但等等,还有更多!GPT Researcher还包含一个使用NextJS和Tailwind构建的时尚前端应用。要了解如何运行它,请查看文档页面。您可以轻松使用拖放文档功能来进行混合研究。
结论
混合研究代表了数据收集和决策制定领域的重大进步。通过利用GPT Researcher等工具,团队现在能够进行更全面、情境感知且可操作的研究。这种方法解决了单独使用网络或本地资源的局限性,提供了诸多优势,例如基于实境的上下文、更高的准确性、减少偏见、改进的规划与推理能力,以及定制化的洞察。
混合研究的自动化可以使团队做出更快、更数据驱动的决策,最终提高生产力,并在分析不断增长的非结构化和动态信息池中提供竞争优势。

