精品欧美一区二区三区在线观看 _久久久久国色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)推薦
5566中文字幕| www,av在线| 在线免费观看黄色| 国产经典欧美精品| 欧美中文字幕第一页| 奇米网一区二区| 国产精区一区二区| 欧美小视频在线观看| 亚洲第一综合| 手机在线精品视频| 六月丁香婷婷色狠狠久久| 久久免费成人精品视频| 免费看91的网站| 网站一区二区| 色婷婷av一区二区| 中文字幕色呦呦| 久久天堂电影| 国产99久久久精品| 国产精品丝袜白浆摸在线| 国产午夜精品无码| 亚洲成人三区| 国产一区二区三区高清在线观看| 九九九久久久久久久| 亚洲黄色免费看| 亚洲国产一区二区三区| 亚洲黄色一区二区三区| 青春草在线观看| 国产成人综合在线播放| 国产精品日韩在线| 啦啦啦免费高清视频在线观看| 亚洲区综合中文字幕日日| 国产视频亚洲精品| 99久久久无码国产精品性波多| 91在线亚洲| 欧美日韩人人澡狠狠躁视频| 伊人网在线免费| 亚洲精品承认| 国产午夜精品一区二区三区嫩草 | 99re视频这里只有精品| 69174成人网| 91久久国语露脸精品国产高跟| 免播放器亚洲| 91超碰caoporn97人人| 青青草免费av| 在线国产一区| 美女少妇精品视频| 91九色丨porny丨极品女神| 日韩欧美1区| 日韩中文字幕国产精品| 欧洲美熟女乱又伦| 日本大胆欧美| 最近中文字幕日韩精品| 欧日韩不卡视频| 第一社区sis001原创亚洲| 在线精品国产成人综合| 国产jk精品白丝av在线观看| 外国成人在线视频| 亚洲欧美日韩精品久久亚洲区 | 国产区精品视频在线观看豆花| 91精品久久久久久久91蜜桃| 亚洲精品国产一区二区三区| www一区二区三区| 91精品国产欧美一区二区18| 一级网站在线观看| 日韩精品成人在线观看| 欧美xxxx老人做受| 最近中文字幕无免费| 色爱av综合网| 中文字幕亚洲二区| 午夜精品久久久久99蜜桃最新版| 香蕉国产精品| 欧美激情视频一区二区| 日本三级欧美三级| 亚洲在线免费| 国产久一一精品| 国产日本精品视频| 国产成a人无v码亚洲福利| 精品国产乱码久久久久久88av | 精品久久久久久无码中文野结衣| 欧美性猛片xxxxx免费中国| 亚洲国产精品一区二区久久恐怖片| 国产青草视频在线观看| 黄频免费在线观看| 欧美视频在线一区| 搡的我好爽在线观看免费视频| 视频亚洲一区二区| 精品一区二区电影| 午夜国产小视频| 在线国产精品一区| 国产精品va在线播放| 99精品免费观看| 97se亚洲国产综合自在线观| 日韩av图片| 超碰在线观看免费| 欧美色播在线播放| 中文字幕在线视频精品| 国产精品99久久免费观看| 亚洲午夜久久久久久久| 在线看的片片片免费| 99国产精品99久久久久久粉嫩| 国产精品白嫩初高中害羞小美女| av 一区二区三区| 97精品视频在线观看自产线路二| 亚洲天堂电影网| 538在线精品| 欧美日韩免费高清一区色橹橹 | 国产精品jk白丝蜜臀av小说| 亚洲人成伊人成综合网久久久 | 91在线网站视频| av女名字大全列表| 亚洲精品视频在线| 成人午夜激情av| 麻豆一区二区麻豆免费观看| 久久精品视频免费播放| 中文字幕av影院| 国产91丝袜在线播放| 亚洲电影免费| 久久精品女人天堂av免费观看| 精品国产欧美一区二区| 91无套直看片红桃在线观看| 久久国产精品久久w女人spa| 国产a一区二区| 国产三区在线观看| 在线观看av一区| 在线观看av中文字幕| 欧美fxxxxxx另类| 国产欧美日韩91| 国产精品99999| 日韩欧美亚洲一二三区| 制服丝袜在线第一页| 一级毛片免费高清中文字幕久久网| 国产成人亚洲综合| 五月婷婷六月色| 亚洲成人免费在线| 丰满饥渴老女人hd| 亚洲一级淫片| 成人激情在线观看| 香蕉视频网站在线观看| 色噜噜狠狠色综合欧洲selulu| 中国一级特黄录像播放| 精品96久久久久久中文字幕无| 亚洲影院高清在线| 欧美成人三区| 欧美精品日韩综合在线| 美国美女黄色片| 免费久久99精品国产| 日韩区国产区| 91亚洲精品| 日韩小视频在线观看| 波多野结衣高清视频| 国产日韩欧美高清在线| 激情五月婷婷久久| 色综合咪咪久久网| 国产欧美一区二区| 蜜芽在线免费观看| 欧美一区二区三区在线观看| 丁香花五月激情| 国产成人亚洲精品青草天美 | 黄页网站在线| 亚洲第一色在线| 丰满少妇乱子伦精品看片| av不卡在线观看| 欧美 日韩精品| 欧美伦理在线视频| 成人信息集中地欧美| 岛国成人毛片| 亚洲第一男人av| 国产一区二区99| 国产三级久久久| 波多野结衣国产精品| 亚洲乱码精品| 精品久久sese| av在线不卡精品| 久久精品国产91精品亚洲| 亚洲国产精品国自产拍久久| 无吗不卡中文字幕| 老熟妇一区二区| 国产制服丝袜一区| 国产原创中文在线观看 | 亚洲欧美另类在线视频| 国产精品欧美久久久久无广告| 亚洲精品综合在线观看| 超碰国产在线| 国产一区二区视频在线播放| 欧美激情欧美激情在线五月| 色婷婷视频在线| 日韩欧美第一页| 99久久久免费精品| 99精品国产视频| 亚洲一区二区三区观看| 黄色成人91| 日韩jizzz| 亚洲一区二区三区在线免费| 日本道色综合久久影院| 老司机在线看片网av| 亚洲国产天堂久久综合| 在线观看中文字幕网站| 亚洲国产日日夜夜| 国产真人真事毛片视频| www.亚洲色图| 在线免费观看av网| 久久国产直播| 国产女教师bbwbbwbbw| 欧美久久精品一级c片| 成人免费91在线看| 九九久久国产| 欧美孕妇性xx| 免费在线观看av电影| 一个色综合导航| 姝姝窝人体www聚色窝| 欧美日韩国产天堂| 六月丁香婷婷综合| 一区二区在线观看免费| 超碰97av在线| 91麻豆123| 69亚洲乱人伦| 国产精品一区二区免费不卡 | 激情国产在线| 欧美成年人视频| avtt亚洲| 亚洲视频在线看| 午夜福利一区二区三区| 精品久久久久久久久久久久包黑料 | 国产一级黄色录像| 国产一区二区三区在线看麻豆| 欧美日韩在线视频一区二区三区| 国产精品大片| 日韩专区第三页| 91精品国产自产拍在线观看蜜| 欧美日韩综合精品| 亚洲精品一级二级三级| 国产在线精品一区二区中文| 久久伊人久久| 亚洲r级在线观看| 国产一区二区三区免费在线| 国产精品视频yy9099| 欧美xxx视频| 91成人福利在线| 在线手机中文字幕| 欧美一区二区三区艳史| 国产传媒av在线| 韩剧1988在线观看免费完整版| 亚洲精品白浆| 久久综合88中文色鬼| 麻豆传媒免费在线观看| www.国产精品一二区| 免费黄色网址在线观看| 日韩在线一区二区三区免费视频| lutube成人福利在线观看| 中文字幕精品一区二区精品| 95在线视频| 日韩视频中文字幕| 天堂av中文在线| 久久久久久中文| 欧美a级在线观看| 国产97色在线|日韩| 亚洲成人人体| 国产美女精品免费电影| 久久久久久久久久久久电影| eeuss一区二区三区| 成人搞黄视频| 久久av一区二区三区漫画| 久久不卡国产精品一区二区 | 伊人久久大香线| 热久久最新地址| 精品动漫3d一区二区三区免费| 国产69精品久久久久999小说| 国产精品日韩久久久| 91视频免费版污| 国产在线视频一区二区三区| 亚洲美女高潮久久久| 91麻豆蜜桃一区二区三区| 性猛交娇小69hd| 亚洲色图欧洲色图婷婷| 精品无码久久久久久久| 色狠狠综合天天综合综合| 中文字幕在线观看你懂的| 日韩一级片在线播放| 午夜激情在线视频| 色婷婷av一区二区三区久久| 日本无删减在线| 日本亚洲欧美成人| 国产精品日本一区二区三区在线| 国产精品久久国产精品| 欧美美女一区| 波多野结衣av一区二区全免费观看 | 久久久99久久精品女同性| 国产第一页在线| 国产精品444| 白白在线精品| 亚洲精品影院| 亚洲精品精选| www.色欧美| 91亚洲资源网| 国产波霸爆乳一区二区| 色婷婷国产精品综合在线观看| 97免费观看视频| 日韩精品免费电影| h片在线免费观看| 国产精品88a∨| 北条麻妃一区二区三区在线观看 | 日韩av中文| 97精品国产91久久久久久| 久久夜夜久久| 另类视频在线观看+1080p| 亚洲最新av| 性chinese极品按摩| 91一区二区在线| 久久黄色免费视频| 欧美精品视频www在线观看| 青青草免费在线| 久久久天堂国产精品女人| 91精品国产一区二区在线观看| 欧美深深色噜噜狠狠yyy| 欧美日韩国产亚洲一区| 久久国产这里只有精品| 久久婷婷色综合| 国产无套粉嫩白浆内谢| 日韩一级片在线观看| 久草资源在线| 国产免费一区二区三区香蕉精| 性欧美xxxx免费岛国不卡电影| 高清无码一区二区在线观看吞精| 久久精品国产**网站演员| 欧美黄色一级生活片| 一本久道中文字幕精品亚洲嫩| 狠狠躁日日躁夜夜躁av| 久久99青青精品免费观看| 亚洲精品一区二区在线播放∴| 日韩精品另类天天更新| 欧美一级专区| 三上悠亚ssⅰn939无码播放 | 337p粉嫩大胆噜噜噜鲁| 成人免费视频国产在线观看| 国产美女久久久久久| 欧美日韩1区2区| caoporn国产精品免费视频| 日韩av男人的天堂| 一本色道久久综合亚洲精品酒店| 每日在线观看av| 波多野结衣一区二区三区| 久久无码精品丰满人妻| 欧美大胆人体bbbb| 黑人极品ⅴideos精品欧美棵| 成人在线观看91| 亚洲国产99| xxxx黄色片| 狠狠做深爱婷婷久久综合一区| 五月天婷婷在线播放| 91av视频在线免费观看| 一呦二呦三呦国产精品| 一本久道综合色婷婷五月| 国产欧美日韩在线视频| 曰批又黄又爽免费视频| 啊v视频在线一区二区三区| 国产95亚洲| 又大又硬又爽免费视频| av激情亚洲男人天堂| 国产三级精品三级在线观看| 国产亚洲视频在线观看| 九九热这里有精品| 欧美视频在线第一页| 91一区二区三区在线观看| 日韩免费av网站| 一区二区三区视频免费| 999精品嫩草久久久久久99| 中文精品无码中文字幕无码专区 | 美国毛片一区二区三区| 欧美第一页在线观看| 亚洲成人精品av| 神马电影网我不卡| 一本一本久久a久久精品综合妖精| 国内外成人在线| 国产精品成人av久久| 亚洲欧美国产精品va在线观看| 国产a亚洲精品| 国产精品视频一二三四区| 91蜜桃视频在线| 中文字幕在线2018| 欧美精品少妇videofree| 欧美中文一区| 激情在线观看视频| 调教+趴+乳夹+国产+精品| 午夜小视频在线| 国产麻豆乱码精品一区二区三区 | 成人福利在线视频| 精品9999| 国产一二三四视频| 精品电影一区二区| 国产伊人久久| 男人添女荫道口图片| 亚洲国产经典视频| 亚洲精品国产av| 国产精品电影久久久久电影网| 一本一道久久综合狠狠老| 在哪里可以看毛片| 精品久久久久99| 欧美黄色a视频| 日本成年人网址| 亚洲精品免费电影|