1. 简介
了解如何使用 Google 的生成式 AI 功能在 YouTube 中分析任何公司或产品的网红们的观看次数。
随着 LLM 的出现,利用各种来源(例如资产负债表、社交媒体平台的观看次数)的洞见,网红的意见变得越来越容易。
社交媒体网红,尤其是科技和金融界越来越多地被视为组织或其竞争对手产品和政策。
构建内容
在此 Codelab 中,您将探索 VertexAI 中的 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 user 角色。
- 打开 Google Cloud 控制台并搜索“IAM 和管理服务”。在“按原则查看”下方的“权限”标签页中,选择“授予访问权限”。输入 / 选择您的主账号,然后添加“Vertex AI User”角色然后点击“保存”,如下图所示:
现在返回 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 模型。这会初始化“llm”Vertex AI 的 Text-Bison 模型。
!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 与从色度数据库中检索嵌入的检索器相关联。
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. 测试解决方案
现在,让我们继续测试解决方案。运行包含上述代码的单元。查看单元格结果中的界面,或点击生成的链接。您应该能够直观呈现包含输入-输出组件的界面。在视频中输入问题并查看模型回答。
通过这种方式,我们现在可以集成 YouTube 视频,并使用 Vertex AI PaLM API 模型对其进行分析。您可以进一步扩展它,以与数据库或数据仓库集成。如需详细了解可用的模型,请参阅 Vertex AI LLM 产品文档。
10. 恭喜!
恭喜!您已成功通过程序化方式使用 Vertex AI Text Generation LLM,只使用 SQL 查询对数据执行文本分析。如需详细了解可用的模型,请查看 Vertex AI LLM 产品文档。