Ошибка типа при объединении Runnables в LangChain: ожидается Runnable, callable или dict ⇐ Python
Ошибка типа при объединении Runnables в LangChain: ожидается Runnable, callable или dict
Я работаю с LangChain над созданием системы контроля качества на основе поиска. Однако, когда я пытаюсь связать Runnables в цепочку, я сталкиваюсь с ошибкой типа, которую не могу устранить. Ошибка возникает, когда я пытаюсь использовать | (pipe) для связывания RunnablePassthrough с настраиваемым приглашением и экземпляром ChatOpenAI.
Вот сообщение об ошибке, которое я получаю:
TypeError: Ожидается Runnable, Callable или dict. Вместо этого получен неподдерживаемый тип:
Я обнаружил ошибку в этой части кода:
rag_chain = ( {"context": context, "question": RunnablePassthrough()} | rag_custom_prompt | llm)
Я ожидаю, что RunnablePassthrough() передаст контекст и вопрос на следующий шаг в цепочке, но, похоже, это не удалось во время приведения к Runnable.
Ниже приведен практически весь мой код:
## Конвертируем PDF в TXT защита pdf_to_txt(inst_manuals): текст = "" для руководства в inst_manuals: читатель = PdfReader(inst_manuals) для страницы в read.pages: txt += page.extract_text() вернуть текст ## Преобразование txt в фрагменты защита chunkify_txt(txt): txt_splitter = CharacterTextSplitter( разделитель = "\n", размер_куска = 1000, chunk_overlap = 200, length_function= лен ) куски = txt_splitter.split_text(txt) возвращать куски ## Получение векторного хранилища защита get_vector(куски): вложения = OpenAIEmbeddings() векторное хранилище = FAISS.from_texts(тексты= куски, встраивание = встраивания) возврат векторного магазина ## Получить полезную информацию, аналогичную запросу пользователя Защиту получить (векторное хранилище, вопрос): журналирование.basicConfig() logging.getLogger("langchain.retriers.multi_query").setLevel(logging.INFO) ретривер_from_llm = MultiQueryRetriever.from_llm( ретривер=vectorstore.as_retriever(), llm=ChatOpenAI(температура=0) ) unique_docs = restarter_from_llm.get_relevant_documents(запрос=вопрос) print(f"Количество полученных уникальных документов: {len(unique_docs)}") вернуть уникальные_документы ## Генерация ответа на запрос пользователя def gen_resp(ретривер, вопрос): llm = ChatOpenAI(model_name="gpt-3.5-turbo", температура=0) template = """... [пользовательский шаблон приглашения] ...""" rag_custom_prompt = PromptTemplate.from_template(шаблон) context = "\n".join(doc.page_content для документа в ретривере) rag_chain = ( {"контекст": контекст, "вопрос": RunnablePassthrough()} | rag_custom_prompt | лм ) ответ = rag_chain.invoke(вопрос) обратный ответ Кто-нибудь сталкивался с этим раньше? Есть какие-нибудь предложения о том, как правильно связать эти Runnables или что я делаю неправильно?
Я попытался сделать следующее:
Использование различных ретриверов (подробности о которых могут быть предоставлены по запросу). Я проверил документацию LangChain на предмет правильного использования Runnables и операций цепочки. Я попробовал поменять местами ключи контекста и вопроса в словаре rag_chain, чтобы проверить, не является ли порядок проблемой.
Я работаю с LangChain над созданием системы контроля качества на основе поиска. Однако, когда я пытаюсь связать Runnables в цепочку, я сталкиваюсь с ошибкой типа, которую не могу устранить. Ошибка возникает, когда я пытаюсь использовать | (pipe) для связывания RunnablePassthrough с настраиваемым приглашением и экземпляром ChatOpenAI.
Вот сообщение об ошибке, которое я получаю:
TypeError: Ожидается Runnable, Callable или dict. Вместо этого получен неподдерживаемый тип:
Я обнаружил ошибку в этой части кода:
rag_chain = ( {"context": context, "question": RunnablePassthrough()} | rag_custom_prompt | llm)
Я ожидаю, что RunnablePassthrough() передаст контекст и вопрос на следующий шаг в цепочке, но, похоже, это не удалось во время приведения к Runnable.
Ниже приведен практически весь мой код:
## Конвертируем PDF в TXT защита pdf_to_txt(inst_manuals): текст = "" для руководства в inst_manuals: читатель = PdfReader(inst_manuals) для страницы в read.pages: txt += page.extract_text() вернуть текст ## Преобразование txt в фрагменты защита chunkify_txt(txt): txt_splitter = CharacterTextSplitter( разделитель = "\n", размер_куска = 1000, chunk_overlap = 200, length_function= лен ) куски = txt_splitter.split_text(txt) возвращать куски ## Получение векторного хранилища защита get_vector(куски): вложения = OpenAIEmbeddings() векторное хранилище = FAISS.from_texts(тексты= куски, встраивание = встраивания) возврат векторного магазина ## Получить полезную информацию, аналогичную запросу пользователя Защиту получить (векторное хранилище, вопрос): журналирование.basicConfig() logging.getLogger("langchain.retriers.multi_query").setLevel(logging.INFO) ретривер_from_llm = MultiQueryRetriever.from_llm( ретривер=vectorstore.as_retriever(), llm=ChatOpenAI(температура=0) ) unique_docs = restarter_from_llm.get_relevant_documents(запрос=вопрос) print(f"Количество полученных уникальных документов: {len(unique_docs)}") вернуть уникальные_документы ## Генерация ответа на запрос пользователя def gen_resp(ретривер, вопрос): llm = ChatOpenAI(model_name="gpt-3.5-turbo", температура=0) template = """... [пользовательский шаблон приглашения] ...""" rag_custom_prompt = PromptTemplate.from_template(шаблон) context = "\n".join(doc.page_content для документа в ретривере) rag_chain = ( {"контекст": контекст, "вопрос": RunnablePassthrough()} | rag_custom_prompt | лм ) ответ = rag_chain.invoke(вопрос) обратный ответ Кто-нибудь сталкивался с этим раньше? Есть какие-нибудь предложения о том, как правильно связать эти Runnables или что я делаю неправильно?
Я попытался сделать следующее:
Использование различных ретриверов (подробности о которых могут быть предоставлены по запросу). Я проверил документацию LangChain на предмет правильного использования Runnables и операций цепочки. Я попробовал поменять местами ключи контекста и вопроса в словаре rag_chain, чтобы проверить, не является ли порядок проблемой.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Runnable RemoveCallbacks, похоже, не работает, поэтому новый Runnable не запускается
Anonymous » » в форуме Android - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-