如何使用Qwen3构建RAG系统和AI代理

如何使用Qwen3构建RAG系统和AI代理

Qwen 刚刚发布了其最新系列 – Qwen3 的 8 个新模型,展示了令人期待的性能。旗舰模型 Qwen3-235B-A22B 在标准基准测试中的表现优于大多数其他模型,包括 DeepSeek-R1、OpenAI 的 o1、o3-mini、Grok 3 和 Gemini 2.5-Pro。同时,小型 Qwen3-30B-A3B 的性能超过了 QWQ-32B,后者的激活参数大约是新模型的 10 倍。凭借如此先进的功能,这些模型被证明是广泛应用的最佳选择。在本文中,我们将探讨所有 Qwen3 模型的特点,并学习如何使用它们来构建 RAG 系统和人工智能代理。

什么是Qwen3?

Qwen3 是 Qwen 系列中最新的大型语言模型(LLM),由 8 个不同的模型组成。这些模型包括 Qwen3-235B-A22B、Qwen3-30B-A3B、Qwen3-32B、Qwen3-14B、Qwen3-8B、Qwen3-4B、Qwen3-1.7B 和 Qwen3-0.6B。所有这些模型都根据 Apache 2.0 许可证发布,个人、开发人员和企业均可免费使用。

其中 6 个模型是密集型的,即在推理和训练时主动使用所有参数,而 2 个模型是开放加权型的:

  • Qwen3-235B-A22B:一个拥有 2350 亿个参数的大型模型,其中 220 亿个为激活参数。
  • Qwen3-30B-A3B:一个较小的 MoE,总参数为 300 亿,激活参数为 30 亿。

以下是所有 8 个 Qwen3 模型的详细比较:

模型 层数 Heads (Q/KV) Tie Embedding 上下文长度
Qwen3-0.6B 28 16/8 Yes 32K
Qwen3-1.7B 28 16/8 Yes 32K
Qwen3-4B 36 32/8 Yes 32K
Qwen3-8B 36 32/8 No 128K
Qwen3-14B 40 40/8 No 128K
Qwen3-32B 64 64/8 No 128K
Qwen3-30B-A3B 48 32/4 No 128K
Qwen3-235B-A22B 94 64/4 No 128K

下面是表格的内容:

  • 层数: 层数表示所用变压器块的数量。它包括多头自注意机制、前馈网络、位置编码、层归一化和残余连接。因此,当我说 Qwen3-30B-A3B 有 48 层时,这意味着该模型使用了 48 个变压器块,按顺序或并行堆叠。
  • Head:Transformers 使用多头注意力,它将注意力机制分成多个头,每个头从数据中学习一个新的方面。这里,Q/KV 表示
    • Q(查询头):用于生成查询的注意力头总数。
    • KV(键和值):每个注意块的键/值注意头数量。

注意:这些用于键、查询和值的注意头与自我注意生成的键、查询和值向量完全不同。

推荐阅读: Qwen3 模型:如何访问、性能、功能和应用

Qwen3的主要特点

以下是 Qwen3 模型的一些主要特点:

预培训:预训练过程包括三个阶段:

  • 在第一阶段,对模型进行了超过 30 万亿个词组的预训练,上下文长度为 4k 个词组。这让模型掌握了基本的语言技能和常识。
  • 在第二阶段,通过增加 STEM、编码和推理任务等知识密集型数据的比例来提高数据质量。然后,在额外的 5 万亿个标记上对模型进行训练。
  • 在最后阶段,通过将上下文长度增加到 32K 字节,使用了高质量的长上下文数据。这样做是为了确保模型能够有效处理更长的输入。

后训练:为了开发一个既能逐步推理又能快速反应的混合模型,我们实施了一个四阶段训练流水线。其中包括

  • 长思维链(CoT)
  • 基于推理的强化学习(RL)
  • 思维模式融合
  • 一般 RL

混合思维模式:Qwen3 模型采用混合方法解决问题,具有两种新模式:

  • 思维模式:在这种模式下,模型将复杂的问题陈述分解成程序化的小步骤,从而节省时间。
  • 非思考模式:在这种模式下,模型能快速提供结果,主要适用于较简单的问题。

多语言支持:Qwen3 模型支持 119 种语言和方言。这有助于世界各地的用户从这些模型中受益。

改进的代理能力:Qwen 对 Qwen3 模型进行了优化,使其具有更好的编码和代理能力,并支持模型上下文协议(MCP)。

如何通过API访问Qwen3模型

为了使用 Qwen3 模型,我们将使用 Openrouter API 通过 API 进行访问。具体操作如下

  1. Openrouter 上创建一个账户,然后进入模型搜索栏查找该模型的 API。

Openrouter

  1. 选择所需的模型,然后点击登陆页面上的 “Create API key”,生成新的 API。

生成新的 API

使用Qwen3为您的人工智能解决方案提供动力

在本节中,我们将介绍使用 Qwen3 构建人工智能应用程序的过程。我们将首先使用该模型创建一个人工智能驱动的旅行计划代理,然后使用 Langchain 创建一个 Q/A RAG 机器人。

前提条件

在使用 Qwen3 创建一些真实世界的人工智能解决方案之前,我们需要先了解一些基本的先决条件,例如

使用Qwen3构建人工智能代理

在本节中,我们将使用 Qwen3 创建一个由人工智能驱动的旅行代理,它将为您提供所要访问的城市或地方的主要旅游景点。我们还将使该代理能够在互联网上搜索最新信息,并添加一个可以进行货币兑换的工具。

第 1 步:设置库和工具

首先,我们将安装和导入创建代理所需的必要库和工具。

!pip install langchain langchain-community openai duckduckgo-search
from langchain.chat_models import ChatOpenAI
from langchain.agents import Tool
from langchain.tools import DuckDuckGoSearchRun
from langchain.agents import initialize_agent
llm = ChatOpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="your_api_key",
model="qwen/qwen3-235b-a22b:free"
)
# Web Search Tool
search = DuckDuckGoSearchRun()
# Tool for DestinationAgent
def get_destinations(destination):
return search.run(f"Top 3 tourist spots in {destination}")
DestinationTool = Tool(
name="Destination Recommender",
func=get_destinations,
description="Finds top places to visit in a city"
)
# Tool for CurrencyAgent
def convert_usd_to_inr(query):
amount = [float(s) for s in query.split() if s.replace('.', '', 1).isdigit()]
if amount:
return f"{amount[0]} USD = {amount[0] * 83.2:.2f} INR"
return "Couldn't parse amount."
CurrencyTool = Tool(
name="Currency Converter",
func=convert_usd_to_inr,
description="Converts USD to inr based on static rate"
)
  • Search_tool:DuckDuckGoSearchRun() 可让代理使用网络搜索来获取热门旅游景点的实时信息。
  • DestinationTool:应用 get_destinations()函数,该函数使用搜索工具获取任何给定城市的前 3 个旅游景点。
  • CurrencyTool:使用 convert_usd_too_inr() 函数将价格从美元转换为印度卢比。您可以在函数中更改“inr”,将其转换为您选择的货币。

第 2 步:创建代理

现在,我们已经初始化了所有工具,接下来创建一个将使用这些工具并为我们提供旅行计划的代理。

tools = [DestinationTool, CurrencyTool]
agent = initialize_agent(
tools=tools,
llm=llm,
agent_type="zero-shot-react-description",
verbose=True
)
def trip_planner(city, usd_budget):
dest = get_destinations(city)
inr_budget = convert_usd_to_inr(f"{usd_budget} USD to INR")
return f"""Here is your travel plan:
*Top spots in {city}*:
{dest}
*Budget*:
{inr_budget}
Enjoy your day trip!"""
  • Initialize_agent:该函数使用零次反应方法创建具有 Langchain 的代理,使代理能够理解工具说明。
  • Agent_type:“zero-shot-react-description”使代理 LLM 能够通过工具描述和输入,在不预先了解的情况下决定在特定情况下应使用哪种工具。
  • Verbose: Verbose 可记录代理的思考过程,这样我们就能监控代理做出的每个决定,包括所有交互和调用的工具。
  • trip_planner:这是一个 python 函数,用于手动调用工具,而不是依赖于代理。它允许用户针对特定问题选择最佳工具。

第 3 步:初始化代理

在本节中,我们将初始化代理并观察其响应。

# Initialize the Agent
city = "Delhi"
usd_budget = 8500
# Run the multi-agent planner
response = agent.run(f"Plan a day trip to {city} with a budget of {usd_budget} USD")
from IPython.display import Markdown, display
display(Markdown(response))
  • 调用代理:agent.run() 通过提示使用用户的意图并计划行程。

输出

初始化代理

使用Qwen3构建RAG系统

在本节中,我们将创建一个 RAG 机器人,它可以回答知识库中相关输入文档中的任何查询。该系统将使用 qwen/qwen3-235b-a22b,给出信息丰富的回复。该系统还将使用 Langchain,以生成准确且能感知上下文的回复。

第 1 步:设置库和工具

首先,我们将安装和导入构建 RAG 系统所需的必要库和工具。

!pip install langchain langchain-community langchain-core openai tiktoken chromadb sentence-transformers duckduckgo-search
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
# Load your document
loader = TextLoader("/content/my_docs.txt")
docs = loader.load()
  • 加载文档: Langchain 的“TextLoader”类加载文档,如 pdf、txt 或 doc 文件,这些文件将用于 Q/A 检索。这里我上传的是 my_docs.txt
  • 选择向量设置:我使用 ChromaDB 从向量数据库中存储和搜索嵌入信息,用于 Q/A 过程。

第 2 步:创建嵌入结果

现在我们已经加载了文档,接下来就可以创建嵌入式了,这将有助于简化检索过程。

# Split into chunks
splitter = CharacterTextSplitter(chunk_size=300, chunk_overlap=50)
chunks = splitter.split_documents(docs)
# Embed with HuggingFace model
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
db = Chroma.from_documents(chunks, embedding=embeddings)
# Setup Qwen LLM from OpenRouter
llm = ChatOpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="YOUR_API_KEY",
model="qwen/qwen3-235b-a22b:free"
)
# Create RAG chain
retriever = db.as_retriever(search_kwargs={"k": 2})
rag_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
  • 文档分割:CharacterTextSplitter() 会将文本分割成较小的块,这主要有两个作用。首先,它简化了检索过程,其次,它有助于通过 chunk_overlap 保留上一个分块的上下文。
  • 嵌入文档:嵌入将文本转换为每个标记的嵌入向量,每个向量的维度是固定的。在这里,我们使用了 300 的 chunk_size,这意味着每个单词/标记将被转换成 300 维的向量。现在,该向量嵌入将包含该单词相对于该语块中其他单词的所有上下文信息。
  • RAG 链:RAG 链将 ChromaDB 与 LLM 结合起来,形成一个 RAG。这使我们能够从文档和模型中获得上下文感知答案。

第 3 步:初始化RAG系统

# Ask a question
response = rag_chain.invoke({"query": "How can i use Qwen with MCP. Please give me a stepwise guide along with the necessary code snippets"})
display(Markdown(response['result']))
  • 查询执行: rag_chain_invoke() 方法会将用户的查询发送给 RAG 系统,然后 RAG 系统会从文档存储(矢量数据库)中检索相关的上下文感知块,并生成上下文感知答案。

输出

初始化RAG系统 初始化RAG系统 初始化RAG系统

您可以在这里找到完整的代码

Qwen3的应用

以下是 Qwen3 在各行各业的更多应用:

  • 自动化编码:Qwen3 可以生成、调试代码并提供文档,帮助开发人员在无需人工的情况下解决错误。其22B参数模型在编码方面表现出色,性能可与 DeepSeek-R1、Gemini 2.5 Pro和 OpenAI 的 o3-mini 等模型相媲美。
  • 教育与研究:Qwen3 在数学、物理和逻辑推理问题解决方面具有很高的准确性。它还可与 Gemini 2.5 Pro 相媲美,同时在 OpenAI 的 o1、o3-mini、DeepSeek-R1 和 Grok 3Beta 等模型中表现出色。
  • 基于代理的工具集成:Qwen3 在人工智能代理任务方面也处于领先地位,它的工具调用模板允许使用外部工具、API 和 MCP 进行多步骤和多代理工作流,从而进一步简化了代理交互。
  • 高级推理任务:Qwen3 具有广泛的思维能力,可提供最佳和准确的响应。该模型对复杂任务采用思维链推理,对优化速度则采用非思维模式。

小结

在本文中,我们了解了如何构建由 Qwen3 驱动的代理人工智能和 RAG 系统。Qwen3 的高性能、多语言支持和高级推理能力使其成为知识检索和基于代理的任务的有力选择。通过将 Qwen3 集成到 RAG 和代理管道中,我们可以获得准确、上下文感知和流畅的响应,使其成为人工智能驱动系统实际应用的有力竞争者。

评论留言