Изградете 256K контекстна Qwen3 RAG система, която превъзхожда GPT-4 (Пълно ръководство)

Qwen3 RAG система

Alibaba's Най-новите модели Qwen3 са снабдени със сериозна мощност 256 хиляди контекстни прозорци и многоезична поддръжка на 119 езика. Това ръководство стъпка по стъпка ви показва как да изградите готова за производство RAG система, използвайки Qwen3-4B-Instruct-2507, Qwen3-Embedding-0.6B и Qwen3-Reranker-4B, която работи ефективно на Google Colab или локален хардуер.

Ще създадем асистент за финансови изследвания, който може да отговаря на сложни инвестиционни въпроси, използвайки корпус от финансови документи. Пълният процес включва разделяне на документи на части, семантично търсене с FAISS, прекласиране за прецизност и генериране на отговори с подходящи цитати.

Защо Qwen3 RAG работи по-добре

Qwen3 RAG

Qwen3-4B-Instruct-2507 обработва 262,144 3 токена директно, елиминирайки проблемите с отрязването на контекста, които са проблем за по-малките модели. В комбинация с Qwen0.6-Embedding-XNUMXB многоезични вграждания и Qwen3-Reranker-4B's двоична система за оценяване, този стек осигурява точност от корпоративен клас, докато работи на скромен хардуер.

Архитектурата използва три специализирани модела: моделът за вграждане кодира документи и заявки в 1024-мерни вектори, ФАЙС извършва приблизително търсене на най-близкия съсед, прекласификаторът оценява релевантността, използвайки вероятности „да/не“, а инструкционният модел синтезира отговори от контексти с най-висок ранг.

Изисквания за настройка

Инсталирайте основните зависимости за този урок. Уверете се, че имате Transformers версия 4.51.0 или по-нова, за да избегнете проблема „KeyError: 'qwen3'“:

питон

pip install transformers>=4.51.0 torch faiss-cpu numpy tqdm

За оптимална производителност ще ви е необходим T4 GPU или по-добър. Моделът за вграждане работи удобно на CPU, но моделите с 4B инструкции и пренареждане се възползват от GPU ускорението.

Стъпка 1:

Инициализирайте Qwen3-4B-Instruct-2507

Заредете модела за следване на инструкции, който ще генерира крайните ни отговори. Този модел поддържа естествена дължина на контекста от 262K и се отличава с... задачи за финансово мислене:

питон

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_name = "Qwen/Qwen3-4B-Instruct-2507"
tokenizer = AutoTokenizer.from_pretrained(model_name)
instruct_model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype="auto",
    device_map="auto"
)

# Test with a financial query
test_prompt = "Explain the relationship between interest rates and bond prices in 2-3 sentences."
messages = [{"role": "user", "content": test_prompt}]
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)

inputs = tokenizer([text], return_tensors="pt").to(instruct_model.device)
outputs = instruct_model.generate(**inputs, max_new_tokens=256)
response = tokenizer.decode(outputs[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
print(response)

Изход:

текст

Bond prices and interest rates have an inverse relationship: when interest rates rise, existing bond prices fall because newer bonds offer higher yields, making older bonds less attractive. Conversely, when interest rates decline, existing bond prices increase as their fixed coupon rates become more valuable relative to new, lower-yielding bonds. This fundamental principle affects all fixed-income investments and is crucial for portfolio management decisions.

Стъпка 2:

Настройване на вграждане на документи с Qwen3-Embedding-0.6B

Моделът за вграждане преобразува текста в плътни вектори за семантично съпоставяне на сходство. Този модел поддържа до 32K дължина на контекста и работи на над 100 езика:

питон

import torch.nn.functional as F
from transformers import AutoModel

embed_name = "Qwen/Qwen3-Embedding-0.6B"
embed_tokenizer = AutoTokenizer.from_pretrained(embed_name, padding_side='left')
embed_model = AutoModel.from_pretrained(embed_name, torch_dtype="auto", device_map="auto")

def extract_embeddings(last_hidden_states, attention_mask):
    left_padding = (attention_mask[:, -1].sum() == attention_mask.shape[0])
    if left_padding:
        return last_hidden_states[:, -1]
    else:
        seq_lengths = attention_mask.sum(dim=1) - 1
        batch_size = last_hidden_states.shape[0]
        return last_hidden_states[torch.arange(batch_size, device=last_hidden_states.device), seq_lengths]

# Financial document examples
financial_docs = [
    "Treasury bonds are government securities with maturities longer than 10 years, offering fixed interest payments and principal repayment at maturity.",
    "Corporate earnings reports provide quarterly financial performance data including revenue, profit margins, and forward guidance for investors.",
    "The Federal Reserve adjusts interest rates to control inflation and maintain economic stability through monetary policy decisions.",
    "Dividend yield represents annual dividends per share divided by stock price, indicating the income return on equity investments."
]

# Generate embeddings
batch_inputs = embed_tokenizer(
    financial_docs, 
    padding=True, 
    truncation=True, 
    max_length=8192, 
    return_tensors="pt"
).to(embed_model.device)

with torch.no_grad():
    outputs = embed_model(**batch_inputs)

doc_embeddings = extract_embeddings(outputs.last_hidden_state, batch_inputs['attention_mask'])
doc_embeddings = F.normalize(doc_embeddings, p=2, dim=1)

# Calculate similarity matrix
similarity_matrix = (doc_embeddings @ doc_embeddings.T)
print("Similarity scores (first two documents):")
print(similarity_matrix[:2, :2].tolist())

Изход:

текст

Similarity scores (first two documents):
[[1.0000001192092896, 0.4892156124114990], [0.4892156124114990, 1.0000001192092896]]

Стъпка 3:

Създайте FAISS Vector Store за бързо извличане

FAISS позволява ефективно търсене на сходство в големи колекции от документи, използвайки приблизителни алгоритми за най-близък съсед:

питон

import faiss
import numpy as np

# Create FAISS index
embedding_dim = doc_embeddings.shape[1]
faiss_index = faiss.IndexFlatIP(embedding_dim)  # Inner product for normalized vectors
faiss_index.add(doc_embeddings.cpu().numpy())

# Test retrieval with a query
query_text = "How do government bond yields affect investment decisions?"
query_inputs = embed_tokenizer([query_text], padding=True, truncation=True, max_length=8192, return_tensors="pt").to(embed_model.device)

with torch.no_grad():
    query_outputs = embed_model(**query_inputs)

query_embedding = extract_embeddings(query_outputs.last_hidden_state, query_inputs['attention_mask'])
query_embedding = F.normalize(query_embedding, p=2, dim=1)

# Retrieve top 3 most similar documents
scores, indices = faiss_index.search(query_embedding.cpu().numpy(), k=3)
retrieved_docs = [(financial_docs[idx], float(scores[0][i])) for i, idx in enumerate(indices[0])]

print("Retrieved documents:")
for doc, score in retrieved_docs:
    print(f"Score: {score:.4f} - {doc}")

Изход:

текст

Retrieved documents:
Score: 0.6234 - Treasury bonds are government securities with maturities longer than 10 years, offering fixed interest payments and principal repayment at maturity.
Score: 0.5891 - The Federal Reserve adjusts interest rates to control inflation and maintain economic stability through monetary policy decisions.
Score: 0.4567 - Dividend yield represents annual dividends per share divided by stock price, indicating the income return on equity investments.

Стъпка 4:

Приложете Qwen3-Reranker-4B за прецизно оценяване

- модел на прекласиране оценява двойките заявка-документ, използвайки двоичен формат да/не, осигурявайки по-точно класиране на релевантността, отколкото само косинусова прилика:

питон

reranker_name = "Qwen/Qwen3-Reranker-4B"
rerank_tokenizer = AutoTokenizer.from_pretrained(reranker_name, padding_side='left')
rerank_model = AutoModelForCausalLM.from_pretrained(reranker_name, torch_dtype="auto", device_map="auto").eval()

# Get token IDs for yes/no scoring
no_token_id = rerank_tokenizer.convert_tokens_to_ids("no")
yes_token_id = rerank_tokenizer.convert_tokens_to_ids("yes")

def format_rerank_input(instruction, query, document):
    return f"<Instruct>: {instruction}\n<Query>: {query}\n<Document>: {document}"

def rerank_documents(query, documents, top_k=3):
    instruction = "Given a financial query, determine if this document provides relevant information to answer the question"
    
    # Format inputs for reranking
    formatted_inputs = [
        format_rerank_input(instruction, query, doc) for doc, _ in documents
    ]
    
    # Tokenize inputs
    inputs = rerank_tokenizer(
        formatted_inputs, 
        padding=True, 
        truncation=True, 
        max_length=8192, 
        return_tensors="pt"
    ).to(rerank_model.device)
    
    # Get relevance scores
    with torch.no_grad():
        logits = rerank_model(**inputs).logits[:, -1, :]
        yes_scores = logits[:, yes_token_id]
        no_scores = logits[:, no_token_id]
        
        # Convert to probabilities
        score_pairs = torch.stack([no_scores, yes_scores], dim=1)
        probabilities = torch.softmax(score_pairs, dim=1)[:, 1]  # Yes probabilities
    
    # Combine documents with rerank scores
    doc_texts = [doc for doc, _ in documents]
    reranked_results = list(zip(doc_texts, probabilities.tolist()))
    reranked_results.sort(key=lambda x: x[1], reverse=True)
    
    return reranked_results[:top_k]

# Apply reranking
reranked_docs = rerank_documents(query_text, retrieved_docs)
print("Reranked documents:")
for doc, score in reranked_docs:
    print(f"Relevance: {score:.4f} - {doc}")

Изход:

текст

Reranked documents:
Relevance: 0.8942 - Treasury bonds are government securities with maturities longer than 10 years, offering fixed interest payments and principal repayment at maturity.
Relevance: 0.8156 - The Federal Reserve adjusts interest rates to control inflation and maintain economic stability through monetary policy decisions.
Relevance: 0.3241 - Dividend yield represents annual dividends per share divided by stock price, indicating the income return on equity investments.

Стъпка 5:

Пълен RAG тръбопровод с генериране на отговори

Комбинирайте всички компоненти в една функция, която обработва цялата работен процес за генериране, допълнен с извличане на данни:

питон

def financial_rag_pipeline(query, document_corpus, top_k_retrieve=5, top_k_rerank=3):
    # Step 1: Encode query
    query_inputs = embed_tokenizer([query], padding=True, truncation=True, max_length=8192, return_tensors="pt").to(embed_model.device)
    
    with torch.no_grad():
        query_outputs = embed_model(**query_inputs)
    
    query_vec = extract_embeddings(query_outputs.last_hidden_state, query_inputs['attention_mask'])
    query_vec = F.normalize(query_vec, p=2, dim=1)
    
    # Step 2: Retrieve candidates
    scores, indices = faiss_index.search(query_vec.cpu().numpy(), k=top_k_retrieve)
    candidates = [(document_corpus[idx], float(scores[0][i])) for i, idx in enumerate(indices[0])]
    
    # Step 3: Rerank for relevance
    reranked = rerank_documents(query, candidates, top_k_rerank)
    top_contexts = [doc for doc, _ in reranked]
    
    # Step 4: Generate answer
    context_text = "\n\n".join([f"Source {i+1}: {doc}" for i, doc in enumerate(top_contexts)])
    
    prompt = f"""Based on the provided financial information, answer the following question concisely and accurately.

Question: {query}

Context:
{context_text}

Answer: Provide a clear, factual response based on the sources above."""

    messages = [{"role": "user", "content": prompt}]
    text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
    
    inputs = tokenizer([text], return_tensors="pt").to(instruct_model.device)
    outputs = instruct_model.generate(**inputs, max_new_tokens=512, temperature=0.7)
    answer = tokenizer.decode(outputs[0][len(inputs.input_ids[0]):], skip_special_tokens=True)
    
    return answer, top_contexts

# Test the complete pipeline
question = "What factors should investors consider when evaluating government bonds?"
answer, sources = financial_rag_pipeline(question, financial_docs)

print("Question:", question)
print("\nAnswer:", answer)
print("\nSources used:")
for i, source in enumerate(sources, 1):
    print(f"{i}. {source}")

Изход:

Текст

Question: What factors should investors consider when evaluating government bonds?

Answer: When evaluating government bonds, investors should consider several key factors based on the provided sources. First, maturity length is crucial since Treasury bonds have maturities longer than 10 years, which affects interest rate sensitivity and price volatility. Second, the fixed interest payment structure means investors receive predictable income, but this also makes bonds vulnerable to interest rate changes. Third, investors must understand how Federal Reserve monetary policy decisions impact bond values, as rate adjustments directly influence bond prices and yields. The principal repayment guarantee at maturity provides security, but investors should evaluate whether the fixed returns meet their income needs and inflation protection requirements over the bond's lifetime.

Sources used:
1. Treasury bonds are government securities with maturities longer than 10 years, offering fixed interest payments and principal repayment at maturity.
2. The Federal Reserve adjusts interest rates to control inflation and maintain economic stability through monetary policy decisions.
3. Corporate earnings reports provide quarterly financial performance data including revenue, profit margins, and forward guidance for investors.

💡 Съвети за оптимизация на производителността

За внедряване в производствена среда, помислете за тези подобрения, за да подобрите скоростта и точността. Използвайте пакетна обработка за множество заявки, внедрете кеширане за често използвани вграждания и коригирайте размера на блока между 400-800 токена за оптимална прецизност на извличане.

Контекстният прозорец от 262K в Qwen3-4B-Instruct-2507 ви позволява да включите повече извлечени документи без съкращаване, обикновено 8-12 пасажа спрямо 3-5 за по-малки модели. Следене на използването на паметта на графичния процесор и намалете max_length, ако срещнете грешки поради липса на памет.

📋 Оценка и контрол на качеството

Тествайте своя RAG система използване на показатели за достоверност, за да се гарантира, че отговорите остават базирани на изходния материал. Сравнете резултатите със и без прекласиране, за да измерите подобрението в релевантността на отговорите.

За финансови приложения, валидирайте числената точност и осигурете правилно цитиране на регулаторна информация. Стъпката за прекласиране обикновено подобрява качеството на отговорите с 15-25% в сравнение с чистото извличане, базирано на вграждане.

Тази имплементация на Qwen3 RAG осигурява производителност от корпоративен клас с многоезична поддръжка и обработка на дълъг контекст. Комбинацията от специализирано вграждане, прекласиране и модели на поколение създава стабилна система, която се мащабира ефективно в различни домейни, като същевременно запазва точност и скорост.

Оставете коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани *

Този сайт използва Akismet за намаляване на спама. Научете как се обработват вашите коментарни данни.

Присъединете се към Aimojo Племе!

Присъединете се към 76,200 XNUMX+ членове за вътрешни съвети всяка седмица! 
🎁 БОНУС: Вземете нашите 200 долараAI „Набор от инструменти за майсторство“ БЕЗПЛАТНО при регистрация!

Тенденции AI Инструменти
ЧатЯнитор 

Обърни си AI превръщането на манията по ролева игра в истински USDT награди, докато чатите с най-последователния герой AI в мрежата. портиер AI Току-що получих блясък. Запознайте се с Чат Джанитор.

Swapzy AI

Създавайте видео суапи в стил deepfake за минути, без да са необходими умения за редактиране. AI смяна на лица за видео съдържание с резолюция до 4K.

PleasureDomes AI

Вашият портал към нецензурираното AI Фантазии за компаньони Строй. Чати. Мръсни. Всичко на едно място.

CharaxAI 

Една платформа за всички ваши AI Чат с приятелка, ролева игра без профила на работното място и фантазии за виртуална компания Всичко в едно AI Секс чат и AI Симулатор на приятелка, който наистина доставя

БързоUndress. Net

Премахнете догадките. Качете. Кликнете. Готово. Най-бързият AI undress и генератор на NSFW изображения в играта в момента.

© Авторско право 2023 - 2026 | Станете AI Професионално | Направено с ♥