RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库
文章作者:
石强,镜舟科技解决方案架构师
赵恒,StarRocks TSC Member
👉 加入 StarRocks x AI 技术讨论社区 https://mp.weixin.qq.com/s/61WKxjHiB-pIwdItbRPnPA
RAG 和向量索引简介
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合外部知识检索与 AI 生成的技术,弥补了传统大模型知识静态、易编造信息的缺陷,使回答更加准确且基于实时信息。
RAG 的核心流程
检索(Retrieval)
-
用户输入问题后,RAG 从外部数据库(如维基百科、企业文档、科研论文等)检索相关内容。
-
检索工具可以是向量数据库、搜索引擎或传统数据库。
生成(Generation)
-
将检索到的相关信息与用户输入一起输入生成模型(如 GPT、LLaMA 等),生成更准确的回答。
-
模型基于检索内容“增强”输出,而非仅依赖内部参数化知识。
上图展示了 RAG 的标准流程。首先,图片、文档、视频和音频等数据经过预处理,转换为 Embedding 并存入向量数据库。Embedding 通常是高维 float 数组,借助向量索引(如 HNSW、IVF)进行相似性搜索,加速高效检索。
向量索引通过近似最近邻(ANN)算法优化查询效率,减少高维计算负担。语义搜索匹配用户问题与知识库中的相关内容,使回答基于真实信息,从而降低大模型的“幻觉”风险,提升回答的自然性和可靠性。
关于向量检索的更多介绍,可以参考 腾讯大数据基于 StarRocks 的向量检索探索 这篇文章。这里不再展开说明。
StarRocks + DeepSeek 的典型 RAG 应用场景
DeepSeek 负责生成高质量 Embedding 和回答,StarRocks 提供实时高效的向量检索,二者结合可构建更智能、更精准的 AI 解决方案。
企业级知识库
适用场景:
-
企业内部知识库(文档搜索、FAQ)
-
法律、金融、医药等专业领域问答
-
代码搜索、软件开发文档查询
方案:
-
文档嵌入(DeepSeek 负责): 将企业知识库、FAQ、技术文档等数据转换为向量。
-
存储+索引(StarRocks 负责): 使用 HNSW 或 IVFPQ 存储向量存储在 StarRocks 中,支持高效检索。
-
检索增强生成(RAG 负责): 用户输入问题 → DeepSeek 生成查询向量 → StarRocks 进行向量匹配 → 返回相关文档 → DeepSeek 结合文档生成最终回答。
AI 客服与智能问答
适用场景:
-
智能客服(银行、证券、电商)
-
法律、医疗等专业咨询
-
技术支持自动问答
方案:
-
客户对话日志嵌入(DeepSeek 负责): 训练 LLM 处理用户意图,转换历史聊天记录为向量。
-
存储+索引(StarRocks 负责): 采用向量索引让客服系统能够高效查找相似案例。
-
检索增强(RAG 负责): 结合历史客服对话 + 知识库 + DeepSeek LLM 生成答案。
示例流程:
-
用户问:“我如何更改银行卡预留手机号?”
-
StarRocks 检索到 3 个最相似的客户服务记录
-
DeepSeek 结合这 3 条历史记录 + 预设 FAQ,生成精准回答
操作演示
系统组成
-
DeepSeek:提供文本向量化(embedding)和答案生成能力
-
StarRocks:高效存储和检索向量数据(3.4+版本支持向量索引)
实现流程:
步骤 | 负责组件 | 具体实现 |
1.环境准备 | Ollama StarRocks | 用 Ollama 在本地机器上便捷地部署和运行大型语言模型 |
2.数据向量化 | DeepSeek-Embedding | 文本 → 3584 维向量 |
3.存储向量 | StarRocks | 创建表,存入向量 |
4.近似最近邻搜索 | StarRocks 向量索引 | IVFPQ / HNSW 检索 |
5.检索增强 | 模拟 RAG 逻辑 | 结合检索数据 |
6.生成答案 | DeepSeek LLM | 生成基于真实数据的回答 |
1.环境准备
1.1 DeepSeek 本地部署
Tips: 以下内容使用的是 macbook 进行 demo 演示
1.1.1 使用 ollama 安装本地模型
在本地部署 DeepSeek 时,Ollama 主要起到模型管理和提供推理接口的作用,支持运行多个不同的 LLM,并允许用户在本地切换和管理不同的模型。
-
下载 ollama:https://ollama.com/
-
安装 deepseek-r1:7b
# 该命令会自动下载并加载模型
ollama run deepseek-r1:7b
Tips: 如果想使用云端 LLM(如 DeepSeek 的官方 API),需要获取并填写 API Key
访问 DeepSeek 官网(https://platform.deepseek.com)后注册账号并登录;在仪表盘中创建 API Key(通常在 “API Keys” 或 “Developer” 部分),复制生成的密钥(如 sk-xxxxxxxxxxxxxxxx)。
1.1.2 Deepseek 初步使用
启动 deepseek
执行 ollama run deepseek-r1:7b 直接进入交互模式
1.1.3 Deepseek 性能优化
直接在命令行设置参数:(参数单次生效)
OLLAMA_GPU_LAYERS=35 \
OLLAMA_CPU_THREADS=6 \
OLLAMA_BATCH_SIZE=128 \
OLLAMA_CONTEXT_SIZE=4096 \
ollama run deepseek-r1:7b
1.1.4 deepseek 使用
显而易见:直接使用 deepseek 进行问答,返回的答案是不符合预期的,需要对知识进行修正
1.2 StarRocks 准备工作
1.2.1 集群部署
版本需求:3.4 及以上
1.2.2 配置设置
打开 vector index
ADMIN SET FRONTEND CONFIG ("enable_experimental_vector" = "true");
1.2.3 建库建表
建库:
create database knowledge_base;
建表:存储知识库向量
CREATE TABLE enterprise_knowledge (id BIGINT AUTO_INCREMENT,content TEXT NOT NULL,embedding ARRAY<FLOAT> NOT NULL,INDEX vec_idx (embedding) USING VECTOR ("index_type" = "hnsw","dim" = "3584","metric_type" = "l2_distance","M" = "16","efconstruction" = "40")
) ENGINE=OLAP
PRIMARY KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");
Tips: DeepSeek 的 deepseek-r1:7b 模型(7B 参数版本)默认生成高维嵌入向量,通常是 3584 维
2.将文本转成向量
测试通过 deepseek 将文本转为 3584 维向量
curl -X POST http://localhost:11434/api/embeddings -d '{"model": "deepseek-r1:7b", "prompt": "产品保修期是一年。"}'
下面将转化的向量数据保存在 StarRocks 中
3.知识存储 (存储向量到 StarRocks)
import pymysql
import requestsdef get_embedding(text):url = "http://localhost:11434/api/embeddings"payload = {"model": "deepseek-r1:7b", "prompt": text}response = requests.post(url, json=payload)response.raise_for_status()return response.json()["embedding"]try:content = "StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。"embedding = get_embedding(content)# 将 Python 列表转换为 StarRocks 的数组格式embedding_str = "[" + ",".join(map(str, embedding)) + "]" # 例如:[0.1,0.2,0.3]conn = pymysql.connect(host='X.X.X.X',port=9030,user='root',password='sr123456',database='knowledge_base')cursor = conn.cursor()# 使用格式化的数组字符串sql = "INSERT INTO enterprise_knowledge (content, embedding) VALUES (%s, %s)"cursor.execute(sql, (content, embedding_str))conn.commit()print(f"Inserted: {content} with embedding {embedding[:5]}...")except requests.RequestException as e:print(f"Embedding API error: {e}")
except pymysql.Error as db_err:print(f"Database error: {db_err}")
finally:if 'cursor' in locals():cursor.close()if 'conn' in locals():conn.close()
操作演示
4.知识提取 (检索向量 & 输出结果)
import pymysql
import requests# 获取嵌入向量的函数
def get_embedding(text):url = "http://localhost:11434/api/embeddings"payload = {"model": "deepseek-r1:7b", "prompt": text}response = requests.post(url, json=payload)response.raise_for_status()return response.json()["embedding"]# 从 StarRocks 查询相似内容的函数
def search_knowledge_base(query_embedding):try:conn = pymysql.connect(host='39.98.110.249',port=9030,user='root',password='sr123456',database='knowledge_base')cursor = conn.cursor()# 将查询向量转换为 StarRocks 的数组格式embedding_str = "[" + ",".join(map(str, query_embedding)) + "]"# 使用 L2 距离搜索最相似的记录sql = """SELECT content, l2_distance(embedding, %s) AS distanceFROM enterprise_knowledgeORDER BY distance ASCLIMIT 1"""cursor.execute(sql, (embedding_str,))result = cursor.fetchone()if result:return result[0] # 返回最匹配的 contentelse:return "未找到相关信息。"except pymysql.Error as db_err:print(f"Database error: {db_err}")return "查询失败。"finally:if 'cursor' in locals():cursor.close()if 'conn' in locals():conn.close()# 主流程
try:query = "StarRocks 的愿景是什么?"query_embedding = get_embedding(query) # 将查询转化为向量answer = search_knowledge_base(query_embedding) # 从知识库检索答案print(f"问题: {query}")print(f"回答: {answer}")except requests.RequestException as e:print(f"Embedding API error: {e}")
except Exception as e:print(f"Error: {e}")
执行效果
补充说明:到目前为止的流程仅依赖 StarRocks 进行向量检索,未利用 DeepSeek LLM 进行生成,导致回答生硬且缺乏上下文整合,影响自然性和准确性。为提升效果,应引入 RAG 机制,使检索结果与生成模型深度融合,从而优化回答质量并减少幻觉问题。
5.加入 RAG 增强
5.1 将查询知识库的结果,返回给 DeepSeek LLM ,优化回答质量
构造 RAG Prompt
def build_rag_prompt(query, retrieved_content):prompt = f"""[系统指令] 你是企业智能客服,基于以下知识回答用户问题:[知识上下文] {retrieved_content}[用户问题] {query}"""return prompt# 调用 DeepSeek 生成回答
def generate_answer(prompt):url = "http://localhost:11434/api/generate"payload = {"model": "deepseek-r1:7b", "prompt": prompt}try:response = requests.post(url, json=payload)response.raise_for_status()full_response = ""for line in response.text.splitlines():if line.strip(): # 过滤空行try:json_obj = json.loads(line)if "response" in json_obj:full_response += json_obj["response"] # 只提取答案if json_obj.get("done", False):breakexcept json.JSONDecodeError as e:print(f"JSON 解析错误: {e}, line: {line}")return clean_response(full_response.strip()) # 处理并去掉 <think>XXX</think>except requests.exceptions.RequestException as e:print(f"请求失败: {e}")return "生成失败。"
5.2 创建 RAG 过程表:
用于记录用户问题、检索结果和生成回答,保存上下文,方便进行长对话,至于长对话,用户可自行探索。
customer_service_log 表建表语句如下:
CREATE TABLE customer_service_log (id BIGINT AUTO_INCREMENT,user_id VARCHAR(50),question TEXT NOT NULL,question_embedding ARRAY<FLOAT> NOT NULL,retrieved_content TEXT,generated_answer TEXT,timestamp DATETIME NOT NULL,feedback TINYINT DEFAULT NULL
) ENGINE=OLAP
PRIMARY KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1"
);
6.优化后的版本
6.1 知识提取代码
6.1.1 知识提取
import pymysql
import requests
import json
from datetime import datetime
import logging
import re# 获取嵌入向量
def get_embedding(text):url = "http://localhost:11434/api/embeddings"payload = {"model": "deepseek-r1:7b", "prompt": text,"stream": "true"}response = requests.post(url, json=payload)response.raise_for_status()return response.json()["embedding"]# 从 StarRocks 检索知识
def search_knowledge_base(query_embedding):try:conn = pymysql.connect(host='X.X.X.X',port=9030,user='root',password='sr123456',database='knowledge_base')cursor = conn.cursor()embedding_str = "[" + ",".join(map(str, query_embedding)) + "]"sql = """SELECT content, l2_distance(embedding, %s) AS distanceFROM enterprise_knowledgeORDER BY distance ASCLIMIT 3"""cursor.execute(sql, (embedding_str,))results=cursor.fetchall()content=""for result in results:content+=result[0]return contentexcept pymysql.Error as db_err:print(f"Database error: {db_err}")return "查询失败。"finally:cursor.close()conn.close()def build_rag_prompt(query, retrieved_content):prompt = f"""[系统指令] 你是企业智能客服,基于以下知识回答用户问题:[知识上下文] {retrieved_content}[用户问题] {query}"""return prompt# 调用 DeepSeek 生成回答
def generate_answer(prompt):url = "http://localhost:11434/api/generate"payload = {"model": "deepseek-r1:7b", "prompt": prompt}try:response = requests.post(url, json=payload)response.raise_for_status()full_response = ""for line in response.text.splitlines():if line.strip(): # 过滤空行try:json_obj = json.loads(line)if "response" in json_obj:full_response += json_obj["response"] # 只提取答案if json_obj.get("done", False):breakexcept json.JSONDecodeError as e:print(f"JSON 解析错误: {e}, line: {line}")return clean_response(full_response.strip()) # 处理并去掉 <think>XXX</think>except requests.exceptions.RequestException as e:print(f"请求失败: {e}")return "生成失败。"# 记录对话日志
def log_conversation(user_id, question, question_embedding, retrieved_content, generated_answer):try:conn = pymysql.connect(host='X.X.X.X',port=9030,user='root',password='sr123456',database='knowledge_base')cursor = conn.cursor()embedding_str = "[" + ",".join(map(str, question_embedding)) + "]"sql = """INSERT INTO customer_service_log (user_id, question, question_embedding, retrieved_content, generated_answer, timestamp)VALUES (%s, %s, %s, %s, %s, NOW())"""cursor.execute(sql, (user_id, question, embedding_str, retrieved_content, generated_answer))conn.commit()except pymysql.Error as db_err:print(f"Database error: {db_err}")finally:cursor.close()conn.close()def clean_response(text):# 去掉所有 <think>xxx</think> 结构return re.sub(r"<think>.*?</think>", "", text, flags=re.DOTALL).strip()# 主流程
def rag_pipeline(user_id, query):try:logging.info(f"开始处理查询: {query}")query_embedding = get_embedding(query)logging.info("获取嵌入向量成功")retrieved_content = search_knowledge_base(query_embedding)logging.info(f"检索到内容: {retrieved_content[:50]}...") # 只展示前50字符prompt = build_rag_prompt(query, retrieved_content)generated_answer = generate_answer(prompt)logging.info(f"生成回答: {generated_answer[:50]}...")log_conversation(user_id, query, query_embedding, retrieved_content, generated_answer)logging.info("日志记录完成")return generated_answerexcept Exception as e:logging.error(f"发生错误: {e}", exc_info=True)return "处理失败。"# 测试
if __name__ == '__main__':logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")user_id = "user123"query = "StarRocks 的愿景是什么?"answer = rag_pipeline(user_id, query)print(f"问题: {query}")print(f"回答: {answer}")
6.1.2 操作演示
总结一下 RAG 增强后的执行流程:
输入:用户输入问题
数据向量化:DeepSeek Embedding
StarRocks 向量索引,在 enterprise_knowledge 表中检索最相似的知识
增强(Augmentation):将检索结果与问题组合成 Prompt,传递给 DeepSeek
生成回答:调用 DeepSeek 生成增强后的回答
记录日志:将问题、检索结果和生成回答存入 customer_service_log
返回结果:将生成的回答返回给用户
6.2 加上 web 可视化界面
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>智能问答客服系统</title><script>async function askQuestion() {let question = document.getElementById("question").value;let response = await fetch("/ask", {method: "POST",headers: {"Content-Type": "application/json"},body: JSON.stringify({ question: question })});let data = await response.json();document.getElementById("answer").innerText = data.answer;}</script>
</head>
<body><h1>智能问答客服系统</h1><input type="text" id="question" placeholder="请输入您的问题"><button onclick="askQuestion()">提问</button><p id="answer"></p>
</body>
</html>
6.3 完整问答后台服务代码
6.3.1 代码结构如下
6.3.2 知识存储代码
import pymysql
import requestsdef get_embedding(text):url = "http://localhost:11434/api/embeddings"payload = {"model": "deepseek-r1:7b", "prompt": text}response = requests.post(url, json=payload)response.raise_for_status()return response.json()["embedding"]try:content = "StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。"embedding = get_embedding(content)# 将 Python 列表转换为 StarRocks 的数组格式embedding_str = "[" + ",".join(map(str, embedding)) + "]" # 例如:[0.1,0.2,0.3]conn = pymysql.connect(host='X.X.X.X',port=9030,user='root',password='sr123456',database='knowledge_base')cursor = conn.cursor()# 使用格式化的数组字符串sql = "INSERT INTO enterprise_knowledge (content, embedding) VALUES (%s, %s)"cursor.execute(sql, (content, embedding_str))conn.commit()print(f"Inserted: {content} with embedding {embedding[:5]}...")except requests.RequestException as e:print(f"Embedding API error: {e}")
except pymysql.Error as db_err:print(f"Database error: {db_err}")
finally:if 'cursor' in locals():cursor.close()if 'conn' in locals():conn.close()
6.3.3 知识提取
import pymysql
import requests
import json
import logging
import re
from flask import Flask, request, jsonify, render_templateapp = Flask(__name__)# 配置日志
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")# 获取嵌入向量
def get_embedding(text):url = "http://localhost:11434/api/embeddings"payload = {"model": "deepseek-r1:7b", "prompt": text, "stream": "true"}response = requests.post(url, json=payload)response.raise_for_status()return response.json()["embedding"]# 从 StarRocks 检索知识
def search_knowledge_base(query_embedding):try:conn = pymysql.connect(host='X.X.X.X',port=9030,user='root',password='sr123456',database='knowledge_base')cursor = conn.cursor()embedding_str = "[" + ",".join(map(str, query_embedding)) + "]"sql = """SELECT content, l2_distance(embedding, %s) AS distanceFROM enterprise_knowledgeORDER BY distance ASCLIMIT 3"""cursor.execute(sql, (embedding_str,))results=cursor.fetchall()content=""for result in results:content+=result[0]# result = cursor.fetchone()return contentexcept pymysql.Error as db_err:print(f"Database error: {db_err}")return "查询失败。"finally:cursor.close()conn.close()# 构造 RAG Prompt
def build_rag_prompt(query, retrieved_content):return f"""[系统指令] 你是企业智能客服,基于以下知识回答用户问题:[知识上下文] {retrieved_content}[用户问题] {query}"""# 调用 DeepSeek 生成回答
def generate_answer(prompt):url = "http://localhost:11434/api/generate"payload = {"model": "deepseek-r1:7b", "prompt": prompt}try:response = requests.post(url, json=payload)response.raise_for_status()full_response = ""for line in response.text.splitlines():if line.strip():try:json_obj = json.loads(line)if "response" in json_obj:full_response += json_obj["response"]if json_obj.get("done", False):breakexcept json.JSONDecodeError as e:logging.warning(f"JSON 解析错误: {e}, line: {line}")return clean_response(full_response.strip()) # 处理并去掉 <think>XXX</think>except requests.exceptions.RequestException as e:logging.error(f"请求失败: {e}")return "生成失败。"# 记录对话日志
def log_conversation(user_id, question, question_embedding, retrieved_content, generated_answer):try:conn = pymysql.connect(host='X.X.X.X',port=9030,user='root',password='sr123456',database='knowledge_base')cursor = conn.cursor()embedding_str = "[" + ",".join(map(str, question_embedding)) + "]"sql = """INSERT INTO customer_service_log (user_id, question, question_embedding, retrieved_content, generated_answer, timestamp)VALUES (%s, %s, %s, %s, %s, NOW())"""cursor.execute(sql, (user_id, question, embedding_str, retrieved_content, generated_answer))conn.commit()except pymysql.Error as db_err:logging.error(f"数据库错误: {db_err}")finally:cursor.close()conn.close()# 清理回答内容,去掉 <think>XXX</think>
def clean_response(text):return re.sub(r"<think>.*?</think>", "", text, flags=re.DOTALL).strip()# RAG 处理流程
def rag_pipeline(user_id,query):try:logging.info(f"开始处理查询: {query}")query_embedding = get_embedding(query)logging.info("获取嵌入向量成功")retrieved_content = search_knowledge_base(query_embedding)logging.info(f"检索到内容: {retrieved_content[:50]}...") # 只展示前50字符prompt = build_rag_prompt(query, retrieved_content)generated_answer = generate_answer(prompt)logging.info(f"生成回答: {generated_answer[:50]}...")log_conversation(user_id, query, query_embedding, retrieved_content, generated_answer)logging.info("日志记录完成")return generated_answerexcept Exception as e:logging.error(f"发生错误: {e}", exc_info=True)return "处理失败。"# Flask API
@app.route("/")
def index():return render_template("index.html") # 渲染前端页面@app.route("/ask", methods=["POST"])
def ask():user_id="sr_01"data = request.jsonquestion = data.get("question", "")result=rag_pipeline(user_id,question)answer = f"问题:{question}。\n 回答:{result}"return jsonify({"answer": answer})if __name__ == "__main__":user_id = "sr"app.run(host="0.0.0.0", port=9033, debug=True)
6.3.4 效果演示
参考文档:
Deepseek 搭建:https://zhuanlan.zhihu.com/p/20803691410
Vector index 资料:https://docs.starrocks.io/zh/docs/table_design/indexes/vector_index/
StarRocks AI 共创计划:让数据分析更智能!
AI 时代已来,StarRocks 正在加速进化!我们诚邀社区开发者、数据工程师和 AI 爱好者一起探索 “AI + 数据分析” 的无限可能。无论你是擅长算法优化、应用落地,还是热爱技术布道,这里都有你的舞台!
🌟 你的贡献,能让 StarRocks 更强大!我们期待你在以下方向大展身手:
AI 增强分析:用 LLM、RAG 优化查询、智能 SQL 生成、自然语言交互
工具 & 插件:开发 AI 扩展、模型集成、自动化运维方案
实战案例:分享你的 AI+StarRocks 应用 Demo(附代码/视频更佳!)
🎁 丰厚奖励
Top 10 优秀贡献者将获得 StarRocks 社区荣誉 + 2000 积分奖励(详情参考 StarRocks 布道师计划)
优秀项目有机会被官方推荐,并整合进 StarRocks 生态
📢 立即行动!👉 在社区论坛分享你的创意或 AI 实践:https://forum.mirrorship.cn/
相关文章:
RAG 实战|用 StarRocks + DeepSeek 构建智能问答与企业知识库
文章作者: 石强,镜舟科技解决方案架构师 赵恒,StarRocks TSC Member 👉 加入 StarRocks x AI 技术讨论社区 https://mp.weixin.qq.com/s/61WKxjHiB-pIwdItbRPnPA RAG 和向量索引简介 RAG(Retrieval-Augmented Gen…...
Java拼团项目
一些记录 环境配置 首先是把配置安装好,jdk1.8,maven3.8.8,docker,idea,脚手架 然后创建工程,通过小傅哥的脚手架从远程把一些包,依赖拉过来 然后在gitcode上边创建仓库,把代码提交…...
力扣每日打卡 2364. 统计坏数对的数目 (中等)
力扣 2364. 统计坏数对的数目 中等 前言一、题目内容二、解题方法1. 哈希函数12. 哈希函数22.官方题解2.1 方法一:使用 sqrt 函数 前言 这是刷算法题的第十四天,用到的语言是JS 题目:力扣 2364. 统计坏数对的数目 (中等) 一、题目内容 给你…...
R语言之.rdata文件保存及加载
在 R 中,.rdata 文件是通过 save() 函数创建的。 使用 save() 函数可以将一个或多个 R 对象保存到 .rdata 文件中。使用 load() 函数可以将 .rdata 文件中的对象恢复到当前工作环境中。 1.创建并保存对象到.rdata 假设有一个基于 iris 数据集训练的线性回归模型&a…...
神经网络优化 - 小批量梯度下降之批量大小的选择
上一博文学习了小批量梯度下降在神经网络优化中的应用: 神经网络优化 - 小批量梯度下降-CSDN博客 在小批量梯度下降法中,批量大小(Batch Size)对网络优化的影响也非常大,本文我们来学习如何选择小批量梯度下降的批量大小。 一、批量大小的…...
开源AI守护每一杯------奶茶咖啡店视频安全系统的未来之力
连锁饮品奶茶咖啡店视频安全系统以开源AI技术为引擎,将后厨管理从“被动查漏”升级为“主动防控”,让消费者从“担心卫生”变为“放心下单”。 解决方案亮点:技术驱动,全面防护 1. 实时监控与AI识别:秒级捕捉隐患 亮…...
音视频元素
目录 HTMLMediaElement网络状态 (networkState)就绪状态 (readyState)错误代码 (error.code) video属性方法事件 audio HTMLMediaElement HTMLMediaElement 是 HTML5 中 和 元素的基类,定义了它们共享的属性、方法和事件。无论你使用的是音频还是视频元素࿰…...
音视频小白系统入门课-2
本系列笔记为博主学习李超老师课程的课堂笔记,仅供参阅 课程传送门:音视频小白系统入门课 音视频基础ffmpeg原理 往期课程笔记传送门: 音视频小白系统入门笔记-0音视频小白系统入门笔记-1 课程实践代码仓库:传送门 音视频编解…...
时序逻辑电路——序列检测器
文章目录 一、序列检测二、牛客真题1. 输入序列连续的序列检测(输入连续、重叠、不含无关项、串行输入)写法一:移位寄存器写法二:Moore状态机写法三:Mealy状态机 一、序列检测 序列检测器指的就是将一个指定的序列&…...
#systemverilog# 进程控制问题#(八)关于#0 问题的使用(三)
今天,我们继续研究一下上一节讨论的问题。其实,还有一个小问题,我们来探讨一下。 `timescale 1ns/10psmodule tb_top(); reg clk; reg reset;initial begin reset = 0; #10 reset = 1; #15 reset = 0; #50 $finish; endinitial beginfor(int i = 0; i < 4 ; i++)fork #…...
k8s低版本1.15安装prometheus+grafana进行Spring boot数据采集
目录 一、背景: 二、实施过程 1).安装地址:https://github.com/prometheus-operator/kube-prometheus 2).安装方式两种, 3).安装Prometheus需要对照k8s集群版本。 4).拉去prometheus 5).导…...
Spring-Ioc容器的加载过程?
大家好,我是锋哥。今天分享关于【SpringIoC的实现机制是什么?】面试题。希望对大家有帮助; Spring-Ioc容器的加载过程? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC容器的加载过程是指在应用启动时&…...
kaamel Privacy agent:AI赋能的隐私保护技术解决方案
智能隐私合规解决方案 在当今数字经济环境下,有效的隐私合规已成为企业运营的基础要求。全球范围内已有超过120项隐私法规生效,这对企业的数据处理流程提出了严峻挑战。kaamel Privacy agent作为专门为隐私合规领域设计的AI引擎,通过自动化技…...
从零到上线!AI生成SpringBoot项目脚手架实战(含K8s+Docker配置)
在 Java 开发领域,搭建 Spring Boot 项目脚手架是一项耗时且繁琐的工作。传统方式下,开发者需要手动配置各种依赖、编写基础代码,过程中稍有疏忽就可能导致配置错误,影响开发进度。如今,随着 AI 技术的迅猛发展,飞算 JavaAI 的出现为开发者带来了全新解决方案,让自动生成 Sprin…...
VueRouter笔记
定义路由 import { createMemoryHistory, createRoute } from vue-router; import MyView1 from ./MyView1.vue; import MyView2 from ./MyView2.vue;const routes [{ path: /1, component: MyView1 },{ path: /2, component: MyView2 } ];const router createRouter({histo…...
vue3 Element-plus修改内置样式复现代码
笔者在修改Element-plus的内置样式时,遇到一点挫折,现提供需求场景与解决方案。 一、实现(1)透明弹窗可拖拽,且不影响点击弹窗外内容;(2)弹窗内置表格,表格需修改样式颜色…...
easyui进度条
简单打开和关闭 // 展示进度条 $.messager.progress({title: 请稍候,msg: 系统处理中...,text: 0%});//关闭进度条 $.messager.progress(close); easyui 普通提示 <!DOCTYPE html> <html> <head><meta charset"UTF-8">&l…...
vcpkg缓存问题研究
vcpkg缓存问题研究 问题描述解决方案官网给出的方案其实并不是大多数人语境中的“清除缓存”实际解决方案 问题描述 使用vcpkg管理c的库的时候,vcpkg会在c盘某些地方缓存下载的库,如果安装的库过多,这个缓存文件夹会过大占用磁盘空间&#x…...
优化WAV音频文件
优化 WAV 音频文件通常涉及 减小文件体积、提升音质 或 适配特定用途(如流媒体、广播等)。以下是分场景的优化方法,涵盖工具和操作步骤: 一、减小文件体积(无损/有损压缩) 1. 无损压缩 转换格式࿱…...
系统架构设计师:流水线技术相关知识点、记忆卡片、多同类型练习题、答案与解析
题目: 流水线技术中,若某流水线分为5段,每段执行时间为Δt,则执行100条指令的总时间为( ) A. 100Δt B. 104Δt C. 500Δt D. 505Δt 答案:B 解析:流水线总时间(nk-1)Δt&#…...
test ssl java
// 文件名:SslUtilsTest.java// 包路径: import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.InputStream; import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.hc.client5…...
【系统分析师】-软件工程
考点汇总 考点详情 软件生存周期:可行性分析与项目开发计划,需求分析,概要设计,详细设计,编码,测试,维护 软件能力成熟度模型 CMM:初始级,可重复级,已定义级…...
FFmpeg 硬核指南:从底层架构到播放器全链路开发实战 基础
目录 1.ffmpeg的基本组成2.播放器的API2.1 复用器阶段2.1.1 分配解复用上下文2.1.2 文件信息操作2.1.3 综合示例 2. 2 编解码部分2.2.1 分配解码器上下文2.2.2编解码操作2.2.3 综合示例 3 ffmpeg 内存模型3.1 基本概念3.2API 1.ffmpeg的基本组成 模块名称功能描述主要用途AVFo…...
2025MathorcupD题 短途运输货量预测及车辆调度问题 保姆级教程讲解|模型讲解
2025Mathorcup数学建模挑战赛(妈妈杯)D题保姆级分析完整思路代码数据教学 其中更详细的思路,各题目思路、代码、讲解视频、成品论文及其他相关内容,可以点击下方群名片哦!...
CSS 包含块
CSS 中的包含块(Containing Block)是一个非常重要的概念,它定义了元素在布局中的参考框架。元素的尺寸、位置和偏移量通常都是基于其包含块来计算的。理解包含块的概念对于掌握 CSS 布局至关重要。 1. 包含块的作用 定位元素:当…...
嵌入式设备网络的动态ID分配机制实现
文章目录 前言一、系统设计要点二、核心数据结构2.1 设备唯一标识(DeviceUID)2.2 节点信息(Node)2.3 节点管理器(NodeManager) 三、核心算法实现3.1 初始化与清理3.1.1 初始化节点管理器3.1.2 清理节点管理器 3.2 动态ID分配策略3.2.1 查找最小可用ID3.2.2 ID使用检查 3.3 心跳…...
(论文阅读)RNNoise 基于递归神经网络的噪声抑制库
RNNoise 是一个基于递归神经网络的噪声抑制库。 有关该算法的描述见以下论文: J.-M. Valin, A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement, Proceedings of IEEE Multimedia Signal Processing (MMSP) Workshop, arXiv:1709.08…...
Linux:线程概念与控制
✨✨所属专栏:Linux✨✨ ✨✨作者主页:嶔某✨✨ Linux:线程概念于控制 var code “d7e241ae-ed4d-475f-aa3d-8d78f873fdca” 概念 在一个程序里的一个执行路线就叫做线程thread。更准确一点:线程是“一个进程内部的控制序列” …...
双轮驱动能源革命:能源互联网与分布式能源赋能工厂能效跃迁
在全球能源结构深度转型与“双碳”目标的双重驱动下,工厂作为能源消耗的主力军,正站在节能变革的关键节点。能源互联网与分布式能源技术的融合发展,为工厂节能开辟了全新路径。塔能科技凭借前沿技术与创新实践,深度探索能源协同优…...
网络安全-Burp Suite基础篇
声明 本文主要用做技术分享,所有内容仅供参考。任何使用或者依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险,并遵循相关法律法规。 1 Burp Suite功能介绍 1.1 Burp Suite 简介 Burp Suite 是一款极为强大且广受欢迎的集成化 …...
从人工到智能:外呼系统如何重构企业效率新生态
在数字化转型的浪潮中,智能外呼系统正从边缘辅助工具演变为企业效率革命的核心引擎。根据Gartner最新调研数据,部署AI外呼系统的企业客服效率平均提升68%,销售线索转化率增长42%。但在这场技术驱动的变革中,真正决定成败的往往不是…...
折扣电影票api对接详细指南,如何对接?
以下是折扣电影票 API 对接的一般指南: 对接前准备 明确需求:确定对接的目的和所需功能,如电影信息查询、场次查询、座位预订、支付等。明确支持的数据字段和业务流程。选择 API 服务提供商:选择技术成熟、服务稳定、覆盖范围广的…...
初识Redis · 客户端“Hello world“
目录 前言: 环境配置 Hello world 前言: 前文我们已经介绍了Redis的不常见的五种数据类型,并且补充了几个渐进式命令和数据库管理命令等,最后简单认识了一下RESP协议,但是老实说,我们只能算是知道了这个…...
51单片机实验一:点亮led灯
目录 一、实验环境与实验器材 二、实验内容及实验步骤 1.用keil 软件创建工程,C文件编写程序,编译生成hex文件编辑 2.用STC烧写hex文件,点亮第一个LED灯 3.使用法2,点除第一个以外的LED灯 一、实验环境与实验器材 环境&am…...
基于WOA鲸鱼优化的NARMAX模型参数辨识算法MATLAB仿真,对比PSO优化算法
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 NARMAX模型定义 4.2 鲸鱼优化算法WOA原理 4.3 粒子群优化算法PSO原理 5.完整程序 1.程序功能描述 基于WOA鲸鱼优化的NARMAX模型参数辨识算法MATLAB仿真,对比PSO优化算法。分别通过WOA…...
AWS上构建基于自然语言的数值和符号计算系统
我想要实现一个通过使用C#、Semantic Kernel库、OpenAI GPT 4的API和以下使用C#开源库MathNet实现通过中文自然语言提示词中包含LATEX代码输入到系统,通过以下符号和数值计算和其它符号和数值计算程序输出计算结果和必要步骤的应用,这样的数学计算使用程序直接产生结果,可以…...
2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(三级)真题
青少年软件编程(Python)等级考试试卷(三级) 分数:100 题数:38 答案解析:https://blog.csdn.net/qq_33897084/article/details/147341388 一、单选题(共25题,共50分) 1. 学校进行体…...
校平机:精密制造的“材料雕刻家“
在液晶面板生产线的无尘车间里,一片薄如蝉翼的玻璃基板正经历纳米级的形态修正;在新能源电池极片生产线上,铜箔以每秒5米的速度穿越精密辊系,完成微米级的平整蜕变。这些现代工业的"毫米级魔术",都离不开一台…...
FPGA HR Bank如何支持ODELAY问题分析
目录 1.ODELAY简单介绍 2.IODELAY 的特性 3.IODELAY 的 资源支持的管脚 4.HR bank如何支持ODELAY固定延迟 1.ODELAY简单介绍 FPGA 中的 IODELAY(Input/Output Delay),这是 Xilinx(现 AMD)FPGA 中一种用于精确控制输入/输出信号时序延迟的硬件资源。以下是关于 IODELAY…...
深入解析C++驱动开发实战:优化高效稳定的驱动应用
深入解析C驱动开发实战:优化高效稳定的驱动应用 在现代计算机系统中,驱动程序(Driver)扮演着至关重要的角色,作为操作系统与硬件设备之间的桥梁,驱动程序负责管理和控制硬件资源,确保系统的稳定…...
高级java每日一道面试题-2025年4月13日-微服务篇[Nacos篇]-Nacos如何处理网络分区情况下的服务可用性问题?
如果有遗漏,评论区告诉我进行补充 面试官: Nacos如何处理网络分区情况下的服务可用性问题? 我回答: 在讨论 Nacos 如何处理网络分区情况下的服务可用性问题时,我们需要深入理解 CAP 理论以及 Nacos 在这方面的设计选择。Nacos 允许用户根据具体的应用…...
07_Docker 资源限制
Docker 容器做资源限制,是为了不让某个容器抢光 CPU、内存等主机资源,保证所有容器都能稳定运行,还能避免宿主机资源被耗尽,让资源利用更高效,也方便管理和满足服务的性能要求。 监控容器资源使用情况 docker stats …...
Flutter Notes | 我用到的一些插件整理
Flutter开发必备插件推荐与iOS上架工具分享 前言 一个项目的开始和结束,总会遇到很多意料之外的东西。大神和菜鸟的区别,个人感觉更多的是大神花费了很多私下时间去了解每个问题的根本是什么,而我这小菜鸟,仅仅网上浪一圈&#…...
WordPress自定义页面与文章:打造独特网站风格的进阶指南
文章目录 引言一、理解WordPress页面与文章的区别二、主题与模板层级:自定义的基础三、自定义页面模板:打造专属页面风格四、自定义文章模板:打造个性化文章呈现五、使用自定义字段和元数据:增强内容灵活性六、利用WordPress钩子&…...
golang channel源码
解析 数据结构 hchan:channel 数据结构 qcount:当前 channel 中存在多少个元素; dataqsize: 当前 channel 能存放的元素容量; buf:channel 中用于存放元素的环形缓冲区; elemsize:channel 元素…...
麒麟操作系统漏洞修复保姆级教程弱(一)算法漏洞修复
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 目录 一、相关问题 二、建议修复方法 修复方案(方案一和方案二是错误示范,干货在方案三) 方案一、首先我想按照第一步,将OpenSSH升级解决这一漏洞…...
汉诺塔专题:P1760 通天之汉诺塔 题解 + Problem D: 汉诺塔 题解
1. P1760 通天之汉诺塔 题解 题目背景 直达通天路小A历险记第四篇 题目描述 在你的帮助下,小 A 成功收集到了宝贵的数据,他终于来到了传说中连接通天路的通天山。但是这距离通天路仍然有一段距离,但是小 A 突然发现他没有地图࿰…...
vscode中markdown一些插件用不了解决方式
我发现我安装了vscode的一些插件,但是没起效果(就是该插件暗淡了),后面得知,是因为没有信任工作空间。 This extension has been disabled because the current workspace is not trusted 这个提示信息表明,…...
Python爬虫第16节-动态渲染页面抓取之Selenium使用上篇
目录 前言 一、Selenium的简介和学习准备 二、Selenium基本使用 三、声明浏览器对象 四、访问页面 五、查找节点 5.1 单个节点 5.2 多个节点 六、节点交互 七、动作链 八、执行JavaScript 前言 本专栏之前的内容,我们讲了怎么分析和抓取Ajax,…...
KMP算法动态演示
KMP算法 1.动态演示 https://tsccg-oss.oss-cn-guangzhou.aliyuncs.com/image/KMP%E7%AE%97%E6%B3%95%E5%8A%A8%E6%80%81%E6%BC%94%E7%A4%BA.gif 2.代码实现 Testpublic void test5(){String parent "ABC ABCDAB ABCDABCDABDE";String child "ABCDABD&quo…...