本文介绍了RAG系统中重排序策略,通过重排序策略对初始检索的候选文档重新打分排序,将最相关的内容提升到前列,从而提升大模型的上下文质量。文章详细阐述了RRF、RankLLM和CrossEncoder三种重排序方法的核心原理、优势与劣势,并提供了相应的代码样例。通过学习这些方法,开发者可以更好地优化检索结果,提升大模型的性能和用户体验。

“通过重排序策略对初始检索的候选文档重新打分排序,将最相关的内容提升到前列,从而提升大模型的上下文质量。”

RAG 系统中的重排序(Reranking)是对初始检索结果进行二次排序的核心后处理环节。初始检索通常依赖向量相似度或关键词匹配,返回的结果在语义相关性上存在噪声,重排序通过更精细的相关性判断模型对候选文档重新打分,将最相关的内容提升到前列,从而提高大模型接收到的上下文质量。

图片

下面我们就来分享下重排序的几种方法

1、RRF重排

RRF(Reciprocal Rank Fusion)是一种简单而有效的多检索结果融合算法,它通过将多个检索查询的结果进行排名合并,来提高检索的准确性和覆盖面。

核心思想:

  1. 对于同一个用户问题,生成多个不同角度的查询

  2. 分别对每个查询进行检索

  3. 使用RRF算法将多个检索结果列表融合成一个统一的排序列表

  4. RRF算法为每个文档分配分数:score = 1/(rank + k),其中rank是该文档在某个结果列表中的排名

优势:实现简单、速度快、没有算力成本

劣势:缺乏深层语义理解,精度弱于模型类重排算法

流程图

图片

代码样例

import os
import uuid
from dotenv import load_dotenv
from openai import OpenAI
from langchain_classic.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Milvus
from langchain_classic.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.embeddings import Embeddings
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI
from langchain_classic.load import dumps, loads

load_dotenv()

# ===================== 配置初始化 =====================
OPENAI_API_KEY = os.getenv("GLM_API_KEY")
OPENAI_BASE_URL = os.getenv("GLM_BASE_URL")
EMBEDDING_MODEL = os.getenv("GLM_EMBEDDING_MODEL", "embedding-3")
MILVUS_URI = os.getenv("MILVUS_URI", "http://localhost:19530")
COLLECTION_NAME = "finance_report_rrf"

# 兼容 LangChain 的嵌入适配器
class OpenAIEmbeddingsAdapter(Embeddings):
    def __init__(self, client, model):
        self.client = client
        self.model = model

    def embed_documents(self, texts):
        response = self.client.embeddings.create(input=texts, model=self.model)
        return [item.embedding for item in response.data]

    def embed_query(self, text):
        return self.embed_documents([text])[0]

client = OpenAI(api_key=OPENAI_API_KEY, base_url=OPENAI_BASE_URL)
embed_model = OpenAIEmbeddingsAdapter(client, EMBEDDING_MODEL)

# ===================== 文档加载 =====================
def parse_finance_document():
    """构建财务分析示例文档"""
    texts = [
        "悦享餐饮2020-2023财务综合分析报告:短期偿债能力分析。"
        "2020~2023年间,悦享餐饮速动比率分别为2.85、2.07、1.48和1.53,"
        "流动比率分别为2.12、2.24、1.61和1.68,整体呈先降后升趋势。"
        "2022年受非流动资产增加影响,流动比率大幅回落;"
        "2023年加强应付账款管控,流动资产增加,短期偿债能力略有改善。",

        "悦享餐饮2020-2023财务综合分析报告:长期偿债能力分析。"
        "资产负债率先升后降(21.56%->22.03%->28.15%->26.87%),"
        "产权比率同步变动(28.0%->39.9%->36.7%)。"
        "2022年受外部冲击,应付账款大增,资产负债率攀升至28.15%;"
        "2023年优化资产结构,总资产增至188652.47万元,负债回落。",

        "悦享餐饮2020-2023财务综合分析报告:营运能力分析。"
        "应收账款周转率从25.12次降至15.34次后回升至18.65次;"
        "存货周转率波动较大(10.87->8.23->12.35->11.68)。",

        "悦享餐饮2020-2023财务综合分析报告:盈利能力分析。"
        "2020~2021年毛利率稳定在60%左右,2022年大幅下滑至-10.23%,2023年回升至8.65%。"
        "净资产收益率同步下降,主要受门店扩张成本和疫情影响。",

        "悦享餐饮2020-2023财务综合分析报告:发展能力分析。"
        "2022年新增5家门店,成本3256.87万元,加剧资金压力;2023年暂停扩张。"
        "营业收入增长率从2021年的15.2%下降至2022年的-8.3%,2023年恢复至5.1%。",
    ]
    return [Document(page_content=t) for t in texts]

def reciprocal_rank_fusion(results: list[list], k=60):
    """
    RRF(Reciprocal Rank Fusion)算法实现

    参数:
        results (list[list]): 多个检索结果列表,每个列表包含按相关性排序的文档
        k (int): RRF算法的调节参数,默认值60(经验值)

    返回:
        list: 融合后的(文档, 分数)元组列表,按分数降序排序

    算法原理:
        score = 1 / (rank + k),同一文档出现在多个列表中时累加分数
    """
    fused_scores = {}

    for docs in results:
        for rank, doc in enumerate(docs):
            doc_str = dumps(doc)
            if doc_str not in fused_scores:
                fused_scores[doc_str] = 0
            fused_scores[doc_str] += 1 / (rank + k)

    reranked_results = [
        (loads(doc), score)
        for doc, score in sorted(fused_scores.items(), key=lambda x: x[1], reverse=True)
    ]
    return reranked_results

# ===================== 构建向量索引 =====================
print("正在加载文档...")
docs = parse_finance_document()

text_splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=50)
splits = text_splitter.split_documents(docs)
print(f"文档已切分为 {len(splits)} 个文本块")

print("正在创建 Milvus 向量索引...")
vectorstore = Milvus(
    embedding_function=embed_model,
    collection_name=COLLECTION_NAME,
    connection_args={"uri": MILVUS_URI},
    auto_id=True,
)
vectorstore.add_documents(splits)
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
print("向量索引创建完成")

# ===================== 配置多查询生成器 =====================
template = """你是一个帮助用户生成多个搜索查询的助手。

请根据以下问题生成4个不同角度的相关搜索查询,这些查询应该:
1. **从不同的角度理解原问题**

2. **使用不同的关键词和表达方式**

3. **覆盖问题的不同方面**

原问题:{question}

请生成4个相关的搜索查询:"""

prompt_rag_fusion = ChatPromptTemplate.from_template(template)
llm = ChatOpenAI(
    model="glm-4", temperature=0, api_key=OPENAI_API_KEY, base_url=OPENAI_BASE_URL
)

generate_queries = (
    prompt_rag_fusion
    | llm
    | StrOutputParser()
    | (lambda x: [q.strip() for q in x.split("/n") if q.strip()])
)

# ===================== 测试 RRF 重排 =====================
questions = [
    "悦享餐饮的短期偿债能力怎么样?",
    "2022年毛利率为什么下滑?",
    "门店扩张对财务有什么影响?",
]

for idx, question in enumerate(questions, 1):
    print(f"/n{'='*50}")
    print(f"问题 {idx}: {question}")
    print('='*50)

    # 生成多个查询
    queries = generate_queries.invoke({"question": question})
    print(f"生成了 {len(queries)} 个查询:")
    for i, query in enumerate(queries, 1):
        print(f"  查询 {i}: {query}")

    # 对每个查询进行检索
    all_results = []
    for query in queries:
        query_docs = retriever.invoke(query)
        all_results.append(query_docs)

    # 使用RRF算法融合结果
    reranked_docs = reciprocal_rank_fusion(all_results)

    # 展示最终结果
    print(f"/nRRF重排结果(前3个):")
    for i, (doc, score) in enumerate(reranked_docs[:3], 1):
        content_preview = doc.page_content[:200].replace('/n', ' ').strip()
        print(f"/n  排名 {i} (RRF分数: {score:.4f}):")
        print(f"    内容: {content_preview}...")
        if doc.metadata:
            print(f"    来源: {doc.metadata.get('source', '未知')}")

2、RankLLM重排

利用大语言模型(LLM)的深度语言理解能力进行文档重排,通过 prompt engineering 引导 LLM 对每个文档进行相关性评分。

优势:语义理解最深、推理能力强、可解释性好

劣势:成本高(LLM API调用)、延迟大

流程图

图片

代码样例

import os
from dotenv import load_dotenv
from openai import OpenAI
from langchain_community.vectorstores import Milvus
from langchain_core.embeddings import Embeddings
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

load_dotenv()

# ===================== 配置初始化 =====================
OPENAI_API_KEY = os.getenv("GLM_API_KEY")
OPENAI_BASE_URL = os.getenv("GLM_BASE_URL")
EMBEDDING_MODEL = os.getenv("GLM_EMBEDDING_MODEL", "embedding-3")
MILVUS_URI = os.getenv("MILVUS_URI", "http://localhost:19530")
COLLECTION_NAME = "finance_report_rankllm"


class OpenAIEmbeddingsAdapter(Embeddings):
    def __init__(self, client, model):
        self.client = client
        self.model = model

    def embed_documents(self, texts):
        response = self.client.embeddings.create(input=texts, model=self.model)
        return [item.embedding for item in response.data]

    def embed_query(self, text):
        return self.embed_documents([text])[0]


client = OpenAI(api_key=OPENAI_API_KEY, base_url=OPENAI_BASE_URL)
embed_model = OpenAIEmbeddingsAdapter(client, EMBEDDING_MODEL)

# ===================== 文档加载 =====================
texts = [
    "悦享餐饮2020-2023财务综合分析报告:短期偿债能力分析。"
    "2020~2023年间,速动比率分别为2.85、2.07、1.48和1.53,"
    "流动比率分别为2.12、2.24、1.61和1.68,整体呈先降后升趋势。",

    "悦享餐饮2020-2023财务综合分析报告:长期偿债能力分析。"
    "资产负债率先升后降(21.56%->22.03%->28.15%->26.87%),"
    "2022年受外部冲击,应付账款大增,资产负债率攀升至28.15%。",

    "悦享餐饮2020-2023财务综合分析报告:盈利能力分析。"
    "2020~2021年毛利率稳定在60%左右,2022年大幅下滑至-10.23%,2023年回升至8.65%。"
    "净资产收益率同步下降,主要受门店扩张成本和疫情影响。",

    "悦享餐饮2020-2023财务综合分析报告:发展能力分析。"
    "2022年新增5家门店,成本3256.87万元,加剧资金压力;2023年暂停扩张。"
    "营业收入增长率从2021年的15.2%下降至2022年的-8.3%,2023年恢复至5.1%。",

    "悦享餐饮2020-2023财务综合分析报告:营运能力分析。"
    "应收账款周转率从25.12次降至15.34次后回升至18.65次;"
    "存货周转率波动较大(10.87->8.23->12.35->11.68)。",
]
docs = [Document(page_content=t) for t in texts]

# ===================== 创建 Milvus 向量检索器 =====================
vectorstore = Milvus(
    embedding_function=embed_model,
    collection_name=COLLECTION_NAME,
    connection_args={"uri": MILVUS_URI},
    auto_id=True,
)
vectorstore.add_documents(docs)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})

# ===================== LLM 重排器 =====================
grade_prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个文档相关性评分员。根据用户问题对文档进行评分。\n"
              "只输出一个0-10的整数分数,10表示高度相关,0表示完全无关。"),
    ("human", "用户问题:{question}\n\n文档内容:{document}\n\n相关性分数(0-10):"),
])

llm = ChatOpenAI(model="glm-4", temperature=0, api_key=OPENAI_API_KEY, base_url=OPENAI_BASE_URL)
grader = grade_prompt | llm | StrOutputParser()


def llm_rerank(query, docs, top_n=3):
    """
    LLM 重排:对每个文档调用 LLM 评分,按分数降序返回前 top_n 个

    参数:
        query: 用户查询
        docs: 候选文档列表
        top_n: 返回文档数

    返回:
        list: 按 LLM 评分排序的 (文档, 分数) 元组列表
    """
    scored_docs = []
    for doc in docs:
        try:
            score_str = grader.invoke({
                "question": query,
                "document": doc.page_content
            })
            score = int(score_str.strip())
        except (ValueError, TypeError):
            score = 0
        scored_docs.append((doc, score))

    scored_docs.sort(key=lambda x: x[1], reverse=True)
    return scored_docs[:top_n]


# ===================== 执行查询和重排 =====================
query = "2022年毛利率为什么下滑?"

# 第一阶段:Milvus 向量检索候选文档
candidate_docs = retriever.invoke(query)

# 第二阶段:LLM 重排
reranked = llm_rerank(query, candidate_docs, top_n=3)

print(f"查询: {query}\n")
print("LLM 重排结果(前3个):")
for i, (doc, score) in enumerate(reranked, 1):
    print(f"\n  排名 {i} (相关性分数: {score}/10):")
    print(f"    内容: {doc.page_content[:150]}...")
    if doc.metadata:
        print(f"    来源: {doc.metadata.get('source', '未知')}")

3、CrossEncoder重排

CrossEncoder是一种基于BERT的双向编码器重排模型,将查询和文档作为一个整体输入,利用[CLS]标记的输出预测相关性分数,能够捕捉查询与文档之间的深层交互。

优势:精度高、语义理解强

劣势:计算开销大,每个查询-文档对需单独编码,不适合第一阶段检索(从海量的文档里快速粗筛选出少量的候选文档)

流程图

图片

代码样例


from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch

# 1. 加载预训练的CrossEncoder模型

model_name = "cross-encoder/ms-marco-MiniLM-L-12-v2"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)

def encode_and_score(query, docs):
    """
    计算查询与每个文档的相关性分数

    输入格式: [CLS] query [SEP] document [SEP]
    分数越高表示相关性越强
    """
    scores = []
    for doc in docs:
        inputs = tokenizer(
            query, doc,
            return_tensors="pt",
            truncation=True,
            max_length=512,
            padding="max_length"
        )
        with torch.no_grad():
            outputs = model(inputs)
            score = outputs.logits[0][0].item()
            scores.append(score)
    return scores

# 2. 测试数据(财务分析场景)

query = "悦享餐饮2022年毛利率为什么下滑?"
documents = [
    "2020~2021年毛利率稳定在60%左右,2022年大幅下滑至-10.23%,2023年回升至8.65%。"
    "净资产收益率同步下降,主要受门店扩张成本和疫情影响。",

    "2022年新增5家门店,成本3256.87万元,加剧资金压力;2023年暂停扩张。"
    "营业收入增长率从2021年的15.2%下降至2022年的-8.3%。",

    "2020~2023年间,速动比率分别为2.85、2.07、1.48和1.53,"
    "流动比率分别为2.12、2.24、1.61和1.68,整体呈先降后升趋势。",

    "资产负债率先升后降(21.56%->22.03%->28.15%->26.87%),"
    "2022年受外部冲击,应付账款大增,资产负债率攀升至28.15%。",
]

# 3. 执行CrossEncoder重排

scores = encode_and_score(query, documents)
ranked_docs = sorted(zip(documents, scores), key=lambda x: x[1], reverse=True)

# 4. 输出重排结果

print(f"查询: {query}/n")
print("CrossEncoder重排结果(按相关性分数降序):")
for rank, (doc, score) in enumerate(ranked_docs, start=1):
    if score > 0:
        level = "高度相关"
    elif score > -2:
        level = "中等相关"
    else:
        level = "低相关"
    print(f"/n  排名 {rank} (分数: {score:.4f}, {level}):")
    print(f"    {doc[:100]}...")

总结

重排算法 核心原理 核心优势 主要劣势 典型使用场景
RRF 多维度查询检索,通过公式1/(rank+k)融合排名得分 实现简单、速度快、无算力成本 无深层语义理解,精度偏低,依赖查询质量 多路召回合并、高并发快速检索
RankLLM 借助大模型 + 提示词,逐文档人工规则化打分排序 语义理解极强、具备逻辑推理、结果可解释 调用成本高、接口延迟大 专业问答、复杂推理、需要结果解释
CrossEncoder 拼接问句与文档整体编码,依靠 BERT 双向交互计算相关分 语义匹配精准、相关性判别能力强 逐对编码耗时高、算力开销大 搜索业务精排、RAG 少量候选文档排序

图片

总的来说,通过重排序提升检索结果排序精度,将原始的初始检索结果打磨为高质量的生成上下文。

最后

2026年技术圈的分化愈发明显:降薪裁员潮持续蔓延,传统开发、测试等岗位大批缩水,不少从业者陷入职业焦虑;与之形成鲜明对比的是,AI大模型相关岗位迎来疯狂扩招,薪资逆势飙升150%,大厂更是直接开出70-100W年薪,疯抢具备实战能力的大模型人才,甚至放宽年龄限制,只求能快速落地技术、创造价值!

很多程序员、职场新人纷纷入局大模型领域,绝非盲目跟风,而是实实在在看到了不可替代的价值优势,这也是2026年最值得抓住的职业风口:

1、窗口期红利,入门门槛友好:不同于成熟赛道的“内卷式招聘”,2026年大模型人才缺口巨大,简历只要达标(掌握基础AI应用+具备简单项目经验),年龄、学历均非硬性要求,小白可快速入门,转行程序员也能无缝衔接;

2、技术可复用,上手速度翻倍:如果你有前后端开发、测试、数据分析等基础,在大模型落地、系统部署、Prompt工程等环节会更具优势,无需从零开始,复用原有技术能力就能快速进阶;

3、懂业务更吃香,竞争力翻倍:单纯懂技术已不够,2026年大厂更看重“技术+业务”的复合型人才,有垂直领域(金融、医疗、工业等)经验者,能精准定位模型落地痛点,薪资比纯技术岗高出30%以上;

更重要的是,即便没有转型需求,用AI大模型工具为工作赋能、提升效率,也已经成为80%企业的硬性要求——不会用大模型提效,未来很可能被行业淘汰!

图片

那么2026年,小白/程序员该如何高效学习大模型?

很多人想入门大模型,却陷入两大困境:要么到处搜集零散资料,不成体系,越学越懵;要么被收费高昂的课程割韭菜,花了钱却学不到实战技能,白白浪费时间走弯路。

今天就给大家精心整理了一份2026年最新、免费、系统化的AI大模型学习资源包,覆盖从零基础入门到商业实战、从理论沉淀到面试通关的全流程,所有资料均已整理归档,无需拼凑,直接领取就能上手学习,小白可照做,程序员可进阶!

请添加图片描述

👇👇扫码免费领取全部内容👇👇

在这里插入图片描述

1、大模型系统化学习路线

这份学习路线结合2026年行业趋势和新手学习规律,由行业专家精心设计,从零基础到精通,每一步都有明确指引,帮你节省80%的无效学习时间,少走弯路、高效进阶,避免踩坑。

请添加图片描述

2、从0到进阶大模型学习视频教程

从入门到进阶这里都有,跟着老师学习事半功倍。

在这里插入图片描述

3、大模型学习书籍&电子文档

涵盖2026年最新技术要点,包括基础入门、Transformer核心原理、Prompt工程、RAG实战、模型微调与部署等内容

在这里插入图片描述

4、AI大模型最新行业报告

报告包含腾讯、阿里、甲子光年等权威机构发布的核心内容,还有2026年中文大模型基准测评报告、AI Agent行业研究报告等,帮你站在行业前沿,把握技术风口。

在这里插入图片描述

5、大模型项目实战&配套源码

项目包含Deepseek R1、GPT项目、MCP项目、RAG实战等热门方向,还有视频配套代码,手把手教你从0到1完成项目开发,既能练手提升技术,又能丰富简历,为求职和职业发展加分。

img

6、2026大模型大厂面试真题

2026年大模型面试已全面升级,不再单纯考察基础原理,而是转向侧重技术落地和业务结合的综合考察,很多程序员和新手因为缺乏针对性准备,明明技术不错,却在面试中失利。

img

适用人群

在这里插入图片描述

四阶段学习规划(共90天,可落地执行)
第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型

  • 带你了解全球大模型

  • 使用国产大模型服务

  • 搭建 OpenAI 代理

  • 热身:基于阿里云 PAI 部署 Stable Diffusion

  • 在本地计算机运行大模型

  • 大模型的私有化部署

  • 基于 vLLM 部署大模型

  • 案例:如何优雅地在阿里云私有部署开源大模型

  • 部署一套开源 LLM 项目

  • 内容安全

  • 互联网信息服务算法备案

👇👇扫码免费领取全部内容👇👇

在这里插入图片描述

7、这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐