97 |
98 | Category |
99 | Name |
100 | Description |
101 | PowerLevel |
102 |
103 |
104 | 装备 |
105 | 铜云棒 |
106 | 一根结实的青铜棒,挥舞时能发出破空之声,适合近战攻击。 |
107 | 85 |
108 |
109 |
110 | 装备 |
111 | 百戏衬钱 衣 |
112 | 一件精美的战斗铠甲,能够提供强大的防御并抵御剧毒伤害。 |
113 | 90 |
114 |
115 |
116 | 技能 |
117 | 天雷击 |
118 | 召唤天雷攻击敌人,造成大范围雷电伤害。 |
119 | 95 |
120 |
121 |
122 | 技能 |
123 | 火焰舞 |
124 | 施展火焰 舞步,将敌人包围在炽热的火焰之中。 |
125 | 92 |
126 |
127 |
128 | 人物 |
129 | 悟空 |
130 | 主角,拥有七十二变和腾云驾雾的能力,行侠仗义。 |
131 | 100 |
132 |
133 |
134 | 人物 |
135 | 银角大王 |
136 | 强大的妖王之一,擅长操控各种法 宝,具有极高的战斗力。 |
137 | 88 |
138 |
139 |
140 | ```
--------------------------------------------------------------------------------
/docs/rag/loader/db/README.md:
--------------------------------------------------------------------------------
1 | # DataBase
2 | ::: tip
3 | [SQLDatabaseLoader 文档](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.sql_database.SQLDatabaseLoader.html)
4 | :::
5 |
6 | 使用`SQLDatabaseLoader`加载数据库数据时,我们以`SQLite`数据库为例。
7 |
8 | ## 数据准备
9 | ```py
10 | import sqlite3
11 |
12 | # 创建测试数据库
13 | def create_sample_db(db_path: str):
14 | conn = sqlite3.connect(db_path)
15 | cursor = conn.cursor()
16 |
17 | # 创建users表
18 | cursor.execute("""
19 | CREATE TABLE IF NOT EXISTS users (
20 | id INTEGER PRIMARY KEY,
21 | name TEXT NOT NULL,
22 | email TEXT UNIQUE,
23 | active INTEGER DEFAULT 1
24 | )
25 | """)
26 |
27 | # 插入测试数据
28 | cursor.executemany(
29 | "INSERT INTO users (name, email) VALUES (?, ?)",
30 | [
31 | ("张三", "zhang@example.com"),
32 | ("李四", "li@example.com"),
33 | ("王五", "wang@example.com"),
34 | ("赵六", "zhao@example.com"),
35 | ("钱七", "qian@example.com")
36 | ]
37 | )
38 |
39 |
40 | conn.commit()
41 | conn.close()
42 |
43 | if __name__ == "__main__":
44 | create_sample_db("example.db")
45 | print("测试数据库已创建")
46 | ```
47 |
48 | ## 加载数据
49 |
50 | ```py
51 | from langchain_community.document_loaders import SQLDatabaseLoader
52 | from langchain_community.utilities import SQLDatabase
53 |
54 | db = SQLDatabase.from_uri(f"sqlite:///example.db")
55 |
56 | data_loader = SQLDatabaseLoader(
57 | db=db,
58 | query="SELECT id, name FROM users WHERE active = 1"
59 | )
60 |
61 | documents = data_loader.load()
62 |
63 | for document in documents:
64 | print(document.page_content)
65 | print("=" * 50)
66 |
67 | ```
68 | 输出结果:
69 | ```py
70 | id: 1
71 | name: 张三
72 | ==================================================
73 | id: 2
74 | name: 李四
75 | ==================================================
76 | id: 3
77 | name: 王五
78 | ==================================================
79 | id: 4
80 | name: 赵六
81 | ==================================================
82 | id: 5
83 | name: 钱七
84 | ==================================================
85 | ```
--------------------------------------------------------------------------------
/docs/rag/loader/document/README.md:
--------------------------------------------------------------------------------
1 | # Document类型
2 |
3 | `LangChain`中通过各种`loader`加载后的对象是`Document`类型,其包含`page_content`和`metadata`两个重要属性。
4 |
5 | 除了可以从`loader`加载,还可以手动构造`Document`对象数据,例如:
6 |
7 | ```py
8 | from langchain_core.documents import Document
9 |
10 | documents = [
11 | Document(
12 | page_content="唐僧是师傅",
13 | metadata={"source": "师徒四人.txt"}
14 | ),
15 | Document(
16 | page_content="悟空是大师兄",
17 | metadata={"source": "师徒四人.txt"}
18 | ),
19 | Document(
20 | page_content="八戒是二师兄",
21 | metadata={"source": "师徒四人.txt"}
22 | ),
23 | Document(
24 | page_content="沙僧是三师兄",
25 | metadata={"source": "师徒四人.txt"}
26 | ),
27 | Document(
28 | page_content="白龙马是小师弟",
29 | metadata={"source": "师徒四人.txt"}
30 | )
31 | ]
32 |
33 | print(documents)
34 | ```
35 | 输出结果:
36 | ```text
37 | [
38 | Document(metadata={'source': '师徒四人.txt'}, page_content='唐僧是师傅'),
39 | Document(metadata={'source': '师徒四人.txt'}, page_content='悟空是大师兄'),
40 | Document(metadata={'source': '师徒四人.txt'}, page_content='八戒是二师兄'),
41 | Document(metadata={'source': '师徒四人.txt'}, page_content='沙僧是三师兄'),
42 | Document(metadata={'source': '师徒四人.txt'}, page_content='白龙马是小师弟')
43 | ]
44 | ```
--------------------------------------------------------------------------------
/docs/rag/loader/html/README.md:
--------------------------------------------------------------------------------
1 | # HTML网页数据
2 | ::: tip
3 | [WebBaseLoader文档](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.web_base.WebBaseLoader.html)
4 | :::
5 |
6 | ## 选型方案对比
7 | | 加载器名称 | 动态渲染支持 | 核心功能 | 优势场景 | 主要限制|
8 | |----|----|----|----|----|
9 | | **WebBaseLoader** | ❌ | 静态HTML快速解析 | 轻量级抓取静态页面(如文档、博客)| 无法处理JavaScript动态内容|
10 | | **UnstructuredURLLoader** | ❌ | 多格式解析(HTML/PDF等),自动清理文本 | 混合格式内容提取(如带PDF的网页) | 复杂页面可能丢失部分结构 |
11 | | **SeleniumURLLoader** | ✅ | 完整浏览器环境渲染 | 需要登录或交互的动态页面(如SPA) | 配置复杂,运行效率低 |
12 | | **RSSFeedLoader** | ❌ | 结构化解析RSS/Atom订阅源 | 新闻/博客更新追踪 | 仅支持标准订阅格式 |
13 | | **AsyncHtmlLoader** | ❌ | 异步并发批量抓取 | 大规模静态页面采集(50+URLs)| 需要异步编程支持 |
14 |
15 |
16 | ## WebBaseLoader
17 | ::: tip
18 | [WebBaseLoader 文档](https://python.langchain.com/docs/integrations/document_loaders/web_base/)
19 | :::
20 |
21 | ```py
22 | import bs4
23 | from langchain_community.document_loaders import WebBaseLoader
24 |
25 | # bs_kwargs参数作用是只加载网页主题内容
26 | data_loader = WebBaseLoader(
27 | web_path="https://zh.wikipedia.org/wiki/黑神话:悟空",
28 | bs_kwargs={
29 | "parse_only": bs4.SoupStrainer(id="bodyContent")
30 | }
31 | )
32 |
33 | documents = data_loader.load()
34 | document = documents[0]
35 | print(f"{document.metadata}\n")
36 | print(document.page_content)
37 | ```
38 |
39 | ## RSSFeedLoader
40 | ::: tip
41 | [RSSFeedLoader 文档](https://python.langchain.com/docs/integrations/document_loaders/rss/)
42 | :::
43 |
44 | 首先需要安装必要的包:
45 | ```sh
46 | $ pip install feedparser newspaper3k listparser
47 | ```
48 |
49 | ```py
50 | import os
51 | import certifi
52 |
53 | from langchain_community.document_loaders import RSSFeedLoader
54 |
55 | # 设置SSL,防止加载时报错
56 | os.environ["SSL_CERT_FILE"] = certifi.where()
57 |
58 | # RSS Feed地址
59 | urls = [
60 | "https://36kr.com/feed",
61 | "https://www.huxiu.com/rss/1.xml",
62 | "https://www.ruanyifeng.com/blog/atom.xml",
63 | "https://www.oschina.net/news/rss"
64 | ]
65 |
66 | loader = RSSFeedLoader(urls=urls)
67 | documents = loader.load()
68 |
69 | for i, doc in enumerate(documents[:5]):
70 | print(f"文章 {i+1}:")
71 | print(f"标题: {doc.metadata.get('title', '无标题')}")
72 | print(f"发布时间: {doc.metadata.get('published', '未知时间')}")
73 | print(f"来源: {doc.metadata.get('source', '未知来源')}")
74 | print(f"链接: {doc.metadata.get('link', '无链接')}")
75 | print("-" * 80)
76 | ```
77 | 输出结果:
78 | ```text
79 | 文章 1:
80 | 标题: 谷歌的 NotebookLM 能生成中文播客了
81 | 发布时间: 未知时间
82 | 来源: 未知来源
83 | 链接: http://www.ruanyifeng.com/blog/2025/05/notebooklm.html
84 | --------------------------------------------------------------------------------
85 | 文章 2:
86 | 标题: 科技爱好者周刊(第 346 期):未来就是永恒感的丧失
87 | 发布时间: 未知时间
88 | 来源: 未知来源
89 | 链接: http://www.ruanyifeng.com/blog/2025/04/weekly-issue-346.html
90 | --------------------------------------------------------------------------------
91 | 文章 3:
92 | 标题: 巨头的新战场:AI 编程 IDE(暨 字节 Trae 调用 MCP 教程)
93 | 发布时间: 未知时间
94 | 来源: 未知来源
95 | 链接: http://www.ruanyifeng.com/blog/2025/04/trae-mcp.html
96 | --------------------------------------------------------------------------------
97 | ```
--------------------------------------------------------------------------------
/docs/rag/loader/markdown/README.md:
--------------------------------------------------------------------------------
1 | # Markdown
2 | ::: tip
3 | [UnstructuredMarkdownLoader文档](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.markdown.UnstructuredMarkdownLoader.html)
4 | :::
5 |
6 | ```py
7 | from langchain_community.document_loaders import UnstructuredMarkdownLoader
8 |
9 | data_loader = UnstructuredMarkdownLoader(
10 | file_path="./data/黑悟空/黑悟空版本介绍.md",
11 | mode="elements",
12 | strategy="fast"
13 | )
14 |
15 | documents = data_loader.load()
16 |
17 | for doc in documents[:5]:
18 | print("========文档内容========")
19 | print(f"""element_id={doc.metadata.get('element_id')}, parent_id={doc.metadata.get('parent_id')}""")
20 | print(f"""{doc.page_content}""")
21 | ```
22 | 输出结果:
23 | ```text
24 | ========文档内容========
25 | element_id=b89add9386b58a1638e0b96d19f08d0d, parent_id=None
26 | 黑神话:悟空 🐵
27 | ========文档内容========
28 | element_id=4d1fd58a257960aafb046fc47605c217, parent_id=b89add9386b58a1638e0b96d19f08d0d
29 | 黑神话:悟空 是由中国游戏开发团队制作的一款备受瞩目的动作冒险游戏,以《西游记》为背景,重新演绎了经典故事,带来了极
30 | 具冲击力的视觉和游戏体验。
31 | ========文档内容========
32 | element_id=2aecac605c643fd6e5877eb2943061d9, parent_id=b89add9386b58a1638e0b96d19f08d0d
33 | 游戏版本介绍
34 | ========文档内容========
35 | element_id=066222dfa5c88f6daf909cc9f97ddc30, parent_id=2aecac605c643fd6e5877eb2943061d9
36 | 1. 数字标准版 💻
37 | ========文档内容========
38 | element_id=871db441632d0e97daf97578eef69d48, parent_id=066222dfa5c88f6daf909cc9f97ddc30
39 | 包含基础游戏
40 | ```
--------------------------------------------------------------------------------
/docs/rag/loader/ocr/README.md:
--------------------------------------------------------------------------------
1 | # OCR
2 | 撰写中。。。
--------------------------------------------------------------------------------
/docs/rag/loader/pdf/README.md:
--------------------------------------------------------------------------------
1 | # PDF
2 | 撰写中。。。
--------------------------------------------------------------------------------
/docs/rag/loader/text/README.md:
--------------------------------------------------------------------------------
1 | # 简单文本导入
2 |
3 | ## TextLoader
4 | ::: tip
5 | [TextLoader文档](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.text.TextLoader.html)
6 | :::
7 |
8 | ```py
9 | from langchain_community.document_loaders import TextLoader
10 |
11 | text_loader = TextLoader(
12 | file_path="./data/黑悟空/设定.txt",
13 | encoding="utf-8"
14 | )
15 |
16 | documents = text_loader.load()
17 |
18 | print(documents)
19 | ```
20 | 输出结果:
21 | ```text
22 | [
23 | Document(
24 | metadata={'source': './data/黑悟空/设定.txt'},
25 | page_content='《黑神话:悟空》的故事可分为六个章节,名为“火照黑云”、“风起黄昏”、“夜生白露”、“曲度紫鸳”、“日落红尘”和“未竟”,
26 | 并且拥有两个结局,玩家的选择和经历将影响最终的结局。\n\n每个章节结尾,附有二维 和三维的动画过场,
27 | 展示和探索《黑神话:悟空》中的叙事和主题元素。游戏的设定融合了中国的文化和自然地标。
28 | 例如重庆的大足石刻、山西省的小西天、南禅寺、铁佛寺、广胜寺和鹳雀楼等,都在游戏中出现。
29 | 游戏也融入了佛教和道教的哲学元素。'
30 | )
31 | ]
32 | ```
33 |
34 | ## DirectoryLoader
35 | ::: tip
36 | [DirectoryLoader文档](https://python.langchain.com/api_reference/community/document_loaders/langchain_community.document_loaders.directory.DirectoryLoader.html)
37 | :::
38 |
39 | 可使用`DirectoryLoader`一次性加载某个目录下所有`txt`文件。
40 | ```py
41 | from langchain_community.document_loaders import DirectoryLoader, TextLoader
42 |
43 | markdown_loader = DirectoryLoader(
44 | path="./data/黑悟空",
45 | glob=["**/*.txt"],
46 | loader_cls=lambda path: TextLoader(path, encoding="utf-8")
47 | )
48 |
49 | documents = markdown_loader.load()
50 |
51 | print(f"文档数:{len(documents)}")
52 | ```
53 |
54 | ## Unstructured
55 | ::: tip
56 | [Unstructured 文档](https://docs.unstructured.io/open-source/introduction/quick-start)
57 | :::
58 |
59 | 如要在加载文档时有自定义要求,可使用`Unstructured`获取更多信息。
60 | ```py
61 | from unstructured.partition.text import partition_text
62 |
63 | elements = partition_text(
64 | "./data/黑悟空/设定.txt"
65 | )
66 |
67 | for element in elements:
68 | print("============================")
69 | print(f"文档内容: {element.text}")
70 |
71 | print("元数据:")
72 | metadata_dict = element.metadata.__dict__
73 | for key, value in metadata_dict.items():
74 | if not key.startswith('_') and value is not None:
75 | print(f" {key}: {value}")
76 | ```
77 |
78 | 输出结果:
79 | ```text
80 | ============================
81 | 文档内容: 《黑神话:悟空》的故事可分为六个章节,名为“火照黑云”、“风起黄昏”、“夜生白露”、“曲度紫鸳”、“日落红尘”和“未竟”,
82 | 并且拥有两个结局,玩家的选择和经历将影响最终的结局。
83 | 元数据:
84 | last_modified: 2025-04-27T22:13:40
85 | languages: ['zho']
86 | file_directory: ./data/黑悟空
87 | filename: 设定.txt
88 | filetype: text/plain
89 | ============================
90 | 文档内容: 每个章节结尾,附有二维和三维的动画过场,展示和探索《黑神话:悟空》中的叙事和主题元素。
91 | 元数据:
92 | last_modified: 2025-04-27T22:13:40
93 | languages: ['zho']
94 | file_directory: ./data/黑悟空
95 | filename: 设定.txt
96 | filetype: text/plain
97 | ============================
98 | 文档内容: 游戏的设定融合了中国的文化和自然地标。例如重庆的大足石刻、山西省的小西天、南禅寺、铁佛寺、广胜寺和鹳雀楼等,
99 | 都在游戏中出现。游戏也融入了佛教和道教的哲学元素。
100 | 元数据:
101 | last_modified: 2025-04-27T22:13:40
102 | languages: ['zho']
103 | file_directory: ./data/黑悟空
104 | filename: 设定.txt
105 | filetype: text/plain
106 | ```
--------------------------------------------------------------------------------
/docs/rag/vectorStore/README.md:
--------------------------------------------------------------------------------
1 | # 介绍
2 |
3 | ## 向量
4 |
5 | ### 向量和标量
6 |
7 | **向量(Vector)**:是一个有方向和大小的量,常以一组有序的浮点数组来表示,例如:
8 | ```py
9 | vector = [0.1, 0.8, -0.3, ..., 0.05]
10 | ```
11 |
12 | **标量(Scalar)**:是一个只有大小,没有方向的量(例如,温度,质量)。
13 |
14 | ### 向量的分类
15 |
16 | 向量按存储内容可分为:
17 | * **数值向量**:包含纯数字。
18 | * **特征向量**:表示对象特征的数值。
19 | * **词向量**:表示词语语义。
20 |
21 | ### 向量的运算
22 | 向量之间可以进行运算:
23 | * 加法:对应的分量相加,例如:`[a1, a2] + [b1, b2] = [a1 + b1, a2 + b2]`。
24 | * 数乘:标量乘以向量的每一个分量,例如:`k * [v1, v2] = [v1 * k, v2 * k]`。
25 | * 点积:两个向量中,对应的每一个分量相乘,最后求和,例如:`[a1, a2] * [b1, b2] = a1 * b1 + a2 * b2`。
26 | * 余弦相似度:求`cos`。
27 | * 欧氏距离:求`d(a,b)`。
28 |
29 | ```py
30 | import numpy as np
31 |
32 | a = np.array([1, 2, 3])
33 | b = np.array([4, 5, 6])
34 | k = 2
35 |
36 | # 向量的加法
37 | print(a + b) # 输出[5 7 9]
38 |
39 | # 数乘
40 | print(k * a) # 输出[2 4 6]
41 |
42 | # 点积
43 | print(np.dot(a, b)) # 输出32
44 |
45 | # 余弦相似度
46 | cos_sim = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
47 | print(cos_sim) # 输出0.9746318461970762
48 |
49 | # 欧氏距离
50 | euclidean_dist = np.linalg.norm(a - b)
51 | print(euclidean_dist) # 输出5.196152422706632
52 | ```
53 | ## 向量数据库
54 |
55 | **向量数据库(Vector DB)**:是一种专门用于存储、索引和查询向量数据(高维数值数组)的数据库系统。与传统数据库基于精确匹配的查询方式不同,向量数据库通过计算向量之间的相似度来检索数据,这使得它特别适合处理非结构化数据(如图像、文本、音频等)的相似性搜索。
56 |
57 |
58 | ### 核心功能
59 |
60 | 其核心功能如下:
61 | * **向量操作**:支持向量插入/更新/删除。
62 | * **近似最近邻(ANN)搜索**:在精度和性能之间取得平衡的搜索算法。
63 | * **向量相似性搜索**:基于余弦相似度、欧氏距离或内积等度量方式。
64 | * **索引构建与压缩**:构建如 `HNSW`、`IVF`、`PQ` 等索引结构。
65 | * **高维数据处理**:能够有效处理数百至数千维的数据。
66 | * **与结构化数据关联**:支持元数据存储与联合查询。
67 | * **大规模数据处理**:支持数十亿级别的向量高效检索。
68 |
69 | ### 主流向量数据库对比
70 | ::: tip
71 | [LangChain官方 向量存储方案对比](https://python.langchain.com/docs/integrations/vectorstores/)