-
一、概述1.1 案例介绍在课程学习中,学生常常同时面对 PDF 讲义、Markdown 笔记、教材摘录和练习题等多种资料。传统学习工具通常只能解决“保存资料”或“回答问题”中的某一个环节,难以持续回答下面几个问题:一门课程到底包含哪些知识点,它们之间有什么层级和前置关系?学生目前真正薄弱的是哪些知识点,判断依据是什么?学习计划能否根据实际作答结果自动调整?AI 给出的知识点、题目和回答是否有课程资料依据?当模型或外部服务不可用时,核心学习流程能否继续运行?基于这些问题,我利用华为云码道(CodeArts)智能体开发了 CoursePilot。它不是一个只负责聊天的通用助手,而是一个以课程资料和学习证据为基础的 AI 个性化学习教练 Agent。系统围绕以下闭环工作:注册登录 → 创建课程 → 添加资料 → 构建知识结构 → 设置学习目标 → 初始诊断 → 生成知识画像 → 制定学习计划 → 学习与练习 → 错因分析 → 更新掌握度 → 动态调整计划 项目仓库:cid:link_7项目地址:115.120.251.21(由于成本限制,该IP发布帖子几日后可能会释放!)演示视频:项目仓库根目录 demo视频.mp41.2 核心设计原则课程无关:不把业务逻辑绑定到某一门固定课程。资料驱动:知识点、题目和学习辅导尽量建立在用户资料之上。来源可追溯:知识点和 AI 生成题目保留对应资料与分块来源。证据驱动:掌握度来自真实作答、难度、耗时和提示使用情况。人机协同:AI 负责提取、生成和辅助判断,用户保留确认与修正权。可解释与可审计:重要算法采用确定性规则,Skill 与 MCP 调用保存日志。可降级:大模型不可用时,资料解析、诊断和掌握度更新等核心流程仍可运行。1.3 适用对象希望完成 AI Agent 项目实践的高校学生;学习 Vue 3、FastAPI、MCP、Skill 与 Docker 的开发者;需要搭建课程资料管理、诊断或个性化学习系统的团队;希望了解如何将本地全栈应用部署到华为云 ECS 的开发者。1.4 案例时间本案例总时长预计240分钟。1.5 案例流程本案例采用“需求规格—架构设计—任务拆解—分阶段开发—测试验证—云端部署—迭代优化”的流程完成 CoursePilot 的设计与实现。使用华为云码道(CodeArts)代码智能体辅助完成需求分析,编写产品规格、功能需求和用户流程文档,明确 CoursePilot 的产品定位、功能范围、验收条件以及“资料驱动、证据驱动、来源可追溯”等核心原则,定义系统“做什么”。完成系统架构与技术方案设计,确定 Vue 3、FastAPI、SQLAlchemy、MCP、Skill 和 Docker Compose 技术栈,并编写领域模型、总体架构、MCP 设计、Skill 设计及关键算法 ADR,定义系统“怎么做”。根据需求和架构生成开发路线及阶段任务清单,将项目拆分为课程资料、知识结构、题库诊断、知识画像、学习计划、学习 Agent、MCP/Skill、学习看板和云端部署等可独立验收的开发任务。按照任务清单逐步开发:搭建 FastAPI 后端和 Vue 3 前端,实现用户认证、课程管理、资料解析、知识结构生成、AI 辅助出题、动态诊断、掌握度计算、个性化学习计划及渐进式辅导 Agent。建立 CoursePilot MCP Server,封装课程资料、题库、作答记录、学习状态和计划管理等工具;同时实现资料结构化、学习诊断、计划生成和苏格拉底式辅导等可插拔 Skill。使用码道代码智能体辅助进行跨文件代码审查、缺陷定位和测试补充;后端及 MCP Server 使用 Pytest 和 Ruff 验证,前端使用 TypeScript 类型检查、ESLint 和 Vite 生产构建验证。使用 Docker Compose 完成前端、后端和 MCP Server 的容器化编排,并部署至华为云 ECS;结合华为云 SWR 镜像加速解决基础镜像拉取问题,使用 Alembic 完成数据库迁移,并通过健康检查和容器日志验证服务状态。根据实际使用结果持续迭代,修复文件上传 413、AI 长任务 504、生成题目知识点 ID 越界、诊断中断后无法继续等问题,进一步提升系统的数据一致性、容错能力和用户体验。1.6 资源总览资源名称本案例使用规格主要用途计费说明弹性云服务器 ECS通用计算增强型 ac9s.large.2;2 vCPU;4 GiB;Ubuntu 24.04 Server 64 位;60 GiB 通用型 SSD运行前端、FastAPI 后端和 MCP Server 容器0.3452元/小时 弹性公网 IP EIP全动态 BGP;按流量计费;5 Mbit/s提供网站公网访问及 SSH 运维入口0.8元/GB虚拟私有云 VPC 和安全组1 个 VPC、1 个子网、1 个安全组提供私有网络及端口访问控制免费容器镜像服务 SWR使用个人专属镜像加速地址加速拉取 Python、Node.js 和 Nginx 等 Docker 基础镜像免费华为云码道(CodeArts)代码智能体专业版辅助需求分析、架构设计、任务拆解、代码开发、测试及问题定位专业版,139元/6000万tokens免排队MaaS - Console个人使用deepseek-v4-flash用于知识结构优化、AI 辅助出题及学习辅导输入:1元/百万tokens 输出:2元/百万tokensECS 本地存储SQLite 数据库及课程上传目录,共用 ECS 系统盘保存业务数据、课程资料和调用记录已包含在本案例 ECS 云硬盘配置中二、系统方案设计2.1 技术栈层级技术选型前端Vue 3、TypeScript、Pinia、Vue Router、Vite、AxiosWeb 服务Nginx后端Python 3.11、FastAPI、Pydantic、异步 SQLAlchemy数据迁移AlembicAgent 协议Model Context Protocol(MCP)业务能力4 个可插拔 Skill大模型接入OpenAI 兼容 Provider,用户自行配置模型数据库SQLite(案例演示);可切换 PostgreSQL容器化Docker、Docker Compose云资源华为云弹性云服务器 ECS、弹性公网 IP、安全组代码托管GitCodeAI 辅助开发华为云码道(CodeArts)代码智能体2.2 总体架构用户浏览器 │ ▼ Nginx / Vue 3 前端(80/443) │ /api/* ▼ FastAPI 后端(容器内部 8000) ├── SQLAlchemy / Alembic ── SQLite 或 PostgreSQL ├── 课程资料与上传文件 ├── LLM Provider ───────── 用户配置的大模型服务 └── MCP Client │ Streamable HTTP ▼ MCP Server(容器内部 8001) ├── 13 个业务工具 └── 4 个 CoursePilot 运行时 Skill2.3 项目结构CoursePilot/ ├── backend/ # FastAPI、领域模型、服务、Alembic 与测试 ├── frontend/ # Vue 3 前端 ├── mcp-server/ # MCP Server 与业务工具 ├── skills/ # 4 个 CoursePilot 运行时 Skill ├── docs/ # 需求、架构、ADR、验收与阶段报告 ├── AGENTS.md # 项目技术规范与协作约束 ├── docker-compose.yml └── README.md2.4 MCP 与 Skill 设计CoursePilot 的 MCP Server 提供 13 个业务工具,分为四类:课程与资料:课程列表、课程结构、资料检索、资料来源;学习状态:学生画像、知识点掌握度、错题;题库与作答:题目搜索、题目详情、保存作答;计划与掌握度:读取计划、更新计划、更新掌握度。系统还实现了 4 个运行时 Skill:Skill作用course_material_structuring将课程资料整理为知识结构learning_diagnosis根据作答证据分析学习状态和错因study_plan_generator生成及动态调整学习计划socratic_tutor使用分级提示进行启发式辅导三、使用华为云码道进行规范驱动开发3.1 建立项目上下文CoursePilot 涉及课程资料、题库、诊断、知识画像、计划、Agent、MCP 和 Skill 等多个领域。如果只用一句话要求 AI “生成一个学习平台”,很容易得到功能堆叠但规则不一致的代码。因此,本项目先在仓库中沉淀以下上下文:AGENTS.md:技术栈、目录结构、编码规范和测试命令;docs/product-spec.md:产品定位、范围和冻结决策;docs/requirements.md:功能需求与验收条件;docs/domain-model.md:领域实体、关系与约束;docs/architecture.md:系统边界与调用链;docs/adr/:掌握度算法、学习计划算法、Agent 编排等架构决策。3.2 各阶段Prompt每次使用时,可以先附加这段通用要求:请先阅读 AGENTS.md、本阶段相关设计文档和现有代码。 开始修改前必须: 1. 说明当前实现基线; 2. 给出任务拆解、影响文件和数据迁移方案; 3. 明确本阶段边界; 4. 不修改与本阶段无关的模块; 5. 不覆盖用户已有修改; 6. 实现后运行相关自动化测试和质量检查; 7. 最后报告修改文件、测试结果、未完成项和已知限制。 所有新增API统一放在 /api/v1/ 下。 后端IO操作优先使用 async/await。 数据库结构变更必须使用Alembic,不使用create_all代替迁移。 前端使用Vue 3、TypeScript、Pinia和<script setup lang="ts">。前置阶段:需求与规格设计请作为产品经理和系统架构师,为 CoursePilot 建立完整的需求与设计基线。 项目定位: CoursePilot 是一个课程无关、资料驱动、证据驱动、来源可追溯的AI个性化学习教练。系统需要形成: 创建课程 → 添加资料 → 构建知识结构 → 设置学习目标 → 初始诊断 → 知识画像 → 学习计划 → 学习与练习 → 错因诊断 → 掌握度更新 → 动态调整计划 请检查当前项目骨架,并编写或完善: - docs/product-spec.md - docs/requirements.md - docs/mvp-acceptance.md - docs/user-flows.md - docs/domain-model.md - docs/skill-design.md - docs/mcp-design.md - docs/development-roadmap.md - docs/current-gap-analysis.md 具体任务: 1. 定义目标用户、用户痛点、产品定位和产品边界; 2. 将需求划分为Must、Should、Could和Won't; 3. 为每项Must需求定义正常流程、异常流程和验收条件; 4. 使用Given/When/Then编写可执行验收标准; 5. 设计课程、资料、知识点、题目、诊断、画像、计划和Agent等领域实体; 6. 设计4个业务Skill及13个MCP工具; 7. 冻结掌握度、简答题、诊断题数量、模型Provider、账号体系和课程无关性决策; 8. 将开发工作拆分为阶段0至阶段7; 9. 明确每个阶段的目标、任务、边界、验收标准和交付物。 本阶段只编写需求和设计文档,不修改业务代码。 不得提前将尚未实现的功能标记为完成。阶段0:可运行基础设施基线请执行 CoursePilot 阶段0:可运行基础设施基线。 阶段目标: 让FastAPI后端、Vue前端、异步数据库、Alembic和MCP Server形成可启动、可测试的基础工程。 具体任务: 1. 修复FastAPI启动流程,确保GET /health返回200; 2. 建立统一的SQLAlchemy Base、异步engine和AsyncSession; 3. 配置Alembic target_metadata及异步迁移环境; 4. 验证upgrade head、downgrade base、再次upgrade head; 5. 统一Python模块路径和项目依赖,消除循环引用; 6. 修复Vue 3开发启动、TypeScript检查、ESLint和生产构建; 7. 将MCP Server统一为Streamable HTTP传输,端点为/mcp; 8. 确定FastAPI后端是唯一MCP Client,移除前端直连MCP的设计; 9. 修复后端、前端和MCP Server的Dockerfile及docker-compose.yml; 10. 建立后端健康检查、MCP连通性和前端页面加载冒烟测试; 11. 更新AGENTS.md和docs/deployment.md中的启动命令。 阶段边界: - 不实现课程CRUD; - 不实现资料解析; - 不创建完整业务领域模型; - 不实现正式业务Skill和MCP工具; - 不接入真实大模型; - 不实现完整注册、登录和管理员后台。 验收要求: - 后端、前端和MCP Server均可独立启动; - Alembic往返迁移通过; - MCP Streamable HTTP调用通过; - 前端type-check、lint和build通过; - docker compose config验证通过。阶段1:课程、资料与知识结构闭环请执行 CoursePilot 阶段1:课程、资料和知识结构垂直闭环。 请重点阅读: - docs/product-spec.md - docs/requirements.md中的FR-001至FR-003 - docs/domain-model.md - docs/user-flows.md中的流程1至流程4 - docs/mvp-acceptance.md中的AC-001至AC-003 阶段目标: 完成“创建课程→添加资料→解析资料→形成知识结构”的完整闭环。 具体任务: 1. 创建Course、CourseMaterial、MaterialChunk、KnowledgePoint和KnowledgeRelation模型; 2. 编写对应Alembic迁移、约束、外键和索引; 3. 实现课程创建、列表、详情、编辑和软删除API; 4. 实现PDF、Markdown、TXT文件上传及文本粘贴; 5. 实现资料状态、失败原因、重试和删除; 6. 实现规则型文本提取和资料分块; 7. 保存文件名、页码、章节或字符范围等来源信息; 8. 实现知识点新增、编辑、删除、排序和父子层级; 9. 实现prerequisite、contains和related知识关系; 10. 防止知识点关系自引用和循环依赖; 11. 实现课程列表、课程详情、资料管理和知识结构页面; 12. 使用两门内容不同的课程验证业务代码没有学科硬编码。 阶段边界: - 不实现题库和诊断; - 不实现知识画像、掌握度和学习计划; - 不实现正式业务Skill和MCP工具; - 不调用真实大模型。 验收要求: 用户能够创建课程,上传或粘贴资料,查看解析状态、资料分块和来源,并获得可编辑的树形知识结构。阶段2:题库、诊断与作答记录请执行 CoursePilot 阶段2:题库、初始诊断和作答记录。 请重点阅读: - requirements.md中的FR-004、FR-006和FR-010 - mvp-acceptance.md中的AC-004、AC-006和AC-010 - product-spec.md中的D-002和D-003 - domain-model.md中的题目、诊断和作答实体 阶段目标: 完成“建立题库→开始诊断→逐题作答→完成诊断”的业务流程。 具体任务: 1. 创建Question、QuestionOption和QuestionSource模型; 2. 创建question_knowledge_point多对多关联表; 3. 支持单选题、判断题和简答题; 4. 实现题目新增、编辑、删除、列表、筛选和审核状态; 5. 手动题目默认confirmed,AI或导入题目默认pending; 6. 题目必须关联至少一个当前课程知识点; 7. 保存题目对应的资料分块和来源位置; 8. 创建DiagnosticAttempt和AnswerRecord; 9. 按D-003规则选择诊断题: target_count = min(max(核心知识点数量, 10), 20); 10. 题库不足时阻止诊断并提示用户补充; 11. 诊断开始时保存不可变题目快照; 12. 保存答案、正确性、作答时间、跳过状态、提示次数和最高提示等级; 13. 实现L1至L4渐进式提示,L4完整解析需要二次确认; 14. 实现题库、诊断作答和诊断结果前端页面; 15. 为AI辅助出题预留接口,但本阶段不接入真实模型。 阶段边界: - 不计算知识画像和最终掌握度; - 不实现错因诊断; - 不实现学习目标和学习计划; - 不实现业务Skill、正式MCP工具和Agent。 验收要求: 用户能够管理题库并完成一次10至20题的诊断;系统保存完整作答证据,诊断题响应不得提前泄露正确答案和解析。阶段3:知识画像、错因诊断与掌握度请执行 CoursePilot 阶段3:知识画像、错因诊断和掌握度算法。 请重点阅读: - requirements.md中的FR-007、FR-011和FR-012 - mvp-acceptance.md中的对应验收条件 - product-spec.md中的D-001和D-002 - docs/adr/ADR-003-mastery-algorithm.md 阶段目标: 将用户作答记录转换为确定、可解释、可追溯的知识画像。 具体任务: 1. 创建MasteryRecord和ErrorDiagnosis模型及Alembic迁移; 2. 实现mastery-v1确定性掌握度算法; 3. 掌握度范围为0至100,置信度范围为0至1; 4. 算法考虑正确性、难度、作答时间、提示等级、连续错误、时间间隔和前置知识; 5. 使用Decimal和ROUND_HALF_UP,禁止依赖浮点round; 6. 每次有效证据追加MasteryRecord,不覆盖历史记录; 7. 保存旧值、新值、计算依据、变化原因和关联AnswerRecord; 8. 保证同一作答记录不会重复生成掌握度记录; 9. 实现10类规则型错因判断; 10. 保存错因类型、诊断依据、置信度、建议行动和关联知识点; 11. 支持用户确认或修改错因; 12. 实现知识画像列表和掌握度证据详情API; 13. 实现掌握度、置信度、薄弱点、待复习和证据链前端页面。 阶段边界: - 大模型不能直接计算或写入掌握度; - 本阶段不得调用真实LLM; - 不实现学习目标、学习计划和Agent; - 不实现正式业务Skill和MCP工具。 验收要求: 相同输入必须产生相同掌握度结果,每次变化均可追溯到具体作答记录;未经确认的简答题不得影响掌握度。阶段4:学习目标、计划与动态调整请执行 CoursePilot 阶段4:学习目标、个性化学习计划与动态调整。 请重点阅读: - requirements.md中的FR-005、FR-008和FR-013 - mvp-acceptance.md中的对应验收条件 - docs/adr/ADR-004-study-plan-algorithm.md 阶段目标: 根据学习目标、知识画像、知识点关系和时间约束生成确定、可解释的学习计划。 具体任务: 1. 创建LearningGoal、StudyPlan和StudyTask模型及迁移; 2. 每个用户每门课程只维护一个LearningGoal; 3. 支持目标日期、目标掌握度、每日时长和每周学习日; 4. 实现study-plan-v1确定性计划算法; 5. 根据掌握度差距、重要性、复习状态、连续错误和前置关系计算优先级; 6. 使用Kahn算法对前置关系稳定拓扑排序; 7. 检测知识点关系环; 8. 将任务分配到目标日期范围内的可用学习日; 9. 每日总时长不得超过daily_minutes; 10. 超过60分钟的任务拆分为多个子任务; 11. 容量不足时返回结构化错误和调整建议; 12. 每个任务保存generation_reason和generation_basis; 13. 支持完成、跳过、延期和手动调整; 14. 支持评估是否需要重新规划; 15. 重新规划时将旧计划设为superseded,并通过previous_plan_id保留历史; 16. 实现学习目标、当前计划和历史计划前端页面。 阶段边界: - 不调用真实大模型; - 不实现Agent、业务Skill和正式MCP工具; - 不实现错题本、学习看板、日历同步和消息推送。 验收要求: 计划生成结果可重复、可解释,不违反前置关系和时间容量;用户操作任务后能够评估调整需求并保留计划版本历史。阶段5:Skill、MCP、Agent 与 LLM Provider请执行 CoursePilot 阶段5:业务Skill、MCP工具、Agent和LLM Provider。 请重点阅读: - docs/skill-design.md - docs/mcp-design.md - docs/adr/ADR-005-agent-provider-and-orchestration.md - 阶段1至阶段4已经实现的业务服务 阶段目标: 建立可配置、可审计、可降级的CoursePilot Agent体系。 具体任务: 1. 删除course_recommend、schedule_optimizer和learning_analyzer占位Skill; 2. 实现4个正式Skill: - course_material_structuring - learning_diagnosis - study_plan_generator - socratic_tutor 3. 每个Skill包含skill.py、config.yaml和async execute(params); 4. Skill不直接操作数据库,通过业务服务或MCP工具获取数据; 5. 实现13个正式MCP业务工具; 6. 将MCP工具划分为只读工具和写入工具; 7. MCP Server通过BackendGateway调用FastAPI业务API; 8. 前端不得直接连接MCP Server; 9. 实现可配置的LLM Provider抽象; 10. 支持Mock Provider和OpenAI兼容Provider; 11. 自动测试只能使用Mock/Fake Provider; 12. 创建AgentSession、AgentMessage和ToolCallLog; 13. 实现Agent会话创建、消息发送、历史查询和结束会话; 14. 实现L1至L4苏格拉底式辅导; 15. 标记course_material、ai_supplement、mixed和unverified来源; 16. 所有Skill和MCP调用保存审计记录; 17. 对API Key、Token、Cookie、密码和密钥进行递归脱敏; 18. Agent写操作必须先请求用户确认; 19. 实现Agent对话和来源展示前端页面; 20. 实现Provider和MCP不可用时的规则降级。 阶段边界: - 不实现错题本和学习看板; - 不实现管理员后台; - 不允许把具体模型写成不可替换依赖; - Skill不得复制确定性掌握度和计划算法。 验收要求: 4个Skill和13个MCP工具能够独立调用;Agent可读取课程资料、画像和计划,能够恢复会话、显示来源、记录调用并在模型不可用时降级。阶段6:错题本、看板与日志展示请执行 CoursePilot 阶段6:完整前端交互、错题本、学习看板和调用日志展示。 请先检查阶段1至阶段5的数据模型和业务调用链,特别是: - AnswerRecord - DiagnosticAttemptQuestion不可变快照 - ErrorDiagnosis - MasteryRecord - StudyPlan和StudyTask - AgentSession和ToolCallLog 阶段目标: 补齐学习数据展示、错题复习和完整前端体验。 具体任务: 1. 实现WrongQuestionState模型及Alembic迁移; 2. 按user_id、course_id和question_id聚合错题; 3. 错题内容优先读取不可变题目快照; 4. 仅将有效错误作答计入错误次数; 5. 支持按知识点、错因、状态和关键词筛选; 6. 展示历史错误、资料来源、错因证据和掌握度证据; 7. 支持标记已掌握; 8. 用户后续再次答错时自动重新打开错题状态; 9. 复用DiagnosticAttempt体系创建单题练习; 10. 实现学习看板10类确定性指标; 11. 展示今日任务、总体进度、掌握度分布、薄弱点、待复习项、错因分布、本周有效作答时长和计划完成率; 12. 实现课程级ToolCallLog查询; 13. 支持类型、状态、工具、会话、时间和分页筛选; 14. 保存日志和查询输出时均执行敏感信息脱敏; 15. 实现错题本、看板和调用日志前端页面; 16. 完善加载状态、错误提示、空状态、导航、路由参数和刷新恢复。 阶段边界: - 不修改4个Skill核心逻辑; - 不修改13个MCP工具契约; - 不修改mastery-v1和study-plan-v1; - 不实现管理员后台和阶段7部署功能。 验收要求: 错题复习、学习看板和调用日志形成前后端闭环;跨用户访问统一返回404;页面刷新后数据可以从API恢复。3.3 Skill前端美化AI直接生成的前端通常不符合我们的胃口,存在以下问题:全站仍是系统默认字体、同一字号层级和同一种 8px 圆角,页面缺少品牌辨识度。紫色高饱和主色、纯白卡片加灰边框在所有页面重复,是典型的通用 AI 后台视觉。顶栏只是文本平铺,当前页面反馈弱,宽屏松散、窄屏拥挤。首页、课程列表和登录页过度居中,信息层级单薄;题库等高频页面则过密。按钮、表单、弹窗样式在各页面重复且状态不统一,Hover、Pressed、Focus 反馈不足。加载和空状态大多只是一行文字,视觉完成度不足。因此我们可以为Code添加Skill对前端进行美化我们选用GitHub - Leonxlnx/taste-skill: Taste-Skill - gives your AI good taste. stops the AI from generating boring, generic slop · GitHub 这个67.7k Star的Github开源skill进行优化请你根据skill修改现有前端界面,做的更好看一些效果也是很明显:美化前首页美化后首页四、核心功能实现具体核心功能展示请参考仓库内的demo视频,或者通过打开网站或本地部署实际操作,这里简单展示一下界面和操作功能4.1 从课程资料生成可追溯知识结构用户可以上传 PDF、Markdown、TXT 文件,或者直接粘贴文本。后端解析后将内容切分为资料块,并保存文件、位置与内容之间的对应关系。知识结构生成时,系统不会只保存一个无法解释的标题,而是将知识点关联到原始资料。用户可以查看、调整层级和关系,降低模型幻觉对后续诊断的影响。如果知识结构生成不清晰,你可以使用AI进行结构的优化,也可以手动进行修改,使结构更加清晰4.2 基于资料的 AI 辅助出题在题库管理界面你可以手动添加题目,也可以使用AI辅助出题AI 出题只允许引用当前课程中有效的知识点 ID 和资料块 ID。模型输出后,后端还会再次校验:题型和难度是否符合请求;knowledge_point_ids 是否属于允许范围;source_chunk_id 是否来自本次课程资料;选项、答案和解析结构是否完整。如果模型第一次返回了越界 ID,系统会把错误约束和合法范围反馈给模型并重试;连续失败时停止保存,避免产生半成品题目。4.3 测验与知识画像当题库足够完整,能够覆盖全部知识点时,可以进行测验与诊断:测验过程中可以申请不同等级的提示,或者跳过,但是这和答错一样会不同程度影响你的掌握度判定!系统不会让大模型直接决定最终掌握度,而是使用确定性规则综合以下证据:作答是否正确;题目难度;作答耗时;提示次数与提示等级;最近正确率;是否重复犯错;前置知识掌握情况。每次掌握度变化都会保存旧值、新值、变化原因和关联作答记录,用户能够查看“为什么发生了这次变化”。错题可以在“错题本”中进行复习,或者重新做题:4.4 学习计划与动态调整用户可以设置目标日期、目标掌握度、每日学习时长和每周可学习日期。系统根据知识画像、知识点重要程度、前置关系、历史错题和可用时间生成学习任务。当用户完成任务、连续答错或掌握度明显变化时,系统可以触发重新规划,并保留计划版本和调整原因。同时用户也可以在学习看板上查看一系列学习数据:4.5 渐进式学习辅导 Agent学习辅导 Agent 通过 MCP 工具读取当前课程资料、知识结构、学生画像和学习计划,再由 Skill 控制提示节奏:L1:提醒相关知识点;L2:指出思路方向;L3:给出关键步骤;L4:在用户确认后给出完整解析。回复通过 SSE 流式返回,并标记内容来自课程资料、AI 补充或混合来源。模型不可用时,系统可以降级为规则型提示。五、部署到华为云 ECS5.1 案例环境本案例采用一台华为云 ECS 完成演示部署:配置项案例选择区域华东-上海一ECS通用计算增强型,2 vCPU / 4 GiB操作系统Ubuntu 24.04 Server 64 位系统盘通用型 SSD,60 GiB公网访问弹性公网 IP,按流量计费,5 Mbit/s容器编排Docker Compose安全组:端口用途来源建议22SSH 运维仅允许管理员当前公网 IP /3280HTTP0.0.0.0/0443HTTPS0.0.0.0/05.2 登录服务器这里我采用的是密钥对登录:$key = "D:\EdgeDownload\KeyPair-e9f4.pem" icacls $key /inheritance:r icacls $key /grant:r "$($env:USERDOMAIN)\$($env:USERNAME):(R)" icacls $key先执行这一步是为了防止Window私钥文件权限过宽然后执行登录:ssh -i $key root@115.120.251.215.3 安装 Docker 和 Git登录 ECS 后执行:apt update apt install -y ca-certificates curl git install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo ${UBUNTU_CODENAME:-$VERSION_CODENAME}) stable" \ > /etc/apt/sources.list.d/docker.list apt update apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin systemctl enable --now docker docker --version docker compose version这里可能会出现报错,可能是因为访问 Docker 官方源被重置。直接改用华为云 Docker 镜像源即可。curl -fsSL https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.asc chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.huaweicloud.com/docker-ce/linux/ubuntu $(. /etc/os-release && echo ${UBUNTU_CODENAME:-$VERSION_CODENAME}) stable" \ > /etc/apt/sources.list.d/docker.list apt update apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin systemctl enable --now docker5.4 克隆 CoursePilot输入:cd /opt git clone cid:link_7.git cd CoursePilot5.5 创建生产环境变量先生成三个密钥,分别复制输出结果:python3 -c "import secrets; print(secrets.token_urlsafe(48))" python3 -c "import secrets; print(secrets.token_urlsafe(48))" python3 -c "import base64,secrets; print(base64.urlsafe_b64encode(secrets.token_bytes(32)).decode())"创建环境变量文件:nano .env填入:SECRET_KEY=第一个随机值 MCP_INTERNAL_API_KEY=第二个随机值 LLM_CREDENTIAL_ENCRYPTION_KEY=第三个随机值 ALLOWED_ORIGINS=["http://你的EIP"]保存退出即可。5.6 添加持久化配置现有 Compose 没有持久化 SQLite 和上传文件,所以不要直接启动。创建覆盖文件:nano docker-compose.override.yml填入:services: backend: environment: DATABASE_URL: sqlite+aiosqlite:////data/coursepilot.db DEBUG: "False" SECRET_KEY: ${SECRET_KEY} LLM_CREDENTIAL_ENCRYPTION_KEY: ${LLM_CREDENTIAL_ENCRYPTION_KEY} MCP_INTERNAL_API_KEY: ${MCP_INTERNAL_API_KEY} MCP_SERVER_URL: http://mcp-server:8001/mcp UPLOAD_DIR: /data/uploads ALLOWED_ORIGINS: '${ALLOWED_ORIGINS}' volumes: - ./data:/data restart: unless-stopped frontend: restart: unless-stopped mcp-server: environment: BACKEND_API_URL: http://backend:8000/api/v1 MCP_INTERNAL_API_KEY: ${MCP_INTERNAL_API_KEY} restart: unless-stopped保存退出,创建数据目录:mkdir -p data/uploads chmod 700 data5.7. 构建并启动docker compose build --pull如果出现报错可能是因为Docker Hub 在大陆网络访问超时。需要给 Docker 配置华为云 SWR 镜像加速器。在华为云控制台:切换到“华东-上海一”。搜索并进入“容器镜像服务 SWR”。左侧选择“镜像资源 → 镜像中心”。点击“镜像加速器”。复制地址在ECS执行:mkdir -p /etc/docker nano /etc/docker/daemon.json填入复制的真实地址:{ "registry-mirrors": [ "https://xxxxxxxx.mirror.swr.myhuaweicloud.com" ] }保存退出即可!然后拉取基础镜像:docker pull python:3.11-slim docker pull node:20-alpine docker pull nginx:alpine三个都成功后,重新构建:cd /opt/CoursePilot docker compose build5.8 文件上传问题解决课程文件上传和 AI 知识结构优化都可能超过 Nginx 默认限制。可以在 /api/ 代理中补充:server { listen 80; server_name _; client_max_body_size 20m; location /api/ { proxy_pass http://backend:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; } }修改后重新构建并启动前端容器:docker compose build frontenddocker compose up -d --no-deps frontend六、问题排查与踩坑复盘AI生成的代码在一些小细节上会出现疏忽和错误,同时部署过程中一些文件的配置不完全也可能会带来一些问题。这里是我列出的一部分可能会出现的问题可解决方案,如果大家部署过程中产生错误可参考以下内容:6.1 Docker Hub 连接超时现象failed to resolve source metadata for docker.io/library/python:3.11-slimdial tcp ...:443: i/o timeout原因ECS 访问 Docker Hub 不稳定,构建阶段无法获取基础镜像元数据。解决配置华为云 SWR 镜像加速器,先单独执行 docker pull 验证,再重新执行 Compose 构建。拉取完成后若 referrers 请求偶发超时,可重试构建。6.2 Alembic 找不到 app 模块现象ModuleNotFoundError: No module named 'app'原因迁移进程启动时,后端源码目录没有进入 Python 模块搜索路径。解决docker compose run --rm \ -e PYTHONPATH=/app/backend \ backend python -m alembic upgrade head6.3 上传课程资料返回 413现象Request failed with status code 413原因请求在进入 FastAPI 前就被 Nginx 的默认请求体大小限制拒绝。解决在 Nginx server 中设置 client_max_body_size,同时保证该值不小于后端允许的上传上限。6.4 AI 优化知识结构返回 504现象Request failed with status code 504原因模型需要读取多份资料并生成分层结构,耗时超过 Nginx 默认代理等待时间。解决提高 proxy_read_timeout 和 proxy_send_timeout。更长期的方案是将长任务改造成异步任务,并通过任务状态接口或 SSE 返回进度。6.5 模型返回越界知识点 ID现象第 4 道题结构不合法:knowledge_point_ids 不在允许范围内原因旧逻辑只重试题型和难度错误,知识点 ID 到保存阶段才校验,模型没有纠正机会。解决将知识点 ID 和资料块 ID 校验前移到模型重试阶段,反馈非法值与允许范围;连续失败则停止整批保存。6.6 诊断退出后无法再次进入现象该课程已有进行中的诊断,attempt_id=...原因后端正确阻止了重复创建,但前端没有恢复已有 attempt 的入口。解决将“开始诊断”设计为幂等操作:发现进行中的 attempt 时直接返回原记录,前端显示“继续诊断”,再从下一道未答题恢复。八、案例总结CoursePilot 的开发让我认识到,AI Agent 应用的难点不只是“接入一个大模型”,而是如何把模型放进一个可信、可解释、可恢复的业务闭环中。在开发阶段,华为云码道(CodeArts)代码智能体的价值主要体现在:通过 Codebase 理解跨前后端、MCP 与 Skill 的项目上下文;将自然语言需求拆解成可执行、可追踪的开发任务;在多文件修改、测试补充和日志排障中提高效率;结合仓库规范与验收条件,减少无边界生成;帮助整理从本地开发到 ECS 部署的完整过程。在运行阶段,CoursePilot 则通过资料来源、确定性算法、用户确认、调用审计和降级策略约束大模型,让 AI 真正服务于学习过程,而不是只生成看似合理的答案。九、参考资料华为云社区 HCSD 板块华为云码道(CodeArts)代码智能体产品介绍华为云码道(CodeArts)代码智能体下载安装CoursePilot GitCode 项目仓库
-
前言传统扫码硬件部署成本偏高,普通手机本地拍照解码极易受画面倾斜、反光、污渍、模糊等问题干扰,经常出现识别失败的情况。本接口兼容市面全部主流一维码、二维码格式解析,支持图片 URL、Base64 两种文件提交形式,依托图像增强修复算法大幅提升破损、畸变码图的识别成功率,精准高效解析条码内置明文数据,轻量化对接各类业务系统,轻松完成条码信息自动化解析提取工作。二维码条形码识别在以下场景中应用广泛:物流快递管理商超零售结算仓储库存盘点电子票券核销校验工业生产流程管控政务资料核验移动端系统集成单据档案电子化归档API介绍请求说明名称类型必须说明base64String否图片base64。base64、url、file 三选其一urlString否图片完整url。base64、url、file 三选其一fileFile否图片文件。base64、url、file 三选其一戳这里查看详情返回样例{ "code": 200, // 返回码,详见返回码说明 "msg": "成功", // 返回码对应描述 "taskNo": "55318992410294812098", // 本次请求号 "charge": true, // 计费标志 "data": [ { "text": ["SF1688255711970"],//二维码内容 "type": "CODE_128"//二维码类型 } ] }
-
前言传统扫码硬件部署成本偏高,普通手机本地拍照解码极易受画面倾斜、反光、污渍、模糊等问题干扰,经常出现识别失败的情况。本接口兼容市面全部主流一维码、二维码格式解析,支持图片 URL、Base64 两种文件提交形式,依托图像增强修复算法大幅提升破损、畸变码图的识别成功率,精准高效解析条码内置明文数据,轻量化对接各类业务系统,轻松完成条码信息自动化解析提取工作。二维码条形码识别在以下场景中应用广泛:物流快递管理商超零售结算仓储库存盘点电子票券核销校验工业生产流程管控政务资料核验移动端系统集成单据档案电子化归档API介绍请求说明名称类型必须说明base64String否图片base64。base64、url、file 三选其一urlString否图片完整url。base64、url、file 三选其一fileFile否图片文件。base64、url、file 三选其一戳这里查看详情返回样例{ "code": 200, // 返回码,详见返回码说明 "msg": "成功", // 返回码对应描述 "taskNo": "55318992410294812098", // 本次请求号 "charge": true, // 计费标志 "data": [ { "text": ["SF1688255711970"],//二维码内容 "type": "CODE_128"//二维码类型 } ] }
-
前言传统人工录入图文资料存在效率低、出错率高、无法留存文字位置版式信息等问题。本通用文字识别 API 依托深度学习优化算法,识别精度最高可达 99.9%,支持图片、PDF、OFD 文件解析,同步返回文本坐标、轮廓点位、段落结构与置信度数据;可快速对接各类业务系统,完成图像文字结构化、版式还原等智能化处理。通用文字识别在以下场景中应用广泛:政务档案数字化财务单据自动处理资质证件信息采集固化电子文档解析日常图文文字提取工业资产信息采集版面还原与标注开发企业办公自动化API介绍请求说明名称类型必须说明imageString否图片base64pdfString否PDF文件的base64pdfNumString否需要识别的PDF文件的对应页码,不传默认识别第 1 页ofdString否OFD文件的base64ofdNumString否需要识别的OFD文件的对应页码,不传默认识别第 1 页fileFile否文件urlString否文件地址image、pdf、ofd、file、url 必须提供一个,优先级:image > pdf > ofd > file > url文件不超过4M,最短边至少15px,最长边最大4096px图片格式为 jpg、png、bmp、jpeg戳这里查看详情返回样例{ "msg": "成功",// code 对应的描述 "code": 200,// 详见code返回码说明 "taskNo": "316942821199035820008485",// 本次请求号 "charge": true, // 计费标志 "data": { "resultNum": 2,//识别结果数 "result": [//识别结果 { "words": "测试第一行",//识别结果字符串 "location": {//位置数组(坐标0点为左上角) "top": 72,//表示定位位置的长方形左上顶点的垂直坐标 "left": 89,//表示定位位置的长方形左上顶点的水平坐标 "width": 52,//表示定位位置的长方形的宽度 "height": 12//表示定位位置的长方形的高度 }, "probability": {//表示识别结果中每一行的置信度值 "average": 0.9956096411,//行置信度平均值 "min": 0.9842295051,//行置信度最小值 "variance": 0.00003516419747//行置信度方差 }, "vertexesLocation": [//识别结果中每一行的外包四边形点坐标 { "x": 90,//水平坐标(坐标0点为左上角) "y": 73//垂直坐标(坐标0点为左上角) }, { "x": 142, "y": 73 }, { "x": 142, "y": 85 }, { "x": 90, "y": 85 } ], "finegrainedVertexesLocation": [//识别结果中每一行的多边形轮廓点坐标 { "x": 89, "y": 72 }, { "x": 101, "y": 72 }, { "x": 113, "y": 72 }, { "x": 124, "y": 72 }, { "x": 136, "y": 72 }, { "x": 141, "y": 72 }, { "x": 141, "y": 78 }, { "x": 141, "y": 84 }, { "x": 130, "y": 84 }, { "x": 118, "y": 84 }, { "x": 106, "y": 84 }, { "x": 95, "y": 84 }, { "x": 89, "y": 84 }, { "x": 89, "y": 78 } ] }, ], "paragraphsResult": [//段落检测结果 { "wordsResultIdx": [//一个段落包含的行序号 0, 1 ], "finegrainedVertexesLocation": [//识别结果中每一行的多边形轮廓点坐标 { "x": 89, "y": 72 }, { "x": 101, "y": 72 }, { "x": 113, "y": 72 }, { "x": 124, "y": 72 }, { "x": 136, "y": 72 }, { "x": 141, "y": 72 }, { "x": 141, "y": 72 }, { "x": 141, "y": 84 }, { "x": 141, "y": 88 }, { "x": 141, "y": 100 }, { "x": 141, "y": 100 }, { "x": 129, "y": 100 }, { "x": 117, "y": 100 }, { "x": 104, "y": 99 }, { "x": 92, "y": 99 }, { "x": 89, "y": 99 }, { "x": 89, "y": 99 }, { "x": 89, "y": 87 }, { "x": 89, "y": 84 }, { "x": 89, "y": 72 } ] } ], "paragraphsResultNum": 1,//识别结果数,表示 paragraphsResult 的元素个数 "pdfFileSize": 1//传入PDF文件的总页数,当 pdfFile 参数有效时返回该字段 } }
-
前言增值电信业务许可证,简称ICP证或经营性ICP证。是企业在中华人民共和国境内合法经营增值电信业务的法定资质证明。如果你的业务需要利用公共网络基础设施(如互联网、移动网络)来提供电信与信息服务,那么通常就需要办理这个许可证。它是国家为了规范市场、保障网络与信息安全而设立的一项行政许可制度。增值电信业务种类繁多,根据《电信业务分类目录》主要分为两大类。一、基于基础设施层的服务,常见的有:互联网数据中心业务(IDC):提供服务器托管、租赁等服务。内容分发网络业务(CDN):通过分布式节点加速网站或应用内容访问。互联网接入服务业务(ISP):为个人或企业提供互联网接入服务。二、基于应用和平台层的服务,常见的有:在线数据处理与交易处理业务:即电子商务平台(如天猫、京东)。信息服务业务:即大家常说的ICP证,指通过互联网向上网用户有偿提供信息或网页制作等服务。呼叫中心业务:提供客户服务热线等服务。增值电信业务许可证查询可根据企业名称、许可号查询增值电信业务许可证内容,包括:许可证号、业务种类、覆盖范围、上市情况、企业性质、企业年报报送年份、注册住所、注册属地、用户投诉量、注册资本、客户投诉服务电话等。API介绍请求说明名称类型必须说明keywordString是完整企业名称/许可号戳这里查看详情返回样例{ "code": 200, "msg": "成功", "taskNo": "41020892700032664119", "data": { "BusinessData": [// { "LicenseNo": "",//许可证号 "ServiceInfo": [ { "ServiceName": "",//业务种类 "ServiceRange": ""//覆盖范围 } ] } ], "IsStock": "",//上市情况 "CreditCode": "",//统一社会信用代码 "EnterpriseMature": "",//企业性质 "FillYear": "",//企业年报时间 "RegisterAddr": "",//注册住所 "LegalPerson": "",//法定代表人 "RegisterLocality": "",//注册属地 "ComplainCount": "",//用户投诉量 "RegisterFund": "",//注册资本 "EnterpriseName": "",//公司名称 "ComplainPhone": "",//客户投诉服务电话 "ComplainReply": ""//用户投诉回复率 } }
-
前言查询全国各地的旅游景点,覆盖面广。为旅游出行规划提供数据支撑。API介绍全国景点查询包括四个API,分别为:景点查询、省份列表、城市列表、区县列表。戳这里查看详情景点查询根据省、市、县名称及景点名称查询景点信息,返回坐标、地址、描述、图片列表、门票价等信息。。业务参数名称类型必须说明keywordString否景点名称proIdString否省级idcityIdString否城市idareaIdString否镇idpageString否第几页返回样例{ "msg": "成功",//code对应的描述 "code": 200,//返回码,详见code返回码说明 "taskNo": "968545275134169633742173",//本次唯一请求号 "data": { "allNum": "33",//总数量 "allPages": "2",//总页数,每页20条 "currentPage": "2",//当前页 "maxResult": "20",//每页最大条目数 "list": [ { "summary": "大士岩位于云龙山西麓,为徐州知州姜焯所建。康熙五十八 年(1719年),姜xxxx",//景点描述 "address": "电话:0516-384xxxx\r\n地址:徐州市云龙山\r\n邮编:221001",//景点地址 "cityId": "230",//城市id "priceList": [],//图片列表 "areaId": "532",//镇id "cityName": "徐州",//城市名 "areaName": "徐州市区",//镇名称 "picList": [ //门票价格列表 { "entityList": [ //门票信息集合 { "AmountAdvice": "100",//渠道价 "PriceId": 231408,//价格id "TicketTypeId": 179033,//票id "Amount": "148",//票面价 "TicketName": "大理西湖国家湿地公园成人票",//门票名称 "PriceInSceneryId": 26416,//景区id "EndDate": "2015-12-31",//票结束销售的日期 "PriceName": "",//价格优惠名称 "BeginDate": "2015-07-22"//票开始销售日期 }, { "AmountAdvice": "100", "PriceId": 231409, "TicketTypeId": 179034, "Amount": "148", "TicketName": "大理西湖国家湿地公园成人票", "PriceInSceneryId": 26416, "EndDate": "2015-12-31", "PriceName": "", "BeginDate": "2015-07-22" } ], "type": "成人票"//门票分类 } ], "proId": "16",//省级id "name": "大士岩",//景点名称 "location": {//坐标 "lon": "117.18797330", "lat": "34.25199824" }, "id": "10612", "proName": "江苏", //省级名称 "coupon": "",//优惠政策 "star": "",//景点星级 "opentime": "",//开放时间 "content": "",//景点描述 "attention": "",//温馨提示 "ct": ""//可忽略 } ] } } 省份列表景点查询的辅助接口,查询各省或直辖市对应的ID。。业务参数无返回样例{ "msg": "成功",//code对应的描述 "code": 200,//返回码,详见code返回码说明 "taskNo": "968545275134169633742173",//本次唯一请求号 "data": { "list": [ { "name": "上海", "id": "25" }, { "name": "江苏", "id": "16" } ] } } 城市列表根据一级区域id查询省或直辖市的下级区域ID。业务参数名称类型必须说明proIdString是省级id返回样例{ "msg": "成功",//code对应的描述 "code": 200,//返回码,详见code返回码说明 "taskNo": "968545275134169633742173",//本次唯一请求号 "data": { "list": [ { "proId": "2",//省份id "name": "合肥",//名称 "id": "42", "proName": "安徽" //省份名称 }, { "cityName": "合肥", "proId": "2", "name": "蜀山区", "id": "3597", "proName": "安徽", "cityId": "42" }, { "cityName": "合肥", "proId": "2", "name": "经济开发区", "id": "5822", "proName": "安徽", "cityId": "42" } ] } } 区县列表根据地级市的ID,查询下级区域ID。业务参数名称类型必须说明cityIdString是城市id返回样例{ "msg": "成功",//code对应的描述 "code": 200,//返回码,详见code返回码说明 "taskNo": "968545275134169633742173",//本次唯一请求号 "data": { "list": [ { "cityName": "合肥",//城市名称 "proId": "2",//省份id "name": "蜀山区",//名称 "id": "3597", "proName": "安徽",//省份名称 "cityId": "42" //城市id }, { "cityName": "合肥", "proId": "2", "name": "经济开发区", "id": "5822", "proName": "安徽", "cityId": "42" } ] } }
-
前言企业融资信息查询,可以根据企业名称、统一社会信用代码查询企业专利信息,包括:融资轮次、融资金额、产品名称、投资方、投资比例等信息。主要有以下使用场景:投资人/机构尽职调查、产业合作与供应链金融、竞争对手融资动态监控。API介绍请求说明名称类型必须说明keywordString是搜索关键字(公司名、注册号、社会统一信用代码)pageNoInteger否页码,默认第一页pageSizeInteger否每页条数,默认为10,最大不超过50条戳这里查看详情返回样例{ "msg": "成功", "code": 200, "taskNo": "29922923921831810347", "data": { "page": { "pageSize": 3, //每页条数 "recordCount": 41, //总条数 "pageNo": 1 //页码 }, "Items": [ { "CompanyName": "", // 企业名称 "Date": "", // 融资时间 "PubTime": "", // 披露时间 "InvestorName": "", // 投资企业 "Money": "未披露", // 投资金额 "Round": "", // 轮次 "NewsUrl": "", // 新闻url "NewsTitle": "", // 新闻标题 "Share": "", // 投资比例 "Value": "" // 估值 }, ... ] } }
-
前言企业证书查询,可以根据企业名称、统一社会信用代码查询企业专利信息,包括:企业产品认证、体系认证、经营许可、生产许可、建筑资质等资质证书信息,并包含证书类型、证书编号、有效期限等资质详情。企业证书应用场景贯穿商业合作的全过程,具体有:供应商筛选与审核、招标与投标审核、投资与信贷审批、政务事项“一网通办”、自身证书管理与追溯。API介绍请求说明名称类型必须说明keywordString是关键字,企业名/统一信用代码/注册号/企业历史名称pageNoString否页码,默认第一页pageSizeString否每页条数,默认为10,最大不超过20条searchKeyString否证书搜索关键字licnameKindString否分类,空为全部licnameStatusString否状态,空为全部戳这里查看详情返回样例{ "code": 200,//返回码,详见返回码说明 "msg": "成功",//返回码对应描述 "taskNo": "275965398223019573588569",//本次请求号 "data": { "pageNo": "1",//当前页号,从1开始 "recordCount": "3",//记录总数 "pageSize": "10",//每页记录数 "list": [ { "valto": "2026-12-28",//截止日期 "valform": "2023-12-28",//发证日期 "licno": "GR202333005602",//证书编号 "licname": "高新技术企业认定证书",//证书名称 "licnameKind": "高新技术企业",//证书类型 "licnameStatus": "有效", //证书状态 "licanth": "xxxx认证集团有限公司", //发证机构 "licensecontent": "" //证书内容 } ], "extData": { "licnameKindList": [//分类统计 { "name": "体系认证", "count": 2, "value": "体系认证" }, { "name": "高新技术企业", "count": 1, "value": "高新技术企业" } ], "licnameStatusList": [//状态统计 { "name": "无效", "count": 2, "value": "无效" }, { "name": "有效", "count": 1, "value": "有效" } ] } } }
-
前言企业商标查询,可以根据企业名称、统一社会信用代码查询企业专利信息,包括:商标名称、注册号、国标分类、申请人、商标状态、申请日期等信息。其应用非常广泛,主要有:新品牌命名与设计、确定注册策略、产品上市与出口、广告宣传与营销、电商平台入驻、应对侵权指控、打击山寨与仿冒、供应商与合作伙伴管理、商标交易与融资、企业并购与上市、监测竞争对手API介绍请求说明名称类型必须说明keywordString是企业名/统一信用代码/注册号/企业历史名称pageNoString否页码,默认第一页pageSizeString否每页条数,默认为10,最大不超过20条戳这里查看详情返回样例{ "code": 200,//返回码,详见返回码说明 "msg": "成功",//返回码对应描述 "taskNo": "937773461156739794231028",//本次请求号 "data": { "pageNo": "1",//当前页号,从1开始 "recordCount": "7",//记录总数 "pageSize": "20",//每页记录数 "list": [ { "types": "设计研究",//分类 "typeCodes": "42",//分类编码 "logoUrl": "https://xxxx.jpg",//logo,建议自行下载保存,避免丢失 "typeCode": 42,//分类编码 "number": "61944161",//编号 "name": "xxxx",//商标名 "requestDate": "2022-01-05",//申请日期 "auditDate": "",//审计日期 "registerdate": "",//注册日期 "expireddate": "",//过期日期 "agency": "",//代理机构 "status": "已注册" //商标状态 } ] } }
-
前言企业专利查询,可以根据企业名称、统一社会信用代码查询企业专利信息,包括:专利名称、申请号、申请公布号、发明人等信息。企业专利查询的应用场景非常广泛,它已经深度融入了从研发到经营的全过程。简单来说,可以概括为三个核心价值:指引创新方向、防控经营风险、支撑商业决策。API介绍请求说明名称类型必须说明keywordString是企业名/统一信用代码/注册号/企业历史名称pageNoString否页码,默认第一页pageSizeString否每页条数,默认为10,最大不超过20条戳这里查看详情返回样例{ "code": 200, // 返回码,详见返回码说明 "msg": "成功", // 返回码对应描述 "taskNo": "65605503936940344488", // 本次请求号 "data": { "pageNo": "1",//当前页号,从1开始 "recordCount": "12",//记录总数 "pageSize": "10",//每页记录数 "list": [ { "summary": "本发明提出了一种基于任务链和分治法的海量数据汇总方法及系统,xxxxx。",//摘要 "pubTime": "2024-09-20",//公告日期 "agentPerson": "张迪",//专利代理人 "mainCategoryCode": "G06F9/50(2006.01),G06F18/10(2023.01),xxxx",//主分类号 "licenseCode": "2024111549088",//申请号 "type": "patented",//类型,patented-专利人 designer-设计人 inventor-发明人 "patentCategory": "发明公布",//专利类型 "stateMeaning": "实质审查的生效",//法律状态 "agentUnit": "苏州xxxx有限公司",//专利代理机构 "requestDate": "2024-08-22",//申请时间 "outhorNum": "CN118672790A",//专利号 "domicile": "浙江省杭州市xxxx307A室",//地址 "patentName": "一种基于任务链和分治法的海量数据汇总方法及系统",//专利名称 "inventor": "张三,李四" //发明人 } ] } }
-
前言菜谱查询可按分类、关键词来查询菜谱信息,包括:菜名、操作步骤、配料和相关图片。目前已收录数十万多条各类菜谱。菜谱查询的用途其实非常广泛,不仅限于“照着做饭”这么简单。结合不同的使用场景,它的作用主要体现在以下几个方面:解决“吃什么”的难题:为日常三餐、周末大餐或节日聚餐提供灵感,避免每天重复同样的菜式。新手入门与技能提升:对于烹饪新手,菜谱提供了详细的食材清单、步骤和火候指导,是学习做饭的最佳教程。营养搭配:查询特定食材的营养价值,帮助制定均衡的膳食计划。特殊饮食需求:针对减肥(低卡)、增肌(高蛋白)、控糖(低GI)或过敏体质(无麸质、无海鲜等)查询专属菜谱。食材利用与节约:当冰箱里剩下一些零散食材时,通过查询“食材+做法”,可以变废为宝,减少浪费。API介绍戳这里查看详情分类查询返回样例{ "code": 200,// 返回码,详见返回码说明 "msg": "成功",// 返回码对应描述 "taskNo": "034535576236862617236272",// 本次请求号 "data": { "items": { "肉类": { "鸽子": [ "鸽子" ] ...... "兔肉": [ "兔肉" ] } } } } } 菜谱查询请求参数名称类型必须说明typeString是菜谱的分类(查询时请使用分类中的一级或二级分类)pageNoInteger否请求页数 默认第1页pageSizeInteger否每页返回的最大结果集,默认20idString否菜谱标识 菜谱列表中id,可以用id查询详细nameString否菜品名称###返回样例{ "code": 200, "msg": "成功", "taskNo": "025008804237815320489132", "charge": true, "data": { "totalPage": 61,//总页数 "pageNo": 1,//当前页 "pageSize": 20,//每页返回最大记录数 "totalCount": 1214, //总记录 "items": [ { "type": "肉类 兔肉 兔肉",//分类信息 "typeV1": "肉类",//一级分类 "typeV2": "兔肉",//二级分类 "typeV3": "兔肉",//三级分类 "name": "泰顺腊兔肉",//菜谱名称 "desc": "", "tip": "",//提示信息 "id": "5c4c75b3e9b6cc139e5dd87a",//菜谱标识 "createTime": "2019-01-26 22:58:59.575", "smallImag": "",//小图url "largeImg": "",//大图url "steps": [ //操作步骤 { "orderNum": 1, "content": "腊兔肉切好,锅里放多油,油热后放入腊兔肉爆炒一会儿,然后放入姜蒜葱白胡萝卜爆香!炒之前用料酒酱油盐鸡精白糖调好的汁倒入锅中,等入味了就可以放葱香菜起锅了!" } ], "yl": [//原料/配方 { "ylUnit": "胡萝卜", "ylName": "泰顺腊兔子" }, ...... { "ylUnit": "香菜", "ylName": "蒜" } ] } ] } }
-
前言常见疾病查询涵盖数万种常见疾病,无论是医生还是患者,都可以轻松查询到所需的信息。能为您提供详尽的参考,包括:疾病症状、病因、诊断方法、治疗方案、预防措施等。API介绍常见疾病查询API可以从多种维度查询常见疾病,包括根据科目、关键字和查询详细介绍。戳这里查看详情查询疾病科目** 返回样例**{ "code": 200, "msg": "成功", "taskNo": "526782409178028989145499", "data": { "count": 1, "items": [ { "typeName": "皮肤性病",//科目名称 "typeId": "1300",//科目id "subList": [//子科目 { "subId": "0301", "subName": "呼吸内科" } ] } ] } } 关键字查询疾病请求参数名称类型必须说明typeIdString否科目idsubTypeIdString否子科目idkeywordString否关键字pageString否页数,默认1,每页最多20条** 返回样例**{ "code": 200, "msg": "成功", "taskNo": "526782409178028989145499", "data": { "page": 1,//当前页 "pageSize": 20,//每页条数 "totalPage": 37,//总页数 "totalCount": 730,//总条数 "items": [ { "id": "629d94cd72cff746ddca57e3",//id "typeId": "1300",//科目id "typeName": "皮肤性病",//科目名称 "subTypeId": "1301",//子科目id "subTypeName": "皮肤科",//子科目名称 "name": "紫癜性皮炎"//疾病名称 } ] } } 疾病明细查询请求参数名称类型必须说明idString是疾病id** 返回样例**{ "code": 200, "msg": "成功", "taskNo": "526782409178028989145499", "charge": true,//计费标识 "data": { "id": "629d94cd72cff746ddca57e3",//id "name": "紫癜性皮炎",//疾病名称 "typeId": "1300",//科目id "typeName": "皮肤性病",//科目名称 "subTypeId": "1301",//子科目id "subTypeName": "皮肤科",//子科目名称 "alias": "",//别名 "summary": "紫癜性皮炎是...",//描述 "tagList": [//标签 { "name": "别名",//标签名称 "content": ""//标签内容 } ] } }
-
前言随着全球化交流的不断深入,语音翻译已经成为跨语言沟通的重要工具。无论是跨境电商、国际会议、在线教育,还是海外旅游、智能客服等场景,都需要将一种语言快速转换为另一种语言,从而消除语言障碍,提高沟通效率。语音翻译API是一种基于人工智能技术的开放接口,能够自动完成"语音识别 → 文本翻译 → 语音播报"的整个处理流程。语音翻译API有哪些应用场景?随着AI技术的发展,语音翻译已经广泛应用于多个行业,例如:跨境电商客服实时沟通海外旅游语音交流国际会议语音翻译在线教育多语言授课智能语音助手AI客服机器人企业跨国办公沟通跨语言直播互动视频字幕翻译多语言学习平台对于需要面向海外用户的产品来说,语音翻译接口能够有效提升用户体验,降低沟通成本。请求说明名称类型必须说明fromString是源语言toString是目标语言formatString是音频格式:pcm、wavvoiceString是音频文件二进制数据,需使用base64编码,编码后的大小不能超过4MB戳这里返回样例{ "code": 200, // 返回码,详见返回码说明 "msg": "成功", // 返回码对应描述 "taskNo": "65605503936940344488", // 本次请求号 "charge": false, // 计费标志 "data": { "result": { "source": "你好。",//语音识别得到的原文 "target": "hello",//翻译后的目标语言文本 "target_tts": "aaa"//译文 TTS,使用base64编码(注:若翻译后的目标语言文本字节数超过400,则不返回target_tts内容) } } } 语音翻译接口有哪些优势?相比传统需要分别调用语音识别、机器翻译和语音合成多个接口的方案,语音翻译API具有以下优势:一站式处理一次调用即可完成语音识别、文本翻译及语音播报,无需重复开发。支持40多种语言覆盖中文、英文、日文、韩文、法文、德文、西班牙语等多种语言之间的互译,满足国际化业务需求。支持60秒短语音接口可处理60秒以内的语音内容,适用于大多数日常业务场景。接入简单采用标准HTTP API,开发语言不限,可快速集成至Web、APP、小程序及企业后台系统。
-
前言在人像处理、AI绘图、证件照制作、电商设计、短视频运营等业务中,经常需要将人物主体从图片背景中精准分离,实现透明背景图片输出。为了帮助开发者快速实现人像抠图能力,聚美智数提供了人像抠图接口,通过 AI 智能识别人像主体,一键完成背景去除。该接口可广泛应用于证件照制作、商品海报设计、直播电商、图片换背景、AI写真、图片合成、广告设计、社交头像制作、图片编辑等场景,能够有效提升图片处理效率,降低人工修图成本。API介绍接口支持图片 URL、Base64、文件上传等多种图片提交方式,返回透明背景的人像图片,方便开发者快速集成到各类 Web、App、小程序及企业业务系统中。请求说明名称类型必须说明imageString否原人像图片base64urlString否原人像图片url链接typeString否控制返回结果中图片类型个数,默认返回3种图片类型。type等于单个类型,即返回单个对应类型图片。单个类型值样例:labelmaptype等于多个类型,即返回多个对应类型图片。多个类型值样例:labelmap,scoremap,foreground请使用英文逗号分隔即可labelmap - 分割结果图片,去掉人像后的底图scoremap - 人像前景灰度图foreground - 人像前景抠图,透明背景戳这里返回样例{ "code": 200, "msg": "成功", "charge": true, "taskNo": "53507819419028107236", "data": { "labelMapUrl": "xxxxxx",// 去掉人像后的底图url链接,有效期10天。建议自行下载保存,避免丢失 "scoreMapUrl": "xxxxxx",//人像前景灰度图url链接,有效期10天。建议自行下载保存,避免丢失 "foreGroundUrl": "xxxxx",//人像前景抠图url链接,有效期10天。建议自行下载保存,避免丢失 "personNum": 3,//检测到的人体框数目 "personInfo": [//人体框信息 { "height": 210.3421110897064,//人体区域的高度 "width": 325.98774365234375,//人体区域的宽度 "top": 3.704406976699829,//人体区域离上边界的距离 "left": 229.32940673828125, //人体区域离左边界的距离 "score": 0.9801973104476929//人体框的概率分数,取值0-1 }, { "height": 371.6713676452637, "width": 167.91799926757812, "top": 49.91801834106445, "score": 0.4228516221046448, "left": 470.4878234863281 } ] } }
-
前言企业纳税信用是指税务机关对纳税人履行税收义务状况的客观评价,是社会信用体系建设的重要组成部分。共A、B、M、C、D五个等级。如下表所示:信用级别年度评价指标得分备注A级90分以上最高等级B级70分以上,不满90分属于正常守信M级70分以上适用于新设立企业,或评价年度内无生产经营业务收入的企业C级40分以上,不满70分需要加强管理D级不满40分存在严重失信行为,被直接判级确定评价结果每年定期更新,一般在每年4月确定上一年度的评价结果。可根据企业名、统一信用代码、注册号或企业历史名称来查询企业纳税信用登记。API介绍请求说明名称类型必须说明appIdString是服务商分配的唯一标识timestamplong是当前时间的毫秒数signString是签名,详见签名算法说明keywordString是企业名/统一信用代码/注册号/企业历史名称pageNoString否页码,默认第一页pageSizeString否每页条数,默认为10,最大不超过20条戳这里查看详情返回样例{ "code": 200,//返回码,详见返回码说明 "msg": "成功",//返回码对应描述 "taskNo": "183264485232190694679261",//本次请求号 "data": { "pageNo": "1",////当前页号,从1开始 "recordCount": "1",//记录总数 "pageSize": "10",//每页记录数 "list": [ { "province": "上海", //所属省/自治区/直辖市 "level": "A", //纳税人信用等级 "year": "2023",//评价年度 "tin": "91310115MA1K3CUM7M",//纳税人识别号,一般来说也是统一社会信用代码,但会有例外且无法稳定识别 "authorityInCharge": "国家税务总局上海市松江区税务局" //主管税务机关 } ] } }
推荐直播
-
华为云码道Skill实战与极速交付,智能开发全链路实战2026/07/22 周三 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;姜浩-华为云HCDG核心组成员
直播深度解读华为云码道6月产品新特性,从Skill市场安装专家技能,带你零距离体验从需求,开发,审查,重构全链路闭环的开发过程。从零构建并交付一个完整项目,让您体验从代码提交到服务上线的“极速”之旅。
回顾中 -
聚开发者之力,创具身新未来2026/07/23 周四 15:00-17:00
张豪杰/程文/王军/刘新春/黄钦开 /张晓天
本次华为云具身智能开发平台CloudRobo培训面向具身智能开发者,带您全流程体验机器人本体R2C小时级接入、环境重建与轨迹生成仿真数据生产、PB级数据管理、数据评测、模型训推、强化学习和Benchmark一键评测等功能,并体验业界主流具身模型应用。
回顾中
热门标签