杨校老师竞赛课之青科赛GOC3-4年级组模拟题

1.山峰(程序填空)程序填空题

题目描述

编程画出山峰。
要求:两个正三角形,三角形边长分别是200、100,山峰的颜色为8号色。
在这里插入图片描述

int main() {
    // 绘制等边三角形(边长100):右转30度调整起始角度,颜色的色号是8号
    p.rt(30).c(8); 
    
    // 绘制第一个等边三角形(逆时针方向)
    p.fd(100).rt(120);  // 前进100单位,右转120度
    p.fd(100).rt(120);  // 完成第二条边
    p.fd(100).rt(120);  // 完成第三条边,回到起点
    
    // 绘制第二个等边三角形(与第一个共用一条边,顺时针方向)
    p.lt(60).fd(200);   // 左转60度,前进200单位(新三角形的第一条边)
    p.lt(120).fd(200);  // 左转120度,前进200单位(第二条边)
    p.lt(120).fd(200);  // 左转120度,前进200单位(第三条边,回到起点)
    
    // 隐藏画笔,完成绘制
    p.hide(); 
    return 0;
}

2. 八个圆(程序填空)程序填空题

题目描述

画一圈八个半径是50的粉色(9号色)圆,圆心位置到中心的距离是150。
在这里插入图片描述

int main() {
    // 初始化画笔状态 抬起画笔,避免绘制移动轨迹
    p.up(); 
 
    // 执行8次循环,每次绘制一个带圆弧的八边形边 
    for(int i = 0; i < 8; i++) {
        // 向前移动150个单位(绘制边长)
        p.fd(150); 
 
        // 绘制半径50、色号为9的圆
        p.o(50, 9);
 
        // 向后移动150单位返回起点(保持图形对称)
        p.bk(150); 
 
        // 右转45度(八边形内角计算:360/8=45)
        p.rt(45); 
    }
 
    return 0;
}

3.板凳

题目描述

编程画出如下图板凳,红色字为尺寸,不用画。
在这里插入图片描述

代码~

4.奖台A

题目描述

小C同学看奥运会比赛时,觉得这个领奖奖台很好看。请你帮忙使用GoC编程绘制。

image.png

说明: 上图中红色数字是标明尺寸的,不需要画出。 总宽240,上面3段每个宽80。

代码~

5.斜拉桥

题目描述
我国的港珠澳大桥是一座连接香港、广东珠海和澳门的桥隧工程,是世界上最长的跨海大桥。斜拉索桥架像一个中国结。

在这里插入图片描述

线条:颜色8,size10。答案如下图:

在这里插入图片描述

在这里插入图片描述

int main(){{
    // 隐藏画笔/箭头,避免显示绘制轨迹 
    p.hide(); 
    
    // 将画笔移动到画布左侧(-150, 0)坐标 
    p.moveTo(-150,0); 
    
    // 设置画笔颜色为8号色,画笔粗细为10像素
    p.c(8).size(10);
    
    // 绘制向右倾斜的箭头
    p.rt(5)        // 向右旋转5度 
     .fd(300)     // 向前绘制300像素长度的直线(箭头主干)
     .up()        // 抬起画笔(移动时不绘制)
     .bk(30)      // 向后移动30像素(定位到箭头头部起始点)
     .down()      // 放下画笔开始绘制
     .rt(120)     // 向右旋转120度(开始绘制等边三角形箭头头部)
     .fd(100)     // 绘制第一条边
     .rt(120)     // 继续右转120度
     .fd(100)     // 绘制第二条边 
     .rt(120)     // 完成三角形箭头头部的绘制 
     .up()        // 抬起画笔
     .bk(170)     // 后退170像素回到主干末端
     .down();     // 准备继续绘制 
 
    // 将画笔重置到画布中心(0, 0)
    p.moveTo(0,0); 
    
    // 绘制向左倾斜的对称箭头
    p.lt(10)       // 向左旋转10度(创建对称角度)
     .fd(300)     // 向前绘制主干 
     .up()        // 抬起画笔 
     .bk(30)      // 定位到箭头头部起始点 
     .down()      // 开始绘制 
     .lt(120)     // 向左旋转120度绘制三角形
     .fd(100)     // 第一条边
     .lt(120)     // 继续左转 
     .fd(100)     // 第二条边 
     .lt(120)     // 完成箭头头部
     .up()        // 抬起画笔
     .bk(170)     // 返回主干末端 
     .down();     // 准备后续绘制
    
    return 0;
}}

6.轮子

题目描述

画一个8根辐条的轮子,要求如下:

圆半径分别为200,170,30,颜色为0号色;

注意:图形是对称的,线条没有垂直向上的。
在这里插入图片描述

在这里插入图片描述

int main(){
    // 初始化画布设置 
    p.hide();           // 隐藏画笔光标 
    p.c(0);            // 设置画笔颜色为黑色(0通常代表黑色)
    p.o(200);          // 画笔绘制第一个圆形:200
    p.o(170);          // 画笔绘制第二个圆形:170
    p.o(30);           // 画笔绘制第三个圆形:30
    
    p.rt(22.5);         // 初始向右旋转22.5度,为对称图形做角度偏移 
    
    // 绘制八边形对称结构 
    for(int i=1; i<=8; i++){
        p.rt(45)        // 每次循环右转45度(8次循环完成360度)
        .up()          // 抬起画笔(移动时不绘制)
        .fd(30)        // 向前移动30单位(定位绘制起点)
        .down()        // 放下画笔(开始绘制)
        .fd(140)       // 绘制主分支(长度140单位)
        .bk(140)       // 后退140单位回到起点 
        .up()          // 抬起画笔
        .bk(30)        // 后退30单位回到初始位置 
        .down();       // 准备下一次绘制 
    }
     
    return 0;
}
<think>好的,我现在要回答用户关于如何构建检索增强生成(RAG)数据库的问题,并且不能包含图片和视频。用户之前已经询问过DeepSeek本地部署的硬件配置,现在转向RAG的构建过程,可能是在考虑实际应用中的具体实施步骤。我需要确保回答结构清晰,步骤详细,同时避免技术术语过多导致用户理解困难。 首先,用户可能对RAG的基本概念有所了解,但需要具体的步骤指南。我需要分解RAG数据库构建的各个阶段,从数据准备到最终的优化和维护。需要涵盖数据收集、预处理、向量化、数据库选择、集成到生成模型等关键步骤。 接下来,考虑到用户之前询问的是硬件配置,可能他们在部署RAG时也会关注硬件需求,比如存储、计算资源等,但这次问题主要聚焦在构建过程本身,所以可能需要提到相关工具和框架,如LangChain、LlamaIndex,以及向量数据库如FAISS或Milvus,但不需要深入硬件细节。 需要确保每个步骤都有足够的解释,比如数据预处理中的分块策略,向量模型的选择,以及检索优化方法。同时,用户提到不能包含图片和视频,所以需要用文字详细描述流程和注意事项。 另外,用户可能需要实际应用中的例子,比如客服系统或知识库的应用场景,以帮助理解。但问题中没有具体场景,所以保持一般性的步骤说明。 还要注意术语的准确性,比如Embedding模型、向量数据库、检索策略等,可能需要简要解释这些术语,但不要过于冗长,假设用户有一定的基础知识。 最后,需要检查步骤是否逻辑连贯,是否有遗漏的关键点,比如数据安全、版本控制、评估指标等,这些都是构建RAG系统时需要考虑的因素。同时,强调实际应用中的灵活调整,因为不同场景需求不同。 总结来说,回答需要结构清晰,分步骤详细说明,涵盖从数据准备到系统维护的全流程,提供工具建议和优化方法,同时注意避免技术术语过多,保持易懂性。</think>以下是构建检索增强生成(RAG)数据库的核心流程(无需图片/视频): --- ### **一、RAG 核心流程** 1. **数据收集与清洗** - **来源**:文本文件、PDF、网页、数据库、API等。 - **格式标准化**:统一为纯文本(如Markdown、TXT),移除HTML标签、特殊符号。 - **去重与过滤**:删除重复内容,过滤低质量或无关数据。 2. **文本分块(Chunking)** - **策略选择**: - 固定长度分块(如每段512字符) - 按语义分块(利用句子边界、段落标题) - 重叠分块(相邻块间保留部分重复内容,避免上下文断裂) - **工具示例**:LangChain的`RecursiveCharacterTextSplitter`、`NLTK`分句。 3. **向量化(Embedding)** - **模型选择**: - 通用模型:OpenAI `text-3-small`、`BAAI/bge-zh` - 领域专用模型:针对医学、法律等微调的Embedding模型 - **计算与存储**: - 将文本块转换为高维向量(如768维) - 向量存入数据库时需关联原始文本(用于后续生成阶段) 4. **向量数据库构建** - **数据库选型**: | 类型 | 代表工具 | 适用场景 | |---|---|---| | 轻量级 | FAISS、Annoy | 单机快速检索 | | 分布式 | Milvus、Weaviate、Qdrant | 大规模数据/高并发 | | 云服务 | Pinecone、AWS Kendra | 免运维/企业级需求 | - **索引优化**: - 使用HNSW(层级导航小世界算法)加速近似搜索 - 调整`efConstruction`、`M`参数平衡精度与速度 5. **检索策略设计** - **基础检索**:基于余弦相似度的Top-K结果返回 - **混合检索**:结合关键词(BM25)与向量相似度加权 - **后处理**:去重、相关性阈值过滤、元数据筛选(如时间范围) 6. **与大模型集成** - **Prompt工程**: ```text 根据以下上下文回答问题: {context} 问题:{query} 答案: ``` - **生成控制**: - 限制模型仅依赖提供的上下文(防止幻觉) - 使用LangChain的`RetrievalQA`或LlamaIndex的`QueryEngine` --- ### **二、关键工具与技术栈** 1. **数据处理**:Python(PyPDF2、BeautifulSoup)、Apache Tika 2. **Embedding模型**:Hugging Face Transformers、Sentence-Transformers 3. **向量数据库**:Milvus(开源首选)、Pinecone(云服务) 4. **流程框架**:LangChain(灵活但需编码)、LlamaIndex(专注RAG优化) --- ### **三、优化方向** 1. **分块策略调优** - 测试不同分块长度(如256/512/1024 tokens)对召回率的影响 - 对表格/代码等结构化数据采用特殊分块规则 2. **多模态扩展** - 非文本数据(如图片OCR、音视频转文本)需先转为文本再处理 3. **检索增强技巧** - **查询重写**:用LLM扩展用户问题的关联关键词 - **HyDE**:生成假设答案作为检索依据(提升相关性) - **Rerank**:用交叉编码器(如`bge-reranker`)对Top-K结果重排序 4. **评估指标** - **检索阶段**:MRR(平均倒数排名)、Recall@K - **生成阶段**:ROUGE、BLEU、人工评估事实准确性 --- ### **四、典型问题与解决方案** | 问题现象 | 可能原因 | 解决方法 | |--|---| | 返回无关内容 | 分块过大/Embedding模型不匹配 | 缩短分块长度,测试不同Embedding模型 | | 遗漏关键信息 | 分块切割破坏语义 | 采用重叠分块或按标题分块 | | 生成答案不准确 | 检索结果质量低 | 增加Rerank步骤或优化检索策略 | -- ### **五、部署注意事项** 1. **数据安全**:敏感数据需本地部署Embedding模型+向量数据库 2. **版本管理**:维护不同版本的数据集与索引(便于回滚) 3. **更新机制**:增量索引(避免全量重建)或定时刷新策略 如需具体场景(如客服知识库、法律文档分析)的细化方案,可提供更多需求细节进一步讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杨校

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

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

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

打赏作者

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

抵扣说明:

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

余额充值