使用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
相关产品推荐
相关产品推荐

