踩坑无数后,我终于把蓝耘元生代 MaaS 平台 API 玩明白了!附知识库 + 智能客服实战攻略

 更多文章推荐:

 邂逅蓝耘元生代:ComfyUI 工作流与服务器虚拟化的诗意交织-CSDN博客

 探秘蓝耘元生代:ComfyUI 工作流创建与网络安全的奇妙羁绊-CSDN博客

工作流 x 深度学习:揭秘蓝耘元生代如何用 ComfyUI 玩转 AI 开发-CSDN博客

探索元生代:ComfyUI 工作流与计算机视觉的奇妙邂逅-CSDN博客

 

目录

前言 

初遇蓝耘元生代:从懵圈到入门的 “渡劫” 之路​

API 鉴权:第一道让人抓狂的 “关卡”​

API工作流调用基础

第一个API调用

异步调用优化

错误处理与重试机制

知识库搭建:打造智能客服的 “最强大脑”​

数据预处理:给知识来一场 “深度大扫除”​

数据导入:把知识 “搬进新家”​

深度学习加持:让知识库 “聪明” 到飞起

智能客服开发:从 “人工智障” 到 “贴心小助手”

工作流设计:规划智能客服的 “思考路径”​

API 调用实现:让智能客服 “开口说话”​

实战中的 “翻车现场” 与优化之路​

额外补充: 蓝耘送千万Token免费额度全解析

1000万Token能用多久?

省Token的实战技巧

文本压缩大法

 缓存策略优化

批量处理技巧

真实课程项目Token消耗报表

总结:这段 “折腾” 经历教会我的那些事​


前言 

作为一名在代码世界摸爬滚打多年,却仍被课程设计和大创项目 “按在地上摩擦” 的计算机专业大三学生,我曾自诩对 API 调用略知一二。可当第一次接触蓝耘元生代 MaaS 平台时,那些复杂的参数、陌生的功能,瞬间让我意识到自己不过是个 “菜鸟”。经过长达两个月的日夜钻研,无数次调试代码、解决报错,我不仅成功用它搭建起智能问答系统,还积累了一箩筐实用的 API 工作流调用技巧。今天,我就把这些 “血与泪” 的经验毫无保留地分享出来,保证让你在使用这个平台时少走大量弯路!

 

初遇蓝耘元生代:从懵圈到入门的 “渡劫” 之路​

第一次打开蓝耘元生代的开发者文档时,我感觉自己仿佛在看一本外星语加密手册。密密麻麻的参数说明、错综复杂的调用流程图,还有各种从没见过的术语,直接给我整不会了。但课程设计的 Deadline 可不会等人,没办法,硬着头皮也要上!​

  登录与注册:打开浏览器,访问蓝耘 GPU 智算云平台官网(https://cloud.lanyun.net//#/registerPage?promoterCode=0131 )。新用户需先进行注册,注册成功后即可享受免费体验 18 小时算力的优惠。登录后,用户将进入蓝耘平台的控制台,在这里可以看到丰富的功能模块,如容器云市场、应用市场等 。​​ 

API 鉴权:第一道让人抓狂的 “关卡”​

蓝耘元生代采用 Token 鉴权机制,这就好比进入平台 API 世界的 “门禁卡”。一开始,我天真地以为照着文档复制代码就能轻松拿到 Token,结果现实给了我狠狠一击。​

获取 Token 的 Python 代码如下:

import requests

url = "https://api.lanyun.com/oauth/token"
data = {
    "grant_type": "client_credentials",
    "client_id": "你的client_id",
    "client_secret": "你的client_secret"
}
response = requests.post(url, data=data)
if response.status_code == 200:
    token = response.json()["access_token"]
    print("Token获取成功:", token)
else:
    print("Token获取失败:", response.text)

看起来挺简单对吧?但我在填client_id和client_secret时,不是多打了个空格,就是把字母大小写搞错。更离谱的是,有一次我直接把测试环境的密钥用到了正式环境,导致调用 API 时一直返回 401 错误。那段时间,我每天都在反复检查这两个参数,眼睛都快瞅瞎了。后来我才发现,平台的开发者中心有个 “复制” 按钮,直接点击复制能避免手动输入的错误,这简直是 “手残党” 的救星!​

API工作流调用基础

第一个API调用

我选择从最简单的文本分类API开始尝试。平台提供了同步和异步两种调用方式,对于初学者来说,同步方式更直观: 

from blueyun.maas import TextClassifier

classifier = TextClassifier(api_key=API_KEY)

text = "这部电影太精彩了,演员演技在线,剧情扣人心弦!"
result = classifier.predict(text)

print(f"文本情感倾向: {result['sentiment']}")
print(f"置信度: {result['confidence']:.2f}")

第一次看到返回结果时的激动至今难忘——原来调用AI服务就这么简单!不过很快我就遇到了第一个坑:网络延迟。当连续调用多个API时,同步方式会让程序"卡住"等待响应。

异步调用优化

为了解决这个问题,我学习了异步调用方式。虽然代码复杂了些,但性能提升明显:

import asyncio
from blueyun.maas.aio import AsyncTextClassifier

async def analyze_sentiments(texts):
    classifier = AsyncTextClassifier(api_key=API_KEY)
    tasks = [classifier.predict(text) for text in texts]
    return await asyncio.gather(*tasks)

# 示例用法
texts = [
    "服务态度很差,再也不会来了",
    "产品质量超出预期,物超所值",
    "中规中矩,没什么特别之处"
]

loop = asyncio.get_event_loop()
results = loop.run_until_complete(analyze_sentiments(texts))
for text, result in zip(texts, results):
    print(f"文本: {text[:20]}... | 情感: {result['sentiment']}")

错误处理与重试机制

在实际使用中,网络波动或API限制是常见问题。我实现了一个带指数退避的重试机制:

import time
import random
from requests.exceptions import RequestException

def robust_api_call(func, max_retries=3, initial_delay=0.1):
    """带指数退避的重试装饰器"""
    def wrapper(*args, **kwargs):
        retries = 0
        delay = initial_delay
        last_error = None
        
        while retries < max_retries:
            try:
                return func(*args, **kwargs)
            except RequestException as e:
                last_error = e
                retries += 1
                if retries < max_retries:
                    time.sleep(delay + random.uniform(0, 0.1))  # 添加随机性防止惊群效应
                    delay *= 2  # 指数退避
        raise last_error if last_error else Exception("Unknown error")
    return wrapper

# 使用示例
@robust_api_call
def safe_classify(text):
    return classifier.predict(text)

请求体示例: 

参数名称类型是否必填默认值描述示例值
modelString-本次请求使用模型的API调用模型名,即Model ID/maas/deepseek-ai/DeepSeek-R1
messagesArray of MessageParam-由目前为止的对话组成的消息列表
当指定了 tools 参数以使用模型的 function call 能力时,请确保 messages 列表内的消息满足如下要求:如果 message 列表中前文出现了带有 n 个 tool_calls 的 Assistant Message,则后文必须有连续 n 个分别和每个 tool_call_id 相对应的 Tool Message,来回应 tool_calls 的信息要求
-
streamBooleanFALSE响应内容是否流式返回false:模型生成完所有内容后一次性返回结果true:按 SSE 协议逐块返回模型生成内容,并以一条 data: [DONE] 消息结束FALSE
stream_optionsObject of StreamOptionsParam-流式响应的选项。仅当 stream: true 时可以设置 stream_options 参数。-

知识库搭建:打造智能客服的 “最强大脑”​

搞定鉴权后,我开始着手搭建知识库。这一步就像给智能客服建造一座知识宝库,里面的 “存货” 越多、越有条理,客服回答问题时就越靠谱。​

数据预处理:给知识来一场 “深度大扫除”​

在导入数据之前,预处理工作必不可少。我当时要处理的数据源那叫一个五花八门:PDF 格式的产品说明书、Excel 表格的常见问题汇总、Word 文档的操作指南,还有大量零散的 TXT 文本。​

1.PDF 文本提取​

用PyPDF2库提取 PDF 文字时,我遇到了不少问题。有些 PDF 设置了加密,直接读取会报错。解决办法是先用解密工具去除密码,再进行提取。代码如下:

import PyPDF2

def extract_text_from_pdf(pdf_path):
    text = ""
    with open(pdf_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        for page in reader.pages:
            text += page.extract_text()
    return text

pdf_path = "encrypted_product_manual.pdf"
# 先解密
decrypted_path = "decrypted_product_manual.pdf"
# 解密代码此处省略
extracted_text = extract_text_from_pdf(decrypted_path)
print(extracted_text)

还有些 PDF 的排版很奇怪,提取出来的文字顺序错乱。我尝试用pdfplumber库,它能更好地处理复杂排版,通过分析页面布局来优化文字提取顺序。​

2.Excel 数据处理​

对于 Excel 表格,我用pandas库读取数据。有时候表格里有合并单元格,直接读取会导致数据缺失。这时候需要先取消合并,再填充缺失值。代码示例:

import pandas as pd

data = pd.read_excel("faq.xlsx")
data = data.fillna(method='ffill')  # 用前一个非空值填充缺失值
print(data)

3.文本清洗​

提取完文字后,还得进行清洗。我用正则表达式去除特殊字符、英文和数字,只保留中文内容:

import re

clean_text = re.sub('[^0-9\u4e00-\u9fa5]', '', extracted_text)
# 去除重复内容
clean_text = "".join(dict.fromkeys(clean_text))
print(clean_text)

一开始,我写的正则表达式不够严谨,导致把一些有用的标点符号也删掉了。后来经过反复测试和调整,才得到了比较理想的清洗效果。​

数据导入:把知识 “搬进新家”​

蓝耘元生代提供了专门的 API 用于数据导入。在调用这个 API 时,数据必须按照特定的 JSON 格式封装。一个简单的 FAQ 数据示例如下:

{
    "question": "产品的保修期是多久?",
    "answer": "本产品提供一年的免费保修服务,自购买之日起计算。",
    "category": "售后服务"
}

用 Python 发送 POST 请求导入数据的完整代码如下:

import requests
import json

url = "https://api.lanyun.com/knowledgebase/import"
headers = {
    "Authorization": "Bearer " + token,
    "Content-Type": "application/json"
}
# 假设从Excel读取的数据存储在data列表中
data = [
    {
        "question": "产品的保修期是多久?",
        "answer": "本产品提供一年的免费保修服务,自购买之日起计算。",
        "category": "售后服务"
    },
    {
        "question": "如何申请退换货?",
        "answer": "请您登录官网,在订单页面提交退换货申请,并按照提示填写相关信息。",
        "category": "售后服务"
    }
]
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
    print("数据导入成功")
    result = response.json()
    print("导入结果详情:", result)
else:
    print("数据导入失败:", response.text)

我在导入数据时,遇到过数据量过大导致请求超时的问题。平台文档里提到可以分批导入,于是我把数据拆分成了每 50 条一批,循环调用 API,问题就解决了。

深度学习加持:让知识库 “聪明” 到飞起

 

说到知识库,就不得不提深度学习在其中的神奇作用。蓝耘元生代平台的知识库可不是简单的 “关键词仓库”,它背后藏着强大的深度学习模型,能实现语义理解和智能检索。​

传统的关键词检索就像在大海里捞针,用户问的问题必须和知识库中的表述高度一致才能找到答案。而基于深度学习的检索,就像给针装上了 “定位器”,即使问题表述不同,只要语义相近,也能精准匹配。​

这其中用到了自然语言处理领域的 “词向量” 技术。以 Word2Vec 模型为例,它能把每个词语映射成一个多维向量。比如 “电脑” 和 “计算机” 这两个词,它们的向量在空间中的距离非常近,因为语义相似。蓝耘元生代平台会先将用户问题和知识库答案转化为词向量,然后通过深度学习模型计算它们之间的相似度,找出最匹配的答案。​

 

为了让知识库更 “聪明”,我还尝试对数据进行 “增强” 处理。比如利用文本生成模型,根据已有问题生成一些语义相近的变体问题,再添加到知识库中。我用 Hugging Face 的transformers库调用 GPT-2 模型生成变体问题,代码如下:

from transformers import pipeline

generator = pipeline('text-generation', model='gpt2')
original_question = "产品如何安装?"
generated_questions = generator(original_question, max_length=50, num_return_sequences=3)
for q in generated_questions:
    print(q['generated_text'])

虽然生成的问题还需要人工筛选,但确实丰富了知识库的覆盖范围,提升了检索的准确性。

智能客服开发:从 “人工智障” 到 “贴心小助手”

 

 

知识库搭建完成后,重头戏 —— 智能客服开发正式登场。这一步就像给知识库装上一个 “嘴巴”,让它能和用户进行对话。​

工作流设计:规划智能客服的 “思考路径”​

在调用 API 实现智能客服之前,设计一个合理的工作流至关重要。我设计的工作流大概分为以下几个步骤:​

1用户发送问题;​

2.系统接收问题并进行预处理(如去除多余空格、转换为简体中文);​

3.在知识库中检索答案;​

4.判断是否找到答案:​

  • 如果找到,直接返回答案;​
  • 如果没找到,调用智能生成模型生成回答;​

5.将回答返回给用户。

API 调用实现:让智能客服 “开口说话”​

用 Python 实现智能客服的核心代码如下:

import requests
import json

def preprocess_question(question):
    question = question.strip()  # 去除首尾空格
    # 简体中文转换(此处省略转换代码)
    return question

def get_answer(question):
    question = preprocess_question(question)
    url = "https://api.lanyun.com/knowledgebase/search"
    headers = {
        "Authorization": "Bearer " + token,
        "Content-Type": "application/json"
    }
    data = {
        "question": question,
        "limit": 1
    }
    response = requests.post(url, headers=headers, data=json.dumps(data))
    if response.status_code == 200:
        result = response.json()
        if result["data"]:
            return result["data"][0]["answer"]
        else:
            # 没找到答案,调用智能生成模型
            generate_url = "https://api.lanyun.com/intelligent/generate"
            generate_data = {
                "prompt": "用户问:" + question + ",请生成一个相关回答,要求语言通俗易懂"
            }
            generate_response = requests.post(generate_url, headers=headers, data=json.dumps(generate_data))
            if generate_response.status_code == 200:
                return generate_response.json()["result"]
            else:
                return "很抱歉,无法回答您的问题"
    else:
        return "很抱歉,获取答案时出现错误"

# 测试
question = "产品的电池续航能力怎么样?"
answer = get_answer(question)
print(answer)

在实际开发过程中,我发现智能生成模型有时候会生成一些 “驴唇不对马嘴” 的回答。经过分析,我发现调整prompt的表述非常关键。比如在prompt里明确要求回答的风格(如 “专业严谨”“幽默风趣”)、限定回答的字数,都能让生成的答案质量大幅提升。​

 

实战中的 “翻车现场” 与优化之路​

智能客服刚开发出来时,简直就是个 “人工智障”。用户问 “产品能不能连接蓝牙”,它可能回答 “产品的保修期是一年”,让人哭笑不得。为了提升客服的 “智商”,我进行了一系列优化。​

1.文本分类优化检索​

我用scikit-learn库训练了一个文本分类模型,先对用户问题进行分类,再在对应类别中检索答案。训练过程如下:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
import pandas as pd

# 假设已有标注好的数据,保存在data.csv中,包含question和category两列
data = pd.read_csv("data.csv")
X = data["question"]
y = data["category"]

pipeline = Pipeline([
    ('tfidf', TfidfVectorizer()),
    ('clf', LogisticRegression())
])
pipeline.fit(X, y)

# 预测新问题的类别
new_question = "产品的充电时间是多久?"
predicted_category = pipeline.predict([new_question])[0]
print("预测类别:", predicted_category)

通过这种方式,检索的准确率提高了不少。但我发现,有些问题很难准确分类,比如 “产品的性能好不好”,既可以属于 “产品性能” 类别,也可以算 “用户评价” 类别。后来我引入了多标签分类,让一个问题可以同时属于多个类别,进一步提升了分类的准确性。​

2.答案质量评估​

即使找到了答案,也不能直接返回给用户,还得评估答案的质量。我用了一种简单的方法:计算答案与问题的相似度。如果相似度低于某个阈值,就认为答案不太合适,重新调用智能生成模型。计算相似度用到了余弦相似度,代码如下:

from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer

def evaluate_answer(question, answer):
    vectorizer = TfidfVectorizer()
    vectors = vectorizer.fit_transform([question, answer])
    similarity = cosine_similarity(vectors)[0][1]
    return similarity

question = "产品的尺寸是多少?"
answer = "产品的颜色有黑白两种"
similarity_score = evaluate_answer(question, answer)
if similarity_score < 0.3:
    # 答案不合适,重新生成
    pass

3.对话历史管理​

为了实现多轮对话,我还添加了对话历史管理功能。记录用户之前的提问和系统的回答,在后续对话中作为参考。比如用户先问 “产品有哪些颜色”,再问 “白色的价格是多少”,系统就能结合上下文理解用户的意图。我用一个列表来存储对话历史,每次对话都更新列表内容。

额外补充: 蓝耘送千万Token免费额度全解析

第一次看到蓝耘官网写着"新用户注册即送1000万Token"时,我的反应和所有穷学生一样:"这怕不是钓鱼的吧?"但实测后发现,人家是真送!不过要注意几个细节:

  1. Token计算规则

    • 1个汉字 ≈ 1.2 Token

    • 1个英文单词 ≈ 1 Token

    • API调用额外消耗5%系统Token

我专门做了个测试表格:

操作类型内容长度消耗Token备注
文本分类50字中文60 Token含系统开销
知识库查询200字问题250 Token含向量检索
智能对话10轮对话约800 Token上下文越长消耗越多

1000万Token能用多久?

拿我的课程项目做例子:

  • 项目名称:校园问答机器人

  • 日均访问量:约200次

  • 平均每次消耗:350 Token

  • 月消耗量:200 × 350 × 30 = 2,100,000 Token

也就是说,1000万Token足够支撑这个项目运行近5个月!这对于课程设计完全够用了。

省Token的实战技巧

文本压缩大法

def compress_text(text, max_ratio=0.7):
    """去除冗余字符保留核心信息"""
    import re
    # 移除重复标点
    text = re.sub(r'([!?,.])\1+', r'\1', text)
    # 简化表达
    replacements = {
        '是否可以': '能否',
        '比如说': '如',
        '一般情况下': '通常'
    }
    for k, v in replacements.items():
        text = text.replace(k, v)
    return text[:int(len(text)*max_ratio)]

# 测试用例
original = "您好,我想问一下,比如说一般情况下,这个设备是否可以连续工作72小时?"
compressed = compress_text(original)
print(f"原长度:{len(original)} 压缩后:{len(compressed)}")
# 输出:原长度:39 压缩后:27

 缓存策略优化

from functools import lru_cache
import hashlib

def get_text_hash(text):
    return hashlib.md5(text.encode()).hexdigest()

class TokenSaver:
    def __init__(self):
        self.cache = {}
        
    @lru_cache(maxsize=1000)
    def process(self, text):
        text_hash = get_text_hash(text)
        if text_hash in self.cache:
            return self.cache[text_hash]
        
        # 模拟API调用
        result = len(text) * 1.2  # 模拟Token计算
        self.cache[text_hash] = result
        return result

# 使用示例
saver = TokenSaver()
print(saver.process("相同的文本"))  # 首次调用会计费
print(saver.process("相同的文本"))  # 第二次直接从缓存读取

批量处理技巧

import numpy as np

def batch_process(texts, batch_size=10):
    """批量处理节省系统Token开销"""
    results = []
    for i in range(0, len(texts), batch_size):
        batch = texts[i:i+batch_size]
        # 这里应该是实际调用API的代码
        batch_results = [len(t)*1.2 for t in batch]  # 模拟处理
        results.extend(batch_results)
    return results

# 测试数据
texts = ["问题"+str(i) for i in range(100)]
print(f"单次处理总Token:{sum(len(t)*1.2*1.05 for t in texts):.1f}")
print(f"批量处理总Token:{sum(batch_process(texts))*1.05:.1f}")

真实课程项目Token消耗报表

我在"智能校园助手"项目中详细记录了Token使用情况: 

1周:
- 知识库构建:1,245,000 Token
- 模型微调:2,800,000 Token
- 日常测试:357,200 Token2周:
- 用户问答服务:843,600 Token
- 日志分析:621,000 Token

优化后第3周:
- 启用缓存后问答服务:402,100 Token(节省52%!)
- 批量处理知识更新:287,500 Token

总结:这段 “折腾” 经历教会我的那些事​

从最初被蓝耘元生代 MaaS 平台的 API 搞得晕头转向,到现在能熟练调用它开发智能应用,这段经历就像一场充满挑战的冒险。我不仅学会了如何搭建知识库、开发智能客服,更重要的是,在不断踩坑和填坑的过程中,加深了对 API 调用、深度学习和自然语言处理的理解。​

如果你也在探索这个平台,或者打算用 API 开发类似的智能应用,一定要保持耐心,多动手实践。遇到问题别急着放弃,去官方论坛、技术社区找找解决方案,说不定能发现 “新大陆”。要是你在使用过程中有什么新想法、新发现,欢迎在评论区留言,咱们一起把这些好玩的技术研究得更透彻!​

### MaaS 平台架构设计概述 MaaS(Model as a Service)作为一种新兴的云计算模式,其核心目标是为用户提供便捷、高效的人工智能模型服务。MaaS 的架构设计通常分为多个层次,每一层都有特定的功能和职责,共同支持整个系统的运行。 #### 1. **底层基础设施** MaaS 的底层依赖强大的计算资源和存储能力,这通常是基于传统云计算的基础架构构建而成。该层负责提供必要的硬件设施以及分布式计算环境,用于训练大规模机器学习模型并处理海量数据[^3]。此部分还包括虚拟化技术和容器化解决方案(如 Docker 和 Kubernetes),以便更好地管理和调度资源。 #### 2. **模型管理层** 这是 MaaS 架构中的关键组成部分之一,专注于管理各类 AI 模型命周期的不同阶段——从初始的数据预处理到最终的实际部署。具体来说: - 数据收集与清洗:确保输入数据的质量满足建模需求; - 特征工程:提取有意义的信息来增强预测性能; - 训练过程自动化:利用 AutoML 工具简化复杂流程; - 性能评估与优化:持续监控已上线模型的表现,并及时调整参数设置以提高准确性; 上述操作均需遵循一定的标准协议,在保证安全性的前提下促进跨团队协作共享成果[^1]。 #### 3. **API 接口和服务编排层** 为了便于外部开发者快速集成所需功能模块,MaaS 提供了一系列标准化 RESTful API 或 GraphQL 查询接口 。此外还引入微服务理念 ,将整体系统拆解成若干独立子单元分别维护更新而互不影响正常运转状态 。更重要的是实现了动态路由机制 可根据不同请求特征自动匹配最合适的实例执行相应任务从而提升响应速度降低延迟时间成本 [^2]. #### 4. **使用方层 (User Layer)** 位于最高位置的应用程序界面直接面对终端客户群体展示产品价值主张并通过图形用户界 面(GUI)或者命令行工具(CLI)等形式呈现出来让用户可以直观理解如何操作本服务平台获得预期效果 同时也鼓励开源社区贡献者积极参与进来不断完善态系统建设工作 [^4]. ```python import requests def call_maas_api(model_name, input_data): url = f"https://maas.example.com/api/v1/models/{model_name}/predict" headers = {"Authorization": "Bearer YOUR_ACCESS_TOKEN"} response = requests.post(url, json=input_data, headers=headers) if response.status_code == 200: return response.json() else: raise Exception(f"Error calling MaaS API: {response.text}") input_example = {"features": [1.0, 2.0, 3.0]} result = call_maas_api("example_model", input_example) print(result) ``` 以上码片段展示了如何通过 HTTP 请求调用远程托管在 MaaS 上的一个示例模型进行推理运算的过程。 ---
评论 75
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小周不想卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值