BMAD-METHOD知识库系统:构建AI Agent的智慧大脑

BMAD-METHOD知识库构建AI智慧大脑

摘要

在AI辅助的软件开发框架中,知识库系统扮演着至关重要的角色,它为AI代理提供了必要的背景知识、最佳实践和领域专长。BMAD-METHOD框架通过其精心设计的知识库系统,为各个AI代理提供了丰富的知识资源,使其能够在特定领域内做出更加智能和准确的决策。本文将深入探讨BMAD-METHOD的知识库系统,分析其结构组成、内容管理、更新机制以及在提升AI代理智能水平方面的重要作用。

正文

1. 引言

AI代理的智能水平在很大程度上取决于其所能访问的知识量和质量。在软件开发领域,AI代理需要掌握从编程语言语法到设计模式,从最佳实践到常见问题解决方案的广泛知识。BMAD-METHOD框架通过其知识库系统,为AI代理构建了一个"智慧大脑",使其能够在复杂的软件开发任务中表现出专业级的能力。

知识库系统的核心价值包括:

  1. 专业知识存储:存储软件开发领域的专业知识和最佳实践
  2. 智能决策支持:为AI代理提供决策依据和参考信息
  3. 一致性保障:确保不同代理在处理相似问题时的一致性
  4. 持续学习能力:支持知识的更新和扩展
  5. 个性化定制:允许根据项目需求定制知识内容

2. 知识库系统架构设计

BMAD-METHOD的知识库系统采用分层架构设计,由知识存储层、知识管理层和知识应用层三个核心层组成。

2.1 知识存储层

知识存储层负责知识的物理存储和组织:

# 知识库存储结构示例
knowledge-base:
  core:
    - bmad-kb.md              # 核心知识库
    - technical-preferences.md # 技术偏好
    - brainstorming-techniques.md # 头脑风暴技术
    - elicitation-methods.md   # 引导方法
    - test-levels-framework.md # 测试级别框架
    - test-priorities-matrix.md # 测试优先级矩阵
  
  expansion-packs:
    creative-writing:
      - writing-techniques.md
      - genre-conventions.md
      - character-development.md
    
    game-development:
      - game-design-principles.md
      - phaser-framework-guide.md
      - unity-best-practices.md
    
    infrastructure:
      - devops-practices.md
      - containerization.md
      - cloud-deployment.md
2.2 知识管理层

知识管理层负责知识的组织、更新和维护:

class KnowledgeManager:
    def __init__(self):
        self.knowledge_storage = {}
        self.knowledge_index = {}
        
    def load_knowledge(self, knowledge_path):
        """
        加载知识
        """
        knowledge_content = self.read_knowledge_file(knowledge_path)
        knowledge_id = self.extract_knowledge_id(knowledge_path)
        
        self.knowledge_storage[knowledge_id] = knowledge_content
        self.update_knowledge_index(knowledge_id, knowledge_content)
        
        return knowledge_id
    
    def update_knowledge_index(self, knowledge_id, knowledge_content):
        """
        更新知识索引
        """
        # 提取关键词
        keywords = self.extract_keywords(knowledge_content)
        
        # 建立倒排索引
        for keyword in keywords:
            if keyword not in self.knowledge_index:
                self.knowledge_index[keyword] = []
            self.knowledge_index[keyword].append(knowledge_id)
    
    def search_knowledge(self, query):
        """
        搜索知识
        """
        # 分词和关键词提取
        keywords = self.tokenize_query(query)
        
        # 根据关键词查找相关知识
        relevant_knowledge = set()
        for keyword in keywords:
            if keyword in self.knowledge_index:
                relevant_knowledge.update(self.knowledge_index[keyword])
        
        # 排序和评分
        ranked_knowledge = self.rank_knowledge(relevant_knowledge, query)
        
        return ranked_knowledge
2.3 知识应用层

知识应用层负责将知识提供给AI代理使用:

class KnowledgeApplication:
    def __init__(self):
        self.knowledge_manager = KnowledgeManager()
        self.context_manager = ContextManager()
        
    def provide_knowledge(self, agent, query, context):
        """
        为代理提供知识
        """
        # 1. 理解代理需求
        agent_needs = self.analyze_agent_needs(agent, query, context)
        
        # 2. 搜索相关知识
        relevant_knowledge = self.knowledge_manager.search_knowledge(query)
        
        # 3. 过滤和排序
        filtered_knowledge = self.filter_knowledge_for_agent(
            relevant_knowledge, 
            agent_needs, 
            context
        )
        
        # 4. 格式化知识
        formatted_knowledge = self.format_knowledge_for_agent(
            filtered_knowledge, 
            agent.type
        )
        
        return formatted_knowledge

3. 核心知识库内容详解

BMAD-METHOD框架包含多个核心知识库文件,每个文件都有其特定的作用和内容。

3.1 核心知识库(bmad-kb.md)

[bmad-kb.md](file:///e%3A/Dify/BMAD-METHOD/bmad-core/data/bmad-kb.md)是BMAD-METHOD框架的核心知识库,包含了框架的基本原理、工作流程和最佳实践:

# 核心知识库内容结构示例
class CoreKnowledgeBase:
    def __init__(self):
        self.knowledge_areas = {
            "framework_principles": self.load_framework_principles(),
            "workflow_patterns": self.load_workflow_patterns(),
            "best_practices": self.load_best_practices(),
            "common_pitfalls": self.load_common_pitfalls(),
            "troubleshooting": self.load_troubleshooting_guides()
        }
    
    def load_framework_principles(self):
        """
        加载框架原则
        """
        return {
            "agentic_planning": {
                "description": "通过专门的代理进行规划,确保一致性和完整性",
                "benefits": [
                    "减少规划不一致性",
                    "提高规划质量",
                    "确保上下文完整性"
                ],
                "implementation": "使用分析师、产品经理和架构师代理进行分层规划"
            },
            
            "context_engineered_development": {
                "description": "通过详细的上下文信息指导开发过程",
                "benefits": [
                    "减少上下文丢失",
                    "提高开发效率",
                    "确保实现准确性"
                ],
                "implementation": "Scrum Master代理创建包含完整上下文的开发故事"
            }
        }
    
    def load_workflow_patterns(self):
        """
        加载工作流模式
        """
        return {
            "greenfield_planning": {
                "phases": [
                    "项目构想",
                    "市场研究",
                    "需求分析",
                    "PRD创建",
                    "架构设计"
                ],
                "agents_involved": ["analyst", "pm", "architect"],
                "artifacts_produced": ["project_brief.md", "prd.md", "architecture.md"]
            },
            
            "development_cycle": {
                "phases": [
                    "故事创建",
                    "开发实现",
                    "质量审查",
                    "完成标记"
                ],
                "agents_involved": ["sm", "dev", "qa"],
                "artifacts_produced": ["*.story.md", "qa_gate.yml"]
            }
        }
3.2 技术偏好知识库(technical-preferences.md)

[technical-preferences.md](file:///e%3A/Dify/BMAD-METHOD/bmad-core/data/technical-preferences.md)存储了用户的个性化技术偏好,指导AI代理在技术选择时做出符合用户偏好的决策:

# 技术偏好知识库示例
class TechnicalPreferences:
    def __init__(self):
        self.preferences = {
            "frontend": {
                "framework": "React",
                "state_management": "Redux",
                "styling": "CSS Modules",
                "testing": "Jest + React Testing Library"
            },
            
            "backend": {
                "language": "Python",
                "framework": "FastAPI",
                "database": "PostgreSQL",
                "orm": "SQLAlchemy",
                "testing": "pytest"
            },
            
            "infrastructure": {
                "containerization": "Docker",
                "orchestration": "Kubernetes",
                "cloud": "AWS",
                "ci_cd": "GitHub Actions"
            },
            
            "coding_standards": {
                "naming_convention": "camelCase for variables, PascalCase for classes",
                "indentation": "4 spaces",
                "line_length": "88 characters",
                "documentation": "Google Style Docstrings"
            },
            
            "design_patterns": [
                "MVC for web applications",
                "Repository pattern for data access",
                "Dependency injection for loose coupling"
            ],
            
            "anti_patterns": [
                "Avoid global variables",
                "Don't repeat yourself (DRY)",
                "Keep functions small and focused"
            ]
        }
    
    def get_preference(self, category, item):
        """
        获取特定偏好
        """
        if category in self.preferences and item in self.preferences[category]:
            return self.preferences[category][item]
        return None
    
    def apply_preferences(self, recommendation):
        """
        应用偏好到推荐中
        """
        # 根据用户偏好调整技术推荐
        for category, prefs in self.preferences.items():
            if category in recommendation:
                for item, value in prefs.items():
                    if item in recommendation[category]:
                        recommendation[category][item] = value
                        
        return recommendation
3.3 头脑风暴技术知识库(brainstorming-techniques.md)

[brainstorming-techniques.md](file:///e%3A/Dify/BMAD-METHOD/bmad-core/data/brainstorming-techniques.md)为分析师代理提供了多种头脑风暴技术:

# 头脑风暴技术知识库示例
class BrainstormingTechniques:
    def __init__(self):
        self.techniques = {
            "mind_mapping": {
                "description": "使用思维导图组织和可视化想法",
                "steps": [
                    "确定中心主题",
                    "绘制主要分支",
                    "添加子分支",
                    "连接相关概念"
                ],
                "tools": ["XMind", "MindMeister", "纸笔"],
                "best_for": "复杂问题的结构化思考"
            },
            
            "six_thinking_hats": {
                "description": "从六个不同角度思考问题",
                "hats": {
                    "white": "事实和数据",
                    "red": "情感和直觉",
                    "black": "谨慎和风险",
                    "yellow": "乐观和价值",
                    "green": "创新和创意",
                    "blue": "过程和控制"
                },
                "best_for": "全面分析问题"
            },
            
            "scamper": {
                "description": "通过七个问题激发创新思维",
                "questions": {
                    "substitute": "什么可以替代?",
                    "combine": "什么可以组合?",
                    "adapt": "什么可以调整?",
                    "modify": "什么可以修改?",
                    "put_to_other_uses": "还有什么用途?",
                    "eliminate": "什么可以消除?",
                    "reverse": "什么可以颠倒?"
                },
                "best_for": "产品和服务创新"
            }
        }
    
    def apply_technique(self, technique_name, topic):
        """
        应用头脑风暴技术
        """
        if technique_name not in self.techniques:
            raise Exception(f"未知的头脑风暴技术: {technique_name}")
            
        technique = self.techniques[technique_name]
        ideas = self.generate_ideas_with_technique(technique, topic)
        
        return {
            "technique": technique_name,
            "topic": topic,
            "ideas": ideas
        }

4. 知识库管理机制

BMAD-METHOD通过多种机制确保知识库的有效管理和持续更新。

4.1 知识更新机制
# 知识更新机制示例
class KnowledgeUpdateManager:
    def __init__(self):
        self.version_history = {}
        self.update_queue = []
        
    def queue_update(self, knowledge_id, new_content, author):
        """
        排队更新知识
        """
        update_request = {
            "knowledge_id": knowledge_id,
            "new_content": new_content,
            "author": author,
            "submitted_at": self.get_current_timestamp(),
            "status": "pending_review"
        }
        
        self.update_queue.append(update_request)
        
        # 通知知识管理员
        self.notify_knowledge_administrators(update_request)
        
        return update_request
    
    def review_update(self, update_id, reviewer, approval):
        """
        审查知识更新
        """
        for update in self.update_queue:
            if update["id"] == update_id:
                if approval:
                    # 批准更新
                    self.apply_update(update)
                    update["status"] = "approved"
                    update["reviewed_at"] = self.get_current_timestamp()
                    update["reviewer"] = reviewer
                else:
                    # 拒绝更新
                    update["status"] = "rejected"
                    update["reviewed_at"] = self.get_current_timestamp()
                    update["reviewer"] = reviewer
                    update["rejection_reason"] = self.get_rejection_reason()
                break
    
    def apply_update(self, update):
        """
        应用知识更新
        """
        # 保存当前版本
        current_version = self.save_current_version(update["knowledge_id"])
        
        # 更新知识内容
        self.update_knowledge_content(update["knowledge_id"], update["new_content"])
        
        # 更新版本历史
        self.update_version_history(update["knowledge_id"], current_version, update)
4.2 知识版本控制
# 知识版本控制示例
class KnowledgeVersionControl:
    def __init__(self):
        self.versions = {}
        
    def create_version(self, knowledge_id, content):
        """
        创建知识版本
        """
        import hashlib
        import datetime
        
        # 生成内容哈希
        content_hash = hashlib.md5(content.encode()).hexdigest()
        
        # 创建版本信息
        version_info = {
            "version": self.generate_version_number(knowledge_id),
            "hash": content_hash,
            "content": content,
            "created_at": datetime.datetime.now(),
            "author": self.get_current_user(),
            "changes": self.calculate_changes(knowledge_id, content)
        }
        
        # 保存版本
        if knowledge_id not in self.versions:
            self.versions[knowledge_id] = []
        
        self.versions[knowledge_id].append(version_info)
        
        return version_info
    
    def get_version(self, knowledge_id, version=None):
        """
        获取知识版本
        """
        if knowledge_id not in self.versions:
            return None
            
        knowledge_versions = self.versions[knowledge_id]
        
        if version is None:
            # 返回最新版本
            return knowledge_versions[-1] if knowledge_versions else None
        else:
            # 返回指定版本
            for v in knowledge_versions:
                if v["version"] == version:
                    return v
            return None
    
    def compare_versions(self, knowledge_id, version1, version2):
        """
        比较两个版本的差异
        """
        v1 = self.get_version(knowledge_id, version1)
        v2 = self.get_version(knowledge_id, version2)
        
        if not v1 or not v2:
            return None
            
        # 计算差异
        diff = self.calculate_difference(v1["content"], v2["content"])
        
        return {
            "knowledge_id": knowledge_id,
            "version1": version1,
            "version2": version2,
            "differences": diff
        }
4.3 知识质量评估
# 知识质量评估示例
class KnowledgeQualityAssessment:
    def __init__(self):
        self.quality_metrics = {}
        
    def assess_knowledge_quality(self, knowledge_id):
        """
        评估知识质量
        """
        knowledge_content = self.load_knowledge_content(knowledge_id)
        
        quality_scores = {
            "completeness": self.assess_completeness(knowledge_content),
            "accuracy": self.assess_accuracy(knowledge_content),
            "clarity": self.assess_clarity(knowledge_content),
            "relevance": self.assess_relevance(knowledge_content),
            "currency": self.assess_currency(knowledge_content)
        }
        
        overall_score = self.calculate_overall_score(quality_scores)
        
        assessment = {
            "knowledge_id": knowledge_id,
            "scores": quality_scores,
            "overall_score": overall_score,
            "assessment_date": self.get_current_timestamp(),
            "recommendations": self.generate_improvement_recommendations(quality_scores)
        }
        
        # 保存评估结果
        self.save_assessment(assessment)
        
        return assessment
    
    def assess_completeness(self, content):
        """
        评估完整性
        """
        # 检查必需部分是否存在
        required_sections = ["概述", "详细说明", "最佳实践", "相关链接"]
        present_sections = [section for section in required_sections if section in content]
        
        completeness_score = len(present_sections) / len(required_sections)
        return completeness_score
    
    def assess_accuracy(self, content):
        """
        评估准确性
        """
        # 这里可以集成事实检查工具
        # 暂时使用基于引用和更新时间的简单评估
        citation_count = content.count("[")  # 简单的引用计数
        last_updated = self.get_last_updated_date(content)
        days_since_update = (self.get_current_timestamp() - last_updated).days
        
        # 引用越多,准确性可能越高
        citation_score = min(citation_count / 10, 1.0)
        
        # 更新越近,准确性可能越高
        recency_score = max(0, 1 - (days_since_update / 365))
        
        accuracy_score = (citation_score + recency_score) / 2
        return accuracy_score

5. 知识库在AI代理中的应用

5.1 代理初始化时的知识加载
# 代理初始化时的知识加载示例
class AgentKnowledgeLoader:
    def __init__(self):
        self.knowledge_manager = KnowledgeManager()
        
    def load_agent_knowledge(self, agent):
        """
        为代理加载相关知识
        """
        # 1. 加载核心知识
        core_knowledge = self.knowledge_manager.load_knowledge("bmad-kb.md")
        
        # 2. 加载代理特定知识
        agent_specific_knowledge = self.load_agent_specific_knowledge(agent)
        
        # 3. 加载项目特定知识
        project_knowledge = self.load_project_knowledge()
        
        # 4. 加载技术偏好
        technical_preferences = self.knowledge_manager.load_knowledge("technical-preferences.md")
        
        # 5. 组合所有知识
        combined_knowledge = self.combine_knowledge([
            core_knowledge,
            agent_specific_knowledge,
            project_knowledge,
            technical_preferences
        ])
        
        # 6. 为代理设置知识上下文
        agent.set_knowledge_context(combined_knowledge)
        
        return combined_knowledge
    
    def load_agent_specific_knowledge(self, agent):
        """
        加载代理特定知识
        """
        agent_knowledge_map = {
            "analyst": ["brainstorming-techniques.md", "elicitation-methods.md"],
            "pm": ["project-management-practices.md", "requirement-gathering.md"],
            "architect": ["design-patterns.md", "system-design-principles.md"],
            "sm": ["agile-practices.md", "story-writing.md"],
            "dev": ["coding-standards.md", "testing-strategies.md"],
            "qa": ["testing-frameworks.md", "quality-assurance.md"]
        }
        
        knowledge_files = agent_knowledge_map.get(agent.type, [])
        knowledge_contents = []
        
        for file in knowledge_files:
            knowledge = self.knowledge_manager.load_knowledge(file)
            knowledge_contents.append(knowledge)
            
        return knowledge_contents
5.2 运行时知识检索
# 运行时知识检索示例
class RuntimeKnowledgeRetrieval:
    def __init__(self):
        self.knowledge_manager = KnowledgeManager()
        self.context_manager = ContextManager()
        
    def retrieve_relevant_knowledge(self, agent, query, context):
        """
        检索相关知识
        """
        # 1. 分析查询意图
        query_intent = self.analyze_query_intent(query)
        
        # 2. 确定相关知识领域
        relevant_domains = self.identify_relevant_domains(query_intent, context)
        
        # 3. 搜索知识库
        candidate_knowledge = self.knowledge_manager.search_knowledge(query)
        
        # 4. 过滤和排序
        filtered_knowledge = self.filter_knowledge(
            candidate_knowledge, 
            relevant_domains, 
            agent.type
        )
        
        # 5. 格式化结果
        formatted_knowledge = self.format_knowledge_for_context(
            filtered_knowledge, 
            context, 
            agent.type
        )
        
        return formatted_knowledge
    
    def analyze_query_intent(self, query):
        """
        分析查询意图
        """
        # 使用简单的关键词匹配分析意图
        intent_indicators = {
            "technical": ["如何", "实现", "代码", "框架"],
            "conceptual": ["什么是", "解释", "原理", "概念"],
            "best_practice": ["最佳实践", "推荐", "应该", "避免"],
            "troubleshooting": ["问题", "错误", "解决", "修复"]
        }
        
        query_lower = query.lower()
        detected_intents = []
        
        for intent, indicators in intent_indicators.items():
            if any(indicator in query_lower for indicator in indicators):
                detected_intents.append(intent)
                
        return detected_intents if detected_intents else ["general"]

6. 知识库系统的扩展和定制

6.1 扩展包知识集成
# 扩展包知识集成示例
class ExpansionPackKnowledgeIntegration:
    def __init__(self):
        self.expansion_packs = {}
        
    def integrate_expansion_pack_knowledge(self, pack_name, pack_path):
        """
        集成扩展包知识
        """
        # 1. 加载扩展包元数据
        pack_metadata = self.load_pack_metadata(pack_path)
        
        # 2. 注册扩展包
        self.expansion_packs[pack_name] = {
            "path": pack_path,
            "metadata": pack_metadata,
            "knowledge_files": []
        }
        
        # 3. 扫描知识文件
        knowledge_files = self.scan_knowledge_files(pack_path)
        
        # 4. 加载知识文件
        for file_path in knowledge_files:
            knowledge_id = self.knowledge_manager.load_knowledge(file_path)
            self.expansion_packs[pack_name]["knowledge_files"].append(knowledge_id)
            
        # 5. 更新知识索引
        self.update_knowledge_index_for_pack(pack_name)
        
        return self.expansion_packs[pack_name]
    
    def scan_knowledge_files(self, pack_path):
        """
        扫描扩展包中的知识文件
        """
        import os
        
        knowledge_files = []
        data_dir = os.path.join(pack_path, "data")
        
        if os.path.exists(data_dir):
            for root, dirs, files in os.walk(data_dir):
                for file in files:
                    if file.endswith((".md", ".yaml", ".yml")):
                        knowledge_files.append(os.path.join(root, file))
                        
        return knowledge_files
6.2 个性化知识定制
# 个性化知识定制示例
class PersonalizedKnowledgeCustomization:
    def __init__(self):
        self.user_profiles = {}
        
    def create_user_profile(self, user_id, preferences):
        """
        创建用户配置文件
        """
        profile = {
            "user_id": user_id,
            "preferences": preferences,
            "knowledge_history": [],
            "feedback": []
        }
        
        self.user_profiles[user_id] = profile
        return profile
    
    def customize_knowledge_for_user(self, user_id, base_knowledge):
        """
        为用户定制知识
        """
        if user_id not in self.user_profiles:
            return base_knowledge
            
        user_profile = self.user_profiles[user_id]
        preferences = user_profile["preferences"]
        
        # 根据用户偏好调整知识内容
        customized_knowledge = self.apply_user_preferences(
            base_knowledge, 
            preferences
        )
        
        # 记录知识使用历史
        self.record_knowledge_usage(user_id, customized_knowledge)
        
        return customized_knowledge
    
    def apply_user_preferences(self, knowledge, preferences):
        """
        应用用户偏好
        """
        # 这里可以实现复杂的偏好应用逻辑
        # 例如过滤不相关的内容,突出显示偏好的技术等
        customized = knowledge.copy()
        
        # 根据技术偏好过滤内容
        if "preferred_technologies" in preferences:
            customized = self.filter_by_technologies(
                customized, 
                preferences["preferred_technologies"]
            )
            
        # 根据经验水平调整内容深度
        if "experience_level" in preferences:
            customized = self.adjust_content_depth(
                customized, 
                preferences["experience_level"]
            )
            
        return customized

总结

BMAD-METHOD的知识库系统通过精心组织和管理的知識内容,为AI代理提供了强大的智能支持。该系统不仅包含了软件开发领域的核心知识和最佳实践,还支持个性化定制和持续更新,确保AI代理能够基于最新的、最相关的知識做出智能决策。

关键要点包括:

  1. 分层架构设计:知识存储、管理和应用三层架构确保系统清晰和高效
  2. 丰富的内容体系:涵盖框架原理、技术偏好、头脑风暴技术等多个方面
  3. 智能管理机制:版本控制、质量评估和更新管理确保知识的准确性和时效性
  4. 灵活的应用方式:支持代理初始化加载和运行时检索等多种应用模式
  5. 可扩展性设计:支持扩展包集成和个性化定制

通过这种知识库系统,BMAD-METHOD框架为AI代理构建了一个"智慧大脑",使其能够在复杂的软件开发任务中表现出专业级的能力,大大提升了AI辅助开发的效率和质量。

参考资料

  1. BMAD-METHOD GitHub仓库
  2. BMAD-METHOD官方文档
  3. [核心知识库](file:///e%3A/Dify/BMAD-METHOD/bmad-core/data/bmad-kb.md)
  4. [技术偏好知识库](file:///e%3A/Dify/BMAD-METHOD/bmad-core/data/technical-preferences.md)
  5. [头脑风暴技术知识库](file:///e%3A/Dify/BMAD-METHOD/bmad-core/data/brainstorming-techniques.md)
  6. [引导方法知识库](file:///e%3A/Dify/BMAD-METHOD/bmad-core/data/elicitation-methods.md)
  7. 核心架构文档
  8. 用户指南
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CarlowZJ

我的文章对你有用的话,可以支持

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

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

打赏作者

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

抵扣说明:

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

余额充值