全部
常见问题
产品动态
精选推荐

LightRAG 实战: 基于 Ollama 搭建带知识图谱的可控 RAG 系统

管理 管理 编辑 删除

LightRAG 是个开源的 RAG 框架,专门用来快速搭建模块化的检索增强生成管道。这个项目在 GitHub 上热度不低,我们今天来看看他到底怎么用

基础安装与环境配置

LightRAG 的安装过程很简单,几行命令就能搞定:

 pip install "lightrag-hku[api]"  
 cp env.example .env # --->这个有很多参数 非常丰富
 lightrag-server

官方提供的 UI 界面做得还算不错,不过测试时基本没用上,因为更关注的是代码层面的实现。

环境搭好之后,可以先跑一下官方提供的示例代码(摘自 readme):

 import os  
import asyncio  
from lightrag import LightRAG, QueryParam  
from lightrag.llm.openai import gpt_4o_mini_complete, gpt_4o_complete, openai_embed  
from lightrag.kg.shared_storage import initialize_pipeline_status  
from lightrag.utils import setup_logger  

setup_logger("lightrag", level="INFO")  

WORKING_DIR = "./rag_storage"  
if not os.path.exists(WORKING_DIR):  
    os.mkdir(WORKING_DIR)  

async def initialize_rag():  
    rag = LightRAG(  
        working_dir=WORKING_DIR,  
        embedding_func=openai_embed,  
        llm_model_func=gpt_4o_mini_complete,  
    )  
    # IMPORTANT: Both initialization calls are required!
    await rag.initialize_storages()  # Initialize storage backends
    await initialize_pipeline_status()  # Initialize processing pipeline
    return rag  

async def main():  
    try:  
        # Initialize RAG instance
        rag = await initialize_rag()  
        await rag.ainsert("Your text")  

        # Perform hybrid search
        mode = "hybrid"  
        print(  
          await rag.aquery(  
              "What are the top themes in this story?",  
              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())

官方示例里还有个基于 Gemini 的版本,看着比较简单就选了这个来测试:

 # pip install -q -U google-genai to use gemini as a client  

import os  
import numpy as np  
from google import genai  
from google.genai import types  
from dotenv import load_dotenv  
from lightrag.utils import EmbeddingFunc  
from lightrag import LightRAG, QueryParam  
from sentence_transformers import SentenceTransformer  
from lightrag.kg.shared_storage import initialize_pipeline_status  

import asyncio  
import nest_asyncio  

# Apply nest_asyncio to solve event loop issues
nest_asyncio.apply()  

load_dotenv()  
gemini_api_key = os.getenv("GEMINI_API_KEY")  

WORKING_DIR = "./dickens"  

if os.path.exists(WORKING_DIR):  
    import shutil  

    shutil.rmtree(WORKING_DIR)  

os.mkdir(WORKING_DIR)  

async def llm_model_func(  
    prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs  
) -> str:  
    # 1. Initialize the GenAI Client with your Gemini API Key
    client = genai.Client(api_key=gemini_api_key)  

    # 2. Combine prompts: system prompt, history, and user prompt
    if history_messages is None:  
        history_messages = []  

    combined_prompt = ""  
    if system_prompt:  
        combined_prompt += f"{system_prompt}\n"  

    for msg in history_messages:  
        # Each msg is expected to be a dict: {"role": "...", "content": "..."}
        combined_prompt += f"{msg['role']}: {msg['content']}\n"  

    # Finally, add the new user prompt
    combined_prompt += f"user: {prompt}"  

    # 3. Call the Gemini model
    response = client.models.generate_content(  
        model="gemini-1.5-flash",  
        contents=[combined_prompt],  
        config=types.GenerateContentConfig(max_output_tokens=500, temperature=0.1),  
    )  

    # 4. Return the response text
    return response.text  

async def embedding_func(texts: list[str]) -> np.ndarray:  
    model = SentenceTransformer("all-MiniLM-L6-v2")  
    embeddings = model.encode(texts, convert_to_numpy=True)  
    return embeddings  

async def initialize_rag():  
    rag = LightRAG(  
        working_dir=WORKING_DIR,  
        llm_model_func=llm_model_func,  
        embedding_func=EmbeddingFunc(  
            embedding_dim=384,  
            max_token_size=8192,  
            func=embedding_func,  
        ),  
    )  

    await rag.initialize_storages()  
    await initialize_pipeline_status()  

    return rag  

def main():  
    # Initialize RAG instance
    rag = asyncio.run(initialize_rag())  
    file_path = "story.txt"  
    with open(file_path, "r") as file:  
        text = file.read()  

    rag.insert(text)  

    response = rag.query(  
        query="What is the main theme of the story?",  
        param=QueryParam(mode="hybrid", top_k=5, response_type="single line"),  
    )  

    print(response)  

if __name__ == "__main__":  
     main()
.env

配置文件的参数非常丰富,需要根据实际使用的工具链做适配。为了调用本地模型,我这里用Ollama 做了相应调整。

 ### This is sample file of .env

###########################
### Server Configuration
###########################
HOST=0.0.0.0
PORT=9621
WEBUI_TITLE='My Graph KB'
WEBUI_DESCRIPTION="Simple and Fast Graph Based RAG System"
# WORKERS=2
### gunicorn worker timeout(as default LLM request timeout if LLM_TIMEOUT is not set)
# TIMEOUT=150
# CORS_ORIGINS=http://localhost:3000,http://localhost:8080

### Optional SSL Configuration
# SSL=true
# SSL_CERTFILE=/path/to/cert.pem
# SSL_KEYFILE=/path/to/key.pem

### Directory Configuration (defaults to current working directory)
### Default value is ./inputs and ./rag_storage
# INPUT_DIR=<absolute_path_for_doc_input_dir>
# WORKING_DIR=<absolute_path_for_working_dir>

### Tiktoken cache directory (Store cached files in this folder for offline deployment)
# TIKTOKEN_CACHE_DIR=/app/data/tiktoken

### Ollama Emulating Model and Tag
# OLLAMA_EMULATING_MODEL_NAME=lightrag
OLLAMA_EMULATING_MODEL_TAG=latest

### Max nodes return from graph retrieval in webui
# MAX_GRAPH_NODES=1000

### Logging level
# LOG_LEVEL=INFO
# VERBOSE=False
# LOG_MAX_BYTES=10485760
# LOG_BACKUP_COUNT=5
### Logfile location (defaults to current working directory)
# LOG_DIR=/path/to/log/directory

#####################################
### Login and API-Key Configuration
#####################################
# AUTH_ACCOUNTS='admin:admin123,user1:pass456'
# TOKEN_SECRET=Your-Key-For-LightRAG-API-Server
# TOKEN_EXPIRE_HOURS=48
# GUEST_TOKEN_EXPIRE_HOURS=24
# JWT_ALGORITHM=HS256

### API-Key to access LightRAG Server API
# LIGHTRAG_API_KEY=your-secure-api-key-here
# WHITELIST_PATHS=/health,/api/*

######################################################################################
### Query Configuration
###
### How to control the context length sent to LLM:
###    MAX_ENTITY_TOKENS + MAX_RELATION_TOKENS < MAX_TOTAL_TOKENS
###    Chunk_Tokens = MAX_TOTAL_TOKENS - Actual_Entity_Tokens - Actual_Relation_Tokens
######################################################################################
# LLM response cache for query (Not valid for streaming response)
ENABLE_LLM_CACHE=true
# COSINE_THRESHOLD=0.2
### Number of entities or relations retrieved from KG
# TOP_K=40
### Maximum number or chunks for naive vector search
# CHUNK_TOP_K=20
### control the actual entities send to LLM
# MAX_ENTITY_TOKENS=6000
### control the actual relations send to LLM
# MAX_RELATION_TOKENS=8000
### control the maximum tokens send to LLM (include entities, relations and chunks)
# MAX_TOTAL_TOKENS=30000

### chunk selection strategies
###     VECTOR: Pick KG chunks by vector similarity, delivered chunks to the LLM aligning more closely with naive retrieval
###     WEIGHT: Pick KG chunks by entity and chunk weight, delivered more solely KG related chunks to the LLM
###     If reranking is enabled, the impact of chunk selection strategies will be diminished.
# KG_CHUNK_PICK_METHOD=VECTOR

#########################################################
### Reranking configuration
### RERANK_BINDING type:  null, cohere, jina, aliyun
### For rerank model deployed by vLLM use cohere binding
#########################################################
RERANK_BINDING=null
### Enable rerank by default in query params when RERANK_BINDING is not null
# RERANK_BY_DEFAULT=True
### rerank score chunk filter(set to 0.0 to keep all chunks, 0.6 or above if LLM is not strong enough)
# MIN_RERANK_SCORE=0.0

### For local deployment with vLLM
# RERANK_MODEL=BAAI/bge-reranker-v2-m3
# RERANK_BINDING_HOST=http://localhost:8000/v1/rerank
# RERANK_BINDING_API_KEY=your_rerank_api_key_here

### Default value for Cohere AI
# RERANK_MODEL=rerank-v3.5
# RERANK_BINDING_HOST=https://api.cohere.com/v2/rerank
# RERANK_BINDING_API_KEY=your_rerank_api_key_here

### Default value for Jina AI
# RERANK_MODEL=jina-reranker-v2-base-multilingual
# RERANK_BINDING_HOST=https://api.jina.ai/v1/rerank
# RERANK_BINDING_API_KEY=your_rerank_api_key_here

### Default value for Aliyun
# RERANK_MODEL=gte-rerank-v2
# RERANK_BINDING_HOST=https://dashscope.aliyuncs.com/api/v1/services/rerank/text-rerank/text-rerank
# RERANK_BINDING_API_KEY=your_rerank_api_key_here

########################################
### Document processing configuration
########################################
ENABLE_LLM_CACHE_FOR_EXTRACT=true

### Document processing output language: English, Chinese, French, German ...
SUMMARY_LANGUAGE=English

### Entity types that the LLM will attempt to recognize
# ENTITY_TYPES='["Person", "Creature", "Organization", "Location", "Event", "Concept", "Method", "Content", "Data", "Artifact", "NaturalObject"]'

### Chunk size for document splitting, 500~1500 is recommended
# CHUNK_SIZE=1200
# CHUNK_OVERLAP_SIZE=100

### Number of summary segments or tokens to trigger LLM summary on entity/relation merge (at least 3 is recommended)
# FORCE_LLM_SUMMARY_ON_MERGE=8
### Max description token size to trigger LLM summary
# SUMMARY_MAX_TOKENS = 1200
### Recommended LLM summary output length in tokens
# SUMMARY_LENGTH_RECOMMENDED_=600
### Maximum context size sent to LLM for description summary
# SUMMARY_CONTEXT_SIZE=12000

### control the maximum chunk_ids stored in vector and graph db
# MAX_SOURCE_IDS_PER_ENTITY=300
# MAX_SOURCE_IDS_PER_RELATION=300
### control chunk_ids limitation method: FIFO, KEEP
###    FIFO: First in first out
###    KEEP: Keep oldest (less merge action and faster)
# SOURCE_IDS_LIMIT_METHOD=FIFO

# Maximum number of file paths stored in entity/relation file_path field (For displayed only, does not affect query performance)
# MAX_FILE_PATHS=100

### maximum number of related chunks per source entity or relation
###     The chunk picker uses this value to determine the total number of chunks selected from KG(knowledge graph)
###     Higher values increase re-ranking time
# RELATED_CHUNK_NUMBER=5

###############################
### Concurrency Configuration
###############################
### Max concurrency requests of LLM (for both query and document processing)
MAX_ASYNC=4
### Number of parallel processing documents(between 2~10, MAX_ASYNC/3 is recommended)
MAX_PARALLEL_INSERT=2
### Max concurrency requests for Embedding
# EMBEDDING_FUNC_MAX_ASYNC=8
### Num of chunks send to Embedding in single request
# EMBEDDING_BATCH_NUM=10

###########################################################
### LLM Configuration
### LLM_BINDING type: openai, ollama, lollms, azure_openai, aws_bedrock
###########################################################
### LLM request timeout setting for all llm (0 means no timeout for Ollma)
# LLM_TIMEOUT=180

LLM_BINDING=ollama
LLM_MODEL=granite4:latest  
LLM_BINDING_HOST=http://localhost:11434
[#LLM](#LLM)_BINDING_API_KEY=your_api_key

### Optional for Azure
# AZURE_OPENAI_API_VERSION=2024-08-01-preview
# AZURE_OPENAI_DEPLOYMENT=gpt-4o

### Openrouter example
# LLM_MODEL=google/gemini-2.5-flash
# LLM_BINDING_HOST=https://openrouter.ai/api/v1
# LLM_BINDING_API_KEY=your_api_key
# LLM_BINDING=openai

### OpenAI Compatible API Specific Parameters
### Increased temperature values may mitigate infinite inference loops in certain LLM, such as Qwen3-30B.
# OPENAI_LLM_TEMPERATURE=0.9
### Set the max_tokens to mitigate endless output of some LLM (less than LLM_TIMEOUT * llm_output_tokens/second, i.e. 9000 = 180s * 50 tokens/s)
### Typically, max_tokens does not include prompt content, though some models, such as Gemini Models, are exceptions
### For vLLM/SGLang deployed models, or most of OpenAI compatible API provider
# OPENAI_LLM_MAX_TOKENS=9000
### For OpenAI o1-mini or newer modles
[#OPENAI](#OPENAI)_LLM_MAX_COMPLETION_TOKENS=9000

#### OpenAI's new API utilizes max_completion_tokens instead of max_tokens
# OPENAI_LLM_MAX_COMPLETION_TOKENS=9000

### use the following command to see all support options for OpenAI, azure_openai or OpenRouter
### lightrag-server --llm-binding openai --help
### OpenAI Specific Parameters
# OPENAI_LLM_REASONING_EFFORT=minimal
### OpenRouter Specific Parameters
# OPENAI_LLM_EXTRA_BODY='{"reasoning": {"enabled": false}}'
### Qwen3 Specific Parameters deploy by vLLM
# OPENAI_LLM_EXTRA_BODY='{"chat_template_kwargs": {"enable_thinking": false}}'

### use the following command to see all support options for Ollama LLM
### If LightRAG deployed in Docker uses host.docker.internal instead of localhost in LLM_BINDING_HOST
### lightrag-server --llm-binding ollama --help
### Ollama Server Specific Parameters
### OLLAMA_LLM_NUM_CTX must be provided, and should at least larger than MAX_TOTAL_TOKENS + 2000
OLLAMA_LLM_NUM_CTX=32768
### Set the max_output_tokens to mitigate endless output of some LLM (less than LLM_TIMEOUT * llm_output_tokens/second, i.e. 9000 = 180s * 50 tokens/s)
# OLLAMA_LLM_NUM_PREDICT=9000
### Stop sequences for Ollama LLM
# OLLAMA_LLM_STOP='["</s>", "<|EOT|>"]'

### Bedrock Specific Parameters
# BEDROCK_LLM_TEMPERATURE=1.0

####################################################################################
### Embedding Configuration (Should not be changed after the first file processed)
### EMBEDDING_BINDING: ollama, openai, azure_openai, jina, lollms, aws_bedrock
####################################################################################
# EMBEDDING_TIMEOUT=30
EMBEDDING_BINDING=ollama
EMBEDDING_MODEL=granite-embedding:latest
EMBEDDING_DIM=1024
EMBEDDING_BINDING_API_KEY=your_api_key
# If LightRAG deployed in Docker uses host.docker.internal instead of localhost
EMBEDDING_BINDING_HOST=http://localhost:11434

### OpenAI compatible (VoyageAI embedding openai compatible)
# EMBEDDING_BINDING=openai
# EMBEDDING_MODEL=text-embedding-3-large
# EMBEDDING_DIM=3072
# EMBEDDING_BINDING_HOST=https://api.openai.com/v1
# EMBEDDING_BINDING_API_KEY=your_api_key

### Optional for Azure
# AZURE_EMBEDDING_DEPLOYMENT=text-embedding-3-large
# AZURE_EMBEDDING_API_VERSION=2023-05-15
# AZURE_EMBEDDING_ENDPOINT=your_endpoint
# AZURE_EMBEDDING_API_KEY=your_api_key

### Jina AI Embedding
# EMBEDDING_BINDING=jina
# EMBEDDING_BINDING_HOST=https://api.jina.ai/v1/embeddings
# EMBEDDING_MODEL=jina-embeddings-v4
# EMBEDDING_DIM=2048
# EMBEDDING_BINDING_API_KEY=your_api_key

### Optional for Ollama embedding
OLLAMA_EMBEDDING_NUM_CTX=8192
### use the following command to see all support options for Ollama embedding
### lightrag-server --embedding-binding ollama --help

####################################################################
### WORKSPACE sets workspace name for all storage types
### for the purpose of isolating data from LightRAG instances.
### Valid workspace name constraints: a-z, A-Z, 0-9, and _
####################################################################
# WORKSPACE=space1

############################
### Data storage selection
############################
### Default storage (Recommended for small scale deployment)
# LIGHTRAG_KV_STORAGE=JsonKVStorage
# LIGHTRAG_DOC_STATUS_STORAGE=JsonDocStatusStorage
# LIGHTRAG_GRAPH_STORAGE=NetworkXStorage
# LIGHTRAG_VECTOR_STORAGE=NanoVectorDBStorage

### Redis Storage (Recommended for production deployment)
# LIGHTRAG_KV_STORAGE=RedisKVStorage
# LIGHTRAG_DOC_STATUS_STORAGE=RedisDocStatusStorage

### Vector Storage (Recommended for production deployment)
# LIGHTRAG_VECTOR_STORAGE=MilvusVectorDBStorage
# LIGHTRAG_VECTOR_STORAGE=QdrantVectorDBStorage
# LIGHTRAG_VECTOR_STORAGE=FaissVectorDBStorage

### Graph Storage (Recommended for production deployment)
# LIGHTRAG_GRAPH_STORAGE=Neo4JStorage
# LIGHTRAG_GRAPH_STORAGE=MemgraphStorage

### PostgreSQL
# LIGHTRAG_KV_STORAGE=PGKVStorage
# LIGHTRAG_DOC_STATUS_STORAGE=PGDocStatusStorage
# LIGHTRAG_GRAPH_STORAGE=PGGraphStorage
# LIGHTRAG_VECTOR_STORAGE=PGVectorStorage

### MongoDB (Vector storage only available on Atlas Cloud)
# LIGHTRAG_KV_STORAGE=MongoKVStorage
# LIGHTRAG_DOC_STATUS_STORAGE=MongoDocStatusStorage
# LIGHTRAG_GRAPH_STORAGE=MongoGraphStorage
# LIGHTRAG_VECTOR_STORAGE=MongoVectorDBStorage

### PostgreSQL Configuration
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=your_username
POSTGRES_PASSWORD='your_password'
POSTGRES_DATABASE=your_database
POSTGRES_MAX_CONNECTIONS=12
# POSTGRES_WORKSPACE=forced_workspace_name

### PostgreSQL Vector Storage Configuration
### Vector storage type: HNSW, IVFFlat
POSTGRES_VECTOR_INDEX_TYPE=HNSW
POSTGRES_HNSW_M=16
POSTGRES_HNSW_EF=200
POSTGRES_IVFFLAT_LISTS=100

### PostgreSQL Connection Retry Configuration (Network Robustness)
### Number of retry attempts (1-10, default: 3)
### Initial retry backoff in seconds (0.1-5.0, default: 0.5)
### Maximum retry backoff in seconds (backoff-60.0, default: 5.0)
### Connection pool close timeout in seconds (1.0-30.0, default: 5.0)
# POSTGRES_CONNECTION_RETRIES=3
# POSTGRES_CONNECTION_RETRY_BACKOFF=0.5
# POSTGRES_CONNECTION_RETRY_BACKOFF_MAX=5.0
# POSTGRES_POOL_CLOSE_TIMEOUT=5.0

### PostgreSQL SSL Configuration (Optional)
# POSTGRES_SSL_MODE=require
# POSTGRES_SSL_CERT=/path/to/client-cert.pem
# POSTGRES_SSL_KEY=/path/to/client-key.pem
# POSTGRES_SSL_ROOT_CERT=/path/to/ca-cert.pem
# POSTGRES_SSL_CRL=/path/to/crl.pem

### PostgreSQL Server Settings (for Supabase Supavisor)
# Use this to pass extra options to the PostgreSQL connection string.
# For Supabase, you might need to set it like this:
# POSTGRES_SERVER_SETTINGS="options=reference%3D[project-ref]"

# Default is 100 set to 0 to disable
# POSTGRES_STATEMENT_CACHE_SIZE=100

### Neo4j Configuration
NEO4J_URI=neo4j+s://xxxxxxxx.databases.neo4j.io
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD='your_password'
NEO4J_DATABASE=neo4j
NEO4J_MAX_CONNECTION_POOL_SIZE=100
NEO4J_CONNECTION_TIMEOUT=30
NEO4J_CONNECTION_ACQUISITION_TIMEOUT=30
NEO4J_MAX_TRANSACTION_RETRY_TIME=30
NEO4J_MAX_CONNECTION_LIFETIME=300
NEO4J_LIVENESS_CHECK_TIMEOUT=30
NEO4J_KEEP_ALIVE=true
# NEO4J_WORKSPACE=forced_workspace_name

### MongoDB Configuration
MONGO_URI=mongodb://root:root@localhost:27017/
[#MONGO](#MONGO)_URI=mongodb+srv://xxxx
MONGO_DATABASE=LightRAG
# MONGODB_WORKSPACE=forced_workspace_name

### Milvus Configuration
MILVUS_URI=http://localhost:19530
MILVUS_DB_NAME=lightrag
# MILVUS_USER=root
# MILVUS_PASSWORD=your_password
# MILVUS_TOKEN=your_token
# MILVUS_WORKSPACE=forced_workspace_name

### Qdrant
QDRANT_URL=http://localhost:6333
# QDRANT_API_KEY=your-api-key
# QDRANT_WORKSPACE=forced_workspace_name

### Redis
REDIS_URI=redis://localhost:6379
REDIS_SOCKET_TIMEOUT=30
REDIS_CONNECT_TIMEOUT=10
REDIS_MAX_CONNECTIONS=100
REDIS_RETRY_ATTEMPTS=3
# REDIS_WORKSPACE=forced_workspace_name

### Memgraph Configuration
MEMGRAPH_URI=bolt://localhost:7687
MEMGRAPH_USERNAME=
MEMGRAPH_PASSWORD=
MEMGRAPH_DATABASE=memgraph
 # MEMGRAPH_WORKSPACE=forced_workspace_name

参考前面的 Gemini 示例,写了下面的代码包含了一些硬编码文本的测试代码:

 # 准备环境
 python3 -m venv venv  
 source venv/bin/activate  
   
 pip install --upgrade pip  
 pip install "lightrag-hku[api]"  
 pip install ollama
 import os  
import asyncio  
from functools import partial  
from datetime import datetime  
from lightrag import LightRAG, QueryParam  
try:  
    from ollama import AsyncClient  
except ImportError:  
    print("Warning: The 'ollama' Python package is required. Please run: pip install ollama")  
    class AsyncClient:   
        def __init__(self, host): pass  
        async def chat(self, **kwargs): raise NotImplementedError("ollama package not installed.")  

from lightrag.llm.ollama import ollama_embed   
from lightrag.utils import setup_logger, EmbeddingFunc  
from lightrag.kg.shared_storage import initialize_pipeline_status  

OLLAMA_BASE_URL = "http://localhost:11434"  
LLM_MODEL = "granite4:latest"  
EMBEDDING_MODEL = "granite-embedding:latest"  
WORKING_DIR = "./rag_storage_ollama"  
EMBEDDING_DIMENSION = 384   

OUTPUT_DIR = "./output"  

setup_logger("lightrag", level="INFO")  

if not os.path.exists(WORKING_DIR):  
    os.mkdir(WORKING_DIR)  

if not os.path.exists(OUTPUT_DIR):  
    os.mkdir(OUTPUT_DIR)  

async def custom_ollama_llm_complete(prompt: str, system_prompt: str = None, **kwargs):  
    """
    A custom function that handles the Ollama client initialization and model/base_url 
    parameters that are injected via functools.partial, while robustly filtering out 
    unwanted internal keywords.
    """
      
    model = kwargs.pop('model')  
    base_url = kwargs.pop('base_url')  
      
    client = AsyncClient(host=base_url)   
      
    messages = []  
    if system_prompt:  
        messages.append({"role": "system", "content": system_prompt})  
    messages.append({"role": "user", "content": prompt})  

    keys_to_filter = {  
        'host',   
        'hashing_kv',   
        'llm_model_name',   
        'history_messages',   
        'keyword_extraction',  
        'enable_cot',  
        'is_system_prompt_only',  
        'prompt_config'  
    }  
      
    cleaned_kwargs = {k: v for k, v in kwargs.items() if k not in keys_to_filter}  

    try:  
        response = await client.chat(  
            model=model,   
            messages=messages,   
            **cleaned_kwargs  
        )  
        return response['message']['content']  
    except Exception as e:  
        raise e  

async def initialize_rag():  
    """Initializes the LightRAG instance using standard Ollama configuration."""

    configured_ollama_complete = partial(  
        custom_ollama_llm_complete,  
        model=LLM_MODEL,  
        base_url=OLLAMA_BASE_URL,  
    )  

    configured_ollama_embed = partial(  
        ollama_embed,  
        embed_model=EMBEDDING_MODEL,  
        base_url=OLLAMA_BASE_URL  
    )  

    wrapped_embedding_func = EmbeddingFunc(  
        embedding_dim=EMBEDDING_DIMENSION,   
        func=configured_ollama_embed,  
    )  
      
    rag = LightRAG(  
        working_dir=WORKING_DIR,  
        llm_model_func=configured_ollama_complete,  
        embedding_func=wrapped_embedding_func,  
    )  
      
    await rag.initialize_storages()  
    await initialize_pipeline_status()  
    return rag  

async def main():  
    rag = None   
    query = "How does RAG solve the problem of LLM hallucination and what are its main use cases?"  
      
    try:  
        print("Checking if required Ollama models are pulled...")  
          
        # the knowledge source
        sample_text = """  
        The concept of Retrieval-Augmented Generation (RAG) is a critical development  
        in the field of large language models (LLMs). It addresses the 'hallucination'  
        problem by grounding LLM responses in external, verified knowledge sources.  
        Instead of relying solely on the LLM's static training data, RAG first retrieves  
        relevant documents from a knowledge base (often a vector store) and then feeds  
        these documents, alongside the user's query, to the LLM for generation.  
        This two-step process significantly improves the accuracy, relevance, and  
        transparency of the generated output. Popular applications include enterprise  
        search, customer support, and domain-specific QA systems.  
        """  

        print(f"--- 1. Initializing RAG with Ollama Models ---")  
        rag = await initialize_rag()  
          
        print(f"\n--- 2. Inserting Sample Text ({len(sample_text.split())} words) ---")  
        await rag.ainsert(sample_text)  
        print("Insertion complete. Data is ready for retrieval.")  

        mode = "hybrid"   
          
        print(f"\n--- 3. Querying the RAG System (Mode: {mode}) ---")  
        print(f"Query: '{query}'")  

        rag_result = await rag.aquery(  
            query,  
            param=QueryParam(mode=mode)  
        )  
          
        response_text = None  
        if hasattr(rag_result, 'get_response_text'):  
            response_text = rag_result.get_response_text()  
        elif isinstance(rag_result, str):  
            response_text = rag_result  

        print("\n" + "="*50)  
        print("FINAL RAG RESPONSE")  
        print("="*50)  
          
        output_content = "" # Prepare string for file output
          
        if response_text and not str(response_text).strip().startswith("Error:"):  
            print(response_text)  
              
            output_content += f"# RAG Query Result\n\n"  
            output_content += f"## Query\n\n> {query}\n\n"  
            output_content += f"## LLM/Cache Response\n\n{response_text}\n\n"  
              
            print("\n" + "="*50)  

            print("\n--- Context Retrieved (Sources) ---")  
            output_content += f"## Retrieved Context (Sources)\n\n"  
              
            if not isinstance(rag_result, str) and rag_result.retriever_output and rag_result.retriever_output.docs:  
                for i, doc in enumerate(rag_result.retriever_output.docs):  
                    source_text = doc.text  
                    print(f"Source {i+1}: {source_text[:100]}...")  
                    output_content += f"### Source {i+1}\n\n"  
                    output_content += f"```text\n{source_text}\n```\n"  
            else:  
                 print("No context documents were retrieved (or result was a cache hit string).")  
                 output_content += "No context documents were retrieved (or result was a cache hit string).\n"  
        else:  
             error_message = "LLM failed to generate a response (Check Ollama logs for details)."  
             print(error_message)  
             output_content += f"# RAG Query Result\n\n## Error\n\n{error_message}\n\n"  
               
             if response_text:  
                 print(f"\nError String from LightRAG: {response_text}")  
                 output_content += f"**Error Detail:** {response_text}\n"  

          
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")  
        filename = f"rag_query_output_{timestamp}.md"  
        output_filepath = os.path.join(OUTPUT_DIR, filename)  
          
        with open(output_filepath, 'w', encoding='utf-8') as f:  
            f.write(output_content)  
          
        print(f"\n--- Output Written to File ---")  
        print(f"Successfully wrote output to: {output_filepath}")  

          
    except Exception as e:  
        if "'str' object has no attribute 'retriever_output'" in str(e):  
            print("\n--- ERROR BYPASS: Detected Cache Hit String Result ---")  
             print("The response was successfully retrieved from the cache and written to the output file.")  
        else:  
            # For all other (real) exceptions, print the detailed error block
            print("\n" + "="*50)  
            print("AN ERROR OCCURRED DURING RAG PROCESS")  
            print("="*50)  
            print(f"Error: {e}")  
            print(f"Please ensure Ollama is running and accessible at {OLLAMA_BASE_URL}, and the models '{LLM_MODEL}' and '{EMBEDDING_MODEL}' are pulled locally.")  
            print(f"To pull: 'ollama pull {LLM_MODEL}' and 'ollama pull {EMBEDDING_MODEL}'")  
            print("="*50 + "\n")  
          
    finally:  
        if rag:  
            print("\n--- Finalizing storages ---")  
            await rag.finalize_storages()  

if __name__ == "__main__":  
     asyncio.run(main())

虽然

.env

文件里有参数可以配置 input 文件夹路径,但测试时直接在代码里写死了路径。

运行后的输出包括控制台日志和 markdown 格式的结果文件,结果太长我就不贴了。

接下来测试了更实际的场景:准备了几份 markdown 格式的文档(其他格式应该也支持,但没测),用这些文档构建了自己的 RAG 系统,继续用 Ollama 和 Granite 模型来验证效果,这次的代码就没那么硬编码了。

.env文件提供了 input 文件夹的配置选项,不过这里还是用的硬编码方式
 import os
import asyncio
from functools import partial
from datetime import datetime
from lightrag import LightRAG, QueryParam
import glob 

try:
    from ollama import AsyncClient
except ImportError:
    print("Warning: The 'ollama' Python package is required. Please run: pip install ollama")
    class AsyncClient: 
        def __init__(self, host): pass
        async def chat(self, **kwargs): raise NotImplementedError("ollama package not installed.")

from lightrag.llm.ollama import ollama_embed 
from lightrag.utils import setup_logger, EmbeddingFunc
from lightrag.kg.shared_storage import initialize_pipeline_status

OLLAMA_BASE_URL = "http://localhost:11434"
LLM_MODEL = "granite4:latest"
EMBEDDING_MODEL = "granite-embedding:latest"
WORKING_DIR = "./rag_storage_ollama"
EMBEDDING_DIMENSION = 384 

DOCUMENTS_DIR = "./documents" # Directory to read source files from
OUTPUT_DIR = "./output" # Directory to write RAG results to

setup_logger("lightrag", level="INFO")

if not os.path.exists(WORKING_DIR):
    os.mkdir(WORKING_DIR)
    print(f"Created working directory: {WORKING_DIR}")

if not os.path.exists(OUTPUT_DIR):
    os.mkdir(OUTPUT_DIR)
    print(f"Created output directory: {OUTPUT_DIR}")

if not os.path.exists(DOCUMENTS_DIR):
    os.mkdir(DOCUMENTS_DIR)
    print(f"Created documents directory: {DOCUMENTS_DIR}")

async def custom_ollama_llm_complete(prompt: str, system_prompt: str = None, **kwargs):
    """
    A custom function that handles the Ollama client initialization and model/base_url 
    parameters that are injected via functools.partial, while robustly filtering out 
    unwanted internal keywords.
    """
    
    model = kwargs.pop('model')
    base_url = kwargs.pop('base_url')
    
    client = AsyncClient(host=base_url) 
    
    messages = []
    if system_prompt:
        messages.append({"role": "system", "content": system_prompt})
    messages.append({"role": "user", "content": prompt})

    keys_to_filter = {
        'host', 
        'hashing_kv', 
        'llm_model_name', 
        'history_messages', 
        'keyword_extraction',
        'enable_cot',
        'is_system_prompt_only',
        'prompt_config'
    }
    
    cleaned_kwargs = {k: v for k, v in kwargs.items() if k not in keys_to_filter}

    try:
        response = await client.chat(
            model=model, 
            messages=messages, 
            **cleaned_kwargs
        )
        return response['message']['content']
    except Exception as e:
        raise e

async def initialize_rag():
    """Initializes the LightRAG instance using standard Ollama configuration."""

    configured_ollama_complete = partial(
        custom_ollama_llm_complete,
        model=LLM_MODEL,
        base_url=OLLAMA_BASE_URL,
    )

    configured_ollama_embed = partial(
        ollama_embed,
        embed_model=EMBEDDING_MODEL,
        base_url=OLLAMA_BASE_URL
    )

    wrapped_embedding_func = EmbeddingFunc(
        embedding_dim=EMBEDDING_DIMENSION, 
        func=configured_ollama_embed,
    )
    
    rag = LightRAG(
        working_dir=WORKING_DIR,
        llm_model_func=configured_ollama_complete,
        embedding_func=wrapped_embedding_func,
    )
    
    await rag.initialize_storages()
    await initialize_pipeline_status()
    return rag

async def load_and_insert_documents(rag: LightRAG):
    """
    Reads files from the DOCUMENTS_DIR and inserts their content into the RAG system.
    Fixed to use a more compatible method for document insertion.
    """
    file_paths = glob.glob(os.path.join(DOCUMENTS_DIR, '*.[mM][dD]')) + \
                 glob.glob(os.path.join(DOCUMENTS_DIR, '*.[tT][xX][tT]'))
                 
    if not file_paths:
        print("\n--- WARNING: No documents found in './documents' directory. ---")
        print("Please add some Markdown (.md) or Text (.txt) files to populate the knowledge base.")
        return False
        
    print(f"\n--- 2. Inserting Documents ({len(file_paths)} file(s) found) ---")
    
    insertion_succeeded = 0
    
    for file_path in file_paths:
        filename = os.path.basename(file_path)
        try:
            with open(file_path, 'r', encoding='utf-8') as f:
                content = f.read()
            
            await rag.ainsert(content, doc_meta={'doc_id': filename})
            
            print(f"  > Successfully inserted: {filename} ({len(content.split())} words)")
            insertion_succeeded += 1
            
        except TypeError as te:
            if "'doc_id'" in str(te) or "'doc_meta'" in str(te):
                print(f"  > FAILED (Type Error): {filename}. Attempting insertion without metadata to check compatibility.")
                try:
                    await rag.ainsert(content)
                    print(f"  > Successfully inserted (no metadata): {filename}")
                    insertion_succeeded += 1
                except Exception as e:
                    print(f"  > FAILED (General Error): {filename} - {e}")
            else:
                 print(f"  > FAILED to read or insert {filename} (Type Error): {te}")
                 
        except Exception as e:
            print(f"  > FAILED to read or insert {filename} (General Error): {e}")
            
    if insertion_succeeded == 0:
        print("Insertion complete, but no documents were successfully inserted. Please check LightRAG documentation for the correct argument name for source IDs.")
        return False
        
    print("Insertion complete. Data is ready for retrieval.")
    return True

async def main():
    rag = None 
    query = "Describe Quantum-Safe cryptography?"
    
    try:
        print("Checking if required Ollama models are pulled...")
        
        print(f"--- 1. Initializing RAG with Ollama Models ---")
        rag = await initialize_rag()
        
        documents_inserted = await load_and_insert_documents(rag)
        
        if not documents_inserted:
            return 

        mode = "hybrid" 
        
        print(f"\n--- 3. Querying the RAG System (Mode: {mode}) ---")
        print(f"Query: '{query}'")

        rag_result = await rag.aquery(
            query,
            param=QueryParam(mode=mode)
        )
        
        response_text = None
        if hasattr(rag_result, 'get_response_text'):
            response_text = rag_result.get_response_text()
        elif isinstance(rag_result, str):
            response_text = rag_result

        print("\n" + "="*50)
        print("FINAL RAG RESPONSE")
        print("="*50)
        
        output_content = "" # Prepare string for file output
        
        if response_text and not str(response_text).strip().startswith("Error:"):
            print(response_text)
            
            output_content += f"# RAG Query Result\n\n"
            output_content += f"## Query\n\n> {query}\n\n"
            output_content += f"## LLM/Cache Response\n\n{response_text}\n\n"
            
            print("\n" + "="*50)

            print("\n--- Context Retrieved (Sources) ---")
            output_content += f"## Retrieved Context (Sources)\n\n"
            
            if not isinstance(rag_result, str) and rag_result.retriever_output and rag_result.retriever_output.docs:
                unique_sources = set()
                
                for i, doc in enumerate(rag_result.retriever_output.docs):
                    source_text = doc.text
                    source_id = doc.doc_id if hasattr(doc, 'doc_id') and doc.doc_id else (
                                doc.doc_meta.get('doc_id') if hasattr(doc, 'doc_meta') and isinstance(doc.doc_meta, dict) else 'Unknown Source'
                            )
                    unique_sources.add(source_id)
                    
                    print(f"Source {i+1} (File: {source_id}): {source_text[:100]}...")
                    output_content += f"### Source {i+1} (File: `{source_id}`)\n\n"
                    output_content += f"```text\n{source_text}\n```\n"
                
                print(f"\nAnswer Grounded in: {', '.join(sorted(list(unique_sources)))}")
            else:
                 print("No context documents were retrieved (or result was a cache hit string).")
                 output_content += "No context documents were retrieved (or result was a cache hit string).\n"
        else:
             error_message = "LLM failed to generate a response (Check Ollama logs for details)."
             print(error_message)
             output_content += f"# RAG Query Result\n\n## Error\n\n{error_message}\n\n"
             
             if response_text:
                 print(f"\nError String from LightRAG: {response_text}")
                 output_content += f"**Error Detail:** {response_text}\n"

        
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        filename = f"rag_query_output_{timestamp}.md"
        output_filepath = os.path.join(OUTPUT_DIR, filename)
        
        with open(output_filepath, 'w', encoding='utf-8') as f:
            f.write(output_content)
        
        print(f"\n--- Output Written to File ---")
        print(f"Successfully wrote output to: {output_filepath}")
        

    except Exception as e:
        if "'str' object has no attribute 'retriever_output'" in str(e):
             print("\n--- ERROR BYPASS: Detected Cache Hit String Result ---")
             print("The response was successfully retrieved from the cache and written to the output file.")
        else:
            print("\n" + "="*50)
            print("AN ERROR OCCURRED DURING RAG PROCESS")
            print("="*50)
            print(f"Error: {e}")
            print(f"Please ensure Ollama is running and accessible at {OLLAMA_BASE_URL}, and the models '{LLM_MODEL}' and '{EMBEDDING_MODEL}' are pulled locally.")
            print(f"To pull: 'ollama pull {LLM_MODEL}' and 'ollama pull {EMBEDDING_MODEL}'")
            print("="*50 + "\n")
        
    finally:
        if rag:
            print("\n--- Finalizing storages ---")
            await rag.finalize_storages()

if __name__ == "__main__":
     asyncio.run(main())

实际的查询输出示例:

  RAG Query Result

## Query

> Describe Quantum-Safe cryptography?

## LLM/Cache Response

### What is Quantum-Safe Cryptography?

 Quantum-safe cryptography, also known as post‑quantum cryptography (PQC), refers to cryptographic algorithms and protocols designed to remain secure even against attacks by a sufficiently powerful quantum computer. Traditional public-key cryptosystems like RSA, ECC, Diffie‑Hellman, and elliptic curve variants are vulnerable to Shor’s algorithm, which could efficiently factor large integers and compute discrete logarithms—tasks that form the basis of these cryptographic schemes.

知识图谱生成

LightRAG 自带知识图谱生成功能,这点比较实用。

为了把生成的图谱文件展示出来,我还用用 Streamlit 写了个简单的可视化应用。代码比较粗糙,后续可以继续优化。


https://zq.zhaopin.com/moment/67375989

https://zq.zhaopin.com/moment/67376141

https://zq.zhaopin.com/moment/67376183

https://zq.zhaopin.com/moment/67376375

https://zq.zhaopin.com/moment/67376217

https://zq.zhaopin.com/moment/67376388

https://zq.zhaopin.com/moment/67376708

https://zq.zhaopin.com/moment/67376503

https://zq.zhaopin.com/moment/67376754

https://zq.zhaopin.com/moment/67376948

https://zq.zhaopin.com/moment/67376741

https://zq.zhaopin.com/moment/67376483

https://zq.zhaopin.com/moment/67376502

https://zq.zhaopin.com/moment/67376699

https://zq.zhaopin.com/moment/67376691

https://zq.zhaopin.com/moment/67377209

https://zq.zhaopin.com/moment/67376956

https://zq.zhaopin.com/moment/67376961

https://zq.zhaopin.com/moment/67377181

https://zq.zhaopin.com/moment/67377144

https://zq.zhaopin.com/moment/67377019

https://zq.zhaopin.com/moment/67377146

https://zq.zhaopin.com/moment/67377430

https://zq.zhaopin.com/moment/67377418

https://zq.zhaopin.com/moment/67377634

https://zq.zhaopin.com/moment/67377471

https://zq.zhaopin.com/moment/67377407

https://zq.zhaopin.com/moment/67377240

https://zq.zhaopin.com/moment/67377438

https://zq.zhaopin.com/moment/67377601

https://zq.zhaopin.com/moment/67377592

https://zq.zhaopin.com/moment/67377716

https://zq.zhaopin.com/moment/67377935

https://zq.zhaopin.com/moment/67377874

https://zq.zhaopin.com/moment/67377882

https://zq.zhaopin.com/moment/67377921

https://zq.zhaopin.com/moment/67377645

https://zq.zhaopin.com/moment/67378074

https://zq.zhaopin.com/moment/67378075

https://zq.zhaopin.com/moment/67378120

https://zq.zhaopin.com/moment/67378135

https://zq.zhaopin.com/moment/67378328

https://zq.zhaopin.com/moment/67378269

https://zq.zhaopin.com/moment/67378268

https://zq.zhaopin.com/moment/67378383

https://zq.zhaopin.com/moment/67378476

https://zq.zhaopin.com/moment/67378525

https://zq.zhaopin.com/moment/67378518

https://zq.zhaopin.com/moment/67378663

https://zq.zhaopin.com/moment/67378482

https://zq.zhaopin.com/moment/67378677

https://zq.zhaopin.com/moment/67378707

https://zq.zhaopin.com/moment/67378523

https://zq.zhaopin.com/moment/67378709

https://zq.zhaopin.com/moment/67378852

https://zq.zhaopin.com/moment/67378981

https://zq.zhaopin.com/moment/67378964

https://zq.zhaopin.com/moment/67378946

https://zq.zhaopin.com/moment/67379136

https://zq.zhaopin.com/moment/67379152

https://zq.zhaopin.com/moment/67379157

https://zq.zhaopin.com/moment/67379322

https://zq.zhaopin.com/moment/67379361

https://zq.zhaopin.com/moment/67379168

https://zq.zhaopin.com/moment/67379176

https://zq.zhaopin.com/moment/67379332

https://zq.zhaopin.com/moment/67379344

https://zq.zhaopin.com/moment/67379357

https://zq.zhaopin.com/moment/67379495

https://zq.zhaopin.com/moment/67379514

https://zq.zhaopin.com/moment/67379515

https://zq.zhaopin.com/moment/67379570

https://zq.zhaopin.com/moment/67379718

https://zq.zhaopin.com/moment/67379564

https://zq.zhaopin.com/moment/67379737

https://zq.zhaopin.com/moment/67379816

https://zq.zhaopin.com/moment/67379917

https://zq.zhaopin.com/moment/67379761

https://zq.zhaopin.com/moment/67379738

https://zq.zhaopin.com/moment/67380015

https://zq.zhaopin.com/moment/67379956

https://zq.zhaopin.com/moment/67379954

https://zq.zhaopin.com/moment/67380423

https://zq.zhaopin.com/moment/67380155

https://zq.zhaopin.com/moment/67380018

https://zq.zhaopin.com/moment/67380153

https://zq.zhaopin.com/moment/67380665

https://zq.zhaopin.com/moment/67380401

https://zq.zhaopin.com/moment/67380580

https://zq.zhaopin.com/moment/67380225

https://zq.zhaopin.com/moment/67380404

https://zq.zhaopin.com/moment/67380156

https://zq.zhaopin.com/moment/67380218

https://zq.zhaopin.com/moment/67380385

https://zq.zhaopin.com/moment/67380408

https://zq.zhaopin.com/moment/67380637

https://zq.zhaopin.com/moment/67380531

https://zq.zhaopin.com/moment/67380581

https://zq.zhaopin.com/moment/67380818

https://zq.zhaopin.com/moment/67380787

https://zq.zhaopin.com/moment/67380817

https://zq.zhaopin.com/moment/67380850

https://zq.zhaopin.com/moment/67381232

https://zq.zhaopin.com/moment/67380995

https://zq.zhaopin.com/moment/67380993

https://zq.zhaopin.com/moment/67380976

https://zq.zhaopin.com/moment/67380825

https://zq.zhaopin.com/moment/67381068

https://zq.zhaopin.com/moment/67381073

https://zq.zhaopin.com/moment/67381257

https://zq.zhaopin.com/moment/67381259

https://zq.zhaopin.com/moment/67381430

https://zq.zhaopin.com/moment/67381239

https://zq.zhaopin.com/moment/67381651

https://zq.zhaopin.com/moment/67381436

https://zq.zhaopin.com/moment/67381244

https://zq.zhaopin.com/moment/67381438

https://zq.zhaopin.com/moment/67381638

https://zq.zhaopin.com/moment/67381808

https://zq.zhaopin.com/moment/67381449

https://zq.zhaopin.com/moment/67381451

https://zq.zhaopin.com/moment/67381658

https://zq.zhaopin.com/moment/67381809

https://zq.zhaopin.com/moment/67381640

https://zq.zhaopin.com/moment/67381634

https://zq.zhaopin.com/moment/67381815

https://zq.zhaopin.com/moment/67382388

https://zq.zhaopin.com/moment/67382054

https://zq.zhaopin.com/moment/67381819

https://zq.zhaopin.com/moment/67382208

https://zq.zhaopin.com/moment/67382089

https://zq.zhaopin.com/moment/67381822

https://zq.zhaopin.com/moment/67382015

https://zq.zhaopin.com/moment/67382025

https://zq.zhaopin.com/moment/67382042

https://zq.zhaopin.com/moment/67382205

https://zq.zhaopin.com/moment/67382216

https://zq.zhaopin.com/moment/67382369

https://zq.zhaopin.com/moment/67382395

https://zq.zhaopin.com/moment/67382215

https://zq.zhaopin.com/moment/67382215

https://zq.zhaopin.com/moment/67382625

https://zq.zhaopin.com/moment/67382560

https://zq.zhaopin.com/moment/67382567

https://zq.zhaopin.com/moment/67382397

https://zq.zhaopin.com/moment/67382699

https://zq.zhaopin.com/moment/67382571

https://zq.zhaopin.com/moment/67382569

https://zq.zhaopin.com/moment/67382420

https://zq.zhaopin.com/moment/67382715

https://zq.zhaopin.com/moment/67382723

https://zq.zhaopin.com/moment/67382826

https://zq.zhaopin.com/moment/67382822

https://zq.zhaopin.com/moment/67382757

https://zq.zhaopin.com/moment/67382810

https://zq.zhaopin.com/moment/67382887

https://zq.zhaopin.com/moment/67382845

https://zq.zhaopin.com/moment/67382823

https://zq.zhaopin.com/moment/67382903

https://zq.zhaopin.com/moment/67382881

https://zq.zhaopin.com/moment/67382919

https://zq.zhaopin.com/moment/67382884

https://zq.zhaopin.com/moment/67382901

https://zq.zhaopin.com/moment/67382888

https://zq.zhaopin.com/moment/67382917

https://zq.zhaopin.com/moment/67382892

https://zq.zhaopin.com/moment/67382899

https://zq.zhaopin.com/moment/67382915

https://zq.zhaopin.com/moment/67382904

https://zq.zhaopin.com/moment/67382918

https://zq.zhaopin.com/moment/67382923

https://zq.zhaopin.com/moment/67382921

https://zq.zhaopin.com/moment/67382927

https://zq.zhaopin.com/moment/67382929

https://zq.zhaopin.com/moment/67382936

https://zq.zhaopin.com/moment/67382932

https://zq.zhaopin.com/moment/67382926

https://zq.zhaopin.com/moment/67382924

https://zq.zhaopin.com/moment/67382925

https://zq.zhaopin.com/moment/67382931

https://zq.zhaopin.com/moment/67382938

https://zq.zhaopin.com/moment/67382935

https://zq.zhaopin.com/moment/67382933

https://zq.zhaopin.com/moment/67382948

https://zq.zhaopin.com/moment/67382949

https://zq.zhaopin.com/moment/67382945

https://zq.zhaopin.com/moment/67382939

https://zq.zhaopin.com/moment/67382944

https://zq.zhaopin.com/moment/67382946

https://zq.zhaopin.com/moment/67382942

https://zq.zhaopin.com/moment/67382954

https://zq.zhaopin.com/moment/67382947

https://zq.zhaopin.com/moment/67382950

https://zq.zhaopin.com/moment/67382952

https://zq.zhaopin.com/moment/67382990

https://zq.zhaopin.com/moment/67382951

https://zq.zhaopin.com/moment/67382975

https://zq.zhaopin.com/moment/67382965

https://zq.zhaopin.com/moment/67382966

https://zq.zhaopin.com/moment/67383001

https://zq.zhaopin.com/moment/67383027

https://zq.zhaopin.com/moment/67383062

https://zq.zhaopin.com/moment/67383088

https://zq.zhaopin.com/moment/67383089

https://zq.zhaopin.com/moment/67383015

https://zq.zhaopin.com/moment/67383037

https://zq.zhaopin.com/moment/67383104

https://zq.zhaopin.com/moment/67383105

https://zq.zhaopin.com/moment/67383095

https://zq.zhaopin.com/moment/67383085

https://zq.zhaopin.com/moment/67383100

https://zq.zhaopin.com/moment/67383092

https://zq.zhaopin.com/moment/67383111

https://zq.zhaopin.com/moment/67383119

https://zq.zhaopin.com/moment/67383109

https://zq.zhaopin.com/moment/67383122

https://zq.zhaopin.com/moment/67383120

https://zq.zhaopin.com/moment/67383115

https://zq.zhaopin.com/moment/67383134

https://zq.zhaopin.com/moment/67383127

https://zq.zhaopin.com/moment/67383125

https://zq.zhaopin.com/moment/67383190

https://zq.zhaopin.com/moment/67383176

https://zq.zhaopin.com/moment/67383256

https://zq.zhaopin.com/moment/67383179

https://zq.zhaopin.com/moment/67383224

https://zq.zhaopin.com/moment/67383228

https://zq.zhaopin.com/moment/67383216

https://zq.zhaopin.com/moment/67383218

https://zq.zhaopin.com/moment/67383220

https://zq.zhaopin.com/moment/67383229

https://zq.zhaopin.com/moment/67383303

https://zq.zhaopin.com/moment/67383250

https://zq.zhaopin.com/moment/67383233

https://zq.zhaopin.com/moment/67383304

https://zq.zhaopin.com/moment/67383237

https://zq.zhaopin.com/moment/67383292

https://zq.zhaopin.com/moment/67383331

https://zq.zhaopin.com/moment/67383240

https://zq.zhaopin.com/moment/67383252

https://zq.zhaopin.com/moment/67383241

https://zq.zhaopin.com/moment/67383246

https://zq.zhaopin.com/moment/67383249

https://zq.zhaopin.com/moment/65796902

https://zq.zhaopin.com/moment/65796904

https://zq.zhaopin.com/moment/65796903

https://zq.zhaopin.com/moment/65796906

https://zq.zhaopin.com/moment/65796909

https://zq.zhaopin.com/moment/65796915

https://zq.zhaopin.com/moment/65796917

https://zq.zhaopin.com/moment/65796921

https://zq.zhaopin.com/moment/65796920

https://zq.zhaopin.com/moment/65796923

https://zq.zhaopin.com/moment/65796933

https://zq.zhaopin.com/moment/65796925

https://zq.zhaopin.com/moment/65796934

https://zq.zhaopin.com/moment/65796935

https://zq.zhaopin.com/moment/65796937

https://zq.zhaopin.com/moment/65796939

https://zq.zhaopin.com/moment/65796940

https://zq.zhaopin.com/moment/65796945

https://zq.zhaopin.com/moment/65796950

https://zq.zhaopin.com/moment/65796952

https://zq.zhaopin.com/moment/65796956

https://zq.zhaopin.com/moment/65796948

https://zq.zhaopin.com/moment/65796958

https://zq.zhaopin.com/moment/65796966

https://zq.zhaopin.com/moment/65796964

https://zq.zhaopin.com/moment/65796968

https://zq.zhaopin.com/moment/65796967

https://zq.zhaopin.com/moment/65796970

https://zq.zhaopin.com/moment/65796980

https://zq.zhaopin.com/moment/65796995

https://zq.zhaopin.com/moment/65796993

https://zq.zhaopin.com/moment/65796997

https://zq.zhaopin.com/moment/65796996

https://zq.zhaopin.com/moment/65796999

https://zq.zhaopin.com/moment/65797003

https://zq.zhaopin.com/moment/65797012

https://zq.zhaopin.com/moment/65797014

https://zq.zhaopin.com/moment/65797015

https://zq.zhaopin.com/moment/65797021

https://zq.zhaopin.com/moment/65797016

https://zq.zhaopin.com/moment/65797018

https://zq.zhaopin.com/moment/65797025

https://zq.zhaopin.com/moment/65797031

https://zq.zhaopin.com/moment/65797030

https://zq.zhaopin.com/moment/65797033

https://zq.zhaopin.com/moment/65797034

https://zq.zhaopin.com/moment/65797037

https://zq.zhaopin.com/moment/65797041

https://zq.zhaopin.com/moment/65797044

https://zq.zhaopin.com/moment/65797050

https://zq.zhaopin.com/moment/65797047

https://zq.zhaopin.com/moment/65797053

https://zq.zhaopin.com/moment/65797059

https://zq.zhaopin.com/moment/65797064

https://zq.zhaopin.com/moment/65797060

https://zq.zhaopin.com/moment/65797065

https://zq.zhaopin.com/moment/65797074

https://zq.zhaopin.com/moment/65797077

https://zq.zhaopin.com/moment/65797080

https://zq.zhaopin.com/moment/65797082

https://zq.zhaopin.com/moment/65797084

https://zq.zhaopin.com/moment/65797088

https://zq.zhaopin.com/moment/65797092

https://zq.zhaopin.com/moment/65797095

https://zq.zhaopin.com/moment/65797098

https://zq.zhaopin.com/moment/65797101

https://zq.zhaopin.com/moment/65797103

https://zq.zhaopin.com/moment/65797110

https://zq.zhaopin.com/moment/65797111

https://zq.zhaopin.com/moment/65797113

https://zq.zhaopin.com/moment/65797114

https://zq.zhaopin.com/moment/65797118

https://zq.zhaopin.com/moment/65797128

https://zq.zhaopin.com/moment/65797125

https://zq.zhaopin.com/moment/65797126

https://zq.zhaopin.com/moment/65797142

https://zq.zhaopin.com/moment/65797135

https://zq.zhaopin.com/moment/65797141

https://zq.zhaopin.com/moment/65797143

https://zq.zhaopin.com/moment/65797144

https://zq.zhaopin.com/moment/65797154

https://zq.zhaopin.com/moment/65797167

https://zq.zhaopin.com/moment/65797173

https://zq.zhaopin.com/moment/65797170

https://zq.zhaopin.com/moment/65797183

https://zq.zhaopin.com/moment/65797180

https://zq.zhaopin.com/moment/65797174

https://zq.zhaopin.com/moment/65797181

https://zq.zhaopin.com/moment/65797186

https://zq.zhaopin.com/moment/65797187

https://zq.zhaopin.com/moment/65797188

https://zq.zhaopin.com/moment/65797190

https://zq.zhaopin.com/moment/65797191

https://zq.zhaopin.com/moment/65797197

https://zq.zhaopin.com/moment/65797204

https://zq.zhaopin.com/moment/65797203

https://zq.zhaopin.com/moment/65797212

https://zq.zhaopin.com/moment/65797213

https://zq.zhaopin.com/moment/65797206

https://zq.zhaopin.com/moment/65797225

https://zq.zhaopin.com/moment/65797219

https://zq.zhaopin.com/moment/65797224

https://zq.zhaopin.com/moment/65797229

https://zq.zhaopin.com/moment/65797241

https://zq.zhaopin.com/moment/65797233

https://zq.zhaopin.com/moment/65797240

https://zq.zhaopin.com/moment/65797242

https://zq.zhaopin.com/moment/65797247

https://zq.zhaopin.com/moment/65797246

https://zq.zhaopin.com/moment/65797254

https://zq.zhaopin.com/moment/65797255

https://zq.zhaopin.com/moment/65797256

https://zq.zhaopin.com/moment/65797267

https://zq.zhaopin.com/moment/65797270

https://zq.zhaopin.com/moment/65797275

https://zq.zhaopin.com/moment/65797272

https://zq.zhaopin.com/moment/65797276

https://zq.zhaopin.com/moment/65797278

https://zq.zhaopin.com/moment/65797282

https://zq.zhaopin.com/moment/65797283

https://zq.zhaopin.com/moment/65797291

https://zq.zhaopin.com/moment/65797286

https://zq.zhaopin.com/moment/65797290

https://zq.zhaopin.com/moment/65797293

https://zq.zhaopin.com/moment/65797295

https://zq.zhaopin.com/moment/65797296

https://zq.zhaopin.com/moment/65797299

https://zq.zhaopin.com/moment/65797305

https://zq.zhaopin.com/moment/65797304

https://zq.zhaopin.com/moment/65797306

https://zq.zhaopin.com/moment/65797308

https://zq.zhaopin.com/moment/65797309

https://zq.zhaopin.com/moment/65797314

https://zq.zhaopin.com/moment/65797326

https://zq.zhaopin.com/moment/65797320

https://zq.zhaopin.com/moment/65797321

https://zq.zhaopin.com/moment/65797319

https://zq.zhaopin.com/moment/65797325

https://zq.zhaopin.com/moment/65797330

https://zq.zhaopin.com/moment/65797335

https://zq.zhaopin.com/moment/65797336

https://zq.zhaopin.com/moment/65797338

https://zq.zhaopin.com/moment/65797342

https://zq.zhaopin.com/moment/65797345

https://zq.zhaopin.com/moment/65797349

https://zq.zhaopin.com/moment/65797348

https://zq.zhaopin.com/moment/65797350

https://zq.zhaopin.com/moment/65797357

https://zq.zhaopin.com/moment/65797356

https://zq.zhaopin.com/moment/65797362

https://zq.zhaopin.com/moment/65797360

https://zq.zhaopin.com/moment/65797369

https://zq.zhaopin.com/moment/65797376

https://zq.zhaopin.com/moment/65797364

https://zq.zhaopin.com/moment/65797377

https://zq.zhaopin.com/moment/65797379

https://zq.zhaopin.com/moment/65797378

https://zq.zhaopin.com/moment/65797388

https://zq.zhaopin.com/moment/65797386

https://zq.zhaopin.com/moment/65797395

https://zq.zhaopin.com/moment/65797400

https://zq.zhaopin.com/moment/65797404

https://zq.zhaopin.com/moment/65797401

https://zq.zhaopin.com/moment/65797402

https://zq.zhaopin.com/moment/65797403

https://zq.zhaopin.com/moment/65797415

https://zq.zhaopin.com/moment/65797410

https://zq.zhaopin.com/moment/65797417

https://zq.zhaopin.com/moment/65797416

https://zq.zhaopin.com/moment/65797423

https://zq.zhaopin.com/moment/65797437

https://zq.zhaopin.com/moment/65797431

https://zq.zhaopin.com/moment/65797424

https://zq.zhaopin.com/moment/65797438

https://zq.zhaopin.com/moment/65797439

https://zq.zhaopin.com/moment/65797442

https://zq.zhaopin.com/moment/65797444

https://zq.zhaopin.com/moment/65797448

https://zq.zhaopin.com/moment/65797451

https://zq.zhaopin.com/moment/65797449

https://zq.zhaopin.com/moment/65797450

https://zq.zhaopin.com/moment/65797457

https://zq.zhaopin.com/moment/65797458

https://zq.zhaopin.com/moment/65797463

https://zq.zhaopin.com/moment/65797466

https://zq.zhaopin.com/moment/65797467

https://zq.zhaopin.com/moment/65797468

https://zq.zhaopin.com/moment/65797479

https://zq.zhaopin.com/moment/65797476

https://zq.zhaopin.com/moment/65797474

https://zq.zhaopin.com/moment/65797482

https://zq.zhaopin.com/moment/65797483

https://zq.zhaopin.com/moment/65797484

https://zq.zhaopin.com/moment/65797488

https://zq.zhaopin.com/moment/65797490

https://zq.zhaopin.com/moment/65797502

https://zq.zhaopin.com/moment/65797506

https://zq.zhaopin.com/moment/65797495

https://zq.zhaopin.com/moment/65797508

https://zq.zhaopin.com/moment/65797503

https://zq.zhaopin.com/moment/65797515

https://zq.zhaopin.com/moment/65797521

https://zq.zhaopin.com/moment/65797522

https://zq.zhaopin.com/moment/65797523

https://zq.zhaopin.com/moment/65797528

https://zq.zhaopin.com/moment/65797534

https://zq.zhaopin.com/moment/65797539

https://zq.zhaopin.com/moment/65797538

https://zq.zhaopin.com/moment/65797540

https://zq.zhaopin.com/moment/65797542

https://zq.zhaopin.com/moment/65797545

https://zq.zhaopin.com/moment/65797547

https://zq.zhaopin.com/moment/65797553

https://zq.zhaopin.com/moment/65797554

https://zq.zhaopin.com/moment/65797555

https://zq.zhaopin.com/moment/65797558

https://zq.zhaopin.com/moment/65797559

https://zq.zhaopin.com/moment/65797563

https://zq.zhaopin.com/moment/65797569

https://zq.zhaopin.com/moment/65797568

https://zq.zhaopin.com/moment/65797567

https://zq.zhaopin.com/moment/65797572

https://zq.zhaopin.com/moment/65797576

https://zq.zhaopin.com/moment/65797578

https://zq.zhaopin.com/moment/65797586

https://zq.zhaopin.com/moment/65797588

https://zq.zhaopin.com/moment/65797587

https://zq.zhaopin.com/moment/65797601

https://zq.zhaopin.com/moment/65797595

https://zq.zhaopin.com/moment/65797591

https://zq.zhaopin.com/moment/65797589

https://zq.zhaopin.com/moment/65797602

https://zq.zhaopin.com/moment/65797612

https://zq.zhaopin.com/moment/65797608

https://zq.zhaopin.com/moment/65797617

https://zq.zhaopin.com/moment/65797614

https://zq.zhaopin.com/moment/65797621

https://zq.zhaopin.com/moment/65797627

https://zq.zhaopin.com/moment/65797622

https://zq.zhaopin.com/moment/65797623

https://zq.zhaopin.com/moment/65797625

https://zq.zhaopin.com/moment/65797633

https://zq.zhaopin.com/moment/65797636

https://zq.zhaopin.com/moment/65797640

https://zq.zhaopin.com/moment/65797642

https://zq.zhaopin.com/moment/65797643

https://zq.zhaopin.com/moment/65797650

https://zq.zhaopin.com/moment/65797651

https://zq.zhaopin.com/moment/65797646

https://zq.zhaopin.com/moment/65797649

https://zq.zhaopin.com/moment/65797653

https://zq.zhaopin.com/moment/65797656

https://zq.zhaopin.com/moment/65797659

https://zq.zhaopin.com/moment/65797664

https://zq.zhaopin.com/moment/65797667

https://zq.zhaopin.com/moment/65797677

https://zq.zhaopin.com/moment/65797674

https://zq.zhaopin.com/moment/65797680

https://zq.zhaopin.com/moment/65797681

https://zq.zhaopin.com/moment/65797682

https://zq.zhaopin.com/moment/65797684

https://zq.zhaopin.com/moment/65797686

https://zq.zhaopin.com/moment/65797690

https://zq.zhaopin.com/moment/65797698

https://zq.zhaopin.com/moment/65797700

https://zq.zhaopin.com/moment/65797702

https://zq.zhaopin.com/moment/65797703

https://zq.zhaopin.com/moment/65797710

https://zq.zhaopin.com/moment/65797704

https://zq.zhaopin.com/moment/65797713

https://zq.zhaopin.com/moment/65797714

https://zq.zhaopin.com/moment/65797715

https://zq.zhaopin.com/moment/65797717

https://zq.zhaopin.com/moment/65797719

https://zq.zhaopin.com/moment/65797726

https://zq.zhaopin.com/moment/65797722

https://zq.zhaopin.com/moment/65797729

https://zq.zhaopin.com/moment/65797732

https://zq.zhaopin.com/moment/65797731

https://zq.zhaopin.com/moment/65797738

https://zq.zhaopin.com/moment/65797735

https://zq.zhaopin.com/moment/65797740

https://zq.zhaopin.com/moment/65797742

https://zq.zhaopin.com/moment/65797744

https://zq.zhaopin.com/moment/65797759

https://zq.zhaopin.com/moment/65797758

https://zq.zhaopin.com/moment/65797760

https://zq.zhaopin.com/moment/65797761

https://zq.zhaopin.com/moment/65797762

https://zq.zhaopin.com/moment/65797765

https://zq.zhaopin.com/moment/65797777

https://zq.zhaopin.com/moment/65797778

https://zq.zhaopin.com/moment/65797779

https://zq.zhaopin.com/moment/65797780

https://zq.zhaopin.com/moment/65797781

https://zq.zhaopin.com/moment/65797789

https://zq.zhaopin.com/moment/65797790

https://zq.zhaopin.com/moment/65797793

https://zq.zhaopin.com/moment/65797791

https://zq.zhaopin.com/moment/65797795

https://zq.zhaopin.com/moment/65797803

https://zq.zhaopin.com/moment/65797804

https://zq.zhaopin.com/moment/65797806

https://zq.zhaopin.com/moment/65797809

https://zq.zhaopin.com/moment/65797810

https://zq.zhaopin.com/moment/65797822

https://zq.zhaopin.com/moment/65797820

https://zq.zhaopin.com/moment/65797823

https://zq.zhaopin.com/moment/65797812

https://zq.zhaopin.com/moment/65797826

https://zq.zhaopin.com/moment/65797828

https://zq.zhaopin.com/moment/65797838

https://zq.zhaopin.com/moment/65797839

https://zq.zhaopin.com/moment/65797842

https://zq.zhaopin.com/moment/65797840

https://zq.zhaopin.com/moment/65797844

https://zq.zhaopin.com/moment/65797854

https://zq.zhaopin.com/moment/65797855

https://zq.zhaopin.com/moment/65797856

https://zq.zhaopin.com/moment/65797859

https://zq.zhaopin.com/moment/65797860

https://zq.zhaopin.com/moment/65797861

https://zq.zhaopin.com/moment/65797866

https://zq.zhaopin.com/moment/65797869

https://zq.zhaopin.com/moment/65797870

https://zq.zhaopin.com/moment/65797867

https://zq.zhaopin.com/moment/65797868

https://zq.zhaopin.com/moment/65797871

https://zq.zhaopin.com/moment/65797877

https://zq.zhaopin.com/moment/65797883

https://zq.zhaopin.com/moment/65797878

https://zq.zhaopin.com/moment/65797879

https://zq.zhaopin.com/moment/65797885

https://zq.zhaopin.com/moment/65797894

https://zq.zhaopin.com/moment/65797895

https://zq.zhaopin.com/moment/65797887

https://zq.zhaopin.com/moment/65797900

https://zq.zhaopin.com/moment/65797898

https://zq.zhaopin.com/moment/65797897

https://zq.zhaopin.com/moment/65797901

https://zq.zhaopin.com/moment/65797906

https://zq.zhaopin.com/moment/65797909

https://zq.zhaopin.com/moment/65797912

https://zq.zhaopin.com/moment/65797915

https://zq.zhaopin.com/moment/65797916

https://zq.zhaopin.com/moment/65797921

https://zq.zhaopin.com/moment/65797920

https://zq.zhaopin.com/moment/65797923

https://zq.zhaopin.com/moment/65797928

https://zq.zhaopin.com/moment/65797926

https://zq.zhaopin.com/moment/65797929

https://zq.zhaopin.com/moment/65797932

https://zq.zhaopin.com/moment/65797933

https://zq.zhaopin.com/moment/65797934

https://zq.zhaopin.com/moment/65798025

https://zq.zhaopin.com/moment/65797942

https://zq.zhaopin.com/moment/65797939

https://zq.zhaopin.com/moment/65797985

https://zq.zhaopin.com/moment/65797943

https://zq.zhaopin.com/moment/65798066

https://zq.zhaopin.com/moment/65798070

https://zq.zhaopin.com/moment/65798190

https://zq.zhaopin.com/moment/65798207

https://zq.zhaopin.com/moment/65798228

https://zq.zhaopin.com/moment/65798260

https://zq.zhaopin.com/moment/65798440

https://zq.zhaopin.com/moment/65798333

https://zq.zhaopin.com/moment/65798343

https://zq.zhaopin.com/moment/65798445

https://zq.zhaopin.com/moment/65798451

https://zq.zhaopin.com/moment/65798494

https://zq.zhaopin.com/moment/65798565

https://zq.zhaopin.com/moment/65798566

https://zq.zhaopin.com/moment/65798684

https://zq.zhaopin.com/moment/65798752

https://zq.zhaopin.com/moment/65798830

https://zq.zhaopin.com/moment/65798689

https://zq.zhaopin.com/moment/65798823

https://zq.zhaopin.com/moment/65798939

https://zq.zhaopin.com/moment/65798943

https://zq.zhaopin.com/moment/65798980

https://zq.zhaopin.com/moment/65798966

https://zq.zhaopin.com/moment/65799082

https://zq.zhaopin.com/moment/65799231

https://zq.zhaopin.com/moment/65799193

https://zq.zhaopin.com/moment/65799198

https://zq.zhaopin.com/moment/65799250

https://zq.zhaopin.com/moment/65799352

https://zq.zhaopin.com/moment/65799355

https://zq.zhaopin.com/moment/65799448

https://zq.zhaopin.com/moment/65799450

https://zq.zhaopin.com/moment/65799501

https://zq.zhaopin.com/moment/65799502

https://zq.zhaopin.com/moment/65799727

https://zq.zhaopin.com/moment/65799719

https://zq.zhaopin.com/moment/65799631

https://zq.zhaopin.com/moment/65799627

https://zq.zhaopin.com/moment/65799772

https://zq.zhaopin.com/moment/65799901

https://zq.zhaopin.com/moment/65799900

https://zq.zhaopin.com/moment/65799952

https://zq.zhaopin.com/moment/65800011

https://zq.zhaopin.com/moment/65800127

https://zq.zhaopin.com/moment/65799999

https://zq.zhaopin.com/moment/65800135

https://zq.zhaopin.com/moment/65800222

https://zq.zhaopin.com/moment/65800180

https://zq.zhaopin.com/moment/65800185

https://zq.zhaopin.com/moment/65800230

https://zq.zhaopin.com/moment/65800346

https://zq.zhaopin.com/moment/65800402

https://zq.zhaopin.com/moment/65800341

https://zq.zhaopin.com/moment/65800401

https://zq.zhaopin.com/moment/65800430

https://zq.zhaopin.com/moment/65800431

https://zq.zhaopin.com/moment/65800571

https://zq.zhaopin.com/moment/65800608

https://zq.zhaopin.com/moment/65800569

https://zq.zhaopin.com/moment/65800642

https://zq.zhaopin.com/moment/65800607

https://zq.zhaopin.com/moment/65800649

https://zq.zhaopin.com/moment/65800779

https://zq.zhaopin.com/moment/65800790

https://zq.zhaopin.com/moment/65800826

https://zq.zhaopin.com/moment/65800834

https://zq.zhaopin.com/moment/65800868

https://zq.zhaopin.com/moment/65801000

https://zq.zhaopin.com/moment/65800877

https://zq.zhaopin.com/moment/65801041

https://zq.zhaopin.com/moment/65801013

https://zq.zhaopin.com/moment/65801047

https://zq.zhaopin.com/moment/65801099

https://zq.zhaopin.com/moment/65801232

https://zq.zhaopin.com/moment/65801064

https://zq.zhaopin.com/moment/65801253

https://zq.zhaopin.com/moment/65801240

https://zq.zhaopin.com/moment/65801263

https://zq.zhaopin.com/moment/65801264

https://zq.zhaopin.com/moment/65801305

https://zq.zhaopin.com/moment/65801460

https://zq.zhaopin.com/moment/65801450

https://zq.zhaopin.com/moment/65801488

https://zq.zhaopin.com/moment/65801475

https://zq.zhaopin.com/moment/65801494

https://zq.zhaopin.com/moment/65801511

https://zq.zhaopin.com/moment/65801658

https://zq.zhaopin.com/moment/65801689

https://zq.zhaopin.com/moment/65801667

https://zq.zhaopin.com/moment/65801708

https://zq.zhaopin.com/moment/65801702

https://zq.zhaopin.com/moment/65801720

https://zq.zhaopin.com/moment/65801880

https://zq.zhaopin.com/moment/65801886

https://zq.zhaopin.com/moment/65801901

https://zq.zhaopin.com/moment/65801912

https://zq.zhaopin.com/moment/65801924

https://zq.zhaopin.com/moment/65801941

https://zq.zhaopin.com/moment/65802105

https://zq.zhaopin.com/moment/65802119

https://zq.zhaopin.com/moment/65802124

https://zq.zhaopin.com/moment/65802132

https://zq.zhaopin.com/moment/65802151

https://zq.zhaopin.com/moment/65802154

https://zq.zhaopin.com/moment/65802327

https://zq.zhaopin.com/moment/65802350

https://zq.zhaopin.com/moment/65802329

https://zq.zhaopin.com/moment/65802348

https://zq.zhaopin.com/moment/65802356

https://zq.zhaopin.com/moment/65802549

https://zq.zhaopin.com/moment/65802374

https://zq.zhaopin.com/moment/65802560

https://zq.zhaopin.com/moment/65802562

https://zq.zhaopin.com/moment/65802578

https://zq.zhaopin.com/moment/65802579

https://zq.zhaopin.com/moment/65802589

https://zq.zhaopin.com/moment/65802766

https://zq.zhaopin.com/moment/65802762

https://zq.zhaopin.com/moment/65802769

https://zq.zhaopin.com/moment/65802783

https://zq.zhaopin.com/moment/65802790

https://zq.zhaopin.com/moment/65802793

https://zq.zhaopin.com/moment/65802988

https://zq.zhaopin.com/moment/65802992

https://zq.zhaopin.com/moment/65803002

https://zq.zhaopin.com/moment/65803021

https://zq.zhaopin.com/moment/65803008

https://zq.zhaopin.com/moment/65803014

https://zq.zhaopin.com/moment/65803230

https://zq.zhaopin.com/moment/65803234

https://zq.zhaopin.com/moment/65803245

https://zq.zhaopin.com/moment/65803252

https://zq.zhaopin.com/moment/65803256

https://zq.zhaopin.com/moment/65803263

https://zq.zhaopin.com/moment/65803477

https://zq.zhaopin.com/moment/65803479

https://zq.zhaopin.com/moment/65803487

https://zq.zhaopin.com/moment/65803490

https://zq.zhaopin.com/moment/65803494

https://zq.zhaopin.com/moment/65803667

https://zq.zhaopin.com/moment/65803676

https://zq.zhaopin.com/moment/65803686

https://zq.zhaopin.com/moment/65803719

https://zq.zhaopin.com/moment/65803722

https://zq.zhaopin.com/moment/65803878

https://zq.zhaopin.com/moment/65803728

https://zq.zhaopin.com/moment/65803900

https://zq.zhaopin.com/moment/65803905

https://zq.zhaopin.com/moment/65803950

https://zq.zhaopin.com/moment/65803952

https://zq.zhaopin.com/moment/65804105

https://zq.zhaopin.com/moment/65804135

https://zq.zhaopin.com/moment/65804132

https://zq.zhaopin.com/moment/65804164

https://zq.zhaopin.com/moment/65804170

https://zq.zhaopin.com/moment/65804167

https://zq.zhaopin.com/moment/65804344

https://zq.zhaopin.com/moment/65804357

https://zq.zhaopin.com/moment/65804363

https://zq.zhaopin.com/moment/65804380

https://zq.zhaopin.com/moment/65804381

https://zq.zhaopin.com/moment/65804421

https://zq.zhaopin.com/moment/65804567

https://zq.zhaopin.com/moment/65804572

https://zq.zhaopin.com/moment/65804593

https://zq.zhaopin.com/moment/65804631

https://zq.zhaopin.com/moment/65804627

https://zq.zhaopin.com/moment/65804773

https://zq.zhaopin.com/moment/65804645

https://zq.zhaopin.com/moment/65804826

https://zq.zhaopin.com/moment/65804816

https://zq.zhaopin.com/moment/65804834

https://zq.zhaopin.com/moment/65804853

https://zq.zhaopin.com/moment/65805023

https://zq.zhaopin.com/moment/65804878

https://zq.zhaopin.com/moment/65805028

https://zq.zhaopin.com/moment/65805053

https://zq.zhaopin.com/moment/65805090

https://zq.zhaopin.com/moment/65805073

https://zq.zhaopin.com/moment/65805103

https://zq.zhaopin.com/moment/65805251

https://zq.zhaopin.com/moment/65805248

https://zq.zhaopin.com/moment/65805282

https://zq.zhaopin.com/moment/65805291

https://zq.zhaopin.com/moment/65805339

https://zq.zhaopin.com/moment/65805474

https://zq.zhaopin.com/moment/65805478

https://zq.zhaopin.com/moment/65805511

https://zq.zhaopin.com/moment/65805526

https://zq.zhaopin.com/moment/65805565

https://zq.zhaopin.com/moment/65805585

https://zq.zhaopin.com/moment/65805713

https://zq.zhaopin.com/moment/65805716

https://zq.zhaopin.com/moment/65805733

https://zq.zhaopin.com/moment/65805767

https://zq.zhaopin.com/moment/65805781

https://zq.zhaopin.com/moment/65805835

https://zq.zhaopin.com/moment/65805942

https://zq.zhaopin.com/moment/65805956

https://zq.zhaopin.com/moment/65805951

https://zq.zhaopin.com/moment/65805969

https://zq.zhaopin.com/moment/65806014

https://zq.zhaopin.com/moment/65806054

https://zq.zhaopin.com/moment/65806136

https://zq.zhaopin.com/moment/65806134

https://zq.zhaopin.com/moment/65806142

https://zq.zhaopin.com/moment/65806150

https://zq.zhaopin.com/moment/65806162

https://zq.zhaopin.com/moment/65806170

https://zq.zhaopin.com/moment/65806163

https://zq.zhaopin.com/moment/65806186

https://zq.zhaopin.com/moment/65806184

https://zq.zhaopin.com/moment/65806172

https://zq.zhaopin.com/moment/65806187

https://zq.zhaopin.com/moment/65806190

https://zq.zhaopin.com/moment/65806191

https://zq.zhaopin.com/moment/65806201

https://zq.zhaopin.com/moment/65806203

https://zq.zhaopin.com/moment/65806204

https://zq.zhaopin.com/moment/65806207

https://zq.zhaopin.com/moment/65806208

https://zq.zhaopin.com/moment/65806211

https://zq.zhaopin.com/moment/65806212

https://zq.zhaopin.com/moment/65806216

https://zq.zhaopin.com/moment/65806214

https://zq.zhaopin.com/moment/65806215

https://zq.zhaopin.com/moment/65806217

https://zq.zhaopin.com/moment/65806229

https://zq.zhaopin.com/moment/65806224

https://zq.zhaopin.com/moment/65806231

https://zq.zhaopin.com/moment/65806233

https://zq.zhaopin.com/moment/65806232

https://zq.zhaopin.com/moment/65806241

https://zq.zhaopin.com/moment/65806234

https://zq.zhaopin.com/moment/65806244

https://zq.zhaopin.com/moment/65806245

https://zq.zhaopin.com/moment/65806246

https://zq.zhaopin.com/moment/65806249

https://zq.zhaopin.com/moment/65806254

https://zq.zhaopin.com/moment/65806248

https://zq.zhaopin.com/moment/65806258

https://zq.zhaopin.com/moment/65806256

https://zq.zhaopin.com/moment/65806262

https://zq.zhaopin.com/moment/65806260

https://zq.zhaopin.com/moment/65806261

https://zq.zhaopin.com/moment/65806266

https://zq.zhaopin.com/moment/65806269

https://zq.zhaopin.com/moment/65806271

https://zq.zhaopin.com/moment/65806272

https://zq.zhaopin.com/moment/65806275

https://zq.zhaopin.com/moment/65806286

https://zq.zhaopin.com/moment/65806291

https://zq.zhaopin.com/moment/65806290

https://zq.zhaopin.com/moment/65806287

https://zq.zhaopin.com/moment/65806294

https://zq.zhaopin.com/moment/65806292

https://zq.zhaopin.com/moment/65806302

https://zq.zhaopin.com/moment/65806306

https://zq.zhaopin.com/moment/65806305

https://zq.zhaopin.com/moment/65806307

https://zq.zhaopin.com/moment/65806310

https://zq.zhaopin.com/moment/65806323

https://zq.zhaopin.com/moment/65806314

https://zq.zhaopin.com/moment/65806324

https://zq.zhaopin.com/moment/65806325

https://zq.zhaopin.com/moment/65806327

https://zq.zhaopin.com/moment/65806338

https://zq.zhaopin.com/moment/65806336

https://zq.zhaopin.com/moment/65806340

https://zq.zhaopin.com/moment/65806342

https://zq.zhaopin.com/moment/65806341

https://zq.zhaopin.com/moment/65806343

https://zq.zhaopin.com/moment/65806380

https://zq.zhaopin.com/moment/65806387

https://zq.zhaopin.com/moment/65806390

https://zq.zhaopin.com/moment/65806407

https://zq.zhaopin.com/moment/65806396

https://zq.zhaopin.com/moment/65806448

https://zq.zhaopin.com/moment/65806453

https://zq.zhaopin.com/moment/65806462

https://zq.zhaopin.com/moment/65806460

https://zq.zhaopin.com/moment/65806468

https://zq.zhaopin.com/moment/65806515

https://zq.zhaopin.com/moment/65806471

https://zq.zhaopin.com/moment/65806523

https://zq.zhaopin.com/moment/65806529

https://zq.zhaopin.com/moment/65806536

https://zq.zhaopin.com/moment/65806540

https://zq.zhaopin.com/moment/65806546

https://zq.zhaopin.com/moment/65806589

https://zq.zhaopin.com/moment/65806581

https://zq.zhaopin.com/moment/65806593

https://zq.zhaopin.com/moment/65806599

https://zq.zhaopin.com/moment/65806600

https://zq.zhaopin.com/moment/65806640

https://zq.zhaopin.com/moment/65806601

https://zq.zhaopin.com/moment/65806649

https://zq.zhaopin.com/moment/65806653

https://zq.zhaopin.com/moment/65806655

https://zq.zhaopin.com/moment/65806659

https://zq.zhaopin.com/moment/65806699

https://zq.zhaopin.com/moment/65806664

https://zq.zhaopin.com/moment/65806706

https://zq.zhaopin.com/moment/65806707

https://zq.zhaopin.com/moment/65806715

https://zq.zhaopin.com/moment/65806713

https://zq.zhaopin.com/moment/65806719

https://zq.zhaopin.com/moment/65806749

https://zq.zhaopin.com/moment/65806752

https://zq.zhaopin.com/moment/65806754

https://zq.zhaopin.com/moment/65806757

https://zq.zhaopin.com/moment/65806758

https://zq.zhaopin.com/moment/65806759

https://zq.zhaopin.com/moment/65806767

https://zq.zhaopin.com/moment/65806769

https://zq.zhaopin.com/moment/65806771

https://zq.zhaopin.com/moment/65806775

https://zq.zhaopin.com/moment/65806779

https://zq.zhaopin.com/moment/65806774

https://zq.zhaopin.com/moment/65806783

https://zq.zhaopin.com/moment/65806786

https://zq.zhaopin.com/moment/65806787

https://zq.zhaopin.com/moment/65806789

https://zq.zhaopin.com/moment/65806807

https://zq.zhaopin.com/moment/65806793

https://zq.zhaopin.com/moment/65806819

https://zq.zhaopin.com/moment/65806817

https://zq.zhaopin.com/moment/65806827

https://zq.zhaopin.com/moment/65806896

https://zq.zhaopin.com/moment/65806840

https://zq.zhaopin.com/moment/65806897

https://zq.zhaopin.com/moment/65806907

https://zq.zhaopin.com/moment/65806904

https://zq.zhaopin.com/moment/65806921

https://zq.zhaopin.com/moment/65806968

https://zq.zhaopin.com/moment/65806978

https://zq.zhaopin.com/moment/65806976

https://zq.zhaopin.com/moment/65806990

https://zq.zhaopin.com/moment/65807003

https://zq.zhaopin.com/moment/65807050

https://zq.zhaopin.com/moment/65807057

https://zq.zhaopin.com/moment/65807055

https://zq.zhaopin.com/moment/65807066

https://zq.zhaopin.com/moment/65807075

https://zq.zhaopin.com/moment/65807085

https://zq.zhaopin.com/moment/65807142

https://zq.zhaopin.com/moment/65807144

https://zq.zhaopin.com/moment/65807153

https://zq.zhaopin.com/moment/65807219

https://zq.zhaopin.com/moment/65807227

https://zq.zhaopin.com/moment/65807225

https://zq.zhaopin.com/moment/65807233

https://zq.zhaopin.com/moment/65807246

https://zq.zhaopin.com/moment/65807266

https://zq.zhaopin.com/moment/65807237

https://zq.zhaopin.com/moment/65807269

https://zq.zhaopin.com/moment/65807272

https://zq.zhaopin.com/moment/65807274

https://zq.zhaopin.com/moment/65807282

https://zq.zhaopin.com/moment/65807304

https://zq.zhaopin.com/moment/65807307

https://zq.zhaopin.com/moment/65807309

https://zq.zhaopin.com/moment/65807338

https://zq.zhaopin.com/moment/65807311

https://zq.zhaopin.com/moment/65807319

https://zq.zhaopin.com/moment/65807314

https://zq.zhaopin.com/moment/65807343

https://zq.zhaopin.com/moment/65807344

https://zq.zhaopin.com/moment/65807354

https://zq.zhaopin.com/moment/65807352

https://zq.zhaopin.com/moment/65807359

https://zq.zhaopin.com/moment/65807377

https://zq.zhaopin.com/moment/65807382

https://zq.zhaopin.com/moment/65807388

https://zq.zhaopin.com/moment/65807383

https://zq.zhaopin.com/moment/65807395

https://zq.zhaopin.com/moment/65807400

https://zq.zhaopin.com/moment/65807401

https://zq.zhaopin.com/moment/65807404

https://zq.zhaopin.com/moment/65807405

https://zq.zhaopin.com/moment/65807408

https://zq.zhaopin.com/moment/65807420

https://zq.zhaopin.com/moment/65807422

https://zq.zhaopin.com/moment/65807426

https://zq.zhaopin.com/moment/65807428

https://zq.zhaopin.com/moment/65807439

https://zq.zhaopin.com/moment/65807430

https://zq.zhaopin.com/moment/65807438

https://zq.zhaopin.com/moment/65807443

https://zq.zhaopin.com/moment/65807451

https://zq.zhaopin.com/moment/65807444

https://zq.zhaopin.com/moment/65807446

https://zq.zhaopin.com/moment/65807454

https://zq.zhaopin.com/moment/65807458

https://zq.zhaopin.com/moment/65807460

https://zq.zhaopin.com/moment/65807459

https://zq.zhaopin.com/moment/65807462

https://zq.zhaopin.com/moment/65807469

https://zq.zhaopin.com/moment/65807471

https://zq.zhaopin.com/moment/65807473

https://zq.zhaopin.com/moment/65807474

https://zq.zhaopin.com/moment/65807476

https://zq.zhaopin.com/moment/65807481

https://zq.zhaopin.com/moment/65807486

https://zq.zhaopin.com/moment/65807487

https://zq.zhaopin.com/moment/65807493

https://zq.zhaopin.com/moment/65807491

https://zq.zhaopin.com/moment/65807494

https://zq.zhaopin.com/moment/65807501

https://zq.zhaopin.com/moment/65807503

https://zq.zhaopin.com/moment/65807505

https://zq.zhaopin.com/moment/65807504

https://zq.zhaopin.com/moment/65807508

https://zq.zhaopin.com/moment/65807519

https://zq.zhaopin.com/moment/65807509

https://zq.zhaopin.com/moment/65807522

https://zq.zhaopin.com/moment/65807521

https://zq.zhaopin.com/moment/65807526

https://zq.zhaopin.com/moment/65807523

https://zq.zhaopin.com/moment/65807534

https://zq.zhaopin.com/moment/65807529

https://zq.zhaopin.com/moment/65807536

https://zq.zhaopin.com/moment/65807538

https://zq.zhaopin.com/moment/65807541

https://zq.zhaopin.com/moment/65807545

https://zq.zhaopin.com/moment/65807553

https://zq.zhaopin.com/moment/65807555

https://zq.zhaopin.com/moment/65807560

https://zq.zhaopin.com/moment/65807563

https://zq.zhaopin.com/moment/65807564

https://zq.zhaopin.com/moment/65807568

https://zq.zhaopin.com/moment/65807567

https://zq.zhaopin.com/moment/65807571

https://zq.zhaopin.com/moment/65807577

https://zq.zhaopin.com/moment/65807574

https://zq.zhaopin.com/moment/65807591

https://zq.zhaopin.com/moment/65807589

https://zq.zhaopin.com/moment/65807579

https://zq.zhaopin.com/moment/65807586

https://zq.zhaopin.com/moment/65807595

https://zq.zhaopin.com/moment/65807594

https://zq.zhaopin.com/moment/65807600

https://zq.zhaopin.com/moment/65807596

https://zq.zhaopin.com/moment/65807601

https://zq.zhaopin.com/moment/65807602

https://zq.zhaopin.com/moment/65807607

https://zq.zhaopin.com/moment/65807606

https://zq.zhaopin.com/moment/65807618

https://zq.zhaopin.com/moment/65807608

https://zq.zhaopin.com/moment/65807620

https://zq.zhaopin.com/moment/65807619

https://zq.zhaopin.com/moment/65807622

https://zq.zhaopin.com/moment/65807635

https://zq.zhaopin.com/moment/65807626

https://zq.zhaopin.com/moment/65807624

https://zq.zhaopin.com/moment/65807636

https://zq.zhaopin.com/moment/65807643

https://zq.zhaopin.com/moment/65807641

https://zq.zhaopin.com/moment/65807637

https://zq.zhaopin.com/moment/65807647

https://zq.zhaopin.com/moment/65807651

https://zq.zhaopin.com/moment/65807652

https://zq.zhaopin.com/moment/65807654

https://zq.zhaopin.com/moment/65807658

https://zq.zhaopin.com/moment/65807661

https://zq.zhaopin.com/moment/65807662

https://zq.zhaopin.com/moment/65807666

https://zq.zhaopin.com/moment/65807667

https://zq.zhaopin.com/moment/65807669

https://zq.zhaopin.com/moment/65807672

https://zq.zhaopin.com/moment/65807678

https://zq.zhaopin.com/moment/65807680

https://zq.zhaopin.com/moment/65807683

https://zq.zhaopin.com/moment/65807686

https://zq.zhaopin.com/moment/65807692

https://zq.zhaopin.com/moment/65807695

https://zq.zhaopin.com/moment/65807704

https://zq.zhaopin.com/moment/65807705

https://zq.zhaopin.com/moment/65807708

https://zq.zhaopin.com/moment/65807714

https://zq.zhaopin.com/moment/65807711

https://zq.zhaopin.com/moment/65807712

https://zq.zhaopin.com/moment/65807721

https://zq.zhaopin.com/moment/65807719

https://zq.zhaopin.com/moment/65807722

https://zq.zhaopin.com/moment/65807725

https://zq.zhaopin.com/moment/65807728

https://zq.zhaopin.com/moment/65807730

https://zq.zhaopin.com/moment/65807736

https://zq.zhaopin.com/moment/65807745

https://zq.zhaopin.com/moment/65807743

https://zq.zhaopin.com/moment/65807740

https://zq.zhaopin.com/moment/65807750

https://zq.zhaopin.com/moment/65807751

https://zq.zhaopin.com/moment/65807755

https://zq.zhaopin.com/moment/65807754

https://zq.zhaopin.com/moment/65807759

https://zq.zhaopin.com/moment/65807766

https://zq.zhaopin.com/moment/65807767

https://zq.zhaopin.com/moment/65807769

https://zq.zhaopin.com/moment/65807773

https://zq.zhaopin.com/moment/65807772

https://zq.zhaopin.com/moment/65807783

https://zq.zhaopin.com/moment/65807779

https://zq.zhaopin.com/moment/65807784

https://zq.zhaopin.com/moment/65807791

https://zq.zhaopin.com/moment/65807789

https://zq.zhaopin.com/moment/65807792

https://zq.zhaopin.com/moment/65807796

https://zq.zhaopin.com/moment/65807801

https://zq.zhaopin.com/moment/65807799

https://zq.zhaopin.com/moment/65807805

https://zq.zhaopin.com/moment/65807807

https://zq.zhaopin.com/moment/65807815

https://zq.zhaopin.com/moment/65807818

https://zq.zhaopin.com/moment/65807817

https://zq.zhaopin.com/moment/65807821

https://zq.zhaopin.com/moment/65807824

https://zq.zhaopin.com/moment/65807823

https://zq.zhaopin.com/moment/65807831

https://zq.zhaopin.com/moment/65807832

https://zq.zhaopin.com/moment/65807833

https://zq.zhaopin.com/moment/65807835

https://zq.zhaopin.com/moment/65807838

https://zq.zhaopin.com/moment/65807843

https://zq.zhaopin.com/moment/65807848

https://zq.zhaopin.com/moment/65807851

https://zq.zhaopin.com/moment/65807855


{{voteData.voteSum}} 人已参与
支持
反对
请登录后查看

e5d0bb91e56e 最后编辑于2025-11-10 21:56:53

快捷回复
回复
回复
回复({{post_count}}) {{!is_user ? '我的回复' :'全部回复'}}
排序 默认正序 回复倒序 点赞倒序

{{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level || item.bbs_level }}

作者 管理员 企业

{{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推荐': '推荐'}}
{{item.is_suggest == 1? '取消推荐': '推荐'}} 【已收集】
{{item.floor}}# 沙发 板凳 地板 {{item.floor}}# 【已收集】
{{item.user_info.title || '暂无简介'}}
附件

{{itemf.name}}

{{item.created_at}}  {{item.ip_address}}
打赏
已打赏¥{{item.reward_price}}
{{item.like_count}}
分享
{{item.showReply ? '取消回复' : '回复'}}
删除
回复
回复

{{itemc.user_info.nickname}}

{{itemc.user_name}}

回复 {{itemc.comment_user_info.nickname}}

附件

{{itemf.name}}

{{itemc.created_at}}
打赏
已打赏¥{{itemc.reward_price}}
{{itemc.like_count}}
{{itemc.showReply ? '取消回复' : '回复'}}
删除
回复
回复
查看更多
打赏
已打赏¥{{reward_price}}
101
{{like_count}}
{{collect_count}}
添加回复 ({{post_count}})

快速安全登录

使用微信扫码登录
回复
回复
问题:
问题自动获取的帖子内容,不准确时需要手动修改. [获取答案]
答案:
提交
bug 需求 取 消 确 定
打赏金额
当前余额:¥{{rewardUserInfo.reward_price}}
{{item.price}}元
请输入 0.1-{{reward_max_price}} 范围内的数值
打赏成功
¥{{price}}
完成 确认打赏

微信登录/注册

切换手机号登录

{{ bind_phone ? '绑定手机' : '手机登录'}}

{{codeText}}
切换微信登录/注册
暂不绑定
CRMEB客服

CRMEB咨询热线 咨询热线

400-8888-794

微信扫码咨询

CRMEB开源商城下载 源码下载 CRMEB帮助文档 帮助文档
返回顶部 返回顶部
CRMEB客服