You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用LangChain+Google Palm API构建YouTube助手时遇模块不可调用错误

修复LangChain中Google Palm实例化的TypeError错误

问题描述

运行基于LangChain和Google Palm API的YouTube助手代码时,触发TypeError: 'module' object is not callable错误,错误发生在实例化google_palm的代码行。

报错栈:

Traceback (most recent call last):
  File "/home/youtube_assitant/langchain_helper.py", line 62, in <module>
    response, docs = get_response_from_query(vectordb, query)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/youtube_assitant/langchain_helper.py", line 34, in get_response_from_query
    llm = google_palm(google_api_key=os.getenv("GOOGLE_API_KEY"), temperature = 0)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'module' object is not callable

问题原因

错误核心是导入方式错误:你导入的是整个google_palm模块,而非模块内的GooglePalm类,直接调用模块会触发"module不可调用"的报错。

解决方案

需要修改两处代码:

  • 修正导入语句:将from langchain.llms import google_palm改为from langchain.llms.google_palm import GooglePalm
  • 修正实例化代码:将llm = google_palm(...)改为llm = GooglePalm(...)

修改后的完整代码

from langchain.document_loaders import YoutubeLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.llms.google_palm import GooglePalm  # 修正导入路径
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
from langchain.vectorstores import FAISS
from langchain.embeddings.google_palm import GooglePalmEmbeddings
import os
from dotenv import load_dotenv

load_dotenv()

embeddngs = GooglePalmEmbeddings()

video_url = "https://www.youtube.com/watch?v=XxOh12Uhg08"

def create_vectordb_from_youtube_url(video_url: str) -> FAISS:
    loader = YoutubeLoader.from_youtube_url(video_url)
    transcript = loader.load()

    text_splitter = RecursiveCharacterTextSplitter(chunk_size = 1000, chunk_overlap = 100)
    docs = text_splitter.split_documents(transcript)

    db = FAISS.from_documents(docs, embeddngs)
    return db

def get_response_from_query(db, query, k=4):
    docs = db.similarity_search(query, k = k)
    docs_page_content = " ".join([d.page_content for d in docs])

    llm = GooglePalm(google_api_key=os.getenv("GOOGLE_API_KEY"), temperature = 0)  # 修正实例化方式

    prompt = PromptTemplate(
        input_variables=["question", "docs"],
        template="""            You are a helpful assistant that that can answer questions about youtube videos 
            based on the video's transcript.
            
            Answer the following question: {question}
            By searching the following video transcript: {docs}
            
            Only use the factual information from the transcript to answer the question.
            
            If you feel like you don't have enough information to answer the question, say "I don't know".
            
            Your answers should be verbose and detailed.
            """,
    )

    chain = LLMChain(llm=llm, prompt=prompt)

    response = chain.run(question=query, docs=docs_page_content)
    response = response.replace("\n","")
    return response, docs

vectordb = create_vectordb_from_youtube_url(video_url)
query = "What this video is about?"

response, docs = get_response_from_query(vectordb, query)
print("Response: ", response)
print("Docs: ", docs)

内容的提问来源于stack exchange,提问作者angkul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 11:52:34