【腾讯云ES×AI实战】告别复杂!在一个技术栈内,基于混合搜索快速搭建RAG

「文智助手」全场景办公AI助理AI+OPC全流程实践方案(大赛作品) 阅读详情

点击蓝字⬆ 关注我们

本文共计2664字 预计阅读时长8分钟

一、引言

本文主要面向对RAG概念有基础了解的读者,因此不再赘述RAG基础概念。在写这篇最佳实践之前,先回答一个问题:在上千万tokens上下文窗口模型出现后,为什么我们仍然需要RAG?

原因很简单,将所有数据都加载到模型上下文存在如下挑战:

1.可扩展性:企业知识库以TB或PB为单位,而不是以token为单位,即使有1000万个tokens上下文窗口,仍然只能看到可用信息的一小部分;

2.准确性:实际的上下文窗口与产品发布时宣传的差异巨大,研究一致表明,早在模型达到官方宣传极限之前,准确性就已经下降到不可用的情况;

3.延迟:将所有内容加载到模型的上下文中会导致响应时间显著延长。对于面向用户的应用程序来说,用户在得到答案之前就会放弃交互,体验很差;

4.效率:每次回答一个简单的问题,你都要翻阅整本教科书吗?

在RAG中,高效精准的检索是非常关键的,混合搜索以及结构化数据支持方面的进步,有助于在知识库中找到正确信息,从而解决上述的问题。同时RAG与「长上下文」、「微调」、「MCP」这些概念并不排斥,他们可以通过最佳的协同方式去解决前沿模型的局限性:

  • RAG提供对模型知识之外的信息的访问

  • 微调可以改善信息的处理和应用方式,让大模型更加智能、专业

  • 更长的上下文允许检索更多信息,以供模型进行推理

  • MCP简化了代理与RAG系统(和其他工具)的集成

最近腾讯云ES发布的新特性「智能搜索开发」,以AI搜索增强版内核为底座,进一步优化了对全文与向量混合搜索的能力支持,从原始文档解析、向量化等原子能力,到查询性能、混合排序效率、搜索结果精准度等提供了全方位的支持和优化,让搜索有了更多想象空间。 在此基础上,还可以与混元、DeepSeek等大语言模型无缝集成,从而帮助企业进一步高效、灵活的构建知识问答等RAG应用,在关键环节也可介入调优,整体流程如下:

接下来具体看下搭建过程。

二、AI助手搭建

其实,你只需要运行下面的文件成功,你就可以快速构建一个AI问答应用

  • 数据写入:(二选一)

  • 如果你有大批量文档或正式生产:运行data_input_inference.py

  • 如果你想快速搭demo体验:运行data_input_inference_streamlit.py

  • 在线问答:search_inference.py

想运行上述文件(文件在文末扫码下载)成功,你得获得下述信息,可以参照【前置条件】步骤获取。

# 腾讯云API客户端配置,获取方式见【3.获取API秘钥】SECRET_ID = "AKID******"    # 替换为你的云API SecretIdSECRET_KEY = "******"       # 替换为你的云API SecretKey # es集群相关配置,获取方式见【1.购买集群】【2.获取ES访问地址】# 用户名为 elastic、密码在创建集群时设置。用本地环境测试时,可开启公网访问,实际生产时,建议使用内网访问地址。ES_ENDPOINT = "https://es-******.tencentelasticsearch.com:9200"ES_USERNAME = "elastic"  # Elasticsearch集群用户名ES_PASSWORD = "******"  # Elasticsearch集群密码INDEX_NAME = "索引名称"  # 在写入时要保证索引未被创建过,会默认创建索引并设置mapping,写入数据和在线问答的索引保持一致 # 数据入库时,选择COS方式需设置你的COS文件路径# 要处理的文档URL(推荐将文件存放到COS存储,并开启「公有读私有写」权限)document_url = "https://xxx.cos.xxx/sample.doc"

当然,如果需要深入了解代码细节,或想调整相关参数达到匹配业务的效果,可参阅下一章节【核心代码解析】。

前置条件

1.购买ES集群

(1)登录腾讯云ES控制台,单击「新建」按钮。

(2)进入新建集群界面,用于测试验证计费模式可选「按量计费」,产品版本选择「AI 搜索增强版」,专用于对搜索能力、查询性能和稳定性有极高要求的搜索和RAG场景,Elasticsearch版本选择「8.16.1」,向量能力主要集中在8.x以上版本。

(3)ES节点配置,测试验证可选择为「2核4G」,节点数默认为「3」,磁盘为「增强型 SSD云硬盘」,磁盘容量为「20GB」。

(4)其余配置选择默认即可,注意保存集群访问密码。

2.获取ES访问地址

对应集群 下可获取相关信息,用户名为elastic,密码在创建集群时所设置,如已忘记可以重置。使用本地mac测试时,可开启公网访问,实际生产时,建议使用内网访问地址。

3.开通服务

现在集群创建好了,在数据入库以及查询时需要用到很多模型服务,腾讯云 ES 智能搜索开发已经集成了文档解析、文本切片、Embedding、Rerank、LLM服务,只需开通服务即可,点击「立即开通」,确认免费开通。

4.获取API秘钥

进入API密钥管理界面,获取SecretID、SecretKey。

搭建步骤

1.安装依赖

# Python版本:3.9及以上pip install elasticsearch==8.16.0pip install tencentcloud-sdk-pythonpip install urllib3 certifi# 安装文档处理包pip install python-docx pypdf2 lxmlpip install streamlit    #使用COS数据入库时,无需安装

2.数据入库

这里提供了两种方式,如果有大批量的文档需要进行处理,或者你需要上生产,那建议按【2.1.COS上传】方式入库,这种方式更加稳定和安全;如果你只是简单体验一下AI问答demo,并通过界面可视化的方式操作,那可以按【2.2.本地上传】的方式入库。

2.1.COS上传(可选)

(1)先将需要处理的文档拖入对应COS桶,具体操作步骤:进入COS控制台->点击「存储桶列表」->对应文件存储桶->点击「上传文件」->出现以下弹框,拖拽需要上传的文件即可

(2)然后设置文档权限,这里需要对文档进行解析切片处理,所以需要开放「公有读私有写」权限,具体操作:点击「存储桶列表」->对应文件存储桶->对应文件详情->开启「公有读私有写」权限

(3)在data_input_inference.py文件中,修改main方法中的document_url为你上传的COS文件地址

# 要处理的文档URL(推荐将文件存放到COS存储,并开启「公有读私有写」权限。document_url = "https://xxx.cos.xxx/sample.doc"

然后,在终端运行该文件:

python data_input_inference.py

2.2.本地上传(可选)

(1)在终端运行data_input_inference_streamlit.py文件,在终端执行如下命令:

streamlit run data_input_inference_streamlit.py

(2)将要上传的文档拖拽进去,或者点击「Browse files」按钮,选择文件上传,效果如下:

3.在线问答

这步主要是运行search_inference.py文件,在终端执行如下命令:

streamlit run search_inference.py

效果如下,在输入框中提出相关问题,系统会进行混合搜索-重排序-组装Prompt-大模型回答一系列动作,整个流程中间内容可见,最后生成回答内容。

三、核心代码解析

1.数据入库

对应data_input_inference.py和data_input_inference_streamlit.py文件,主要讲述一个非结构化文档从解析、切片、到Embedding后写入ES索引的过程,具体如下:

1.1.文档解析/切片

企业大部分数据都是以文档形式存在的非结构化数据,如何让文档数据变得可读,是实现RAG的第一步。我们通过调用智能搜索开发提供的文档解析/切片服务对文档数据先进行文档识别转MD格式,然后进行语义切片预处理。

常量MAX_CHUNK_SIZE即为文本切片单条文本最大字符数,不小于1000,可以根据你的具体业务,确定合适的最大字符数。在Embedding过程中,选定的模型Tokens限制应大于你设定的最大字符数,否则会出现截断的可能。

常量DOCUMENT_CHUNK_MODEL_NAME即为选择的文档解析切片模型,“doc-tree-chunk”包含了文档解析和切片部分,这里可以直接用。

MAX_CHUNK_SIZE = 2000  # 文本切片单条文本最大字符个数(根据具体选用的Embedding模型tokens设定,最小值不小于1000)DOCUMENT_CHUNK_MODEL_NAME = "doc-tree-chunk"# 调用ChunkDocumentAsync接口创建文档切片任务params = {    "Document": {        "FileType": file_type,        "FileUrl": file_url,        "FileName": os.path.basename(urlparse(file_url).path)    },    "Config": {        "MaxChunkSize": MAX_CHUNK_SIZE  # 可根据需要调整切片大小    },    "ModelName": DOCUMENT_CHUNK_MODEL_NAME}response = retry_request(client.call_json, "ChunkDocumentAsync", params)task_id = response['Response']['TaskId']logger.info(f"Created document chunking task with ID: {task_id}")

因为文档解析/切片是个异步任务,所以需要通过获取切片结果。

解压获取到的结果,切片好的数据存放在xxx.jsonl文件内,对应page_content即为切片数据。

try:    with zipfile.ZipFile(io.BytesIO(response.content)) as zip_file:        # 检查zip中是否有.jsonl文件        jsonl_files = [f for f in zip_file.namelist() if f.endswith('.jsonl')]        if not jsonl_files:            error_msg = "No .jsonl file found in the zip archive"            logger.error(error_msg)            raise Exception(error_msg)         # 处理每个jsonl文件        for file_name in jsonl_files:            with zip_file.open(file_name) as f:                # 逐行读取jsonl文件                for line in f:                    try:                        data = json.loads(line.decode('utf-8'))                        if 'page_content' in data:                            doc_list.append(data['page_content'])                    except json.JSONDecodeError as e:                        logger.warning(f"Failed to parse JSON line: {str(e)}")                        continue

1.2.切片Embedding并写入ES

(1)创建Embedding服务,如:model_bge_base_zh-v1.5

INFERENCE_MODEL_ID = "model_bge_base_zh-v1.5" es_client.perform_request(        'PUT',        f'/_inference/text_embedding/{INFERENCE_MODEL_ID}',        body=inference_config)

(2)创建基于原子服务模型的pipeline,如:model_bge_base_zh-v1.5_embeddings_pipeline的pipeline

PIPELINE_NAME = "model_bge_base_zh-v1.5_embeddings_pipeline"pipeline_config = {    "processors": [        {            "inference": {                "model_id": INFERENCE_MODEL_ID,                "input_output": {                    "input_field": "content",                    "output_field": "content_embedding"                }            }        }    ]} es_client.ingest.put_pipeline(        id=PIPELINE_NAME,        body=pipeline_config)

(3)文本&向量数据写入

创建向量索引,定义索引Schema,注意向量维度需与上述Embedding模型维度保持一致。

通过 Bulk API 批量写入数据。原始文档信息和向量化之后的数据均进行存储,方便ES混合搜索,提高召回率。

from elasticsearch.helpers import bulkactions = [    {        "_index": INDEX_NAME,        "_source": {            "content": content,  # 原始文本内容,根据定义的pipeline,默认向量化后写入pipeline中定义的向量字段        }    }    for index, content in enumerate(chunk_list)]success, failed = bulk(        es_client,        actions,        pipeline=PIPELINE_NAME)

2.在线问答

对应search_inference.py文件,主要讲述用户的一个Query语句进来后,经过向量化,从ES中进行混合检索召回TopK,然后经过Rerank再精排过滤后,结合Prompt工程喂给大模型进行总结回答,具体如下:

2.1.Query 向量化

对Query语句进行向量化,具体调用方式本质上是与切片向量化一致,不再赘述。

2.2.文本&向量混合检索

指定向量字段,对Query向量进行向量相似度检索,获取前k条向量数据,同时进行全文检索,在最后将两者进行融合排序。

# 使用8.16集群的混合搜索语法(并行召回:返回 query 和 knn 召回结果的并集)mix_query = {    "query": {"match": {"content": query}},    "knn": [{        "field": "content_embedding",        "query_vector_builder": {            "text_embedding": {                "model_id": INFERENCE_MODEL_ID,                "model_text": query            }        },        "k": 5,        "num_candidates": 100    }],    "size": 5}

2.3.召回结果重排序

调用智能搜索开发提供的Rerank模型进行重排序。

TopN即为排序返回的top文档数量, 如果没有指定则返回全部候选doc,如果指定的TopN值大于输入的候选doc数量,返回全部doc。

RERANK_MODEL_NAME = "bge-reranker-large"json_object = {    "ModelName": RERANK_MODEL_NAME,    "Query": query,    "ReturnDocuments": True,    "Documents": docs,    "TopN":5    # 排序返回的top文档数量, 如果没有指定则返回全部候选doc,如果指定的TopN值大于输入的候选doc数量,返回全部doc}

2.4.组装Prompt

设置自己的Prompt模板,注意预留user_query和documents_str占位符,分别代表问题与检索到最相关的切片上下文。

PROMPT_TEMPLATE = """# 任务说明你是一位专业的AI助手,需要基于提供的参考文档准确回答用户问题。请严格遵循以下要求: # 用户问题{user_query} # 参考文档(已按相关性排序){documents_str} # 回答要求1. 必须基于上述参考文档内容生成答案,不得编造文档中不存在的信息2. 回答结构应包含:   - 简明扼要的核心答案(1-2句话)   - 详细解释或分点说明(3-5点,视问题复杂度而定)   - 可选的补充信息或建议(如适用)3. 根据问题类型采用合适的回答方式:   - 对于事实性问题:提供准确数据或事实   - 对于观点性问题:呈现不同角度的分析   - 对于操作性问题:给出步骤清晰的指导   - 对于比较性问题:进行客观对比分析4. 若文档内容与问题无关或信息不足,请回复:   "根据现有资料,我暂时无法提供令人满意的答案。建议您补充更多相关信息或重新提问。" # 特别注意1. 保持回答专业、准确且流畅2. 如文档中有数据或研究结果,请优先引用4. 对于专业术语,必要时提供简单解释5. 避免使用"根据文档"等冗余表述,直接整合信息到回答中"""

2.5.调用DeepSeek回答

调用deepseek-v3大模型进行总结回答,当然你可以切换不同hunyuan以及deepseek大模型进行体验。如果期望返回值是流式响应时,则设置Stream为True。

# 设置deepseek-v3模型(这里可以设置为你想要的模型,参考:https://cloud.tencent.com/document/api/845/117810)LLM_MODEL_NAME = "deepseek-v3" # 调用大模型回答,content即为build_llm_prompt返回组装后的promptdef generate_llm_response(content: str) -> Dict[str, Any]:    """    调用大模型生成回答     Args:        content: 要发送给大模型的prompt内容     Returns:        大模型的响应结果     Raises:        Exception: 如果调用大模型过程中出现错误    """    if not content.strip():        raise ValueError("空内容无法生成回答")     json_object = {        "Messages": [{"Role": "user", "Content": content}],        "ModelName": LLM_MODEL_NAME,        "Stream": False    # 可以设置成True,流式输出    }     try:        response = tencent_cloud_client.call_json("ChatCompletions", json_object)        return response    except Exception as e:        logger.error(f"大模型调用失败: {e}")        raise

四、总结

腾讯云ES凭借其在传统PB级日志和海量搜索场景中积累的丰富经验,通过深度重构底层系统,成功地将多年的性能优化、索引构建和运营管理经验应用于RAG领域,并积极探索向量召回与传统搜索技术的融合之道,旨在充分发挥两者的优势,为用户提供更加精准、高效的搜索体验。未来,腾讯云ES将持续深耕智能检索领域,在成本、性能、稳定性等方面持续提升,帮助客户降本增效的同时实现业务价值持续增长。

END

关注腾讯云大数据╳探索数据的无限可能

⏬点击阅读原文

了解更多产品详情

分享给认识的人吧

船载 OpenHarmony AIS 航海工作台:告警与防碰撞预警系统 船载OpenHarmony AIS航海工作台的告警与防碰撞系统,集成十余类告警(超速、偏航、会遇、SOS等),通过网格空间索引实现高效邻近判定,保障实时性。告警管理器统一调度规则、去重、通知与日志,支持悬浮球、语音、跑马灯、弹窗多渠道触达,确保航行安全。SOS紧急通道独立运行,避免干扰。系统设计强调性能优化与多场景适配,为航海安全提供核心支撑。 阅读详情

相关推荐

Verilog十大基本功2(testbench的设计 文件读取和写入操作 源代码)

需求说明:Verilog设计基础 内容       :testbench的设计 读取文件 写入文件 来自       :时间的诗 十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应。 端口分为 input,output 和 inout 类型产生激励信号的时候, input  对

时间的诗 5万+

腾讯云ES RAG最佳实践:向量+文本混合搜索的相关性调优

‍‍| 导语腾讯云ES近期上线的8.8.1版本,提供了强大的云端AI增强能力,支持在统一技术栈中完成文本+向量的混合搜索,实现自然语言处理以及与大模型的集成,本文将从向量检索的优势与局限性介绍出发,说明混合搜索的原理、优势及其必要性,并通过效果演示为大家呈现腾讯云ES混合搜索的强大能力。引言我们在上一篇文章《腾讯云ES RAG最佳实践:百行代码轻松实现ES帮助文档的智能问答》中给大家介绍了如何通...

cloudbigdata的博客 2468

归因分析计算因子贡献度常见的方法

在归因分析中,我们一般都需要计算出每个因子的贡献度是多少,比如产品DAU上升,对年龄段维度进行拆解,看是不同年龄段的用户对DAU上升的贡献度是多少,一般根据指标的类型,计算贡献度的方法也不一样,下面就列出一些常见的归因分析贡献度的计算方法。

Hubans的博客 4万+

2026企业级AI智能体全景报告:从对话助手到数字员工,重构政企生产力

2026年AI智能体已深度融入企业运营,成为数字化转型的核心基础设施。这些"数字员工"具备自主感知、决策和执行能力,推动企业从流程驱动转向智能驱动。其核心价值体现在效率提升60%-90%、人力成本降低50%以上,并通过私有化部署满足强监管要求。技术架构采用模型层、工具层和基础设施层三层设计,支持自主闭环、长期记忆等企业级能力。

2601_95639957的博客 1616

SAP 人力资源工资配置项3---工资项配置

工资项设置

xiouluoyang的专栏 1万+

WPS Office JS宏实现文件和数据的上传及下载

WPS Office JS宏下载、上传文件;通过加载项实现数据的获取和上传。

学点笔记 4300

51c大模型~合集111

OpenAI 的某发言人表示:「为了提高清晰度和安全性,我们增加了一个额外的后处理步骤,其中模型会审查原始的思维链,删除任何不安全的内容,然后简化某些复杂的思维。可以看到,虽然 ChatGPT 确实完成了任务并展示了总结版的思维链,但似乎并未如 OpenAI 发言人说的那样给出与提示词语言同样语言的总结版。北大-灵初联合实验室表示,Align-DS-V的多模态强推理能力是VLA模型大脑端的核心,接下来的研究训练计划,是利用多模态推理模型的跨模态穿透能力,实现action穿透,最终实现真正高效的VLA模型。

whaosoft~aiotの开发板商城 2317

AI时代的软件质量保证新方法论

3.2.1 质量保证的方法论 质量保证(Quality Assurance, QA)是一种系统化的方法,用于确保产品或服务符合预定的质量标准。在AI时代,软件质量保证的方法论需要适应不断变化的AI技术和应用场景。 3.2.1.1 质量管理体系的构建 首先,构建一个完善

AI天才研究院 1352

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 224

利用恒源云在云端租用GPU服务器训练YOLOv8模型(包括Linux系统命令讲解)

为当涉及到深度学习的训练任务时,GPU的计算能力是不可或缺的。相对于传统的中央处理器(CPU),图形处理器(GPU)具有更强大的并行计算能力,能够显著加速深度学习模型的训练过程。深度学习算法通常涉及大量的矩阵运算和张量操作,而GPU的并行计算架构使得它们能够高效地执行这些计算,从而加速模型训练的速度。恒源云是一个经济高效的云计算平台,您可以通过恒源云的控制台或者命令行界面来管理实例、上传和下载数据、执行训练任务等。

Snu77的博客 6724

AgentScope Java 2.0 项目实战:从零构建企业级自主Coding Agent

本文基于 AgentScope Java 框架,完整拆解两个生产级 AI Agent 项目的从零开发全过程。其一是企业级自主编码机器人(agentscope-codingagent),支持 Issue→PR 自动实现、PR Code Review、Docker 沙箱隔离执行与多通道接入;其二是个人 AI 助手管理平台(agentscope-paw),采用 Spring Boot + React 全栈架构,支持多 Agent、技能市场与多 IM 通道。

program哲学 839

6 款电商 AI 图片生成软件实测|国内 + 跨境卖家工具清单

电商 AI 作图工具已经从 "能不能用" 进入了 "好不好用" 的阶段。对于绝大多数卖家而言,现在的 AI 工具已经可以覆盖 60%-80% 的基础商品图需求,显著降低拍摄和设计成本。选择工具的核心逻辑不是 "哪款最强",而是 "哪款最适配你的品类、平台规模和团队能力"。垂直电商工具胜在工作流效率,通用生图工具强在创意上限,模板类工具赢在上手速度。建议根据自身业务阶段,搭配 1-2 款主力工具 + 1 款辅助工具,形成适合自己的视觉生产流程。

Mardi_Ladin的博客 398

【2.12】基于FPGA的Gardner环开发5——闭环反馈,获得完整gardner环

本文介绍了Gardner定时恢复算法在FPGA上的实现过程。首先回顾MATLAB程序中Gardner环的闭环反馈机制,重点分析了环路滤波器输出变量w的处理流程。随后详细阐述了FPGA实现的Verilog设计步骤,包括三个核心模块:1)y_temp=q0-w计算模块,实现反馈变量处理;2)uk=2*q0计算模块,生成插值系数;3)插值计算模块,根据使能信号执行线性插值运算。设计通过引入使能信号控制插值更新时机,采用定点数运算处理数据,并包含负数保护机制确保计算稳定性。文章提供了完整的Verilog代码实现,展

fpga/matlab/simulink算法仿真工程 135

我用 GPUWorks 在 M1 Pro 上搭了个发票识别原型

公司里经常要看电子发票。我想先做个小原型:把 PDF 发给一个自己部署的图文模型,让它提取发票类型、日期、交易双方和金额,再把结果交给同事核对。这个原型不用先接财务系统,先看看从部署到调用要走多少步,模型返回的内容能不能帮上忙。

鸽芷咕的博客 2万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

您您这可以把问小白的多个会话比如说。左侧的多个会话一次性导出吗?不是单条会话里面的多次会对话。AI导出鸭

第三层是格式编译层。这个决策背后的判断很清晰:一个批量导出工具的价值,不在于“试三次”,而在于你真正用它处理了几十份技术文档、访谈记录或课程讲义之后,它是否值得留在你的工作流里。问小白的会话列表通过分页接口加载,AI导出鸭 在页面运行时建立旁路监听,捕获每一次分页请求返回的完整对话清单,包括会话 ID、标题、时间戳和隐藏的元数据字段。让AI导出回归优雅——这句话说的是:导出不该是体力活,而应该是一次完整的、可预期的文件交付。注意:这里的“批量”指的是左侧列表里的多个独立会话,不是一条会话内的多轮对话。

laoyunsi的博客 246

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端

上一篇讲了 MCP 的概念:标准协议、三大角色、M+N 替代 M×N。

nice_lcj520的博客 501

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

河道漂浮物目标检测数据集

目标检测,yolo,河道漂浮物目标检测数据集

DL_data_set的博客 201

AI Agent之核心框架

A: 显式 Thought 有三类价值:可解释性(便于人类审计)、可调试性(定位哪一步选错工具)、学习信号(可做监督微调或评估中间步骤质量)。ReAct 把推理与 可执行行动 绑定,每一步行动后都有 真实 Observation 反馈,从而用工具结果约束生成,降低闭卷幻觉。做完不等于结束——还要 评估做得好不好,把 教训 记下来,下次 带着教训重试,反思作为 记忆,影响后续尝试的策略。工作流程:Action → Evaluation → Reflection → Retry。A: 普通 CoT 只在。

剑雨巍巍的博客 199

AI 应用开发工程师技术实践:大模型接入、通用组件封装与性能优化

本文提出AI应用从PoC到生产的核心挑战:模型调用的持续可用、可控与可优化。通过构建统一LLM网关实现多供应商路由与故障转移,封装对话、工具调用与RAG组件以解耦业务逻辑,结合前缀缓存、批处理与流式背压治理等性能优化手段,形成“接通→接稳→接快”的工程路径,最终以工程化能力决定AI应用的生产可用性。

2301_79189962的博客 558

AI前沿日报 · 2026-11-04 | 祛魅时刻:Astra“纯读权重“神话的崩塌

①Astra"裸权重通吃"被spaCy创始人Honnibal精准祛魅——仅1/3实验真裸读,数学能力提升依赖Python+50次迭代;②Simon Willison用Qwen 3.8-27B端侧复现权重空间编程;③Nvidia开源Auto-Ontology自动知识图谱;④$800开源全域抓取机器人Stringman;⑤OpenAI悄然重开Codex训练开关引信任危机;⑥DeepMind发布Gemini 4 Argon机器人基础模型;⑦美国科技巨头隐性AI债务达3.2万亿美元,6个月增90%。

johnsong2009的博客 574

大模型 Embedding 与向量相似度详解

Embedding 解决的问题:计算机不懂文字,但懂数字│▼文本 → 向量(1024维浮点数数组)│▼相似度解决的问题:怎么判断两个向量(文本)有多接近│▼余弦相似度:看向量方向的夹角,越接近0°越相似│▼最终效果:语义搜索——理解意思,而非字面匹配一句话总结:Embedding 把文字变成数字,余弦相似度比较数字的方向,两者结合实现了"理解语义"的搜索。

T3165919332的博客 90

GPT-1 架构和计算细节

下面配合框图,对 GPT-1 的每个组件做公式展开 + 数值实例(配置:12 层 × 768,12 头,FFN 3072,词表 40478,共 117M 参数)。GPT-1 把翻译模型的编码器-解码器砍掉一半,只留解码器,然后以"预测下一个词"为目标在 BooksCorpus 上预训练。与 2017 原版的四个架构差异(框图中标 ★):h0=E[token]+Epos[position],E∈R40478×768, Epos∈R512×768h^0 = E[\text{token}] + E_{pos}[\

eloudy的专栏 278

终端 AI 审计与 “龙虾” 类智能体风险治理:从可见性到闭环溯源

生成式 AI 办公普及之后,数据泄露风险逐步下沉到终端。员工将合同、源代码、客户资料粘贴至公有大模型,以及龙虾(OpenClaw)这类本地开源 AI 智能体的滥用,成为企业安全新挑战。传统网络边界防护存在审计盲区,本文从风险链路拆解、核心能力模型、分级治理策略、落地踩坑点以及技术局限性多角度,分享终端侧 AI 安全治理的实践思路。

2401_86491085的博客 640

2.53 基于极稀疏指纹的室内定位注意力图元学习

该论文发表于IEEE Transactions on Mobile Computing(TMC)2026年6月,面向极稀疏指纹条件下的WiFi室内定位,针对指纹采集人力成本高、标记指纹稀缺时定位精度大幅下降的痛点,提出注意力图元学习模型AGML(Attentional Graph Meta‑Learning),结合图神经网络、元学习、两种指纹数据增强与分布对齐技术,在标记指纹极少的场景实现高精度室内定位,同时公开了多套真实+仿真定位数据集用于基准测试。场景:二维室内空间,障碍物造成信号遮挡,

weixin_42963026的博客 338

语音识别与语音合成的技术原理及应用

语音识别 #语音合成 #人工智能 #大模型。语音识别与语音合成的技术原理及应用。一、语音识别的核心原理。二、语音合成的核心原理。三、工程落地的主要难点。五、需要关注的现实问题。

weixin_62919816的博客 210

设计师工作室 GEO 实操:如何提升 AI 实体推荐概率

设计工作室 GEO 的本质,是把创意服务转化为 AI 可理解的结构化信息。核心动作可归纳为:区分事实与审美、建立实体图谱、预判用户提问、输出脱敏内容、搭建多信源、持续测试验证。梳理工作室的 6 个实体属性:品类、城市、流程、边界、团队、渠道。在官网或作品集平台发布至少 3 篇结构化项目复盘,只陈述事实。输出 1 篇「设计报价影响因素」科普内容,覆盖甲方高频提问。争取 1 次行业媒体或本地媒体专访,形成第三方信源。每周用「XX 城市 + 品类 + 设计工作室推荐」指令测试,记录出现频率。

goujunwe的博客 337
上一篇: 「算数」这一块,腾讯又拿下一个全球第一
下一篇: 对抗乌卡时代:大宗贸易的数字化巨变
腾讯云大数据
博客等级 码龄6年 348粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值