knowledgegpt
knowledgegpt 的设计目的是从包括互联网和本地数据在内的各种来源收集信息,以创建提示。这些提示可以由OpenAI的GPT-3模型使用生成答案,然后将这些答案存储在数据库中以供将来参考。
为此,文本首先使用开源或OpenAI模型转换为固定大小的向量。当提交查询时,文本也会被转换为向量并与存储的知识嵌入进行比较。然后选择最相关的信息并用于生成提示上下文。
knowledgegpt 支持多种信息来源,包括网站、PDF、PowerPoint文件(PPTX)和文档(Docs)。此外,它可以利用语音转文字技术从YouTube字幕和音频中提取文本,并将其用作信息来源。这允许收集和使用多种信息来生成提示和答案。
PyPI链接: https://pypi.org/project/knowledgegpt/
安装
-
通过PyPI安装,请在终端运行:
pip install knowledgegpt
-
或者你可以使用仓库中的最新版本:
pip install -r requirements.txt
然后pip install .
-
下载解析所需的语言模型:
python3 -m spacy download en_core_web_sm
如何使用
Restful API
uvicorn server:app --reload
设置您的API密钥
- 前往 OpenAI > Account > Api Keys
- 创建新的密钥并复制
- 将密钥输入到 example_config.py
如何使用该库
# 导入库
from knowledgegpt.extractors.web_scrape_extractor import WebScrapeExtractor
# 导入OpenAI并设置API密钥
import openai
from example_config import SECRET_KEY
openai.api_key = SECRET_KEY
# 定义目标网站
url = "https://en.wikipedia.org/wiki/Bombard_(weapon)"
# 初始化WebScrapeExtractor
scrape_website = WebScrapeExtractor(url=url, embedding_extractor="hf", model_lang="en")
# 提示OpenAI模型
answer, prompt, messages = scrape_website.extract(query="What is a bombard?", max_tokens=300, to_save=True, mongo_client=db)
# 查看答案
print(answer)
# 输出: 'A bombard is a type of large cannon used during the 14th to 15th centuries.'
其他示例可以在 examples 文件夹中找到。为了更好地说明如何使用该库,以下是一个简单示例:
# 基本用法
basic_extractor = BaseExtractor(df)
answer, prompt, messages = basic_extractor.extract("PDF的标题是什么?", max_tokens=300)
# PDF提取
pdf_extractor = PDFExtractor(pdf_file_path, extraction_type="page", embedding_extractor="hf", model_lang="en")
answer, prompt, messages = pdf_extractor.extract(query, max_tokens=1500)
# PPTX提取
ppt_extractor = PowerpointExtractor(file_path=ppt_file_path, embedding_extractor="hf", model_lang="en")
answer, prompt, messages = ppt_extractor.extract(query, max_tokens=500)
# DOCX提取
docs_extractor = DocsExtractor(file_path="../example.docx", embedding_extractor="hf", model_lang="en", is_turbo=False)
answer, prompt, messages = \
docs_extractor.extract(query="什么是物体检测系统?", max_tokens=300)
# 来自YouTube视频(音频)的提取
scrape_yt_audio = YoutubeAudioExtractor(video_id=url, model_lang='tr', embedding_extractor='hf')
answer, prompt, messages = scrape_yt_audio.extract(query=query, max_tokens=1200)
# 来自YouTube视频(字幕)的提取
scrape_yt_subs = YTSubsExtractor(video_id=url, embedding_extractor="hf", model_lang="en")
answer, prompt, messages = scrape_yt_subs.extract(query=query, max_tokens=1200)
Docker使用
docker build -t knowledgegptimage .
docker run -p 8888:8888 knowledgegptimage
如何贡献
- 打开一个问题
- 克隆仓库
- 创建一个新分支
- 进行你的更改
- 创建一个拉取请求
特征
- 从互联网提取知识(即维基百科)
- 从本地数据源提取知识 - PDF
- 从本地数据源提取知识 - DOCX
- 从本地数据源提取知识 - PPTX
- 从YouTube音频提取知识(当字幕不可用时)
- 从YouTube视频字幕提取知识
- 从整个YouTube播放列表提取知识
待办事项
- 支持FAISS
- 添加矢量数据库(Pinecone, Milvus, Qdrant等)
- 添加Whisper模型
- 添加Whisper本地支持(不通过OpenAI API)
- 为大于25MB的音频添加Whisper支持
- 添加web界面
- 迁移到Promptify进行提示生成
- 添加ChatGPT支持
- 添加更好的基础设施和计划的ChatGPT支持
- 增加提示的数量
- 增加支持的知识来源数量
- 增加支持的语言数量
- 增加开源模型的数量
- 高级网络抓取
- 提示-答案存储(这可能会在一个独立项目中完成)
- 添加更好的文档
- 添加更好的日志系统
- 添加更好的错误处理系统
- 添加更好的测试系统
- 添加更好的CI/CD系统
- 项目Docker化
- 添加搜索引擎支持,例如Google、Bing等
- 添加对开源OpenAI替代方案的支持(用于答案生成)
- 评估依赖项并删除不必要的依赖项
- 提供与任何模型一起使用的提示灵活性
(将扩展...)
系统架构
(将在更新的图片中)