root layout

패스트캠퍼스

  1. 강의 질문
  2. 인공지능

Perplexity 프로젝트의 비디오 툴 구현 오류

2025.04.07 13:46 작성

from langchain_chroma import Chroma

from langchain_openai import OpenAIEmbeddings

from langchain_text_splitters import RecursiveCharacterTextSplitter

from langchain_community.tools import YouTubeSearchTool

from langchain_community.document_loaders import YoutubeLoader

from langchain_core.documents import Document

import ast



youtube_search_tool = YouTubeSearchTool()




@tool

def video_tool(query:str) -> str:

    """

    Retriever tool for the transcript of a YouTube video.

    If user want to find some information, this tool is good to gather youtube video information.

    query should be given in string format.

    """

    #query에 해당하는 Youtube 비디오 URL 가져오기

    urls = youtube_search_tool.run(query)

    urls = ast.literal_eval(urls)

    #URL 순회하면서 Document 객체에 내용 담기

    docs = []

    for url in urls:

        loader = YoutubeLoader.from_youtube_url(

        url,

        add_video_info=True,

        language=["en", "ko"]

        )

        scripts = loader.load()

        script_content = scripts[0].page_content

        title=scripts[0].metadata['title']

        author=scripts[0].metadata['author']

        doc = Document(page_content=script_content, metadata={"source": url, "title":title, "author":author})

        docs.append(doc)



    #모든 비디오의 내용을 벡터DB에 담기

    text_splitter = RecursiveCharacterTextSplitter(

        separators  = ["\n\n", "\n", ".", ",", " ", ""],

        chunk_size=1000,

        chunk_overlap=0)

    texts = text_splitter.split_documents(docs)

    embeddings = OpenAIEmbeddings()

    db = Chroma.from_documents(texts, embeddings)

    retriever = db.as_retriever()

    retrieved_docs = retriever.invoke(query)



    video_results = []



    for doc in retrieved_docs:

        title = doc.metadata.get('title', 'No title available')

        author = doc.metadata.get('author', 'No author available')

        script_content = doc.page_content



        video_info = f"""

        Video Information:

        ------------------

        Title: {title}

        Author: {author}

        Transcript:

        {script_content}

        ------------------

        """

        video_results.append(video_info)



    # Join all video results into a single string

    all_video_results = "\n\n".join(video_results)



    return all_video_results


강사님이 제공해주신 자료로도 도저히 실행이 안되어 문의 드립니다.


HTTPDefaultErrorHandler.http_error_default(self, req, fp, code, msg, hdrs) 642 def http_error_default(self, req, fp, code, msg, hdrs): --> 643 raise HTTPError(req.full_url, code, msg, hdrs, fp) HTTPError: HTTP Error 400: Bad Request


위와같은 에러가 발생합니다.

Youtube data api키도 발급해보고

ssl 설정도 해보고 도저히 안되네요 ㅠㅠ


urls for문 안의 YoutubeLoader에서 load() 함수 호출시 에러가 발생하는것 같습니다. 아무리 찾아봐도 해결이 안되네요 ㅠㅠ 어떻게 해결해야할까요?


답변 

연관 질문

커뮤니티 질문보기