1. 簡介
瞭解如何運用 Google 的生成式 AI 功能,分析 YouTube 網紅對任何公司或產品的看法。
隨著 LLM 的問世,從資產負債表、社群媒體平台上的觀點、影響者意見等各種來源發掘洞察變得更加容易。
尤其在科技和金融領域,社群媒體影響者越來越常被視為機構或競爭對手產品和政策的主要支持者。
建構項目
在本程式碼研究室中,您將瞭解如何結合 Vertex AI 中的 PaLM2 模型和 Langchain,打造 YouTube 網紅數據分析解決方案。
環境
前往 https://colab.research.google.com/#create=true,在 Google Colab 沙箱環境中建立新筆記本。
2. 安裝套件並進行驗證
在新筆記本的第一個儲存格中,使用這些指令安裝必要套件。
!pip install google-cloud-aiplatform
!pip install langchain
!pip install chromadb
!pip install pytube
!pip install youtube-transcript-api
!pip install gradio
from google.cloud import aiplatform
安裝上述套件後,系統會提示您重新啟動執行階段機器。按一下「重新啟動執行階段」,或從「執行階段」選單選取「重新啟動執行階段」。
驗證 Google Cloud 帳戶
您的帳戶應具備「Vertex AI 使用者」角色。
- 開啟 Google Cloud 控制台,然後搜尋 IAM 與管理服務。在「按照主體查看」下方的「權限」分頁中,選取「授予存取權」。輸入 / 選取主體,然後新增「Vertex AI 使用者」角色並儲存,如下圖所示:

現在返回 Colab 分頁,在目前工作檔案的第二個儲存格中輸入下列程式碼片段。系統會檢查驗證狀態。
from google.colab import auth as google_auth
google_auth.authenticate_user()
系統會提示您允許存取。請繼續這麼做。
3. 初始化及匯入
在下一個儲存格中輸入下列程式碼片段,初始化專案。
import vertexai
PROJECT_ID = "<projectid>" #enter your project id here
vertexai.init(project=PROJECT_ID)
匯入解決方案的程式庫
使用這些指令匯入必要程式庫。
from langchain.document_loaders import YoutubeLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import VertexAI
初始化 Vertex AI LLM 模型
使用這個程式碼片段初始化 Vertex AI LLM 模型。這會使用 Vertex AI 的 Text-Bison 模型初始化「llm」。
!python3 -m pip install langchain
llm = VertexAI(
model_name="text-bison@001",
max_output_tokens=256,
temperature=0.1,
top_p=0.8,
top_k=40,
verbose=True,
)
4. 啟動嵌入
我們會使用 Vertex AI 嵌入,將影片區塊轉換為嵌入。在這段程式碼中,我們只會初始化嵌入物件。在「儲存和擷取」部分,我們會將嵌入內容套用至從影片建立的區塊。
分塊是生成式 AI 的一項程序,可將大型內容拆分成易於管理的小塊。這是因為生成式 AI 模型一次能處理的資料量有限。模型可一次專注於一個資料塊,生成更準確且連貫的輸出內容。
嵌入是將內容表示為數字向量的方式。如果資料是影片,電腦就能以比傳統方法 (例如鏡頭偵測或關鍵影格擷取) 更精細的方式瞭解資料的意義;如果資料是語言,電腦就能以比傳統方法 (例如詞袋) 更精細的方式瞭解資料的意義。
from langchain.embeddings import VertexAIEmbeddings
# Embedding
EMBEDDING_QPM = 100
EMBEDDING_NUM_BATCH =5
embeddings = VertexAIEmbeddings(
requests_per_minute=EMBEDDING_QPM,
num_instances_per_batch=EMBEDDING_NUM_BATCH,
)
5. 載入影片並分塊
載入要生成摘要或提出問題的影片。
loader = YoutubeLoader.from_youtube_url("https://www.youtube.com/watch?v=A8jyW_6hCGU&t=161s", add_video_info=True)
result = loader.load()
分割影片
使用遞迴字元分割器技術,將影片分割成多個區塊。
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1500, chunk_overlap=0)
docs = text_splitter.split_documents(result)
print(f"# of documents = {len(docs)}")
6. 儲存及擷取
儲存文件
在本練習中,我們將使用 ChromaDB。您也可以使用 Vertex AI Vector Search。將文件儲存在 ChromaDB 中,並建立索引做為向量儲存庫。ChromaDB 用於儲存及擷取向量嵌入,以供 LLM 使用,並對資料執行語意搜尋。
db = Chroma.from_documents(docs, embeddings)
retriever = db.as_retriever(search_type="similarity", search_kwargs={"k": 2})
建立檢索器鏈結
建立檢索器鏈結來回答問題。我們會在其中將 Vertex AI Text Bison 模型 LLM 與檢索器建立關聯,檢索器會從 Chroma DB 擷取嵌入。
qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True)
7. 定義提示
定義提示,向已建立索引的內容提問並取得解答。
def sm_ask(question, print_results=True):
video_subset = qa({"query": question})
context = video_subset
prompt = f"""
Answer the following question in a detailed manner, using information from the text below. If the answer is not in the text,say I dont know and do not generate your own response.
Question:
{question}
Text:
{context}
Question:
{question}
Answer:
"""
parameters = {
"temperature": 0.1,
"max_output_tokens": 256,
"top_p": 0.8,
"top_k": 40
}
response = llm.predict(prompt, **parameters)
return {
"answer": response
}
8. 整合 LLM 應用程式
將 LLM 應用程式與 Gradio 整合,進行視覺化前端互動。
import gradio as gr
def get_response(input_text):
response = sm_ask(input_text)
return response
grapp = gr.Interface(fn=get_response, inputs="text", outputs="text")
grapp.launch()
9. 測試解決方案
現在請繼續測試解決方案。執行包含上述程式碼的儲存格。您可以查看儲存格結果中的 UI,也可以點選產生的連結。您應該可以透過輸入/輸出元件,將介面視覺化。輸入影片相關問題,並查看模型回覆。

現在,我們可以使用 Vertex AI PaLM API 模型整合及分析 YouTube 影片。您也可以進一步擴充,與資料庫或資料倉儲整合。如要進一步瞭解可用的模型,請參閱 Vertex AI LLM 產品說明文件。
10. 恭喜!
恭喜!您已成功使用 Vertex AI Text Generation LLM,以程式輔助方式對資料執行文字分析,且僅使用 SQL 查詢。如要進一步瞭解可用的模型,請參閱 Vertex AI LLM 產品說明文件。