1、代码:
#!/usr/bin/env python # -*- coding: UTF-8 -*- from langchain_chroma import Chroma from meta_data import docs, metadata_field_info # 自我问询rag self-rag from base_llm import llm, embeddings_model from langchain_classic.retrievers.self_query.base import SelfQueryRetriever #from langchain_classic.retrievers.self_query.chroma import ChromaTranslator # 文档内容描述(指导LLM理解文档内容) document_content_description = "Brief description of technical articles" # 创建向量数据库 vectorstore = Chroma.from_documents(docs, embeddings_model) """ SelfQueryRetriever.from_llm 问题:"作者A发布的论文2025的" 发送给大模型 意图识别 { "query": 发布的论文 "filter": {'year':2025, 'author':'A'} } 2.元数据过滤 本地条件判断 3. 语义搜索 在过滤完之后的数据中进行相识度对比 """ retriever = SelfQueryRetriever.from_llm( llm, vectorstore, document_content_description, metadata_field_info, #translator=ChromaTranslator(), # 明确指定 enable_limit=True ) print(retriever.invoke('作者A发布的一篇论文'))引用的文件base_llm.py代码如下:
#!/usr/bin/env python # -*- coding: UTF-8 -*- from dotenv import load_dotenv from langchain_huggingface import HuggingFaceEmbeddings from langchain_openai import ChatOpenAI import os load_dotenv() llm = ChatOpenAI(api_key=os.getenv("DASHSCOPE_API_KEY"), base_url=os.getenv("DASHSCOPE_BASE_URL"), model_name="qwen3.7-plus") # 本地embedding模型地址 embedding_model_path = r'D:\LLM\Local_model\maidalun\bce-embedding-base_v1' # 初始化嵌入模型(用于文本向量化) embeddings_model = HuggingFaceEmbeddings( model_name=embedding_model_path )引用的文件meta_data.py代码如下:
#!/usr/bin/env python # -*- coding: UTF-8 -*- from langchain_core.documents import Document from langchain_classic.chains.query_constructor.schema import AttributeInfo docs = [ Document( page_content="作者A团队开发出基于深度学习的图像识别系统,在复杂场景下的识别准确率提升250%", metadata={"year": 2025, "rating": 9.3, "genre": "AI", "author": "A"}, ), Document( page_content="物联网技术成功应用于智能农业监控,作者B主导的项目实现农作物产量提升20%", metadata={"year": 2024, "rating": 9.5, "genre": "IoT", "author": "B"}, ), Document( page_content="边缘计算平台实现实时数据处理突破,作者C构建的新型架构支持千万级并发计算", metadata={"year": 2023, "rating": 8.8, "genre": "Edge Computing", "author": "C"}, ), Document( page_content="机器学习模型预测2025年股市趋势,作者A团队构建的模型准确率超95%", metadata={"year": 2024, "rating": 9.0, "genre": "Machine Learning", "author": "A"}, ), Document( page_content="基于人工智能的心脏病诊断系统在临床应用中达到顶级专家水平,作者B获医疗科技创新奖", metadata={"year": 2025, "rating": 7.2, "genre": "AI", "author": "B"}, ), Document( page_content="区块链技术在供应链管理中取得突破,作者C设计的新型协议提升供应链透明度30%", metadata={"year": 2024, "rating": 8.9, "genre": "Blockchain", "author": "C"}, ), Document( page_content="云计算平台实现能效优化,作者A研发的智能调度系统使数据中心能耗降低50%", metadata={"year": 2024, "rating": 8.6, "genre": "Cloud", "author": "A"}, ), Document( page_content="大数据分析助力环保监测,作者B团队实现污染源识别准确率提升30%", metadata={"year": 2025, "rating": 7.5, "genre": "Big Data", "author": "B"}, ) ] # 元数据字段定义(指导LLM如何解析查询条件) 工具 metadata_field_info = [ AttributeInfo( name="genre", description="Technical domain of the article, options: ['AI', 'Blockchain', 'Cloud', 'Big Data']", type="string", ), AttributeInfo( name="year", description="Publication year of the article", type="integer", ), AttributeInfo( name="author", description="Author's name who signed the article", type="string", ), AttributeInfo( name="rating", description="Technical value assessment score (1-10 scale)", type="float" ) ]2、执行报错了,报错内容如下:
C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Scripts\python.exe C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\02-元数据索引.py C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_core\utils\pydantic.py:41: UserWarning: Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater. from pydantic.v1 import BaseModel as BaseModelV1 Loading weights: 100%|██████████| 199/199 [00:00<00:00, 65081.21it/s] Traceback (most recent call last): File "C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\02-元数据索引.py", line 39, in <module> retriever = SelfQueryRetriever.from_llm( llm, ...<4 lines>... enable_limit=True ) File "C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_classic\retrievers\self_query\base.py", line 374, in from_llm structured_query_translator = _get_builtin_translator(vectorstore) File "C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_classic\retrievers\self_query\base.py", line 71, in _get_builtin_translator from langchain_community.vectorstores import ( ...<17 lines>... ) ImportError: cannot import name 'DatabricksVectorSearch' from 'langchain_community.vectorstores' (C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_community\vectorstores\__init__.py) Process finished with exit code 1在deepseek上面搜索方案:
DeepSeek
使用了这种方案,执行还是报一样的错:
C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Scripts\python.exe C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\02-元数据索引.py C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_core\utils\pydantic.py:41: UserWarning: Core Pydantic V1 functionality isn't compatible with Python 3.14 or greater. from pydantic.v1 import BaseModel as BaseModelV1 Loading weights: 100%|██████████| 199/199 [00:00<00:00, 49983.02it/s] Traceback (most recent call last): File "C:\Users\lenovo\PycharmProjects\PythonProject\rag\day08\02-元数据索引.py", line 39, in <module> retriever = SelfQueryRetriever.from_llm( llm, ...<4 lines>... enable_limit=True ) File "C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_classic\retrievers\self_query\base.py", line 374, in from_llm structured_query_translator = _get_builtin_translator(vectorstore) File "C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_classic\retrievers\self_query\base.py", line 71, in _get_builtin_translator from langchain_community.vectorstores import ( ...<17 lines>... ) ImportError: cannot import name 'DatabricksVectorSearch' from 'langchain_community.vectorstores' (C:\Users\lenovo\PycharmProjects\PythonProject\.venv\Lib\site-packages\langchain_community\vectorstores\__init__.py) Process finished with exit code 1