本文是txtai的教程系列的一部分,txtai是AI驱动的语义搜索平台。
txtai执行机器学习工作流程以转换数据并构建AI驱动的语义搜索应用程序。
TXTAI长期以来一直支持工作流程。工作流程将机器学习模型的输入和输出连接在一起,以创建强大的转换和处理功能。
最近对“模型提示”引起了人们的兴趣,这是构建任务的自然语言描述并将其传递给大型语言模型(LLM)的过程。 TXTAI最近改善了对任务模板的支持,该模板从一组参数中构建字符串输出。
本文演示了如何使用TXTAI工作流程应用及时模板并将这些任务链接在一起。
安装依赖项
安装txtai
和所有依赖项。
# Install txtai
pip install txtai[api]
及时的工作流程
首先,我们将考虑使用一系列模型提示来构建工作流程。此工作流使用语句和目标语言创建有条件的翻译。另一个任务读取输出文本并检测语言。
此工作流使用序列管道。序列管道将拥抱的面序列加载到推理的序列模型中,在这种情况下为FLAN-T5。序列管道采取提示为输入并输出模型推断结果。
重要的是要注意,管道只是一个可可的功能。它可以轻松地用对外部API的调用来代替。
from txtai.pipeline import Sequences
from txtai.workflow import Workflow, TemplateTask
# Create sequences pipeline
sequences = Sequences("google/flan-t5-large")
# Define workflow or chaining of tasks together.
workflow = Workflow([
TemplateTask(
template="Translate '{statement}' to {language} if it's English",
action=sequences
),
TemplateTask(
template="What language is the following text? {text}",
action=sequences
)
])
inputs = [
{"statement": "Hello, how are you", "language": "French"},
{"statement": "Hallo, wie geht's dir", "language": "French"}
]
print(list(workflow(inputs)))
['French', 'German']
让我们回顾一下这里发生了什么。第一个工作流程任务有条件地将文本转换为语言,如果是英语。
第一个语句是Hello, how are you
,具有法语的目标语言。因此,该声明被翻译成法语。
第二个陈述是德语,所以它没有转换为法语。
下一步询问模型是什么语言,它正确打印了French
和German
。
YAML及时工作流程
可以使用YAML配置创建上面的相同工作流程。
sequences:
path: google/flan-t5-large
workflow:
chain:
tasks:
- task: template
template: Translate '{statement}' to {language} if it's English
action: sequences
- task: template
template: What language is the following text? {text}
action: sequences
from txtai.app import Application
app = Application("workflow.yml")
print(list(app.workflow("chain", inputs)))
['French', 'German']
正如预期的,结果相同!这是您要如何创建工作流程的偏爱问题。 YAML工作流的一个优点是可以轻松地从Workflow文件创建API。
通过API调用及时工作流程
假设您希望通过API调用可用工作流。好消息,TXTAI使用FastApi具有内置的API机制。
# Start an API service
!CONFIG=workflow.yml nohup uvicorn "txtai.api:app" &> api.log &
!sleep 60
import requests
# Run API request
requests.post("http://localhost:8000/workflow", json={"name": "chain", "elements": inputs}).json()
['French', 'German']
就像以前的步骤一样,除了通过API调用。让我们通过卷曲来跑得很好。
curl -s -X POST "http://localhost:8000/workflow" \
-H "Content-Type: application/json" \
--data @- << EOF
{
"name": "chain",
"elements": [
{"statement": "Hello, how are you", "language": "French"},
{"statement": "Hallo, wie geht's dir", "language": "French"}
]
}
EOF
["French","German"]
最后一次显示相同的输出。
如果您的主要开发环境不是Python,TXTAI确实具有JavaScript,Rust,Go和Java的API绑定。
有关API的更多信息可用here。
会话链
对话搜索是2023年的另一个重点领域。txtchat是用于构建会话搜索应用程序的框架。它严重依赖Txtai。让我们看看一个对话示例。
writable: false
cloud:
provider: huggingface-hub
container: neuml/txtai-intro
extractor:
path: google/flan-t5-large
output: reference
workflow:
search:
tasks:
- task: extractor
template: |
Answer the following question using only the context below. Give a detailed answer.
Say 'I don't have data on that' when the question can't be answered.
Question: {text}
Context:
action: extractor
- task: template
template: "{answer}\n\nReference: {reference}"
rules:
answer: I don't have data on that
app = Application("search.yml")
print(list(app.workflow("search", ["Tell me something about North America"])))
["Canada's last fully intact ice shelf has suddenly collapsed, forming a Manhattan-sized iceberg\n\nReference: 1"]
上面代码所做的第一件事是运行嵌入式搜索以构建对话上下文。然后,该上下文用于构建提示,并针对LLM进行推理。
下一个任务格式化输出,引用最佳匹配记录。在这种情况下,它只是1个ID。但是,如果ID是URL或有逻辑将ID格式化回唯一的参考字符串。
txtchat项目对此有更多的内容,请查看!
包起来
本文介绍了如何通过一系列结果构建及时模板和任务链。 TXTAI长期以来一直有一个强大而有效的工作流框架来将模型连接在一起。这可能是小型且简单的模型和/或大型型号的提示。继续尝试!