الگوهای سریع و زنجیره وظایف

این مقاله بخشی از یک سری آموزشی در مورد txtai، یک پلت فرم جستجوی معنایی مبتنی بر هوش مصنوعی است.
txtai گردشهای کاری یادگیری ماشینی را برای تبدیل دادهها و ساخت اپلیکیشنهای جستجوی معنایی مبتنی بر هوش مصنوعی اجرا میکند.
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 ایجاد کرد.
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 این است که یک API به راحتی از فایل گردش کار ایجاد می شود.
فرض کنید می خواهید گردش کار از طریق تماس API در دسترس باشد. خوب خبر خوب، txtai دارای مکانیزم API داخلی با استفاده از FastAPI است.
# 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 اجرا کنیم.
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"]
آخرین بار، همان خروجی نشان داده می شود.
اگر محیط توسعه اولیه شما پایتون نیست، txtai دارای پیوندهای API برای جاوا اسکریپت، Rust، Go و جاوا است.
اطلاعات بیشتر در مورد API در اینجا موجود است.
جستجوی مکالمه یکی دیگر از حوزه های مهم تمرکز در سال 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"]
اولین کاری که کد بالا انجام می دهد این است که جستجوی embeddings را برای ایجاد یک زمینه مکالمه انجام می دهد. سپس از آن زمینه برای ایجاد یک اعلان استفاده می شود و استنتاج در برابر LLM اجرا می شود.
کار بعدی خروجی ها را با ارجاع به بهترین رکورد منطبق فرمت می کند. در این مورد، فقط یک شناسه از 1 است. اما اگر شناسه یک URL باشد یا منطقی وجود داشته باشد که شناسه را به یک رشته مرجع منحصر به فرد قالب بندی کنید، این می تواند بسیار مفیدتر باشد.
پروژه txtchat چیزهای بیشتری در این مورد دارد، آن را بررسی کنید!
این مقاله نحوه ساخت الگوهای سریع و زنجیره وظایف را از طریق یک سری نتایج شرح داد. txtai مدتهاست که یک چارچوب گردش کار قوی و کارآمد برای اتصال مدلها به یکدیگر دارد. این می تواند مدل های کوچک و ساده و/یا مدل های بزرگ باشد. برو جلو و امتحان کن!