txtai 全栈 AI 框架实战指南:语义搜索、LLM 编排与语言模型工作流
【免费下载链接】txtai💡 All-in-one AI framework for semantic search, LLM orchestration and language model workflows项目地址: https://gitcode.com/GitHub_Trending/tx/txtai
txtai 是一个 All-in-one 的开源 AI 框架,以"嵌入数据库(embeddings database)"为核心,将向量索引、图网络与关系数据库统一在一个体系内,从而同时支撑语义搜索、LLM 编排与语言模型工作流三类典型应用。本文将基于当前仓库(版本 9.13.0,见 src/python/txtai/version.py)的官方文档与源码,系统讲解 txtai 的架构、功能全景、快速上手、安装方式与核心实战场景,读完即可基于它构建 RAG、Agent 与多模型工作流应用。
txtai 是什么:一个框架,三类能力
官方文档对 txtai 的定位是一句话:All-in-one AI framework for semantic search, LLM orchestration and language model workflows,即"面向语义搜索、LLM 编排与语言模型工作流的全能 AI 框架"。
其技术底座是嵌入数据库(embeddings database),它并非单一的向量库,而是三种存储的联合体:
- 向量索引(vector indexes):包含稠密向量(dense)与稀疏向量(sparse)两类索引,负责语义层面的相似度检索;
- 图网络(graph networks):用于主题建模、数据连通性与网络分析;
- 关系数据库(relational databases):负责元数据、内容与结构化查询。
这一基础架构带来两个核心价值:其一,直接提供开箱即用的向量检索能力;其二,作为大语言模型(LLM)应用的知识源(knowledge source),为 RAG、Agent 等场景提供上下文。在此基础上,你可以构建自主 Agent、检索增强生成(RAG)流程、多模型工作流等高级应用。
从源码结构可以进一步印证这一设计:仓库 src/python/txtai/ 下平行存在embeddings、graph、database、ann(近似最近邻检索,含dense与sparse两个子目录)、scoring等模块,顶层入口 src/python/txtai/init.py 直接导出了Agent、Application、Embeddings、LLM、RAG、Textractor、Workflow等核心对象,这与文档描述的能力矩阵一一对应。
功能特性全景
docs/index.md 对 txtai 的功能做了如下总结,七个维度覆盖了从数据、模型到应用的完整链路:
- 🔎 向量搜索:支持 SQL 查询、对象存储、主题建模、图分析以及多模态索引;
- 📄 多模态嵌入:可为文本、文档、音频、图像和视频创建 embeddings;
- 💡 语言模型管道(Pipelines):运行 LLM 提示词、问答、打标签、转录、翻译、摘要等任务;
- ↪️ 工作流(Workflows):将多个管道串联并聚合业务逻辑,进程既可以是简单微服务,也可以是多模型工作流;
- 🤖 Agents:智能连接嵌入、管道、工作流乃至其他 Agent,自主解决复杂问题;
- ⚙️ Web 与 MCP API:内置 API 服务,并提供 JavaScript、Java、Rust、Go 等语言的绑定;
- 🔋 开箱即用:内置合理默认值,可快速启动;☁️ 本地或容器化扩展:既可在本地运行,也可通过容器编排横向扩展。
在技术栈上,txtai 基于Python 3.10+、Hugging Face Transformers、Sentence Transformers 与 FastAPI 构建,以 Apache 2.0 协议开源。这一点可从 setup.py 得到印证:python_requires=">=3.10",默认依赖包含faiss-cpu、torch、transformers、numpy、pyyaml等。
为什么选择 txtai
面对层出不穷的向量数据库与 LLM 框架,官方文档给出了选择 txtai 的理由,同时附带了可直接运行的示例:
- 几分钟内上手:通过 pip 或 Docker 即可安装,几行代码即可完成索引与搜索:
# Get started in a couple lines import txtai embeddings = txtai.Embeddings() embeddings.index(["Correct", "Not what we hoped"]) embeddings.search("positive", 1) # [(0, 0.29862046241760254)]- 内置 API:方便用你熟悉的编程语言开发应用。只需一个 YAML 配置文件,即可启动一个完整的搜索服务:
# app.yml embeddings: path: sentence-transformers/all-MiniLM-L6-v2CONFIG=app.yml uvicorn "txtai.api:app" curl -X GET "http://localhost:8000/search?query=positive"- 本地运行:无需将数据上传到分散的远程服务;
- 模型跨度大:从微型模型(micromodels)一直到大型语言模型(LLMs)都能工作;
- 低占用:按需安装额外依赖、按需扩容;
- 示例驱动学习:examples/ 目录下的 notebook 覆盖了全部可用功能。
从 src/python/txtai/embeddings/base.py 的源码可以看到index、upsert、delete、search、load、save、close等方法的完整定义(分别位于第 103、155、203、356、533、606、664 行),意味着"建索引—查询—持久化—资源回收"这一生命周期都有底层实现支撑。
核心使用场景
文档将典型用例归纳为三大类,每一类都提供了专门的示例 notebook 与快速上手脚本。
场景一:语义搜索
语义搜索(semantic search)是 txtai 最基础也最成熟的能力。与传统基于关键词的搜索不同,语义搜索理解自然语言,能够返回"语义相同但关键词不一定相同"的结果。
语义搜索类示例包括:
| 示例 | 说明 |
|---|---|
| 01_Introducing_txtai.ipynb | txtai 功能总览 |
| 13_Similarity_search_with_images.ipynb | 将图像与文本嵌入到同一空间进行搜索 |
| 34_Build_a_QA_database.ipynb | 用语义搜索做问题匹配,构建 QA 数据库 |
| 38_Introducing_the_Semantic_Graph.ipynb | 探索主题、数据连通性并运行网络分析 |
在 docs/embeddings/index.md 中给出了完整的索引与搜索代码,展示了语义搜索的实际用法:
from txtai import Embeddings # Create embeddings model, backed by sentence-transformers & transformers embeddings = Embeddings(path="sentence-transformers/nli-mpnet-base-v2") data = [ "US tops 5 million confirmed virus cases", "Canada's last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg", "Beijing mobilises invasion craft along coast as Taiwan tensions escalate", "The National Park Service warns against sacrificing slower friends in a bear attack", "Maine man wins $1M from $25 lottery ticket", "Make huge profits without work, earn up to $100,000 a day" ] # Index the list of text embeddings.index(data) for query in ("feel good story", "climate change", "public health story", "war", "wildlife", "asia", "lucky", "dishonest junk"): uid = embeddings.search(query, 1)[0][0] print(f"{query:20} {data[uid]}")关于这一层的使用要点(源自 docs/embeddings/index.md):
- 构建(Build):
Embeddings实例由构造函数传入的配置驱动,向量通过path参数指定模型;不传任何配置也可以,此时会加载默认的 transformers 向量模型(模型指南 中有当前推荐列表)。 - 索引(Index):
index方法接受可迭代对象,支持(id, data, tags)、(id, data)和纯data三种元素格式;输入既可以是列表也可以是生成器,生成器有助于处理超大数据集(内存中只保留部分数据)。当data为字典时,文本通过text键传入、二进制对象通过object键传入,且需要启用 content/objects 存储。 - 搜索(Search):
search(query, limit)返回(id, score)列表(未存 content 时)或查询列字典(存储 content 时);同时支持自然语言查询与 SQL 查询。 - 资源管理(Resource management):嵌入数据库是上下文管理器,推荐用
with块自动close释放资源:
# Create a new Embeddings database, index data and save with Embeddings() as embeddings: embeddings.index(rows) embeddings.save(path) # Search a saved Embeddings database with Embeddings().load(path) as embeddings: embeddings.search(query)场景二:LLM 编排(Agents 与 RAG)
第二类场景围绕大语言模型展开,包括自主 Agent、检索增强生成(RAG)、与数据对话(chat with your data),以及对接 LLM 的管道与工作流。
Agents:Agent 会自动创建工作流来回答多方面的用户请求,迭代式地提示模型并调用工具,逐步推进直至给出答案。txtai 的 Agent 构建在 smolagents 框架之上,支持 txtai 支持的全部 LLM(Hugging Face、llama.cpp、通过 LiteLLM 接入的 OpenAI / Claude / AWS Bedrock 等),并支持agents.md与skill.md规范。
Agents 非常适合需要多个工具/多种方法的复杂任务;如果请求简单或有规则化流程,官方建议优先考虑 RAG 与 Workflows。快速上手脚本见 examples/agent_quickstart.py,相关示例还包括:
| 示例 | 说明 |
|---|---|
| 69_Granting_autonomy_to_agents.ipynb | 让 Agent 自主迭代式解决问题 |
| 83_TxtAI_got_skills.ipynb | 将 skill.md 文件集成到 Agent 中 |
| 84_Agent_Tools.ipynb | 了解 txtai 的 Agent 工具集 |
| 71_Analyzing_LinkedIn_Company_Posts_with_Graphs_and_Agents.ipynb | 用图分析与 Agent 改善社交媒体互动 |
在 docs/agent/index.md 中可以看到一个典型的 Agent 定义:它同时持有 Wikipedia、arXiv 两个嵌入数据库工具与 web 搜索工具,模型为Qwen/Qwen3-4B-Instruct-2507,并设置了max_steps=10限制推理步数。Agent 还支持"Agent Teams"——Agent 本身也可以作为工具被其他 Agent 调用,从而让每个子 Agent 拥有独立的推理引擎。
检索增强生成(RAG):RAG 通过知识库作为上下文约束模型输出,降低 LLM 幻觉风险,最常见的形态就是"与你的数据对话"(chat with your data)。快速上手脚本见 examples/rag_quickstart.py,相关示例包括:
| 示例 | 说明 |
|---|---|
| 52_Build_RAG_pipelines_with_txtai.ipynb | RAG 构建指南,含引用(citation)生成方法 |
| 79_RAG_is_more_than_Vector_Search.ipynb | 通过 Web、SQL 等来源检索上下文 |
| 77_GraphRAG_with_Wikipedia_and_GPT_OSS.ipynb | 深度图搜索驱动的 RAG |
| 65_Speech_to_Speech_RAG.ipynb | 完整的语音到语音 RAG 工作流 |
场景三:语言模型工作流
语言模型工作流(也称语义工作流)将语言模型连接起来构建智能应用。虽然 LLM 很强大,但很多更小、更专精的模型在特定任务上表现更好、速度更快——包括抽取式问答、自动摘要、语音合成、转录和翻译等。工作流正是把这些模型高效串联起来的机制。
examples/workflow_quickstart.py 提供了快速上手脚本,相关示例包括:
| 示例 | 说明 |
|---|---|
| 14_Run_pipeline_workflows.ipynb | 简单而强大的数据处理构造 |
| 09_Building_abstractive_text_summaries.ipynb | 生成式文本摘要 |
| 11_Transcribe_audio_to_text.ipynb | 音频转文本 |
| 12_Translate_text_between_languages.ipynb | 机器翻译与语言检测 |
工作流的底层机制在 docs/workflow/index.md 中有清晰说明:Workflow 是接受可调用对象并返回元素的构造,以流式(streaming)方式按批次处理数据,因此能够高效处理海量数据。最基本的示例:
workflow = Workflow([Task(lambda x: [y * 2 for y in x])]) list(workflow([1, 2, 3]))由于工作流以生成器运行,必须消费输出才会真正执行:
# Small dataset where output fits in memory list(workflow(elements)) # Large dataset for output in workflow(elements): function(output) # Large dataset where output is discarded for _ in workflow(elements): pass工作流既可以用 Python 定义,也可以用 YAML 配置驱动。下面是一个完整的实战示例(源自 docs/workflow/index.md):转录一组音频文件 → 翻译成法语 → 建立索引 → 搜索。Python 版:
from txtai import Embeddings from txtai.pipeline import Transcription, Translation from txtai.workflow import FileTask, Task, Workflow embeddings = Embeddings({ "path": "sentence-transformers/paraphrase-MiniLM-L3-v2", "content": True }) transcribe = Transcription() translate = Translation() tasks = [ FileTask(transcribe, r"\.wav$"), Task(lambda x: translate(x, "fr")) ] data = ["US_tops_5_million.wav", "Canadas_last_fully.wav", "Beijing_mobilises.wav", "The_National_Park.wav", "Maine_man_wins_1_mil.wav", "Make_huge_profits.wav"] workflow = Workflow(tasks) embeddings.index((uid, text, None) for uid, text in enumerate(workflow(data))) embeddings.search("wildlife", 1)等价的 YAML 配置驱动版(保存为workflow.yml):
writable: true embeddings: path: sentence-transformers/paraphrase-MiniLM-L3-v2 content: true # Transcribe audio to text transcription: # Translate text between languages translation: workflow: index: tasks: - action: transcription select: "\\.wav$" task: file - action: translation args: ["fr"] - action: indexfrom txtai import Application app = Application("workflow.yml") list(app.workflow("index", [ "US_tops_5_million.wav", "Canadas_last_fully.wav", "Beijing_mobilises.wav", "The_National_Park.wav", "Maine_man_wins_1_mil.wav", "Make_huge_profits.wav" ])) app.search("wildlife")工作流还可以串联多个 LLM 提示任务(如先抽取关键词再翻译成法语),也可以把任意 txtai 管道/工作流任务与 LLM 自由组合——这正是 docs/pipeline/index.md 所描述的"管道是带__call__方法的可调用对象,工作流因此能高效驱动一系列 transformers 管道"。
安装指南
最简单的安装方式是通过 pip 从 PyPI 安装:
pip install txtai支持 Python 3.10+,官方建议使用 Python 虚拟环境。详细说明见 docs/install.md,其要点如下。
可选依赖(extras)
txtai 提供多种可选依赖组,按需安装可控制依赖体积。从 setup.py 源码可以确认以下 extras 的具体组成:
| Extra | 说明 | 安装命令 |
|---|---|---|
all | 安装全部依赖 | pip install txtai[all] |
ann | 额外 ANN 后端(annoy、hnswlib、milvus、pgvector、sqlite-vec、turbovec、zvec 等) | pip install txtai[ann] |
api | 通过 Web API 提供 txtai 服务(fastapi、uvicorn、pillow 等) | pip install txtai[api] |
cloud | 对接云存储与云算力(apache-libcloud 等) | pip install txtai[cloud] |
console | 命令行索引查询控制台 | pip install txtai[console] |
database | 额外内容存储选项(duckdb、sqlalchemy 等) | pip install txtai[database] |
graph | 主题建模、数据连通性与网络分析(networkx、grand-graph 等) | pip install txtai[graph] |
model | 额外的非标准模型支持(onnx、onnxruntime) | pip install txtai[model] |
pipeline | 全部管道;默认安装已包含大多数常用管道 | pip install txtai[pipeline] |
scoring | 额外评分方法 | pip install txtai[scoring] |
vectors | 额外向量方法(sentence-transformers、litellm、llama-cpp-python 等) | pip install txtai[vectors] |
workflow | 全部工作流任务;默认安装已包含大多数常用工作流任务 | pip install txtai[workflow] |
管道类还有更细的拆分:pipeline-audio、pipeline-data、pipeline-image、pipeline-llm、pipeline-text、pipeline-train。多个依赖可以组合安装:
pip install txtai[pipeline,workflow]另外extras["agent"]包含 smolagents、mcp 等 Agent 相关依赖;similarity是ann与vectors的向后兼容组合。
环境特定前提
- Linux:AudioStream/Microphone 管道需要 PortAudio 系统库;Transcription 管道需要 SoundFile 库;LiteRT LLM 管道需要 libegl1、libgles2 与 libvulkan1;
- macOS:旧版 Faiss 依赖
libomp(可brew install libomp);音频管道需brew install portaudio; - Windows:可选依赖需要安装 C++ Build Tools。
CPU-only 安装
默认安装会带入带 GPU 支持的 PyTorch。纯 CPU 环境可安装 CPU 版 PyTorch:
pip install txtai torch==[version]+cpu \ -f https://download.pytorch.org/whl/torch其中[version]为 PyTorch 版本号(如 2.4.1)。
从源码安装与 Conda
- 从源码安装最新未发布功能:
pip install git+https://github.com/neuml/txtai,安装 extra 时在 URL 末尾追加#egg=txtai[<name-of-extra>]; - conda-forge 提供社区维护的包:
conda install -c conda-forge txtai。
极简安装(Minimal)
如果默认依赖过重,可安装零依赖的轻量包:
# Lightweight minimal install pip install txtai_minimal # Same as standard `txtai` install pip install txtai_minimal[default]注意:在无 torch 环境下使用Embeddings或LLM接口,需要llama.cpp、litellm或litert之一。从 setup.py 可以看到,设置环境变量MINIMAL时包名会变为txtai_minimal,默认依赖转为可选。
容器化运行
Docker 镜像已随仓库提供(见 docker/ 目录下的api、aws、base、minimal、schedule、workflow等多个 Dockerfile),容器化安装与编排方式详见 docs/cloud.md。
模型指南
txtai 为各组件提供了一套当前推荐的模型(docs/models.md),这些模型均允许商业使用,兼顾速度与性能:
| 组件 | 推荐模型 |
|---|---|
| Embeddings | all-MiniLM-L6-v2 |
| 图像描述 | BLIP |
| 零样本标签 | DeBERTa v3 Zeroshot |
| 固定标签 | 用 训练管道 微调 |
| 大语言模型 (LLM) | Gemma 4 31B |
| 摘要 | DistilBART |
| 语音合成 | ESPnet JETS |
| 转录 | Whisper |
| 翻译 | OPUS Model Series |
模型既可以传 Hugging Face Hub 的路径,也可以传本地目录。模型路径是可选的:未指定时会加载默认模型;对于没有推荐模型的任务,txtai 使用 Hugging Face Tasks 指南中所示的默认模型。
深入学习路径
仓库提供了丰富的学习资源:
- 示例库:docs/examples.md 按语义搜索、LLM、管道、工作流、模型训练、API、架构、发布与示例应用等维度,收录了 80+ 个 notebook 与脚本(全部位于 examples/ 目录),其中既有功能演示也有可直接运行的应用(如 examples/similarity.py、examples/books.py、examples/wiki.py 等);
- 组件文档:嵌入配置见 docs/embeddings/,管道清单见 docs/pipeline/index.md,API 配置见 docs/api/configuration.md,常用问题见 docs/faq.md;
- 生态应用:官方还维护了基于 txtai 构建的应用,例如 RAG 应用、开源 AI 编程 Agent、医学与科学论文分析工具 paperai、论文自动标注工具 annotateai 等,可从中观察 txtai 在生产场景中的组织方式;
- 版本演进:examples/ 中每个大版本都有"What's new"notebook(4.0 至 9.0),记录了内容存储、SQL、稀疏/混合/子索引、语义图 2.0、LoRA/QLoRA 训练、Agent 支持、学习型稀疏向量、晚期交互模型与重排序器等能力的演进脉络。
小结
txtai 通过"嵌入数据库"这一统一底座,把向量检索、图分析与关系数据库整合为一个可组合的整体,向上支撑语义搜索、RAG、Agent 与多模型工作流,向下通过可裁剪的依赖体系与容器化部署适配从个人笔记本到生产集群的各种环境。无论你是要快速搭建一个语义搜索服务,还是要为企业数据构建带引用的 RAG 应用,亦或是串联多个专精模型完成复杂的数据处理链路,都可以从本文介绍的安装方式、快速上手脚本与配置示例出发,再结合 examples/ 目录中的对应 notebook 深入实践。
【免费下载链接】txtai💡 All-in-one AI framework for semantic search, LLM orchestration and language model workflows项目地址: https://gitcode.com/GitHub_Trending/tx/txtai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考