news 2026/10/28 1:50:08

【Use Cases】8. AirtrainAI Cookbook

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Use Cases】8. AirtrainAI Cookbook

案例目标

Airtrain是一个支持非结构化/低结构化文本数据集的工具,它允许自动化聚类、文档分类等功能。本案例展示了如何使用LlamaIndex摄取和转换/丰富数据,然后将数据上传到Airtrain进行进一步处理和探索。

具体目标包括:

  • 展示如何将LlamaIndex的Documents和Nodes上传到Airtrain平台
  • 演示两种不同的数据处理方式:直接上传文档和先分割/嵌入再上传
  • 展示如何将Airtrain集成到LlamaIndex的Workflow API中
  • 演示如何从多个来源(GitHub、Web)获取数据并上传到Airtrain

技术栈与核心依赖

组件库/工具用途
核心框架llama-index提供文档和节点抽象及处理功能
Airtrain集成airtrain-py[llama-index]提供与LlamaIndex的集成功能
嵌入模型llama-index-embeddings-openai提供OpenAI嵌入模型支持
数据读取器llama-index-readers-web从网页读取数据
数据读取器llama-index-readers-github从GitHub仓库读取数据
异步支持nest_asyncio在Jupyter notebook中支持异步操作

环境配置

1. 安装依赖
%pip install llama-index-embeddings-openai==0.2.4 %pip install llama-index-readers-web==0.2.2 %pip install llama-index-readers-github==0.2.0 # Install Airtrain SDK with LlamaIndex integration %pip install airtrain-py[llama-index]
2. 设置异步环境
import nest_asyncio nest_asyncio.apply()
3. API密钥配置
import os os.environ["GITHUB_TOKEN"] = "<your GitHub token>" os.environ["OPENAI_API_KEY"] = "<your OpenAi API key>" os.environ["AIRTRAIN_API_KEY"] = "<your Airtrain API key>"
注意

获取Airtrain API密钥的步骤:

  1. 访问Airtrain注册页面创建账户
  2. 在左下角查看"Settings",然后转到"Billing"注册专业账户或开始试用
  3. 从"Billing"中的"Airtrain API Key"选项卡复制您的API密钥

请注意,Airtrain试用版一次只允许一个数据集。由于本notebook创建多个数据集,您可能需要在Airtrain UI中删除数据集,以便为另一个数据集腾出空间。

案例实现

示例1:使用读取器/嵌入/分割器

LlamaIndex中的一些核心抽象是文档和节点。Airtrain的LlamaIndex集成允许您通过upload_from_llama_nodes函数使用这些抽象的任何可迭代集合创建Airtrain数据集。

1.1 从GitHub读取文档
import os import airtrain as at from llama_index.core.node_parser import SemanticSplitterNodeParser from llama_index.embeddings.openai import OpenAIEmbedding from llama_index.readers.github import GithubRepositoryReader, GithubClient # 设置GitHub客户端 github_token = os.environ.get("GITHUB_TOKEN") github_client = GithubClient(github_token=github_token, verbose=True) reader = GithubRepositoryReader( github_client=github_client, owner="sematic-ai", repo="sematic", use_parser=False, verbose=False, filter_directories=( ["docs"], GithubRepositoryReader.FilterType.INCLUDE, ), filter_file_extensions=( [ ".md", ], GithubRepositoryReader.FilterType.INCLUDE, ), ) # 读取文档 read_kwargs = dict(branch="main") documents = reader.load_data(**read_kwargs)
1.2 直接从文档创建数据集

您可以直接从这些文档创建Airtrain数据集,而无需进行任何进一步处理。在这种情况下,Airtrain会在生成进一步见解之前自动为您嵌入文档。数据集中的每一行将代表整个markdown文档。Airtrain将自动提供诸如文档语义聚类等见解,允许您通过查看覆盖相似主题的文档来浏览文档,或者发现您可能想要删除的文档子集。

result = at.upload_from_llama_nodes( documents, name="Sematic Docs Dataset: Whole Documents", ) print(f"Uploaded {result.size} rows to '{result.name}'. View at: {result.url}")
1.3 分割和嵌入后创建数据集

如果您希望查看面向文档内节点而非整个文档的数据集,您也可以这样做。Airtrain将自动创建诸如嵌入向量的2D PCA投影等见解,以便您可以可视化探索将从中检索RAG节点的嵌入空间。您还可以单击单个行并查看在完整n维嵌入空间中与它最接近的行,以进一步深入。还将生成自动化聚类和其他见解,以丰富和帮助您的探索。

# 设置嵌入模型和分割器 embed_model = OpenAIEmbedding() splitter = SemanticSplitterNodeParser( buffer_size=1, breakpoint_percentile_threshold=95, embed_model=embed_model ) # 分割文档 nodes = splitter.get_nodes_from_documents(documents) # 上传到Airtrain result = at.upload_from_llama_nodes( nodes, name="Sematic Docs, split + embedded", ) print(f"Uploaded {result.size} rows to {result.name}. View at: {result.url}")
注意

如果您正在使用Airtrain试用版并且已经创建了整个文档数据集,您需要在上传新数据集之前删除它。

示例2:使用Workflow API

由于文档和节点是Airtrain集成使用的核心抽象,而这些抽象在LlamaIndex的工作流API中共享,您也可以将Airtrain作为更广泛工作流的一部分使用。这里我们将通过抓取一些Hacker News评论线程来说明用法,但同样,您不仅限于网页抓取工作流;任何产生文档或节点的工作流都可以。

2.1 定义工作流事件
import asyncio from llama_index.core.schema import Node from llama_index.core.workflow import ( Context, Event, StartEvent, StopEvent, Workflow, step, ) from llama_index.readers.web import AsyncWebPageReader from airtrain import DatasetMetadata, upload_from_llama_nodes # 定义事件 class CompletedDocumentRetrievalEvent(Event): name: str documents: list[Node]
2.2 定义工作流
class IngestToAirtrainWorkflow(Workflow): @step async def ingest_documents( self, ctx: Context, ev: StartEvent ) -> CompletedDocumentRetrievalEvent | None: if not ev.get("urls"): return None reader = AsyncWebPageReader(html_to_text=True) documents = await reader.aload_data(urls=ev.get("urls")) return CompletedDocumentRetrievalEvent( name=ev.get("name"), documents=documents ) @step async def ingest_documents_to_airtrain( self, ctx: Context, ev: CompletedDocumentRetrievalEvent ) -> StopEvent | None: dataset_meta = upload_from_llama_nodes(ev.documents, name=ev.name) return StopEvent(result=dataset_meta)
2.3 执行工作流
# 指定要抓取的评论线程 URLS = [ "https://news.ycombinator.com/item?id=41694044", "https://news.ycombinator.com/item?id=41696046", # ... 更多URL ] # 定义异步主函数 async def main() -> None: workflow = IngestToAirtrainWorkflow() result = await workflow.run( name="My HN Discussions Dataset", urls=URLS, ) print( f"Uploaded {result.size} rows to {result.name}. View at: {result.url}" ) # 执行工作流 asyncio.run(main())

案例效果

1. 文档上传结果

直接从文档创建数据集时,系统成功上传了42行数据到Airtrain:

Uploaded 42 rows to 'Sematic Docs Dataset: Whole Documents'. View at: https://app.airtrain.ai/dataset/7fd09dca-81b9-42b8-acc9-01ce08302b16

2. 分割和嵌入后上传结果

使用OpenAI嵌入和SemanticSplitterNodeParser分割文档后,系统成功上传了137行数据到Airtrain:

Uploaded 137 rows to Sematic Docs, split + embedded. View at: https://app.airtrain.ai/dataset/ebec9bcc-6ed8-4165-a0de-29bef740c70b

3. 工作流上传结果

使用Workflow API从Hacker News抓取数据并上传到Airtrain时,系统成功上传了20行数据:

Uploaded 20 rows to My HN Discussions Dataset. View at: https://app.airtrain.ai/dataset/bd330f0a-6ff1-4e51-9fe2-9900a1a42308

案例实现思路

1. 数据获取与处理

案例展示了两种数据获取方式:从GitHub仓库获取文档和从网页抓取内容。获取数据后,可以选择直接上传或进行进一步处理(如分割和嵌入)。

2. 文档与节点抽象

LlamaIndex的核心抽象是文档和节点。文档是原始数据的容器,而节点是文档的分割部分,通常包含更小、更集中的文本片段。Airtrain与LlamaIndex的集成基于这些抽象,允许用户上传任何文档或节点集合。

3. 数据上传与处理

使用upload_from_llama_nodes函数将数据上传到Airtrain。Airtrain会自动处理上传的数据,包括嵌入、聚类和生成见解。用户可以在Airtrain平台上探索和分析数据。

4. 工作流集成

通过将Airtrain集成到LlamaIndex的Workflow API中,可以将数据上传作为更大工作流的一部分。这允许用户创建复杂的数据处理管道,包括数据获取、处理和上传。

扩展建议

  • 多源数据集成: 扩展系统以支持从更多数据源(如数据库、API、文件系统)获取数据
  • 高级文档处理: 实现更高级的文档处理技术,如实体识别、关系提取和主题建模
  • 自定义嵌入模型: 集成自定义或领域特定的嵌入模型,提高特定领域的检索准确性
  • 实时数据同步: 实现与Airtrain的实时数据同步机制,保持数据集的最新状态
  • 数据质量评估: 开发数据质量评估工具,自动检测和标记低质量数据
  • 批量处理优化: 优化批量数据处理流程,提高大规模数据集的处理效率
  • 可视化增强: 增强Airtrain平台的数据可视化功能,提供更丰富的数据探索体验
  • 自动化工作流: 开发更多自动化工作流模板,简化常见数据处理任务的设置

总结

AirtrainAI Cookbook案例展示了如何将LlamaIndex与Airtrain平台集成,实现高效的数据处理和分析。通过两个详细的示例,案例演示了从不同数据源获取数据、处理数据并上传到Airtrain进行进一步分析的方法。

第一个示例展示了如何从GitHub获取文档,并以两种方式上传到Airtrain:直接上传整个文档和先分割/嵌入再上传。这种方法为用户提供了灵活性,可以根据具体需求选择最适合的数据处理方式。

第二个示例展示了如何将Airtrain集成到LlamaIndex的Workflow API中,创建更复杂的数据处理管道。这种方法特别适合需要从多个来源获取数据并进行复杂处理的场景。

总的来说,该案例为研究人员和开发人员提供了一个强大的工具,用于处理和分析非结构化文本数据。通过结合LlamaIndex的灵活处理能力和Airtrain的高级分析功能,用户可以更有效地从大量文本数据中提取有价值的见解。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 1:49:15

genOffice办公软件与AI能力

1. 整体边界2. Harness编辑器 AI 面板│ 创建并持有▼ AgentLoop&#xff1a;控制一次任务的执行├─ AgentSkill&#xff1a;提示词、上下文、工具与执行器├─ AgentTransport&#xff1a;模型请求与流式事件接口└─ Events / Snapshot&#xff1a;界面反馈与回退挂钩│▼ E…

作者头像 李华
网站建设 2026/10/28 1:48:54

Octop 本地部署教程:十分钟在自己电脑上搭一个多用户 AI 助手

Octop 本地部署教程&#xff1a;十分钟在自己电脑上搭一个多用户 AI 助手 【免费下载链接】Octop A smarter, self-hosted AI assistant — multi-user, multi-agent. 项目地址: https://gitcode.com/GitHub_Trending/oct/Octop 发客户名单、合同给云端聊天机器人之前&a…

作者头像 李华
网站建设 2026/10/28 1:48:35

揭秘 DSH 插件市场:一次看懂插件的安全来源、硬核安装与无痕卸载

揭秘 DSH 插件市场&#xff1a;一次看懂插件的安全来源、硬核安装与无痕卸载 【免费下载链接】deepseek-harness-desktop 为 DeepSeek Harness (DSH) 插件生态打造的现代化桌面端解决方案。万物皆「插件」&#xff0c;桌面本身也是「插件」。 项目地址: https://gitcode.com/…

作者头像 李华
网站建设 2026/10/28 1:48:12

从 24 到 25 字节:compactstr4cj 的 CJMP 鸿蒙适配与 UTF-8 实测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 1:48:11

5【矢量图设置】

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华