本案例演示如何使用KDB.AI向量数据库和LlamaIndex框架构建一个具有时间过滤功能的检索增强生成(RAG)系统,用于分析美国金融危机前后的金融法规变化。
1. 案例目标
本案例的主要目标是:
- 构建时间感知的RAG系统:使用KDB.AI向量数据库存储金融法规文档,并支持基于时间的过滤查询。
- 分析金融法规变化:对比2008年金融危机前后的美国金融法规,分析其变化和影响。
- 演示高级查询功能:展示如何使用时间过滤器进行精确查询,获取特定时间范围内的相关信息。
2. 技术栈与核心依赖
- LlamaIndex:用于构建RAG系统的核心框架
- KDB.AI:高性能向量数据库,支持时间过滤功能
- OpenAI:提供嵌入模型和语言模型服务
- Pandas:用于数据处理和分析
- kdbai_client:KDB.AI的Python客户端库
在Python环境中,需要安装以下核心依赖:
!pip install llama-index llama-index-llms-openai llama-index-embeddings-openai llama-index-readers-file llama-index-vector-stores-kdbai !pip install kdbai_client pandas3. 环境配置
在运行本案例前,需要配置以下环境:
- OpenAI API密钥:设置OpenAI API密钥用于嵌入和生成服务
- KDB.AI端点和API密钥:获取KDB.AI的访问端点和API密钥
- 模型配置:选择合适的嵌入模型和生成模型
# 设置OpenAI API密钥 os.environ["OPENAI_API_KEY"] = "your-openai-api-key" # 设置KDB.AI端点和API密钥 KDBAI_ENDPOINT = "your-kdbai-endpoint" KDBAI_API_KEY = "your-kdbai-api-key" # 配置模型 EMBEDDING_MODEL = "text-embedding-3-small" GENERATION_MODEL = "gpt-4o-mini"4. 案例实现
4.1 创建KDB.AI会话和表
首先,我们需要连接到KDB.AI并创建一个表来存储金融法规文档的向量表示:
# 连接到KDB.AI session = kdbai.Session(endpoint=KDBAI_ENDPOINT, api_key=KDBAI_API_KEY) database = session.database("default") # 定义表结构 schema = [ {"name": "document_id", "type": "bytes"}, {"name": "text", "type": "bytes"}, {"name": "embeddings", "type": "float32s"}, {"name": "title", "type": "str"}, {"name": "publication_date", "type": "datetime64[ns]"}, ] # 定义索引 indexFlat = { "name": "flat_index", "type": "flat", "column": "embeddings", "params": {"dims": 1536, "metric": "L2"}, } # 创建表 table = database.create_table(KDBAI_TABLE_NAME, schema=schema, indexes=[indexFlat])4.2 准备金融法规文档
本案例使用两份重要的美国金融法规文档:
- Gramm-Leach-Bliley Act (1999):2008年金融危机前的主要金融法规
- Dodd-Frank Wall Street Reform and Consumer Protection Act (2010):2008年金融危机后的主要金融法规
# 定义文档URL和元数据 INPUT_URLS = [ "https://www.govinfo.gov/content/pkg/PLAW-106publ102/pdf/PLAW-106publ102.pdf", "https://www.govinfo.gov/content/pkg/PLAW-111publ203/pdf/PLAW-111publ203.pdf", ] METADATA = { "pdf/PLAW-106publ102.pdf": { "title": "GRAMM–LEACH–BLILEY ACT, 1999", "publication_date": pd.to_datetime("1999-11-12"), }, "pdf/PLAW-111publ203.pdf": { "title": "DODD-FRANK WALL STREET REFORM AND CONSUMER PROTECTION ACT, 2010", "publication_date": pd.to_datetime("2010-07-21"), }, }4.3 构建LlamaIndex RAG管道
使用LlamaIndex和KDB.AI向量存储构建RAG管道:
# 加载文档 documents = SimpleDirectoryReader( input_files=local_files, file_metadata=get_metadata, ) docs = documents.load_data() # 创建向量存储和索引 vector_store = KDBAIVectorStore(table) storage_context = StorageContext.from_defaults(vector_store=vector_store) index = VectorStoreIndex.from_documents( docs, storage_context=storage_context, transformations=[SentenceSplitter(chunk_size=2048, chunk_overlap=0)], )4.4 实现时间过滤查询
创建支持时间过滤的查询引擎:
# 查询2008年金融危机前的法规 query_engine_before = index.as_query_engine( similarity_top_k=15, vector_store_kwargs={ "index": "flat_index", "filter": [["<", "publication_date", datetime.date(2008, 9, 15)]], "sort_columns": "publication_date", }, ) # 查询2008年金融危机后的法规 query_engine_after = index.as_query_engine( similarity_top_k=15, vector_store_kwargs={ "index": "flat_index", "filter": [[">=", "publication_date", datetime.date(2008, 9, 15)]], "sort_columns": "publication_date", }, )5. 案例效果
5.1 2008年金融危机前的金融法规分析
通过查询2008年金融危机前的法规,我们了解到:
2008年金融危机前,美国主要的金融法规是1999年颁布的Gramm-Leach-Bliley法案。该法案促进了银行、证券公司和保险公司之间的关联,实际上废除了Glass-Steagall法案的部分内容,该法案此前将这些金融服务分离开来。Gramm-Leach-Bliley法案旨在通过为各种金融机构的整合提供框架,增强金融服务行业的竞争力。
5.2 2008年金融危机后的金融法规分析
通过查询2008年金融危机后的法规,我们了解到:
2008年金融危机后颁布的新美国金融法规是2010年7月21日签署成为法律的Dodd-Frank华尔街改革和消费者保护法案。该立法旨在促进金融稳定,增强金融系统的问责制和透明度,并保护消费者免受滥用金融行为的侵害。
5.3 深度分析
通过综合分析危机前后的法规变化,我们得出以下结论:
对美国2008年金融危机前后的金融法规分析显示,为防止此类危机再次发生,法规发生了重大变化。危机前,监管框架的特点是缺乏全面监督,特别是对非银行金融机构。监管环境允许过度冒险、资本要求不足和金融交易透明度不足。这种环境导致了房地产泡沫和随后主要金融机构的倒闭,引发了广泛的经济动荡。作为回应,2010年颁布了Dodd-Frank华尔街改革和消费者保护法案。该立法引入了几项关键改革:1) 创建金融稳定监督委员会(FSOC);2) 加强监管监督;3) 消费者保护措施;4) 沃尔克规则;5) 增加透明度和报告要求。
6. 案例实现思路
6.1 时间感知的RAG系统设计
本案例的核心创新是构建了一个时间感知的RAG系统,通过以下方式实现:
- 时间元数据存储:在向量数据库中存储文档的发布日期作为元数据
- 时间过滤查询:利用KDB.AI的时间过滤功能,在向量搜索时应用时间条件
- 时间排序:按时间顺序组织搜索结果,便于分析法规演变
6.2 多阶段查询策略
案例采用了多阶段查询策略来获取全面的分析:
- 危机前查询:了解2008年金融危机前的监管环境
- 危机后查询:了解2008年金融危机后的监管变化
- 综合分析:结合前后两个时期的信息,进行深度分析
6.3 向量存储优化
通过KDB.AI的高级功能优化向量存储和检索:
- 高效索引:使用平面索引提供精确的向量相似度搜索
- 多维过滤:结合向量相似度和时间过滤进行精确检索
- 性能优化:利用KDB.AI的高性能向量计算能力
7. 扩展建议
7.1 多维度过滤扩展
- 地理过滤:添加地理位置信息,支持按国家或地区过滤法规
- 主题分类:添加主题标签,支持按金融监管领域分类查询
- 影响范围:添加法规影响范围信息,支持按影响对象分类
7.2 交互式分析界面
- 时间轴可视化:创建交互式时间轴,直观展示法规演变
- 对比分析工具:开发工具对比不同时期的法规差异
- 影响评估:集成经济数据,评估法规变化的市场影响
7.3 智能问答系统
- 多轮对话:扩展为支持多轮对话的智能问答系统
- 假设分析:支持基于历史数据的假设性法规分析
- 预测模型:基于历史趋势预测未来可能的法规变化
8. 总结
本案例成功演示了如何使用LlamaIndex和KDB.AI构建一个时间感知的RAG系统,用于分析美国金融危机前后的金融法规变化。通过结合向量搜索和时间过滤,我们能够精确检索特定时间范围内的相关信息,并进行深度分析。
该案例的主要贡献包括:
- 时间感知检索:展示了如何在RAG系统中集成时间过滤功能
- 法规分析应用:提供了一个实用的金融法规分析框架
- 多阶段查询策略:演示了如何通过分阶段查询获取全面的分析结果
这个框架可以扩展到其他需要时间感知检索的领域,如历史事件分析、科技发展追踪、政策变化研究等,为构建更智能的信息检索和分析系统提供了有价值的参考。