检索增强生成(RAG)驱动的搜索
txtchat 构建了检索增强生成(RAG)和语言模型驱动的搜索应用程序。
大型语言模型(LLM)的出现推动了对搜索的重新想象。LLM驱动的搜索可以做得更多。不仅仅是返回结果,搜索现在可以提取、总结、翻译和将内容转换为答案。
txtchat 添加了一组可以与消息平台集成的智能代理。这些代理或角色与一个自动化账户相关联,并以AI驱动的响应回复消息。工作流程可以使用大型语言模型(LLM)、小型模型或两者兼有。
txtchat 基于 Python 3.8+ 和 txtai 构建。
安装
最简单的安装方式是通过 pip 和 PyPI
pip install txtchat
你也可以直接从 GitHub 安装 txtchat。建议使用 Python 虚拟环境。
pip install git+https://github.com/neuml/txtchat
支持 Python 3.8+
请参阅此链接以帮助解决与环境相关的安装问题。
消息平台
txtchat 旨在支持多个消息平台。目前,Rocket.Chat 是唯一支持的平台,因为它可以安装在本地环境中,并且是 MIT 许可的。使用 Docker Compose 是启动本地 Rocket.Chat 实例的最简单方法。请参阅这些说明以了解更多信息。
将 txtchat 扩展到其他平台只需要为该平台新增一个 Agent 子类。
架构
Persona 是聊天代理和工作流程的组合,决定了响应的类型。每个代理与消息平台中的一个账户相关联。Persona 的工作流程与消息平台无关。txtchat-persona 仓库有一个标准 persona 工作流程的列表。
- Wikitalk:与维基百科聊天
- Summary:读取输入的URL并总结文本
- Mr. French:将输入文本翻译成法语
有关其他 persona 和工作流程配置,请参阅 examples 目录。
以下命令展示了如何启动一个 txtchat persona。
# 设置服务器 URL,运行本地时这是默认值
export AGENT_URL=ws://localhost:3000/websocket
export AGENT_USERNAME=<Rocket Chat 用户>
export AGENT_PASSWORD=<Rocket Chat 用户密码>
# YAML 从 Hugging Face Hub 加载,也可以引用本地路径
python -m txtchat.agent wikitalk.yml
想要添加一个新的 persona?只需创建一个 txtai 工作流程并将其保存到 YAML 文件。
示例
以下是一个YouTube 视频列表,展示了 txtchat 的工作方式。这些视频展示了使用 Wikitalk persona 运行的一系列查询。Wikitalk 是维基百科嵌入索引和LLM提示的结合体,用于回答问题。
每个答案都会显示相关数据来源的参考链接。当没有答案时,Wikitalk 会说“我没有这方面的数据”。
历史
与 Wikitalk 讨论历史。
体育
谈论体育。
文化
艺术与文化问题。
科学
让我们测试 Wikitalk 对科学的了解。
总结
并非所有工作流程都需要LLM。有许多优秀的小模型可以用于执行特定任务。Summary persona 只需读取输入的 URL 并总结文本。
法语先生
像 Summary persona 一样,Mr. French 是一个简单的 persona,将输入文本翻译为法语。
连接你自己的数据
想将 txtchat 连接到你自己的数据?只需要创建一个 txtai 工作流程。让我们通过一个例子来构建一个 Hacker News 索引工作流程和一个 txtchat persona。
首先,我们定义索引工作流程并构建索引。为方便起见,这通过工作流程完成。或者,它也可以是一个 Python 程序,从你的数据集中构建嵌入索引。这里有超过 50 个示例笔记本 ,涵盖了将数据导入 txtai 的多种方法。在这个 Hugging Face Space 中也有可以下载的示例工作流程。
path: /tmp/hn
embeddings:
path: sentence-transformers/all-MiniLM-L6-v2
content: true
tabular:
idcolumn: url
textcolumns:
- title
workflow:
index:
tasks:
- batch: false
extract:
- hits
method: get
params:
tags: null
task: service
url: https://hn.algolia.com/api/v1/search?hitsPerPage=50
- action: tabular
- action: index
writable: true
此工作流程解析 Hacker News 首页的 feed 并在路径 /tmp/hn
处构建一个嵌入索引。
使用以下命令运行工作流程。
from txtai.app import Application
app = Application("index.yml")
list(app.workflow("index", ["front_page"]))
现在,我们定义聊天工作流程并将其作为代理运行。
path: /tmp/hn
writable: false
extractor:
path: google/flan-t5-xl
output: flatten
workflow:
search:
tasks:
- task: txtchat.task.Question
action: extractor
python -m txtchat.agent query.yml
让我们与 Hacker News 聊天!
正如你所见,Hacker News 是一个高度主观的数据源!
获取答案固然不错,但能够获得答案的出处则更好。让我们构建一个工作流程,为每个答案添加一个参考链接。
path: /tmp/hn
writable: false