未使用OpenAIEmbeddings却出现Langchain弃用警告的排查求助
问题说明
使用Langchain实现Figma文件处理的Python代码中,未直接调用OpenAIEmbeddings类,但仍收到Langchain弃用警告,提示langchain_community.embeddings.openai.OpenAIEmbeddings已在langchain-community 0.0.9版本弃用,将在0.2.0版本移除,需安装langchain-openai包并从该包导入对应类。按提示执行操作后问题仍存在。
警告信息
C:\Users\ADMIN\AppData\Local\Programs\Python\Python311\Lib\site-packages\langchain_core_api\deprecation.py:117: LangChainDeprecationWarning: The class
langchain_community.embeddings.openai.OpenAIEmbeddingswas deprecated in langchain-community 0.0.9 and will be removed in 0.2.0. An updated version of the class exists in the langchain-openai package and should be used instead. To use it runpip install -U langchain-openaiand import asfrom langchain_openai import OpenAIEmbeddings.
warn_deprecated(
原代码
import os from langchain.indexes.vectorstore import VectorstoreIndexCreator from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate, ChatPromptTemplate from langchain_community.document_loaders.figma import FigmaFileLoader from langchain_openai import ChatOpenAI os.environ["OPENAI_API_KEY"] ='api key' figma_loader = FigmaFileLoader( access_token="Token", ids="0-1", key=key, ) index = VectorstoreIndexCreator().from_loaders([figma_loader]) figma_doc_retriever = index.vectorstore.as_retriever() # I have no idea if the Jon Carmack thing makes for better code. YMMV. system_prompt_template = """ You are expert Jon Carmack. It should also include the functionality of the design. Everything must be as a List. Figma file nodes and metadata: {context} """ human_prompt_template = "Code the {text}. Ensure it's mobile responsive" system_message_prompt = SystemMessagePromptTemplate.from_template( system_prompt_template ) human_message_prompt = HumanMessagePromptTemplate.from_template( human_prompt_template ) human_input='Give me a list of test cases for the current webpage' gpt_4 = ChatOpenAI(api_key='api key',temperature=0.02, model_name="gpt-4") relevant_nodes = figma_doc_retriever.get_relevant_documents(human_input) conversation = [system_message_prompt, human_message_prompt] chat_prompt = ChatPromptTemplate.from_messages(conversation) response = gpt_4.invoke( chat_prompt.format_prompt( context=relevant_nodes, text=human_input ).to_messages() ) print(response.content)
解决方案
原因分析
VectorstoreIndexCreator默认会使用langchain_community.embeddings.openai.OpenAIEmbeddings创建向量索引,即使代码中没有显式调用该类,内部逻辑仍会自动引用,因此触发了弃用警告。
解决步骤
- 确保安装最新版langchain-openai包:
pip install -U langchain-openai
- 在代码中导入
langchain_openai.OpenAIEmbeddings - 创建
VectorstoreIndexCreator时,显式指定embedding参数为OpenAIEmbeddings实例,覆盖默认实现
修改后的代码
import os from langchain.indexes.vectorstore import VectorstoreIndexCreator from langchain_core.prompts import SystemMessagePromptTemplate, HumanMessagePromptTemplate, ChatPromptTemplate from langchain_community.document_loaders.figma import FigmaFileLoader from langchain_openai import ChatOpenAI, OpenAIEmbeddings # 新增导入 os.environ["OPENAI_API_KEY"] ='api key' figma_loader = FigmaFileLoader( access_token="Token", ids="0-1", key=key, ) # 显式指定embedding参数,使用langchain-openai中的类 index = VectorstoreIndexCreator(embedding=OpenAIEmbeddings()).from_loaders([figma_loader]) figma_doc_retriever = index.vectorstore.as_retriever() # I have no idea if the Jon Carmack thing makes for better code. YMMV. system_prompt_template = """ You are expert Jon Carmack. It should also include the functionality of the design. Everything must be as a List. Figma file nodes and metadata: {context} """ human_prompt_template = "Code the {text}. Ensure it's mobile responsive" system_message_prompt = SystemMessagePromptTemplate.from_template( system_prompt_template ) human_message_prompt = HumanMessagePromptTemplate.from_template( human_prompt_template ) human_input='Give me a list of test cases for the current webpage' gpt_4 = ChatOpenAI(api_key='api key',temperature=0.02, model_name="gpt-4") relevant_nodes = figma_doc_retriever.get_relevant_documents(human_input) conversation = [system_message_prompt, human_message_prompt] chat_prompt = ChatPromptTemplate.from_messages(conversation) response = gpt_4.invoke( chat_prompt.format_prompt( context=relevant_nodes, text=human_input ).to_messages() ) print(response.content)
内容的提问来源于stack exchange,提问作者Lokeshwar V

