show_chunks.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. """
  2. 直接显示向量数据库内容(非交互式)
  3. """
  4. import os
  5. from dotenv import load_dotenv
  6. from langchain_community.embeddings import DashScopeEmbeddings
  7. from langchain_community.vectorstores import Chroma
  8. # 加载环境变量
  9. load_dotenv()
  10. def show_database(persist_directory: str):
  11. """显示数据库内容"""
  12. print("=" * 80)
  13. print(f"向量数据库: {persist_directory}")
  14. print("=" * 80)
  15. if not os.path.exists(persist_directory):
  16. print(f"❌ 数据库不存在: {persist_directory}")
  17. return
  18. # 初始化Embedding模型
  19. embedding_model = DashScopeEmbeddings(
  20. model=os.getenv("EMBEDDING_MODEL", "text-embedding-v3"),
  21. dashscope_api_key=os.getenv("DASHSCOPE_API_KEY", "")
  22. )
  23. # 加载向量数据库
  24. vectorstore = Chroma(
  25. persist_directory=persist_directory,
  26. embedding_function=embedding_model
  27. )
  28. # 获取所有文档
  29. result = vectorstore.get()
  30. documents = result.get('documents', [])
  31. metadatas = result.get('metadatas', [])
  32. ids = result.get('ids', [])
  33. print(f"\n📊 数据库统计:")
  34. print(f" 总块数: {len(documents)}")
  35. if len(documents) == 0:
  36. print("\n❌ 数据库为空")
  37. return
  38. # 统计信息
  39. total_chars = sum(len(doc) for doc in documents)
  40. avg_chars = total_chars / len(documents)
  41. max_chars = max(len(doc) for doc in documents)
  42. min_chars = min(len(doc) for doc in documents)
  43. print(f" 总字符数: {total_chars:,}")
  44. print(f" 平均块大小: {avg_chars:.1f} 字符")
  45. print(f" 最大块: {max_chars} 字符")
  46. print(f" 最小块: {min_chars} 字符")
  47. # 显示前20个块
  48. print(f"\n📄 前20个块预览:")
  49. print("=" * 80)
  50. for i in range(min(20, len(documents))):
  51. doc = documents[i]
  52. metadata = metadatas[i] if i < len(metadatas) else {}
  53. print(f"\n【块 #{i+1}】")
  54. print(f"ID: {ids[i] if i < len(ids) else 'N/A'}")
  55. print(f"页码: {metadata.get('page', 'N/A')}")
  56. print(f"大小: {len(doc)} 字符")
  57. print(f"内容: {doc[:150].replace(chr(10), ' ')}...")
  58. print("-" * 80)
  59. if __name__ == "__main__":
  60. # 检查API Key
  61. if not os.getenv("DASHSCOPE_API_KEY"):
  62. print("❌ 请先配置 DASHSCOPE_API_KEY")
  63. exit(1)
  64. # 显示数据库内容
  65. show_database("./car_info_knowledge_db")
  66. # 测试检索
  67. print("\n\n" + "=" * 80)
  68. print("测试检索功能")
  69. print("=" * 80)
  70. embedding_model = DashScopeEmbeddings(
  71. model=os.getenv("EMBEDDING_MODEL", "text-embedding-v3"),
  72. dashscope_api_key=os.getenv("DASHSCOPE_API_KEY", "")
  73. )
  74. vectorstore = Chroma(
  75. persist_directory="./car_info_knowledge_db",
  76. embedding_function=embedding_model
  77. )
  78. query = "HDC系统在什么速度下会激活?"
  79. print(f"\n查询: {query}")
  80. print("-" * 80)
  81. results = vectorstore.similarity_search_with_score(query, k=3)
  82. for i, (doc, score) in enumerate(results):
  83. print(f"\n结果 #{i+1}")
  84. print(f"相似度: {score:.4f}")
  85. print(f"页码: {doc.metadata.get('page', 'N/A')}")
  86. print(f"内容: {doc.page_content[:200]}...")
  87. print("-" * 80)