LightRAG 由入门到精通
LightRAG 由入门到精通
作者:王珂
邮箱:49186456@qq.com
文章目录
- LightRAG 由入门到精通
- 简介
- 一、LightRAG Server
- 1.1 安装 LightRAG Server
- 1.2 LightRAG Server 和 WebUI
- 1.2.1 配置 LightRAG Server
- 1.2.2 启动 LightRAG Server
- 1.2.3 使用 Docker 加载 LightRAG Server
- 1.2.4 使用 Docker 部署 LightRAG Server 不通过克隆仓库
- 1.2.5 将 LightRAG 安装为 Linux 服务
- 1.3 Ollama 模拟
- 1.3.1 Open WebUI 连接到 LightRAG
- 1.3.2 在对话中选着查询模式
- 1.3.2 添加用户提示词
- 1.3.3 API 密钥 和 认证
- 1.3.4 Azure OpenAI 后端配置
- 1.3.5 LightRAG 服务器详细配置
- 1.3.6 LightRag API 服务器命令行选项
- 二、LightRAG Core
- 2.1 安装 LightRAG Core
- 2.2 快速开始
- 2.2.1 快速开始使用 LightRAG Core
- 2.3 使用 LightRAG Core 编程
- 2.3.1 LightRAG 编程示例
- 2.3.2 LightRAG 初始化参数
- 2.3.3 查询参数
- 2.3.4 LLM 和 Embedding 注入
- 2.3.5 对话历史支持
- 2.3.6 用户提示词 vs 查询
- 2.3.7 插入
- 2.3.8 存储
- 2.3.9 编辑实体和关系
- 2.3.10 实体合并
- 2.3.11 Token 统计功能
- 2.3.12 数据导出功能
- 2.3.13 缓存
- 2.3.14 LightRAG API
- 2.3.15 知识图谱可视化
- 2.3.16 评估
简介
github 项目
https://github.com/HKUDS/LightRAG
英文
https://github.com/HKUDS/LightRAG/blob/main/README.md
中文
https://github.com/HKUDS/LightRAG/blob/main/README-zh.md
LightRAG 是由香港大学研究团队开发的一种检索增强生成(Retrieval-Augmented Generation, RAG)系统。结合图结构索引和双层检索机制,大大提高了大模型语言在信息检索方面的准确性和效率。
LightRAG 能够很好的捕捉实体之间的关系,能够处理具体和抽象查询。
LightRAG 通过增量更新算法及时整合新数据,而无需重建整个知识库。
LightRAG架构
LightRAG 索引流程
LightRAG 检索和查询流程
环境准备
文档中需要用到大语言模型和向量模型,我们分别采用 DeepSeek 官网的 deepseek-chat 和 阿里百炼平台的 text-embedding-v3。如果没有请在如下地址申请 api-key,因为使用 token 需要付费,我们充值¥5 即可做实验。
大语言模型:deepseek-v3,api-key 申请地址:
https://platform.deepseek.com/api_keys
阿里百炼平台 api-key 申请地址:
https://bailian.console.aliyun.com/?spm=5176.29677750.nav-v2-dropdown-menu-0.d_main_1_0.6514154a4FlHkA&tab=model&scm=20140722.M_10773066._.V_1#/api-key
一、LightRAG Server
英文 README:
https://github.com/HKUDS/LightRAG/blob/main/lightrag/api/README.md
中文 README-zh
https://github.com/HKUDS/LightRAG/blob/main/lightrag/api/README-zh.md
1.1 安装 LightRAG Server
-
从 PyPI 安装
pip install "lightrag-hku[api]"
因为国内网络限制,直接下载不下来,实际测试可以通过如下镜像下载
pip install -i https://mirrors.aliyun.com/pypi/simple "lightrag-hku[api]"
示例项目:lightrag-server-pypi
-
从源码安装
git clone https://github.com/HKUDS/LightRAG.git cd LightRAG # create a Python virtual enviroment if neccesary # Install in editable mode with API support pip install -e ".[api]"
示例项目:lightrag-server-source
-
使用 Docker Compose 加载 LightRAG Server
git clone https://github.com/HKUDS/LightRAG.git cd LightRAG cp env.example .env # modify LLM and Embedding settings in .env docker compose up
1.2 LightRAG Server 和 WebUI
LightRAG Server 被设计为提供 Web UI 和 API 的支持。使用 Web UI 更便于创建文档索引、知识图谱研究和简单的 RAG 查询索引。LightRAG Server 还提供了和 Ollama 兼容的接口,目的是将 LightRAG 模拟为一个 Ollama 的聊天模型,像 Open WebUI,很方便的访问 LightRAG。
文档管理
知识图谱
检索
1.2.1 配置 LightRAG Server
LightRAG 需要同时集成大语言模型(LLM)和嵌入模型(Embedding Model)来执行文档索引和查询操作。在初始化部署 LightRAG server 之前,需要分别对大语言模型和嵌入模型进行配置。LightRAG 为 LLM/Embedding 的后端绑定变量。
- ollama
- lollms
- openai or openai compatible
- azure_openai
推荐使用环境变量来配置 LightRAG Server。在项目的根目录下有一个配置环境变量示例的文件 env.example,把它复制到启动目录并重命名为.env,对 LLM 和 Embedding Model 的参数进行修改。一个很重要的点是当每次 LightRAG Server 启动时会从 .env 加载环境变量到系统环境变量。由于LightRAG Server 优先使用系统环境变量的设置,因此如果在通过命令行启动了 LightRAG Server 之后,你修改了 .env 文件,则需要执行 source .env
来使新配置生效。
LLM 和 Embedding 通用设置示例
-
OpenAI LLM + OpenAI Embedding:
### OpenAI alike example LLM_BINDING=openai LLM_MODEL=deepseek-chat LLM_BINDING_HOST=https://api.deepseek.com LLM_BINDING_API_KEY=<修改为你的API Key>### Embedding Configuration (Use valid host. For local services installed with docker, you can use host.docker.internal) EMBEDDING_MODEL=text-embedding-v3 EMBEDDING_DIM=1024 EMBEDDING_BINDING_API_KEY=<修改为你的API Key>### OpenAI alike example EMBEDDING_BINDING=openai EMBEDDING_BINDING_HOST=https://dashscope.aliyuncs.com/compatible-mode/v1
-
OpenAI LLM + Ollama Embedding:
LLM_BINDING=openai LLM_MODEL=gpt-4o LLM_BINDING_HOST=https://api.openai.com/v1 LLM_BINDING_API_KEY=your_api_key ### Max tokens sent to LLM (less than model context size) MAX_TOKENS=32768EMBEDDING_BINDING=ollama EMBEDDING_BINDING_HOST=http://localhost:11434 EMBEDDING_MODEL=bge-m3:latest EMBEDDING_DIM=1024 # EMBEDDING_BINDING_API_KEY=your_api_key
-
Ollama LLM + Ollama Embedding:
LLM_BINDING=ollama LLM_MODEL=mistral-nemo:latest LLM_BINDING_HOST=http://localhost:11434 # LLM_BINDING_API_KEY=your_api_key ### Max tokens sent to LLM (based on your Ollama Server capacity) MAX_TOKENS=8192EMBEDDING_BINDING=ollama EMBEDDING_BINDING_HOST=http://localhost:11434 EMBEDDING_MODEL=bge-m3:latest EMBEDDING_DIM=1024 # EMBEDDING_BINDING_API_KEY=your_api_key
1.2.2 启动 LightRAG Server
LightRAG Server 支持两种操作模式
-
简单且高效的 Uvicorn 模式
lightrag-server
首次启动有一个警告,提示需要安装 wcwidth
Warning: ‘wcwidth’ library not found. Progress bar display accuracy for wide characters (like emojis) may be reduced. Install with ‘pip install wcwidth’
pip install wcwidth
安装之后再次启动,启动日志:
2025-05-19 18:43:17 - pipmaster.package_manager - INFO - Targeting pip associated with Python: D:\work\PycharmProject\lightrag-server-pypi\venv\Scripts\python.exe | Command base: D:\wo
rk\PycharmProject\lightrag-server-pypi\venv\Scripts\python.exe -m pipLightRAG log file: D:\work\PycharmProject\lightrag-server-pypi\lightrag.log
WARNING:root:In uvicorn mode, workers parameter was set to 2. Forcing workers=1
╔══════════════════════════════════════════════════════════════╗ ║ 🚀 LightRAG Server v1.3.7/0170 ║ ║ Fast, Lightweight RAG Server Implementation ║ ╚══════════════════════════════════════════════════════════════╝
📡 Server Configuration:
├─ Host: 0.0.0.0
├─ Port: 9621
├─ Workers: 1
├─ CORS Origins: *
├─ SSL Enabled: False
├─ Ollama Emulating Model: lightrag:latest
├─ Log Level: INFO
├─ Verbose Debug: False
├─ History Turns: 3
├─ API Key: Not Set
└─ JWT Auth: Disabled📂 Directory Configuration:
├─ Working Directory: D:\work\PycharmProject\lightrag-server-pypi\rag_storage
└─ Input Directory: D:\work\PycharmProject\lightrag-server-pypi\inputs🤖 LLM Configuration:
├─ Binding: openai
├─ Host: https://api.deepseek.com
├─ Model: deepseek-chat
├─ Temperature: 0.5
├─ Max Async for LLM: 4
├─ Max Tokens: 32768
├─ Timeout: 150
├─ LLM Cache Enabled: True
└─ LLM Cache for Extraction Enabled: True📊 Embedding Configuration:
├─ Binding: openai
├─ Host: https://dashscope.aliyuncs.com/compatible-mode/v1
├─ Model: text-embedding-v3
└─ Dimensions: 1024⚙️ RAG Configuration:
├─ Summary Language: Chinese
├─ Max Parallel Insert: 2
├─ Max Embed Tokens: 8192
├─ Chunk Size: 1200
├─ Chunk Overlap Size: 100
├─ Cosine Threshold: 0.2
├─ Top-K: 60
├─ Max Token Summary: 500
└─ Force LLM Summary on Merge: 6💾 Storage Configuration:
├─ KV Storage: JsonKVStorage
├─ Vector Storage: NanoVectorDBStorage
├─ Graph Storage: NetworkXStorage
└─ Document Status Storage: JsonDocStatusStorage✨ Server starting up…
🌐 Server Access Information:
├─ WebUI (local): http://localhost:9621
├─ Remote Access: http://:9621
├─ API Documentation (local): http://localhost:9621/docs
└─ Alternative Documentation (local): http://localhost:9621/redoc📝 Note:
Since the server is running on 0.0.0.0:
- Use ‘localhost’ or ‘127.0.0.1’ for local access
- Use your machine’s IP address for remote access
- To find your IP address:
• Windows: Run ‘ipconfig’ in terminal
• Linux/Mac: Run ‘ifconfig’ or ‘ip addr’ in terminalINFO: Process 19620 Shared-Data created for Single Process
INFO: Loaded graph from D:\work\PycharmProject\lightrag-server-pypi\rag_storage\graph_chunk_entity_relation.graphml with 343 nodes, 271 edges
Starting Uvicorn server in single-process mode on 0.0.0.0:9621
INFO: Started server process [19620]
INFO: Waiting for application startup.
INFO: Process 19620 initialized updated flags for namespace: [full_docs]
INFO: Process 19620 ready to initialize storage namespace: [full_docs]
INFO: Process 19620 KV load full_docs with 2 records
INFO: Process 19620 initialized updated flags for namespace: [text_chunks]
INFO: Process 19620 ready to initialize storage namespace: [text_chunks]
INFO: Process 19620 KV load text_chunks with 22 records
INFO: Process 19620 initialized updated flags for namespace: [entities]
INFO: Process 19620 initialized updated flags for namespace: [relationships]
INFO: Process 19620 initialized updated flags for namespace: [chunks]
INFO: Process 19620 initialized updated flags for namespace: [chunk_entity_relation]
INFO: Process 19620 initialized updated flags for namespace: [llm_response_cache]
INFO: Process 19620 ready to initialize storage namespace: [llm_response_cache]
INFO: Process 19620 KV load llm_response_cache with 50 records
INFO: Process 19620 initialized updated flags for namespace: [doc_status]
INFO: Process 19620 ready to initialize storage namespace: [doc_status]
INFO: Process 19620 doc status load doc_status with 2 records
INFO: Process 19620 Pipeline namespace initializedServer is ready to accept connections! 🚀
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:9621 (Press CTRL+C to quit) -
The multiprocess Gunicorn + Uvicorn mode (产品模式,不支持 Windows 环境):
lightrag-gunicorn --workers 4
.env
文件必须放在启动目录
在启动的时,LightRAG Server 会创建一个文档目录(默认是 is ./inputs
)和一个数据目录(默认是 ./rag_storage
)。这允许你用不同的目录初始化多个 LightRAG 实例,每一个实例配置监听不同的网络端口。
常用的启动参数
--host
:--port
--timeout
--log-level
--input-dir
1.2.3 使用 Docker 加载 LightRAG Server
1.2.4 使用 Docker 部署 LightRAG Server 不通过克隆仓库
1.2.5 将 LightRAG 安装为 Linux 服务
1.3 Ollama 模拟
1.3.1 Open WebUI 连接到 LightRAG
1.3.2 在对话中选着查询模式
1.3.2 添加用户提示词
1.3.3 API 密钥 和 认证
1.3.4 Azure OpenAI 后端配置
1.3.5 LightRAG 服务器详细配置
1.3.6 LightRag API 服务器命令行选项
。。。。。。未完待续
二、LightRAG Core
2.1 安装 LightRAG Core
-
从源码安装(推荐)
-
从 gitlab 上拉取源码
git clone https://github.com/HKUDS/LightRAG.git
进入到 LightRAG 目录
-
创建虚拟环境
python -m venv venv
-
安装依赖
pip install -e .
示例项目:lightrag-core-source
-
-
从 PyPi 安装
pip install lightrag-hku
2.2 快速开始
2.2.1 快速开始使用 LightRAG Core
开始使用 LightRAG core,可以参考 examples
中的样例代码。此外,有一个视频样例指导你搭建本例环境的过程。如果你已经有了一个 OpenAI API key,你可以立即运行这个样例。
### you should run the demo code with project folder
cd LightRAG
### provide your API-KEY for OpenAI
export OPENAI_API_KEY="sk-...your_opeai_key..."
### download the demo document of "A Christmas Carol" by Charles Dickens
curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt > ./book.txt
### run the demo code
python examples/lightrag_openai_demo.py
一个流式响应的实现样例,请查看 examples/lightrag_openai_compatible_demo.py
, 在执行之前,请确保你已经修改了样例代码 LLM 和 embedding 相应的配置。
说明 1:当运行演示程序时,请注意不同的测试脚本可能使用不同的嵌入模型。如果你切换到不同的嵌入模型,你必须清除数据目录(./dickens);否则,程序可能会遇到错误。如果希望保留LLM缓存,可以保留 kv_store_llm_response_cache。Json 文件,同时清除 data 目录。
说明 2:只有 lightrag_openai_demo.py 和 lightrag_openai_compatible_demo.py 是官方支持的示例代码。其他样例文件是尚未经过完整测试和优化的社区贡献文件。
运行自定义样例 lightrag_openai_compatible_wk_demo.py
-
修改 lightrag_openai_compatible_demo.py
-
修改 embedding_func
我们将 ollama_embed 换成 openai_embed,这样就可以使用阿里百炼平台的 text-embedding-v3 模型
async def embedding_func(texts: list[str]) -> np.ndarray:# return await ollama_embed(# texts=texts,# embed_model="bge-m3:latest",# host="http://m4.lan.znipower.com:11434",# )# modified by wangkereturn await openai_embed(texts=texts,model="text-embedding-v3",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",api_key="<你的阿里百炼平台 API key>")
-
修改 llm_model_func,配置 deepseek 的 API key
async def llm_model_func(prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs ) -> str:return await openai_complete_if_cache("deepseek-chat",prompt,system_prompt=system_prompt,history_messages=history_messages,api_key="<你的 deepseek api key>"base_url="https://api.deepseek.com",**kwargs,)
-
修改 main() 函数中读取文件的位置
with open("./inputs/Arthas 学习笔记.md", "r", encoding="utf-8") as f:await rag.ainsert(f.read())
-
修改查询问题
将 naive, global, hybrid 检索的问题都改成如下
resp = await rag.aquery("文章中介绍了几种垃圾收集器?",param=QueryParam(mode="hybrid", stream=True),)
-
-
修改 lightrag.py
第 193 行,将参数 32 修改为 10(百炼平台的 embedding 模型限制不能大于10)
embedding_batch_num: int = field(default=int(os.getenv("EMBEDDING_BATCH_NUM", 10))) # 这里原本是 32
-
准备文档
创建目录 examples/input,并上传测试文档《Arthas 学习笔记.md》
-
执行测试
第一次运行有一个警告,提示需要安装 wcwidth
Warning: ‘wcwidth’ library not found. Progress bar display accuracy for wide characters (like emojis) may be reduced. Install with ‘pip install wcwidth’
执行安装
pip install wcwidth
再次运行
2.3 使用 LightRAG Core 编程
如果你想将 LightRAG 集成到你的项目中,我们推荐使用 LightRAG Server 提供的 REST API。LightRAG Core 通常用于嵌入式应用,或希望进行研究和评估的研究人员。
2.3.1 LightRAG 编程示例
demo-program.py
import os
import asyncio
from lightrag import LightRAG, QueryParam
from lightrag.llm.openai import openai_embed, openai_complete_if_cache
from lightrag.kg.shared_storage import initialize_pipeline_status
from lightrag.utils import setup_logger, EmbeddingFunc
import numpy as npsetup_logger("lightrag", level="INFO")WORKING_DIR = "./rag_storage"
if not os.path.exists(WORKING_DIR):os.mkdir(WORKING_DIR)async def llm_model_func(prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs
) -> str:return await openai_complete_if_cache("deepseek-chat",prompt,system_prompt=system_prompt,history_messages=history_messages,api_key="<你的 deepseek api key>",base_url="https://api.deepseek.com",**kwargs)async def embedding_func(texts: list[str]) -> np.ndarray:return await openai_embed(texts,model="text-embedding-v3",api_key="<你的阿里百炼平台 api key>",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")async def initialize_rag():rag = LightRAG(working_dir=WORKING_DIR,embedding_func=EmbeddingFunc(embedding_dim=1024, # 阿里百炼平台 text-embedding-v3 的维度是 1024,需要根据实际修改max_token_size=8192,func=embedding_func),llm_model_func=llm_model_func,)await rag.initialize_storages()await initialize_pipeline_status()return ragasync def main():try:# Initialize RAG instancerag = await initialize_rag()await rag.insert("在11月19日举行的第68期励志讲坛上,中国科学院院士、上海交通大学校长张杰带着这样的期待,聆听了香港科技大学创校校长吴家玮关于治理大学的见解,同在台下的还有慕名而来的近500名交大学生。演讲结束后,张杰校长代表上海交通大学向吴家玮赠送了礼物。")# Perform hybrid searchmode = "hybrid"print(await rag.aquery("张杰有什么样的期待?",param=QueryParam(mode=mode)))except Exception as e:print(f"An error occurred: {e}")finally:if rag:await rag.finalize_storages()if __name__ == "__main__":asyncio.run(main())
重要提示:
- 这个程序使用LightRAG的默认存储设置,所以所有的数据将被持久化到WORKING_DIR/rag_storage。
- 这个程序只演示了初始化LightRAG对象的最简单方法:在创建LightRAG对象后注入嵌入函数和LLM函数,并初始化存储和管道状态。
2.3.2 LightRAG 初始化参数
Parameter | Type | Explanation | Default |
---|---|---|---|
working_dir | str | Directory where the cache will be stored | lightrag_cache+timestamp |
kv_storage | str | Storage type for documents and text chunks. Supported types: JsonKVStorage ,PGKVStorage ,RedisKVStorage ,MongoKVStorage | JsonKVStorage |
vector_storage | str | Storage type for embedding vectors. Supported types: NanoVectorDBStorage ,PGVectorStorage ,MilvusVectorDBStorage ,ChromaVectorDBStorage ,FaissVectorDBStorage ,MongoVectorDBStorage ,QdrantVectorDBStorage | NanoVectorDBStorage |
graph_storage | str | Storage type for graph edges and nodes. Supported types: NetworkXStorage ,Neo4JStorage ,PGGraphStorage ,AGEStorage | NetworkXStorage |
doc_status_storage | str | Storage type for documents process status. Supported types: JsonDocStatusStorage ,PGDocStatusStorage ,MongoDocStatusStorage | JsonDocStatusStorage |
chunk_token_size | int | Maximum token size per chunk when splitting documents | 1200 |
chunk_overlap_token_size | int | Overlap token size between two chunks when splitting documents | 100 |
tokenizer | Tokenizer | The function used to convert text into tokens (numbers) and back using .encode() and .decode() functions following TokenizerInterface protocol. If you don’t specify one, it will use the default Tiktoken tokenizer. | TiktokenTokenizer |
tiktoken_model_name | str | If you’re using the default Tiktoken tokenizer, this is the name of the specific Tiktoken model to use. This setting is ignored if you provide your own tokenizer. | gpt-4o-mini |
entity_extract_max_gleaning | int | Number of loops in the entity extraction process, appending history messages | 1 |
entity_summary_to_max_tokens | int | Maximum token size for each entity summary | 500 |
node_embedding_algorithm | str | Algorithm for node embedding (currently not used) | node2vec |
node2vec_params | dict | Parameters for node embedding | {"dimensions": 1536,"num_walks": 10,"walk_length": 40,"window_size": 2,"iterations": 3,"random_seed": 3,} |
embedding_func | EmbeddingFunc | Function to generate embedding vectors from text | openai_embed |
embedding_batch_num | int | Maximum batch size for embedding processes (multiple texts sent per batch) | 32 |
embedding_func_max_async | int | Maximum number of concurrent asynchronous embedding processes | 16 |
llm_model_func | callable | Function for LLM generation | gpt_4o_mini_complete |
llm_model_name | str | LLM model name for generation | meta-llama/Llama-3.2-1B-Instruct |
llm_model_max_token_size | int | Maximum token size for LLM generation (affects entity relation summaries) | 32768 (default value changed by env var MAX_TOKENS) |
llm_model_max_async | int | Maximum number of concurrent asynchronous LLM processes | 4 (default value changed by env var MAX_ASYNC) |
llm_model_kwargs | dict | Additional parameters for LLM generation | |
vector_db_storage_cls_kwargs | dict | Additional parameters for vector database, like setting the threshold for nodes and relations retrieval | cosine_better_than_threshold: 0.2(default value changed by env var COSINE_THRESHOLD) |
enable_llm_cache | bool | If TRUE , stores LLM results in cache; repeated prompts return cached responses | TRUE |
enable_llm_cache_for_entity_extract | bool | If TRUE , stores LLM results in cache for entity extraction; Good for beginners to debug your application | TRUE |
addon_params | dict | Additional parameters, e.g., {"example_number": 1, "language": "Simplified Chinese", "entity_types": ["organization", "person", "geo", "event"]} : sets example limit, entiy/relation extraction output language | example_number: all examples, language: English |
convert_response_to_json_func | callable | Not used | convert_response_to_json |
embedding_cache_config | dict | Configuration for question-answer caching. Contains three parameters: enabled : Boolean value to enable/disable cache lookup functionality. When enabled, the system will check cached responses before generating new answers. similarity_threshold : Float value (0-1), similarity threshold. When a new question’s similarity with a cached question exceeds this threshold, the cached answer will be returned directly without calling the LLM. use_llm_check : Boolean value to enable/disable LLM similarity verification. When enabled, LLM will be used as a secondary check to verify the similarity between questions before returning cached answers. |
2.3.3 查询参数
使用 QueryParam 控制你的查询行为
class QueryParam:"""Configuration parameters for query execution in LightRAG."""mode: Literal["local", "global", "hybrid", "naive", "mix", "bypass"] = "global""""Specifies the retrieval mode:- "local": Focuses on context-dependent information.- "global": Utilizes global knowledge.- "hybrid": Combines local and global retrieval methods.- "naive": Performs a basic search without advanced techniques.- "mix": Integrates knowledge graph and vector retrieval."""only_need_context: bool = False"""If True, only returns the retrieved context without generating a response."""only_need_prompt: bool = False"""If True, only returns the generated prompt without producing a response."""response_type: str = "Multiple Paragraphs""""Defines the response format. Examples: 'Multiple Paragraphs', 'Single Paragraph', 'Bullet Points'."""stream: bool = False"""If True, enables streaming output for real-time responses."""top_k: int = int(os.getenv("TOP_K", "60"))"""Number of top items to retrieve. Represents entities in 'local' mode and relationships in 'global' mode."""max_token_for_text_unit: int = int(os.getenv("MAX_TOKEN_TEXT_CHUNK", "4000"))"""Maximum number of tokens allowed for each retrieved text chunk."""max_token_for_global_context: int = int(os.getenv("MAX_TOKEN_RELATION_DESC", "4000"))"""Maximum number of tokens allocated for relationship descriptions in global retrieval."""max_token_for_local_context: int = int(os.getenv("MAX_TOKEN_ENTITY_DESC", "4000"))"""Maximum number of tokens allocated for entity descriptions in local retrieval."""conversation_history: list[dict[str, str]] = field(default_factory=list)"""Stores past conversation history to maintain context.Format: [{"role": "user/assistant", "content": "message"}]."""history_turns: int = 3"""Number of complete conversation turns (user-assistant pairs) to consider in the response context."""ids: list[str] | None = None"""List of ids to filter the results."""model_func: Callable[..., object] | None = None"""Optional override for the LLM model function to use for this specific query.If provided, this will be used instead of the global model function.This allows using different models for different query modes."""user_prompt: str | None = None"""User-provided prompt for the query.If proivded, this will be use instead of the default vaulue from prompt template."""
2.3.4 LLM 和 Embedding 注入
LightRAG 需要使用 LLM 和 Embedding 模型完成文档的索引和查询任务。在初始化阶段,需要把 LLM 和 Embedding 的操作函数注入到 LightRAG 中。
-
使用类 Open AI 的 APIs
LightRAG 支持类 Open AI 的 chat/embeddings APIs
async def llm_model_func(prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs ) -> str:return await openai_complete_if_cache("deepseek-chat",prompt,system_prompt=system_prompt,history_messages=history_messages,api_key="<你的 deepseek api key>",base_url="https://api.deepseek.com",**kwargs)async def embedding_func(texts: list[str]) -> np.ndarray:return await openai_embed(texts,model="text-embedding-v3",api_key="<你的阿里百炼 api key>",base_url="https://dashscope.aliyuncs.com/compatible-mode/v1")async def initialize_rag():rag = LightRAG(working_dir=WORKING_DIR,llm_model_func=llm_model_func,embedding_func=EmbeddingFunc(embedding_dim=1024, # 阿里百炼 text-embedding-v3 的维度是 1024,需要根据实际情况修改max_token_size=8192,func=embedding_func))await rag.initialize_storages()await initialize_pipeline_status()return rag
-
使用 Hugging Face 模型
-
使用 Ollama 模型
-
LlamaIndex
2.3.5 对话历史支持
LightRAG现在通过对话历史功能支持多轮对话。以下是使用方法:
# 创建对话历史
conversation_history = [{"role": "user", "content": "主角对圣诞节的态度是什么?"},{"role": "assistant", "content": "在故事开始时,埃比尼泽·斯克鲁奇对圣诞节持非常消极的态度..."},{"role": "user", "content": "他的态度是如何改变的?"}
]# 创建带有对话历史的查询参数
query_param = QueryParam(mode="mix", # 或其他模式:"local"、"global"、"hybrid"conversation_history=conversation_history, # 添加对话历史history_turns=3 # 考虑最近的对话轮数
)# 进行考虑对话历史的查询
response = rag.query("是什么导致了他性格的这种变化?",param=query_param
)
2.3.6 用户提示词 vs 查询
当使用 LightRAG 查询内容的时候,不要把内容查询和与查询结果无关的输出加工写在一起。因为把两者混在一起会严重影响查询的效果。Query Param中的user_prompt
就是为解决这一问题而设计的。user_prompt
中的内容不参与RAG中的查询过程,它仅会在获得查询结果之后,与查询结果一起送给LLM,指导LLM如何处理查询结果。以下是使用方法:
# Create query parameters
query_param = QueryParam(mode = "hybrid", # Other modes:local, global, hybrid, mix, naiveuser_prompt = "For diagrams, use mermaid format with English/Pinyin node names and Chinese display labels",
)# Query and process
response_default = rag.query("Please draw a character relationship diagram for Scrooge",param=query_param
)
print(response_default)
2.3.7 插入
-
基本插入
# 基本插入 rag.insert("文本")
协程插入
rag.ainsert("文本")
-
批量插入
# 基本批量插入:一次插入多个文本 rag.insert(["文本1", "文本2",...])# 带有自定义批量大小配置的批量插入 rag = LightRAG(...working_dir=WORKING_DIR,max_parallel_insert = 4 )rag.insert(["文本1", "文本2", "文本3", ...]) # 文档将以4个为一批进行处理
-
带 ID 插入
如果您想为文档提供自己的ID,文档数量和ID数量必须相同。
# 插入单个文本,并为其提供ID rag.insert("文本1", ids=["文本1的ID"])# 插入多个文本,并为它们提供ID rag.insert(["文本1", "文本2",...], ids=["文本1的ID", "文本2的ID"])
-
使用管道插入
apipeline_enqueue_documents
和apipeline_process_enqueue_documents
函数允许您对文档进行增量插入到图中。这对于需要在后台处理文档的场景很有用,同时仍允许主线程继续执行。
并使用例程处理新文档。
rag = LightRAG(..)await rag.apipeline_enqueue_documents(input) # 您的循环例程 await rag.apipeline_process_enqueue_documents(input)
-
插入多文件类型支持
textract
支持读取TXT、DOCX、PPTX、CSV和PDF等文件类型。import textractfile_path = 'TEXT.pdf' text_content = textract.process(file_path)rag.insert(text_content.decode('utf-8'))
-
引文功能
通过提供文件路径,系统确保可以将来源追溯到其原始文档。
# 定义文档及其文件路径 documents = ["文档内容1", "文档内容2"] file_paths = ["path/to/doc1.txt", "path/to/doc2.txt"]# 插入带有文件路径的文档 rag.insert(documents, file_paths=file_paths)
2.3.8 存储
LightRAG 使用到4种类型的存储,每一种存储都有多种实现方案。在初始化 LightRAG 的时候可以通过参数设定这四类存储的实现方案。详情请参看前面的LightRAG 初始化参数。
2.3.9 编辑实体和关系
LightRAG现在支持全面的知识图谱管理功能,允许您在知识图谱中创建、编辑和删除实体和关系。
2.3.10 实体合并
2.3.11 Token 统计功能
2.3.12 数据导出功能
2.3.13 缓存
2.3.14 LightRAG API
LightRAG服务器旨在提供Web UI和API支持。有关LightRAG服务器的更多信息,请参阅LightRAG服务器。
2.3.15 知识图谱可视化
2.3.16 评估
数据集
生成查询
批了评估
总体性能表
** 农业** | 计算机科学 | 法律 | 混合 | |||||
---|---|---|---|---|---|---|---|---|
NaiveRAG | LightRAG | NaiveRAG | LightRAG | NaiveRAG | LightRAG | NaiveRAG | LightRAG | |
全面性 | 32.4% | 67.6% | 38.4% | 61.6% | 16.4% | 83.6% | 38.8% | 61.2% |
多样性 | 23.6% | 76.4% | 38.0% | 62.0% | 13.6% | 86.4% | 32.4% | 67.6% |
赋能性 | 32.4% | 67.6% | 38.8% | 61.2% | 16.4% | 83.6% | 42.8% | 57.2% |
总体 | 32.4% | 67.6% | 38.8% | 61.2% | 15.2% | 84.8% | 40.0% | 60.0% |
RQ-RAG | LightRAG | RQ-RAG | LightRAG | RQ-RAG | LightRAG | RQ-RAG | LightRAG | |
全面性 | 31.6% | 68.4% | 38.8% | 61.2% | 15.2% | 84.8% | 39.2% | 60.8% |
多样性 | 29.2% | 70.8% | 39.2% | 60.8% | 11.6% | 88.4% | 30.8% | 69.2% |
赋能性 | 31.6% | 68.4% | 36.4% | 63.6% | 15.2% | 84.8% | 42.4% | 57.6% |
总体 | 32.4% | 67.6% | 38.0% | 62.0% | 14.4% | 85.6% | 40.0% | 60.0% |
HyDE | LightRAG | HyDE | LightRAG | HyDE | LightRAG | HyDE | LightRAG | |
全面性 | 26.0% | 74.0% | 41.6% | 58.4% | 26.8% | 73.2% | 40.4% | 59.6% |
多样性 | 24.0% | 76.0% | 38.8% | 61.2% | 20.0% | 80.0% | 32.4% | 67.6% |
赋能性 | 25.2% | 74.8% | 40.8% | 59.2% | 26.0% | 74.0% | 46.0% | 54.0% |
总体 | 24.8% | 75.2% | 41.6% | 58.4% | 26.4% | 73.6% | 42.4% | 57.6% |
GraphRAG | LightRAG | GraphRAG | LightRAG | GraphRAG | LightRAG | GraphRAG | LightRAG | |
全面性 | 45.6% | 54.4% | 48.4% | 51.6% | 48.4% | 51.6% | 50.4% | 49.6% |
多样性 | 22.8% | 77.2% | 40.8% | 59.2% | 26.4% | 73.6% | 36.0% | 64.0% |
赋能性 | 41.2% | 58.8% | 45.2% | 54.8% | 43.6% | 56.4% | 50.8% | 49.2% |
总体 | 45.2% | 54.8% | 48.0% | 52.0% | 47.2% | 52.8% | 50.4% | 49.6% |
相关文章:
LightRAG 由入门到精通
LightRAG 由入门到精通 作者:王珂 邮箱:49186456qq.com 文章目录 LightRAG 由入门到精通简介一、LightRAG Server1.1 安装 LightRAG Server1.2 LightRAG Server 和 WebUI1.2.1 配置 LightRAG Server1.2.2 启动 LightRAG Server1.2.3 使用 Docker 加载 …...
【Spring Boot 整合 MongoDB 完整指南】
目录 Spring Boot 整合 MongoDB 完整指南1. 添加依赖2. 配置 MongoDB 连接application.properties 方式:application.yml 方式:3. 创建实体类(映射MongoDB中的文档,相当于MySQL的表)4. 创建 Repository 接口完成简单操作5. 使用 MongoTemplate 进行复杂操作6. 高级配置配置…...
prisma连接非关系型数据库mongodb并简单使用
prisma连接非关系型数据库如mongodb数据库并简单使用 安装 mongodbPrisma连接mongodb改造目录结构写一个model增查查多个查单个分页排序改改多个删单个多个最后代码进度安装 mongodb 社区版下载 副本集模式文档 可以百度下安装副本集模式,因为prisma要用事务。 如果你觉得安装…...
深度强化学习 | 基于SAC算法的移动机器人路径跟踪(附Pytorch实现)
目录 0 专栏介绍1 软性演员-评论家SAC算法2 基于SAC算法的路径跟踪2.1 SAC网络设计2.2 动作空间设计2.3 奖励函数设计 3 算法仿真 0 专栏介绍 本专栏以贝尔曼最优方程等数学原理为根基,结合PyTorch框架逐层拆解DRL的核心算法(如DQN、PPO、SAC)逻辑。针对机器人运动…...
VS中将控制台项目编程改为WINDOWS桌面程序
有时候因为误操作,建立了控制台项目,但是实际上想建立桌面程序。那么应该如何改过来呢? 一共要修改两个地方,修改步骤如下: 第一处修改地点: 将C/C下面的预处理器选项中,将原本的_CONSOLE修改…...
从API到UI:直播美颜SDK中的滤镜与贴纸功能开发与落地方案详解
时下,滤镜和贴纸功能,已经成为主播们展现个性、增强互动的“必备神器”。那么,这些功能背后的技术实现到底有多复杂?如何从API到UI构建一个流畅、灵活的美颜SDK呢?本文将从底层原理到前端实现,全面解析这两…...
vue3与springboot交互-前后分离【验证element-ui输入的内容】
系列文章目录 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】:每个知识点,都是写出代码…...
VS2017编译librdkafka 2.1.0
VS2017编译librdkafka 2.1.0 本篇是 Windows系统编译Qt使用的kafka(librdkafka)系列中的其中一篇,编译librdkafka整体步骤大家可以参考: Windows系统编译Qt使用的kafka(librdkafka) 由于项目需要,使用kafka,故自己编译了一次,编译的过程,踩了太多的坑了,特写了本篇…...
DeepSeek 赋能数字孪生:重构虚实共生的智能未来图景
目录 一、数字孪生技术概述1.1 数字孪生的概念1.2 技术原理剖析1.3 应用领域与价值 二、DeepSeek 技术解读2.1 DeepSeek 的技术亮点2.2 与其他模型的对比优势 三、DeepSeek 赋能数字孪生3.1 高精度建模助力3.2 实时数据处理与分析3.3 智能分析与预测 四、实际案例解析4.1 垃圾焚…...
谷歌前CEO TED演讲解析:AI 红利的三年窗口期与行业重构
谷歌前CEO埃里克施密特在2025年TED演讲中提出的"AI红利仅剩3年窗口期"观点,揭示了AI技术从算力、需求到监管的全局性变革。以下是基于演讲内容及关联数据的深度分析: 谷歌前CEO TED演讲解析:AI红利的三年窗口期与行业重构 一、算…...
数据仓库面试题合集②】ETL 设计与调度策略详解
📌 面试官为什么爱问 ETL 与调度? ETL 与调度是数据链路的“输血管道”,它的设计直接决定了数据处理的稳定性、扩展性与时效性。面试中此类问题侧重考察: 数据流设计是否合理 对任务依赖与失败容错的认知 是否具备复杂调度 DAG 设计经验 是否理解增量/全量策略、分区机制…...
前端入职总结
负责的工作内容,遇到的问题,怎么解决, 技能组溢出 问题一:溢入溢出bug 互斥实现的核心逻辑 状态管理: selectedOverflowGroups:存储当前选中的溢出技能组ID(数字字符串数组) sel…...
易境通海外仓系统:一件代发全场景数字化解决方案
随着全球经济一体化和消费升级,一件代发业务的跨境电商市场规模持续增长。然而,一件代发的跨境运营也面临挑战,传统海外仓管理模式更因效率低下、协同困难成为业务扩张的瓶颈。 一、一件代发跨境运营痛点 1、多平台协同:卖家往往…...
C#接口的setter或getter的访问性限制
有时候只想对外提供getter,但是属性的赋值又必须是setter,此时,可以限制setter的访问性。例如,假设有一个自定义字典(MyDict)属性,该属性我只希望外部能够访问,但是设置必须在内部,则可提供如下…...
云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(下)
在数据库的世界里,面对数据如潮水般的增长难题,聪明的工程师早已准备了五大扩展方案来应对,它们就像五把钥匙,以破解着不同场景下的性能困局。 上回书云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的…...
SID 2025上的天马,用“好屏”技术重构产业叙事
作为全球最具影响力的显示行业盛会,SID国际显示周不仅是技术比拼的舞台,更是未来产业方向的风向标。SID 2025上的技术密度与产业动态,再一次验证了这一定律。 Micro-LED、柔性OLED、裸眼3D、量子点、透明显示等新技术在SID 2025集中亮相&…...
深入理解 Hadoop 核心组件 Yarn:架构、配置与实战
一、Hadoop 三大件概述 Hadoop 作为大数据领域的基石,其核心由三大组件构成: HDFS(分布式文件系统):负责海量数据的分布式存储,通过数据分块和副本机制保障可靠性,是大数据存储的基础设施。 …...
Linux云计算训练营笔记day11(Linux CentOS7)
Linux云计算 云计算是一种服务,是通过互联网按需提供计算资源的服务模式 程序员写代码的,部署上线项目 买服务器(一台24小时不关机的电脑,为客户端提供服务) 20万 买更多的服务器 Linux(命令) windows(图形化) 就业岗位: 云计算工程师 li…...
2025年AI与网络安全的终极博弈:冲击、重构与生存法则
引言 2025年,生成式AI的推理速度突破每秒千万次,网络安全行业正经历前所未有的范式革命。攻击者用AI批量生成恶意代码,防御者用AI构建智能护盾,这场技术军备竞赛正重塑行业规则——60%的传统安全岗位面临转型,70%的防…...
Hadoop中 8020、9000、50070 端口用途的详细对比
Hadoop 端口用途对比教程 1. 端口用途总览 Hadoop 的核心服务(如 NameNode、DataNode、ResourceManager 等)通过不同的端口对外提供服务。不同版本中,部分端口号可能发生变化,尤其是 Hadoop 3.x 对部分默认端口进行了调整。 端口Hadoop 2.x (2.7.7)Hadoop 3.x (3.1.3)协议…...
HLS学习
文章目录 前言一、hls是什么二、m3u8文件格式说明 前言 在工作,需要跟m3u8的格式进行打交道,所以就去学习了一些相关的内容。本文是相关的笔记。 一、hls是什么 HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP的流媒体…...
【Linux系统】Linux入门系统程序−进度条
文章目录 一、铺垫知识1.回车符 和 换行符的区别2.用户缓冲区问题 二、进度条程序初版(含视频演示效果)三、进度条程序(加入使用场景) 一、铺垫知识 1.回车符 和 换行符的区别 回车符’\r’ 的效果(让光标回到当前行开头) 和 换…...
Java大师成长计划之第27天:RESTful API设计与实现
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4-turbo模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在现代软件架构中,RESTf…...
SEO长尾词与关键词优化策略
内容概要 在搜索引擎优化(SEO)实践中,长尾关键词与核心关键词的协同布局是提升网站可见性与流量的核心路径。本文系统性阐述从基础策略到高阶技术的全链路优化方案,重点剖析长尾关键词的挖掘逻辑与筛选标准,建立基于搜…...
Linux-进程信号
1.快速认识信号 1.1生活角度的信号 你在⽹上买了很多件商品,再等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临 时,你该怎么处理快递。也就是你能“识别快递” 当快递员到了你楼下,你也收到快递到来的通知&#…...
Trae生成 django5.2.1后台管理
安装django,采用的是5.2.1版本: pip install django Trae对话框中输入: 基于django框架,生成版本管理功能,版本管理模块命名为versions,工程项目命名为main 迁移数据库: python manage.py …...
Interrupt 2025 大会回顾:关于LangChain 的 AI Agent会议内容总结
Interrupt 2025 大会已圆满落下帷幕!今年,来自全球各地的 800 多位人士齐聚旧金山,参加了 LangChain 首次举办的行业盛会,共同聆听各团队分享构建 AI Agent 的经验故事——会议的精彩和余温至今仍令人振奋! 思科、优步…...
C#学习9——接口、抽象类
一、接口 1.什么是接口 官方话:是一种定义契约(一组方法、属性、事件或索引器的抽象声明)的机制,它规定了实现该接口的类或结构必须提供这些成员的具体实现。接口是面向对象编程中实现多态和抽象的重要工具。 个人理解…...
【高德开放平台-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...
Xshell实战:远程连接VMware CentOS7虚拟机与高效运维指南——从零配置到自动化操作,解锁Xshell的核心价值
一、实战背景与目标 在开发与运维工作中,常需通过本地Windows主机远程管理虚拟机中的Linux系统。Xshell作为专业终端工具,能快速建立安全连接,执行高效操作。 场景需求: 在Windows系统中,通过Xshell远程连接VMware中的…...
C#编写软件添加菜单栏
将MenuStrip控件拖动到窗体,可以直接在工具箱搜索menu,我是先在窗体上上加了一个panel,把MenuStrip拖动到panel上面,点击即可输入自己需要的文本。...
【C++】map和multimap的常用接口详解
map和multimap的文档:<map> - C Reference 1.map类的介绍 map 有两个模板参数,是 key/value的场景。 这里的Key就是key,T就是value,命名不同而已。map默认要求Key⽀持⼩于⽐较(升序),如…...
线程池模式与C#中用法
一、线程池模式解析 1. 核心概念 线程池是一种 管理线程生命周期的技术,主要解决以下问题: 减少线程创建/销毁开销:复用已存在的线程 控制并发度:避免无限制创建线程导致资源耗尽 任务队列:有序处理异步请求 2. …...
47、C#可否对内存进⾏直接的操作?
是的,C# 可以通过几种方式对内存进行直接操作,尽管它主要是一门托管语言,内存管理通常由.NET运行时自动处理。 主要方法 1.unsafe 代码和指针 使用 unsafe 关键字可以启用指针操作需要项目启用"允许不安全代码"选项示例…...
精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍
精益数据分析(70/126):MVP迭代中的数据驱动决策与功能取舍 在创业过程中,最小可行化产品(MVP)的迭代优化是从验证假设到实现产品市场契合的关键环节。今天,我们结合《精益数据分析》中的方法论…...
大数据与数据库服务器参数调优方法
1 硬件配置优化 存储与磁盘 优先选择 SSD固态硬盘替代机械硬盘,显著降低I/O延迟,提升随机读写性能。 采用 RAID 10阵列实现高性能与冗余的平衡,适用于高并发数据库场景。 大数据场景中,通过多磁盘并行挂载(如HDFS)提升吞吐量,规避单盘性能瓶颈。 I/…...
【Fifty Project - D28】
今日完成记录 TimePlan完成情况9:30 - 11:30Leetcode√14:00 - 15:30练胸√15:30 - 16:30Leetcode√19:40 - 21:20有氧√ Leetcode 今天是周赛复盘篇,昨天的周赛太刺激…...
Image and depth from a conventional camera with a coded aperture论文阅读
Image and depth from a conventional camera with a coded aperture 1. 研究目标与实际意义1.1 研究目标1.2 实际问题与产业意义2. 创新方法:编码光圈设计与统计模型2.1 核心思路2.2 关键公式与模型架构2.2.1 图像形成模型2.2.2 深度可区分性准则2.2.3 统计模型与优化框架2.2…...
vue3 vite 项目中自动导入图片
vue3 vite 项目中自动导入图片 安装插件配置插件使用方法 安装插件 yarn add vite-plugin-vue-images -D 或者 npm install vite-plugin-vue-images -D配置插件 在 vite.config.js 文件中配置插件 // 引入 import ViteImages from vite-plugin-vue-images;plugins: [vue(),/…...
软考-软件工程开发模型
软考-软件工程开发模型 参考视频: 软件工程概述&开发模型 ,配合视频理解更清晰~ 软件的生命周期为:需求分析、软件设计、软件开发、运行维护直至被淘汰 几个阶段。 软件工程支持 4 个活动,简称 PDCA,…...
纸上流年:Linux基础IO的文件理解与操作
文章目录 前言:数字世界的窗口🌇序章🏙️正文一、文件理解二、C语言文件操作2.1、文件打开2.2、文件关闭2.3、文件写入2.4、文件读取 三、系统级文件操作3.1、打开 open3.1.1、函数理解 3.2、关闭 close3.3、写入 write3.4、读取 read 四、小…...
基础深度补全模型DepthLab: From Partial to Complete
许多任务本身就包含部分深度信息,例如:(1)三维高斯图像修复;(2)激光雷达深度补全;(3)利用 Dust3R 进行稀疏视角重建;以及(4࿰…...
15 秒写一首歌?AI 音乐生成模型 ACE-Step 上手体验!
在人工智能技术持续突破的浪潮中,音乐创作领域迎来了革命性的变革。近日,阶跃星辰与ACE Studio联合发布的开源音乐大模型ACE-Step(中文名:音跃)正式亮相,标志着AI音乐创作技术迈入全新阶段。这款集成了最新…...
如何在数据库中正确存储金额?
无论是开发电商平台、财务系统还是支付应用,金额的存储都是核心需求。但许多新手开发者常因字段类型选择不当,导致金额计算错误甚至资金损失。本文将用最通俗的语言,详细讲解如何专业地设计数据库中的金额字段。 一、为什么不能随便选字段类型…...
网络请求和状态管理
安装axios 创建项目,输入名称 新建文件夹: 在文件夹下输入cmd 运行 最后在复制到浏览器中 得到页面 使用axios axios封装成模块 实现一个学生信息案例 模拟数据,请求数据 安装完成后新建一个mock文件夹,制作一个模拟数据 配置…...
TIF导入TWF坐标方法
TIF坐标导入 1、打开Arcmap,将影像拖入界面,点击确定 2、点击工具箱→投影变换→定义投影 国家2000,WGS84坐标系 点击确定 显示已完成,即可 3、批处理 将需要定义的tif拖入到ARCMAP中,点击定义投影,右键…...
系统思考:动态性复杂
我们是否有遇到过这样的困境?做决策时,总觉得问题很简单,但总是看不清楚全貌。越做越复杂,最后好像什么都没解决,反而把事情弄得更糟。 其实,这就是动态性复杂的表现。它包含了两个关键因素:细节…...
智能体应用如何重塑未来生活?全面解析技术场景与实在Agent突破
智能体应用有哪些?在科技飞速发展的当下,人工智能正以前所未有的速度渗透到我们生活的方方面面。而智能体技术,作为人工智能领域的一颗璀璨新星,正逐渐展现出其重塑未来生活的巨大潜力。从办公效率的提升到医疗服务的优化…...
20.自动化测试框架开发之Excel配置文件的IO开发
20.自动化测试框架开发之Excel配置文件的IO开发 一、核心架构解析 1.1 类继承体系 class File: # 文件基类# 基础文件验证和路径管理class ExcelReader(File): # Excel读取器# 实现Excel数据解析逻辑1.2 版本依赖说明 # 必须安装1.2.0版本(支持xlsx格式&#…...
1.1 Epson机器人常用指令1-Print函数、RobotInfo$
本文介绍Print, RobotInfo的使用. 主要总结如下: 1. Print可以向串口、网口、手操器TP1,RC软件等发送数据 2. RobotInfo$(4)可以得到机器人序列号。用于防止程序下载到其他机器人上。 3. CX, CY, CZ可以返回点的XYZ坐标值。 Rea…...