精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基于Prefect、Weave和RAGAS的RAG應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn) 原創(chuàng)

發(fā)布于 2024-8-12 08:23
瀏覽
0收藏

本文介紹了RAG應(yīng)用程序開(kāi)發(fā)中的一些增強(qiáng)技術(shù),例如加入線(xiàn)下/線(xiàn)上評(píng)估、借助Prefect自動(dòng)提取數(shù)據(jù)等。

幾個(gè)月前,我發(fā)布了一款電影搜索應(yīng)用程序“Film Search”,這是一個(gè)檢索增強(qiáng)生成(RAG)應(yīng)用程序,旨在根據(jù)用戶(hù)查詢(xún)實(shí)現(xiàn)電影推薦。例如,用戶(hù)可能會(huì)發(fā)出下面的英文提問(wèn):

“Find me drama movies in English that are less than 2 hours long and feature dogs.”

中文意思:“給我找一部長(zhǎng)度不到2小時(shí)、以狗為主角的英文劇情片。”

之后,用戶(hù)會(huì)收到類(lèi)似下面這樣的英文推薦:

Title of Film: Hachi: A Dog’s Tale

Runtime: 93 minutes
Release Year: 2009
Streaming: Not available for streaming
This film tells the poignant true story of Hachiko, an Akita dog known for his remarkable loyalty to his owner. The emotional depth and the themes of friendship and loyalty resonate strongly, making it a touching drama that showcases the profound bond between humans and dogs. It’s perfect for anyone looking for a heartfelt story that highlights the importance of companionship.

對(duì)應(yīng)的中文回答意思是:

電影名稱(chēng):忠犬八公的故事

片長(zhǎng):93分鐘

發(fā)行年份:2009

流媒體:不可用于流媒體

這部電影告訴了秋田犬Hachiko的辛酸真實(shí)故事,這種犬以其對(duì)主人的非凡忠誠(chéng)而聞名。情感深度以及友誼和忠誠(chéng)的主題引起了強(qiáng)烈的共鳴,使其成為一部感人的電影,展示了人與狗之間的深厚友誼。它非常適合想尋找一個(gè)發(fā)自?xún)?nèi)心的故事來(lái)強(qiáng)調(diào)友誼重要性的人。

這個(gè)軟件不僅僅是一個(gè)簡(jiǎn)單的RAG應(yīng)用程序。該程序中使用了所謂的自查詢(xún)檢索。這意味著,機(jī)器人接受用戶(hù)的查詢(xún),并通過(guò)添加元數(shù)據(jù)過(guò)濾器對(duì)其進(jìn)行轉(zhuǎn)換。這樣就確保了拉入聊天模型上下文的任何文檔都遵守用戶(hù)查詢(xún)?cè)O(shè)置的約束。有關(guān)更多信息,我建議查看我文后提供的我早些時(shí)候發(fā)表的文章的鏈接。

但遺憾的是,該應(yīng)用程序尚存在如下一些問(wèn)題:

  • 除了通過(guò)“肉眼測(cè)試”外,并沒(méi)有進(jìn)行離線(xiàn)評(píng)估。這種測(cè)試是必要的,但還不夠。
  • 沒(méi)有提供可觀(guān)察性支持。如果查詢(xún)進(jìn)展不順利,你必須手動(dòng)調(diào)出項(xiàng)目并運(yùn)行一些特別的腳本,以便找出問(wèn)題所在。
  • 必須手動(dòng)拉入Pinecone向量數(shù)據(jù)庫(kù)。這意味著,如果一部電影從流媒體服務(wù)中撤下,這些文件很快就會(huì)過(guò)時(shí)。

在本文中,我將簡(jiǎn)要介紹對(duì)以前開(kāi)發(fā)的那款電影搜索應(yīng)用程序“Film Search”所做的一些改進(jìn),具體的改進(jìn)內(nèi)容將包括:

  • 使用RAGAS和Weave進(jìn)行離線(xiàn)評(píng)估
  • 在線(xiàn)評(píng)估和可觀(guān)察性
  • 使用Prefect自動(dòng)提取數(shù)據(jù)

在我們正式開(kāi)始之前,還有一個(gè)細(xì)節(jié)需要說(shuō)明:我發(fā)現(xiàn)“Film Search”這個(gè)名字有點(diǎn)籠統(tǒng),所以我把這個(gè)應(yīng)用程序重新命名為“Rosebud”,如下圖所示。不用多作解釋?zhuān)蚁肴魏我晃徽嬲碾娪懊远紩?huì)明白這個(gè)意思的(【譯者注】影片Citizen Kane(公民凱恩)的故事是由報(bào)業(yè)巨子凱恩臨死前說(shuō)的一個(gè)字“玫瑰花蕾”(Rosebud)引出的)。

基于Prefect、Weave和RAGAS的RAG應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

程序名字“Film Search”更改為“Rosebud”,此圖來(lái)自Unsplash網(wǎng)站

線(xiàn)下評(píng)估

能夠判斷對(duì)LLM應(yīng)用程序所做的更改是提高還是降低了程序性能,這一點(diǎn)是非常重要的。不幸的是,LLM應(yīng)用程序的評(píng)估是一個(gè)困難而新穎的領(lǐng)域。對(duì)于什么是好的評(píng)估,根本沒(méi)有達(dá)成太多的共識(shí)。

在新的程序Rosebud中,我決定解決所謂的“RAG Triad(RAG三元組):https://www.trulens.org/trulens_eval/getting_started/core_concepts/rag_triad/”問(wèn)題。這種方法由TruLens推出,TruLens是一個(gè)評(píng)估和跟蹤LLM應(yīng)用程序的平臺(tái)。

基于Prefect、Weave和RAGAS的RAG應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

RAG Triad(RAG三元組)

概括來(lái)看,三元組涵蓋了RAG應(yīng)用程序的三個(gè)方面:

  • 上下文相關(guān)性:當(dāng)用戶(hù)進(jìn)行查詢(xún)時(shí),文檔會(huì)填充聊天模型的上下文。檢索到的上下文真的有用嗎?如果沒(méi)有用,你可能需要調(diào)整文檔嵌入、分塊或元數(shù)據(jù)過(guò)濾等操作。
  • 可信度:模型的響應(yīng)是否真的基于檢索到的文檔而生成?你不希望模型編造事實(shí);RAG的全部目的是通過(guò)使用檢索到的文檔來(lái)幫助減少幻覺(jué)。
  • 答案相關(guān)性:模型的響應(yīng)是否真正回答了用戶(hù)的查詢(xún)?如果用戶(hù)詢(xún)問(wèn)“20世紀(jì)90年代制作的喜劇電影有哪些?”,該模型的答案最好只包含20世紀(jì)90時(shí)代制作的喜劇影片。

目前,已經(jīng)存在幾種方法可以嘗試評(píng)估RAG應(yīng)用程序的這三個(gè)功能。一種方法是借助人類(lèi)專(zhuān)家評(píng)估員。不幸的是,這種方法十分昂貴,而且無(wú)法擴(kuò)展。在新的程序Rosebud中,我決定使用大型數(shù)據(jù)模型進(jìn)行評(píng)估。這意味著,使用聊天模型來(lái)查看上述三個(gè)標(biāo)準(zhǔn)中的每一個(gè),并為每個(gè)標(biāo)準(zhǔn)分配0到1的分?jǐn)?shù)值。這種方法具有成本低、可擴(kuò)展性好的優(yōu)點(diǎn)。為了實(shí)現(xiàn)這一點(diǎn),我使用了RAGAS(https://github.com/explodinggradients/ragas),這是一個(gè)流行的框架,可以幫助你評(píng)估RAG應(yīng)用程序。RAGAS框架包括上述三個(gè)指標(biāo),可以很容易地使用它們來(lái)評(píng)估你的應(yīng)用程序。下面是一個(gè)代碼片段,演示了我是如何使用開(kāi)源的RAGAS框架進(jìn)行離線(xiàn)評(píng)估的:

from ragas import evaluate
from ragas.metrics import AnswerRelevancy, ContextRelevancy, Faithfulness
import weave

@weave.op()
def evaluate_with_ragas(query, model_output):
#將數(shù)據(jù)放入一個(gè)數(shù)據(jù)集對(duì)象中
data = {
"question": [query],
"contexts": [[model_output['context']]],
"answer": [model_output['answer']]
}
dataset = Dataset.from_dict(data)

# 定義要判斷的指標(biāo)
metrics = [
AnswerRelevancy(),
ContextRelevancy(),
Faithfulness(),
]

judge_model = ChatOpenAI(model=config['JUDGE_MODEL_NAME'])
embeddings_model = OpenAIEmbeddings(model=config['EMBEDDING_MODEL_NAME'])

evaluation = evaluate(dataset=dataset, metrics=metrics, llm=judge_model, embeddings=embeddings_model)

return {
"answer_relevancy": float(evaluation['answer_relevancy']),
"context_relevancy": float(evaluation['context_relevancy']),
"faithfulness": float(evaluation['faithfulness']),
}
def run_evaluation():
#初始化聊天模型
model = rosebud_chat_model()
# 定義評(píng)估問(wèn)題
questions = [
{"query": "Suggest a good movie based on a book."},  # Adaptations
{"query": "Suggest a film for a cozy night in."},  # Mood-Based
{"query": "What are some must-watch horror movies?"},  # Genre-Specific
...
# 共20個(gè)問(wèn)題
]
#創(chuàng)建Weave評(píng)估對(duì)象
evaluation = weave.Evaluation(dataset=questions, scorers=[evaluate_with_ragas])
#運(yùn)行評(píng)估
asyncio.run(evaluation.evaluate(model))
if __name__ == "__main__":
weave.init('film-search')
run_evaluation()

在上述代碼中,有幾點(diǎn)注意事項(xiàng):

  • 有20個(gè)問(wèn)題和3個(gè)評(píng)判標(biāo)準(zhǔn),你會(huì)看到60次LLM調(diào)用僅需要一次評(píng)估!然而,接下來(lái)的情況變得更糟了:通過(guò)調(diào)用函數(shù)rosebud_chat_model,每個(gè)查詢(xún)都需要兩次調(diào)用。其中,一個(gè)用于構(gòu)造元數(shù)據(jù)過(guò)濾器,另一個(gè)用于提供答案;所以,實(shí)際上這是對(duì)單個(gè)模型計(jì)算的120次調(diào)用!我評(píng)估的所有模型都是使用新的gpt-4o-mini,我也強(qiáng)烈推薦使用這種模型。根據(jù)我的經(jīng)驗(yàn),每次評(píng)估的調(diào)用費(fèi)用為0.05美元。
  • 請(qǐng)注意,我們使用了異步的asyncio.run運(yùn)行模型計(jì)算。這種情況下,使用異步調(diào)用是比較合適的,因?yàn)槟悴幌胍粋€(gè)接一個(gè)地以順序方式評(píng)估每個(gè)問(wèn)題。相反,借助于asyncio框架,我們可以在等待之前的I/O操作完成時(shí)開(kāi)始評(píng)估其他的問(wèn)題。
  • 一次評(píng)估共有20個(gè)問(wèn)題。這些涵蓋了用戶(hù)可能會(huì)提問(wèn)的各種典型的電影查詢(xún)。這些大多是我自己想出的,但在實(shí)踐中,最好使用生產(chǎn)中用戶(hù)實(shí)際提出的查詢(xún)。
  • 請(qǐng)注意正在使用的weap.init和@weap.op裝飾器。它們是Weights & Biases(W&B) AI開(kāi)發(fā)者平臺(tái)提供的新的Weave庫(kù)的一部分。其中,Weave庫(kù)是對(duì)傳統(tǒng)W&B庫(kù)的補(bǔ)充,專(zhuān)注于LLM應(yīng)用程序。它允許你通過(guò)使用簡(jiǎn)單的@weap.op裝飾器來(lái)捕獲LLM的輸入和輸出。它還允許你使用weave.Evaluation(…)評(píng)估結(jié)果。通過(guò)集成RAGAS來(lái)執(zhí)行評(píng)估,并集成Weave框架來(lái)捕獲和記錄它們,我們便有了一個(gè)強(qiáng)大的組合,可以幫助GenAI開(kāi)發(fā)人員以迭代方式不斷改進(jìn)他們的應(yīng)用程序。此外,你還可以記錄下模型延遲、所需成本等其他信息。

基于Prefect、Weave和RAGAS的RAG應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

集成Weave+RAGAS的示例程序

從理論上講,現(xiàn)在我們可以調(diào)整一個(gè)超參數(shù)(如溫度),重新運(yùn)行評(píng)估,看看調(diào)整是否有積極或消極的影響了。但遺憾的是,在實(shí)踐中,我發(fā)現(xiàn)大型語(yǔ)言評(píng)判者的評(píng)判很挑剔,而且我也不是唯一一個(gè)發(fā)現(xiàn)這一點(diǎn)的人(https://x.com/aparnadhinak/status/1748368364395721128)。

大型語(yǔ)言模型評(píng)估似乎不太擅長(zhǎng)使用浮點(diǎn)數(shù)來(lái)評(píng)估這些指標(biāo)。相反,它們似乎在分類(lèi)方面做得更好些,例如回答“同意/不同意”這樣的問(wèn)題。當(dāng)前,RAGAS尚不支持使用LLM評(píng)判者進(jìn)行分類(lèi)。直接手寫(xiě)有關(guān)代碼似乎也并不難,也許在未來(lái)的更新中,我可能會(huì)自己嘗試一下。

在線(xiàn)評(píng)估

離線(xiàn)評(píng)估有助于了解調(diào)整超參數(shù)如何影響性能,在我看來(lái),在線(xiàn)評(píng)估要有用得多。在新的程序Rosebud中,我現(xiàn)在已經(jīng)使用“同意/不同意”的方案——使用每個(gè)響應(yīng)底部的兩個(gè)相應(yīng)按鈕來(lái)提供反饋。

基于Prefect、Weave和RAGAS的RAG應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

在線(xiàn)反饋示例

當(dāng)用戶(hù)點(diǎn)擊上圖中底部任一按鈕時(shí),就會(huì)被告知他們的反饋已被記錄。以下給出在Streamlit應(yīng)用程序界面中如何實(shí)現(xiàn)這一點(diǎn)的代碼片段:

def start_log_feedback(feedback):
print("Logging feedback.")
st.session_state.feedback_given = True
st.session_state.sentiment = feedback
thread = threading.Thread(target=log_feedback, args=(st.session_state.sentiment,
st.session_state.query,
st.session_state.query_constructor,
st.session_state.context,
st.session_state.response))
thread.start()
def log_feedback(sentiment, query, query_constructor, context, response):
ct = datetime.datetime.now()
wandb.init(project="film-search",
name=f"query: {ct}")
table = wandb.Table(columns=["sentiment", "query", "query_constructor", "context", "response"])
table.add_data(sentiment,
query,
query_constructor,
context,
response
)
wandb.log({"Query Log": table})
wandb.finish()

請(qǐng)注意,向W&B發(fā)送反饋的過(guò)程是在單獨(dú)的線(xiàn)程上運(yùn)行的,而不是在主線(xiàn)程上運(yùn)行。這是為了防止用戶(hù)在等待日志記錄完成時(shí)被卡住幾秒鐘。

我們使用了一個(gè)W&B表格用于存儲(chǔ)反饋。表中記錄了五個(gè)數(shù)值:

  • 情緒(Sentiment):用戶(hù)是否點(diǎn)擊了拇指圖標(biāo)(同意/不同意)。
  • 查詢(xún)(Query):用戶(hù)的查詢(xún),例如,查找長(zhǎng)度不到2小時(shí)的英文戲劇電影和故事狗。
  • Query_Constructor:查詢(xún)構(gòu)造函數(shù)的結(jié)果,它重寫(xiě)用戶(hù)的查詢(xún),并在必要時(shí)包含元數(shù)據(jù)過(guò)濾,例如:
{
"query": "drama English dogs", 
"filter": {
"operator": "and", 
"arguments": [
{
"comparator": "eq", "attribute": "Genre", "value": "Drama"
}, 
{
"comparator": "eq", "attribute": "Language", "value": "English"
}, 

{
"comparator": "lt", "attribute": "Runtime (minutes)", "value": 120
}
]
},
}
  • 上下文(Context):基于重建的查詢(xún)檢索到的上下文,例如標(biāo)題“Title: Hachi: A Dog’s Tale. Overview: A drama based on the true story of a college professor’s…”。
  • 回應(yīng)(Response):模型的回應(yīng)。

所有這些都可以方便地記錄在與前面顯示的Weave評(píng)估相同的項(xiàng)目中。現(xiàn)在,當(dāng)查詢(xún)“不同意”情況時(shí),只需按下拇指向下的圖標(biāo)按鈕即可查看到底發(fā)生了什么。這將有助于使推薦應(yīng)用程序Rosebud的迭代和改進(jìn)加快速度。

基于Prefect、Weave和RAGAS的RAG應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

模型響應(yīng)可觀(guān)測(cè)性展示(請(qǐng)注意左側(cè)的W&B和Weave之間的無(wú)縫過(guò)渡)

借助Prefect自動(dòng)提取數(shù)據(jù)

為了使推薦程序Rosebud保持準(zhǔn)確性,將數(shù)據(jù)提取和上傳到Pinecone向量數(shù)據(jù)庫(kù)的過(guò)程自動(dòng)化非常重要。對(duì)于這個(gè)任務(wù),我選擇使用Prefect(https://www.prefect.io/)。Prefect是一個(gè)流行的工作流編排工具。我一直在尋找一些輕量級(jí)、易于學(xué)習(xí)和Python風(fēng)格的程序。最后,我在Prefect中找到了這一切。

基于Prefect、Weave和RAGAS的RAG應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

Prefect提供的用于提取和更新Pinecone向量存儲(chǔ)的自動(dòng)流程

Prefect支持提供多種方式來(lái)規(guī)劃你的工作流程。我決定使用帶有自動(dòng)基礎(chǔ)設(shè)施配置的推送工作池方式。我發(fā)現(xiàn)這種設(shè)置在簡(jiǎn)單性和可配置性之間取得了平衡。它允許用戶(hù)委托Prefect自動(dòng)配置在所選云提供商中運(yùn)行流所需的所有基礎(chǔ)設(shè)施。經(jīng)過(guò)幾番權(quán)衡后,我選擇在A(yíng)zure上部署,但是在GCP或AWS上部署的話(huà)只需要更改幾行代碼即可。有關(guān)更多詳細(xì)信息,請(qǐng)參閱pinecone_flow.py文件。下面代碼只是提供了一個(gè)簡(jiǎn)化的流程:

@task
def start():
"""
啟動(dòng):檢查一切工作或失敗的速度快!
"""
#打印出一些調(diào)試信息
print("Starting flow!")
# 確保用戶(hù)已經(jīng)設(shè)置了適當(dāng)?shù)沫h(huán)境變量
assert os.environ['LANGCHAIN_API_KEY']
assert os.environ['OPENAI_API_KEY']
...
@task(retries=3, retry_delay_seconds=[1, 10, 100])
def pull_data_to_csv(config):
TMBD_API_KEY = os.getenv('TMBD_API_KEY')
YEARS = range(config["years"][0], config["years"][-1] + 1)
CSV_HEADER = ['Title', 'Runtime (minutes)', 'Language', 'Overview', ...]

for year in YEARS:
# 獲取所有在{Year}中制作的電影的id列表
movie_list = list(set(get_id_list(TMBD_API_KEY, year)))

FILE_NAME = f'./data/{year}_movie_collection_data.csv'

#生成文件
with open(FILE_NAME, 'w') as f:
writer = csv.writer(f)
writer.writerow(CSV_HEADER)
...
print("Successfully pulled data from TMDB and created csv files in data/")
@task
def convert_csv_to_docs():
#從所有csv文件中加載數(shù)據(jù)
loader = DirectoryLoader(
...
show_progress=True)
docs = loader.load()
metadata_field_info = [
AttributeInfo(name="Title",
description="The title of the movie", type="string"),
AttributeInfo(name="Runtime (minutes)",
description="The runtime of the movie in minutes", type="integer"),
...
]

def convert_to_list(doc, field):
if field in doc.metadata and doc.metadata[field] is not None:
doc.metadata[field] = [item.strip()
for item in doc.metadata[field].split(',')]
...
fields_to_convert_list = ['Genre', 'Actors', 'Directors',
'Production Companies', 'Stream', 'Buy', 'Rent']
...
# 將'overview' 和'keywords' 設(shè)置為'page_content',其他字段設(shè)置為'metadata'
for doc in docs:
#將page_counte字符串解析為字典
page_content_dict = dict(line.split(": ", 1)
for line in doc.page_content.split("\n") if ": " in line)

doc.page_content = (
'Title: ' + page_content_dict.get('Title') +
'. Overview: ' + page_content_dict.get('Overview') +
...
)
...
print("Successfully took csv files and created docs")

return docs
@task
def upload_docs_to_pinecone(docs, config):
# 創(chuàng)建空索引
PINECONE_KEY, PINECONE_INDEX_NAME = os.getenv(
'PINECONE_API_KEY'), os.getenv('PINECONE_INDEX_NAME')

pc = Pinecone(api_key=PINECONE_KEY)

# 目標(biāo)索引和檢查狀態(tài)
pc_index = pc.Index(PINECONE_INDEX_NAME)
print(pc_index.describe_index_stats())
embeddings = OpenAIEmbeddings(model=config['EMBEDDING_MODEL_NAME'])
namespace = "film_search_prod"
PineconeVectorStore.from_documents(
docs,
...
)
print("Successfully uploaded docs to Pinecone vector store")
@task
def publish_dataset_to_weave(docs):
#初始化Weave
weave.init('film-search')
rows = []
for doc in docs:
row = {
'Title': doc.metadata.get('Title'),
'Runtime (minutes)': doc.metadata.get('Runtime (minutes)'),
...
}
rows.append(row)

dataset = Dataset(name='Movie Collection', rows=rows)
weave.publish(dataset)
print("Successfully published dataset to Weave")

@flow(log_prints=True)
def pinecone_flow():
with open('./config.json') as f:
config = json.load(f)
start()
pull_data_to_csv(config)
docs = convert_csv_to_docs()
upload_docs_to_pinecone(docs, config)
publish_dataset_to_weave(docs)
if __name__ == "__main__":
pinecone_flow.deploy(
name="pinecone-flow-deployment",
work_pool_name="my-aci-pool",
cron="0 0 * * 0",
image=DeploymentImage(
name="prefect-flows:latest",
platform="linux/amd64",
)
)

請(qǐng)注意,將Python函數(shù)轉(zhuǎn)換為Prefect流是非常簡(jiǎn)單的事情。你只需要在主函數(shù)上使用@task裝飾器和@flow裝飾器來(lái)設(shè)計(jì)一些子函數(shù)。還要注意,在將文檔上傳到Pinecone向量數(shù)據(jù)庫(kù)后,我們流程的最后一步是將數(shù)據(jù)集發(fā)布到Weave。這對(duì)于再現(xiàn)性很重要。為了學(xué)習(xí)Prefect的基礎(chǔ)知識(shí),我建議你瀏覽一下他們官網(wǎng)上的教程(https://docs.prefect.io/latest/tutorial/)。

在上面腳本的最后,我們看到部署是如何在Prefect中完成的。

  • 我們需要為部署提供一個(gè)名稱(chēng),這個(gè)名稱(chēng)是自由決定的。
  • 我們還需要指定一個(gè)work_pool_name。Prefect中的推送工作池會(huì)自動(dòng)將任務(wù)發(fā)送到無(wú)服務(wù)器計(jì)算機(jī),而不需要中介。此名稱(chēng)需要與用于創(chuàng)建池的名稱(chēng)相匹配,我們將在下面看到。
  • 你還需要指定一個(gè)cron,它是計(jì)時(shí)器的縮寫(xiě)。這允許你指定重復(fù)工作流的頻率。值“0 0**0”表示每周重復(fù)此工作流。
  • 最后,你需要指定一個(gè)DeploymentImage。在這里,你可以指定名稱(chēng)和平臺(tái)。名稱(chēng)是任意的,但平臺(tái)不是。由于我想部署到Azure計(jì)算實(shí)例,而這些實(shí)例運(yùn)行Linux操作系統(tǒng),所以我在DeploymentImage中指定這一點(diǎn)很重要。

要使用命令行方式在A(yíng)zure上部署此流,請(qǐng)運(yùn)行以下命令:

prefect work-pool create --type azure-container-instance:push --provision-infra my-aci-pool
prefect deployment run 'get_repo_info/my-deployment'

這些命令將自動(dòng)在A(yíng)zure上提供所有必要的基礎(chǔ)設(shè)施。這包括一個(gè)Azure容器注冊(cè)表(ACR),它將保存一個(gè)Docker映像,其中包含目錄中的所有文件以及requirements.txt中列出的任何必要的依賴(lài)庫(kù)。它還將包括一個(gè)Azure容器實(shí)例(ACI)標(biāo)識(shí),該標(biāo)識(shí)將具有部署具有上述Docker映像的容器所需的權(quán)限。最后,使用deployment run命令安排每周運(yùn)行的代碼。你可以通過(guò)Prefect控制面板來(lái)查看你的流是否運(yùn)行:

基于Prefect、Weave和RAGAS的RAG應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)-AI.x社區(qū)

Prefect中的流正在成功運(yùn)行的情形

通過(guò)每周更新我的Pinecone向量庫(kù),我可以確保來(lái)自程序Rosebud的推薦結(jié)果準(zhǔn)確。

總結(jié)

在本文中,我介紹了我的改進(jìn)后的Rosebud應(yīng)用程序的一些改進(jìn)方案。這包括整合離線(xiàn)和在線(xiàn)評(píng)估的過(guò)程,以及自動(dòng)更新我的Pinecone向量庫(kù)等。

本文還有未提及的其他一些改進(jìn),包括:

  • 在電影數(shù)據(jù)中包括電影數(shù)據(jù)庫(kù)的評(píng)級(jí)。現(xiàn)在,你可以使用“好評(píng)電影(highly rated films)”,這種聊天模式能夠過(guò)濾掉7/10以上的電影。
  • 升級(jí)了聊天模式。現(xiàn)在查詢(xún)和摘要模型使用的是模型gpt-4o-mini。請(qǐng)回想一下,LLM判斷模型也是使用了模型gpt-4o-mini。
  • 嵌入模型從text-Embedding-ada-002升級(jí)為text-embeading-3-small。
  • 現(xiàn)在的年份跨越1950年至2023年,而不是從1920年開(kāi)始。1920年至1950年的電影數(shù)據(jù)質(zhì)量不高,只有糟糕的推薦。
  • 用戶(hù)界面更加清晰,所有關(guān)于項(xiàng)目的細(xì)節(jié)都放在側(cè)邊欄中。
  • 程序在GitHub上的文檔得到了進(jìn)一步的改進(jìn)。
  • 修復(fù)了一些錯(cuò)誤。

正如文章一開(kāi)始提到的,該應(yīng)用程序現(xiàn)在可以100%免費(fèi)使用!在可預(yù)見(jiàn)的未來(lái),我將為查詢(xún)買(mǎi)單(因此選擇gpt-4o-mini而不是更昂貴的gpt-4o)。我真的很想獲得在生產(chǎn)環(huán)境中運(yùn)行應(yīng)用程序的經(jīng)驗(yàn),并讓我的讀者測(cè)試Rosebud,這是一個(gè)很好的方法。萬(wàn)一應(yīng)用程序真的“火爆”了,我將不得不想出其他的融資模式。但這會(huì)是一個(gè)很大的問(wèn)題。

下面,請(qǐng)盡情享受使用Rosebud程序搜索精彩電影的樂(lè)趣吧!

譯者介紹

朱先忠,51CTO社區(qū)編輯,51CTO專(zhuān)家博客、講師,濰坊一所高校計(jì)算機(jī)教師,自由編程界老兵一枚。

原文標(biāo)題:Productionizing a RAG App with Prefect, Weave, and RAGAS,作者:Ed Izaguirre

鏈接:??https://towardsdatascience.com/productionizing-a-rag-app-04c857e0966e?。

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦
欧美在线亚洲| 日韩精品视频中文字幕| 国产午夜精品理论片a级大结局| 日韩av成人在线观看| 亚洲一二三精品| 国产麻豆一区二区三区| 香蕉乱码成人久久天堂爱免费| 精品国产一区二区三区免费| 中文亚洲av片在线观看| 午夜精品999| 亚洲天堂男人天堂| 337p日本欧洲亚洲大胆张筱雨| 亚洲人成在线网站| 亚洲欧美日韩一区二区 | av中文字幕一区| 国产精品激情av电影在线观看| 五月天丁香激情| 精品国产一区二区三区久久久樱花 | 久久久国产午夜精品| 3d蒂法精品啪啪一区二区免费| 久久免费激情视频| 在线看片不卡| 中文字幕日本精品| 黄色av网址在线观看| 国产精品国产三级在线观看| 91久久精品一区二区三区| 日本香蕉视频在线观看| 91福利在线视频| 91丨九色丨国产丨porny| 91久久大香伊蕉在人线| 一本到在线视频| 久久黄色影院| 97碰在线观看| 免费三片在线播放| 在线国产一区| 另类美女黄大片| 影音先锋男人看片资源| 国产日韩欧美一区二区三区| 亚洲精品国精品久久99热一| 精品人妻一区二区免费| 国产精品xnxxcom| 欧美喷水一区二区| 一道本视频在线观看| 欧美理论影院| 欧美性xxxxhd| av网址在线观看免费| 欧美13videosex性极品| 亚洲成人激情av| 男人插女人视频在线观看| 超碰人人在线| 亚洲欧美国产毛片在线| 成年人免费观看的视频| 色多多视频在线观看| 国产精品伦理在线| 亚洲一区尤物| 黄色网在线看| 亚洲欧美日韩精品久久久久| 成人在线观看www| 国产激情在线视频| 亚洲九九爱视频| 欧美 日韩 国产精品| 免费看电影在线| 亚洲成人自拍网| 国产资源在线视频| 卡通欧美亚洲| 欧美日韩一级片在线观看| 男人添女人下面免费视频| 欧美视频免费看| 91精品国产91久久久久久一区二区| 99中文字幕在线| 日韩高清在线观看一区二区| 精品国产99国产精品| 野花社区视频在线观看| 国产精品羞羞答答在线观看| 色小说视频一区| 国产精品白丝喷水在线观看| 中文字幕av亚洲精品一部二部| 欧美情侣性视频| 天天操天天爽天天干| 国产精品一区亚洲| 国产精品精品久久久久久| 国产又粗又黄又爽| 国产ts人妖一区二区| 九九久久99| 69久久夜色| 亚洲激情五月婷婷| 91国视频在线| 日韩一级特黄| 亚洲国产小视频在线观看| 一区二区黄色片| 91成人免费| 91成人福利在线| 亚洲一区二区天堂| av亚洲精华国产精华| 日本午夜一区二区三区| jizzjizz亚洲| 色久优优欧美色久优优| 视频区 图片区 小说区| 香蕉视频一区| 欧美老少配视频| 日日夜夜狠狠操| 国产精品自拍三区| 日韩福利一区二区三区| 蜜臀av在线| 欧美色图一区二区三区| 国产视频久久久久久| 日韩免费av| 69久久夜色精品国产69| 国产又大又粗又硬| 久久久久久亚洲综合影院红桃| 在线视频欧美一区| 中文字幕乱码在线播放| 欧美成人猛片aaaaaaa| 又色又爽的视频| 香蕉亚洲视频| 成人激情av| 免费观看久久久久| 在线观看亚洲专区| 亚洲一区二区三区四区五区六区| 午夜精品毛片| 国产精品视频成人| 日韩亚洲视频在线观看| 一区二区国产视频| 色婷婷一区二区三区在线观看| 九九在线高清精品视频| 91av视频在线观看| 亚洲av无码乱码国产精品| 国产精品久久夜| 久久精品视频91| 宅男在线一区| 欧洲成人在线视频| 污视频网站免费观看| 亚洲电影一区二区三区| 无码人妻丰满熟妇区毛片蜜桃精品| 色爱综合网欧美| 国产精品美女午夜av| 黄色在线观看网| 色婷婷综合久色| 亚洲狠狠婷婷综合久久久久图片| 99精品免费网| 久久99蜜桃综合影院免费观看| 丁香花在线观看完整版电影| 欧美电影精品一区二区| 免费无遮挡无码永久在线观看视频| 狠狠狠色丁香婷婷综合激情 | 日韩成人影视| 欧美日韩午夜在线视频| 国精产品视频一二二区| 久久精品国产第一区二区三区| 亚洲精品中文字幕在线| 日韩国产一二三区| 久久久国产视频| 国产日韩欧美一区二区东京热| 亚洲三级电影网站| 男生和女生一起差差差视频| 亚洲乱码在线| 99久久99久久| 神马久久午夜| 亚洲午夜久久久久久久| 99re热视频| 中文字幕在线一区二区三区| 在线播放免费视频| 韩国精品一区二区三区| 精品视频一区在线| 日韩一级二级| 欧美成人免费一级人片100| 精品人妻一区二区三区三区四区| 一区二区三区四区高清精品免费观看| 日本精品一二三区| 亚洲一区中文| 亚洲精品在线免费看| 日韩精品免费视频一区二区三区| 国内精品伊人久久| 国产精品ⅴa有声小说| 欧美蜜桃一区二区三区 | 欧美性色视频在线| 日韩视频在线观看免费视频| 国内国产精品久久| 亚洲乱码日产精品bd在线观看| 美女网站色精品尤物极品姐弟| 日韩av第一页| 主播国产精品| 亚洲美女免费精品视频在线观看| 中文字幕丰满人伦在线| 亚洲一二三专区| 久久久久久九九九九九| 狠狠色综合播放一区二区| 我的公把我弄高潮了视频| 国产成人三级| http;//www.99re视频| 欧美7777| 欧美成人中文字幕在线| 日本一区高清| 日韩视频在线你懂得| 狠狠人妻久久久久久| 亚洲视频狠狠干| 五十路六十路七十路熟婆| 精品一二三四区| 国产 福利 在线| 亚洲精品91| 品久久久久久久久久96高清| 日韩欧美另类中文字幕| 国产精品激情av在线播放| xxxx在线视频| 久久精品99无色码中文字幕| 你懂得在线网址| 日韩欧美国产电影| 中文字幕一区二区三区免费看| 亚洲曰韩产成在线| 国产免费嫩草影院| 91色综合久久久久婷婷| 麻豆精品国产传媒| 久久国产精品99久久人人澡| 男人揉女人奶房视频60分| 影音先锋日韩精品| 一区二区成人国产精品 | 亚洲裸体xxxx| 韩国av免费在线观看| 欧美军同video69gay| 四虎成人在线观看| 香蕉久久一区二区不卡无毒影院| 亚洲伦理一区二区三区| 久久久久久久久久久99999| 国产精品果冻传媒| 国产成人综合亚洲91猫咪| 日韩网址在线观看| 国产日韩欧美三级| 2018中文字幕第一页| 中文视频一区| 黄色一级片网址| 91超碰成人| 国产人妻互换一区二区| 国产精品99在线观看| 午夜精品区一区二区三| 国产精品亚洲片在线播放| 久久精品日韩| 青青草这里只有精品| 精品不卡一区二区三区| 国产一区调教| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 免费黄色在线| 久久久精品视频在线观看| 三级外国片在线观看视频| 国产一区二区三区中文 | 欧美高清视频看片在线观看| 国产欧美日韩一区二区三区| 91亚洲无吗| 精品免费日产一区一区三区免费| 精品三级av在线导航| 精品欧美一区二区三区久久久| 九九热hot精品视频在线播放| 国产精品毛片一区视频| 国产精品天天看天天狠| 国产有色视频色综合| 欧美激情15p| 日本一区二区三区视频在线观看| 久久爱www成人| 亚洲mv在线看| 中文无码久久精品| 国产二区视频在线| 午夜在线精品偷拍| 久久久精品三级| 久久丁香综合五月国产三级网站| www激情五月| 国v精品久久久网| 中文字幕一区二区久久人妻网站 | 久久精品一级片| 亚洲aⅴ怡春院| 日韩综合在线观看| 欧美日韩亚洲综合一区二区三区| 国产免费一区二区三区免费视频| 日韩欧美国产一区二区在线播放 | 在线观看亚洲视频| 国产在线高清视频| 久久久久久久久久久久av| 亚洲黄色网址| 91久久精品国产91性色| 成人盗摄视频| 日韩av图片| 午夜精品国产| 成人中文字幕av| 国产制服丝袜一区| 日本xxxx裸体xxxx| 国产精品激情偷乱一区二区∴| 欧美精品一级片| 色就色 综合激情| 成人av免费播放| 亚洲欧洲在线视频| 国产调教视频在线观看| 97精品国产91久久久久久| 成人免费在线观看视频| 国产精品播放| 日韩在线理论| 美女av免费在线观看| 极品美女销魂一区二区三区免费| 性色av蜜臀av色欲av| 亚洲欧美在线观看| youjizz在线视频| 日韩欧美的一区| 在线观看国产原创自拍视频| 午夜美女久久久久爽久久| 韩国成人在线| 精品久久久久久乱码天堂| 欧美mv日韩| 国产裸体舞一区二区三区| 国产精品综合网| 91免费在线看片| 色美美综合视频| 欧美一级性视频| 久久久久99精品久久久久| 9i看片成人免费高清| 国产经品一区二区| 91精品国产乱码久久久久久| 欧美国产日韩在线播放| 不卡在线视频中文字幕| 国产午夜精品理论片| 欧美亚洲综合久久| 外国精品视频在线观看| 欧美日韩国产va另类| 四虎视频在线精品免费网址| 青娱乐一区二区| 欧美亚洲专区| 亚洲黄色免费在线观看| 亚洲一区二区3| 国产哺乳奶水91在线播放| 中文字幕一区二区三区电影| 中文字幕色婷婷在线视频 | 日韩一区欧美| 狠狠躁狠狠躁视频专区| 久久这里只有精品首页| 中日韩精品视频在线观看| 日韩精品一区二区三区在线 | 欧美日韩美女在线观看| 亚洲精品国产一区二| 欧美另类精品xxxx孕妇| 亚洲免费看片| 99热这里只有精品7| 久久国产精品一区二区| 大地资源高清在线视频观看| 欧美日韩精品欧美日韩精品| 9191在线| 91免费高清视频| 欧美不卡高清| www.555国产精品免费| 亚洲一区自拍偷拍| 亚洲精品无遮挡| 午夜精品久久久99热福利| 国内精品偷拍| 国产精品免费入口| 久久久91精品国产一区二区精品| 国产伦精品一区二区三区视频我| 亚洲欧美成人精品| 日本一区二区电影| 一区二区不卡视频| 国产精品一区二区久久不卡| 欧美日韩国产精品综合| 亚洲第一av网站| 欧亚在线中文字幕免费| 欧美日韩一区在线视频| 日本aⅴ免费视频一区二区三区| 少妇视频在线播放| 91精品国产色综合久久不卡电影| 午夜av在线免费观看| 国产一区高清视频| 丝袜诱惑亚洲看片| 日韩在线视频免费看| 欧美成人一区二区三区片免费| 98色花堂精品视频在线观看| 欧美日韩国产精品一卡| 捆绑紧缚一区二区三区视频| 欧美成人aaa片一区国产精品| 亚洲福利视频专区| 欧美aaa视频| av动漫在线免费观看| 91在线高清观看| 中文字幕永久免费视频| 久久视频在线播放| 麻豆视频一区| 亚洲一级免费观看| 亚洲最大色网站| 国产无套粉嫩白浆在线2022年| 成人日韩av在线| 亚洲一区中文| 天天天天天天天天操| 日韩精品黄色网| 999精品视频在线观看| 尤物av无码色av无码| 国产精品久久久久桃色tv| 欧美 日韩 综合| 国产精品免费观看在线| 狠狠色丁香久久综合频道| 日本xxxxxxxxx18| 精品久久久久久久人人人人传媒 | 香蕉视频久久久| 欧美成人国产一区二区| 久久99久久99精品免观看软件| 亚洲天堂第一区| 国产丝袜欧美中文另类| 亚洲精品久久久久久久久久 | 国产成人ay|