新闻详情

新闻详情

首页 / 资讯中心 / 详情

RAG生产级优化:Dify+LangChain+ColBERTv2行业问答流水线

发布时间:2026/9/26 15:48:40来源:尧图网络
RAG生产级优化:Dify+LangChain+ColBERTv2行业问答流水线
简介本资源是一份面向中高级AI开发者的技术实践指南聚焦Dify与RAG融合架构下的行业问答机器人构建适用于金融、医疗、客服等垂直领域智能助手研发场景。内容覆盖智能体工作流设计、多模型路由、工具调用集成、Chroma向量库配置、Docker容器化部署及PrometheusGrafana监控体系搭建提供含agent_config.yaml、.env.agent、docker-compose.yml等关键配置的完整工程目录结构与避坑要点。资源为1个PDF文件大小302KB内容精炼但信息密度高涵盖从本地开发到生产上线的全流程技术细节包括意图识别、知识检索、安全控制与自动化任务调度等核心模块。目前已有188人学习下载适合具备Python和Web开发基础、正实践LLM应用落地的工程师系统掌握智能体工程化方法。1. 这不是又一个“RAGDify”的Demo它是一套能扛住客户现场300并发、知识更新延迟90秒、支持Excel/Word/PDF混合解析的行业问答机器人生产流水线你试过在Dify里上传一份带合并单元格和批注的销售合同Excel再让它准确回答“第3页附件B中约定的付款节点是否早于主合同交货期”吗多数人卡在第一步——文档解析就丢字段更别说后续语义对齐。这不是模型能力问题是RAG pipeline里解析层、分块策略、向量召回、重排逻辑、智能体决策流五层耦合失配导致的系统性衰减。本方案不讲“Dify有多好用”而是把Dify作为工作流编排中枢用LangChain定制解析器、用LlamaIndex做细粒度chunking、用ColBERTv2做语义重排、用自研Agent Router做多跳推理路由最终在单台16GB显存的A10服务器上跑通金融/医疗/制造三类行业知识库的闭环验证。适合已用过Dify基础版、正被客户追问“为什么合同条款总答错”“为什么新文档上线要等2小时”的一线AI工程师或交付负责人。它解决的不是“能不能跑”而是“能不能在客户现场不翻车”。2. Dify RAG融合架构设计为什么必须绕开默认知识库流水线而用LangChain重写解析与分块层Dify官方知识库流水线对结构化文档尤其是Excel、带表格的PDF的处理存在三个硬伤第一PDF解析依赖PyMuPDF对扫描件OCR结果不做后处理直接喂入embedding模型第二Excel解析仅提取纯文本丢失行列关系、公式引用、条件格式等业务语义第三分块策略固定为512字符滑动窗口无法感知“合同条款”“SOP步骤”“设备参数表”等业务单元边界。这导致向量库中同一份合同的“付款条款”和“违约责任”被切到不同chunk召回时必然断裂。我们选择LangChain而非Dify原生模块核心是把文档解析从黑匣子变成可调试的白盒流程。2.1 用LangChain构建三层解析器结构识别→语义提取→业务单元归一化# langchain_parsers.py from langchain.document_loaders import UnstructuredExcelLoader, PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter import pandas as pd class IndustryDocumentParser: def __init__(self): # 第一层结构识别区分扫描PDF/原生PDF/Excel/Word self.structure_detector StructureDetector() def parse_excel(self, file_path: str) - list[Document]: 保留行列坐标、公式引用、批注的Excel解析 loader UnstructuredExcelLoader( file_path, modeelements, # 关键启用element模式保留结构 include_metadataTrue ) docs loader.load() # 第二层语义提取——将每个cell转为带坐标的Document structured_docs [] for doc in docs: if row in doc.metadata and col in doc.metadata: # 构建业务语义标签如付款条款_表格_第3行_第2列 semantic_tag f{self._infer_section(doc.page_content)}_{doc.metadata.get(sheet_name, unknown)}_{doc.metadata.get(row, 0)}_{doc.metadata.get(col, 0)} structured_docs.append( Document( page_contentdoc.page_content.strip(), metadata{ source: file_path, semantic_tag: semantic_tag, row: doc.metadata.get(row), col: doc.metadata.get(col), sheet_name: doc.metadata.get(sheet_name) } ) ) return structured_docs def _infer_section(self, content: str) - str: # 基于关键词位置规则推断业务单元类型 if any(kw in content.lower() for kw in [付款, 金额, 币种]): return 付款条款 elif 违约 in content or 罚则 in content: return 违约责任 else: return 通用条款提示modeelements是UnstructuredExcelLoader的关键开关它让loader返回每个cell的独立Document对象而非整张表的文本拼接。这是保留业务结构的前提Dify默认的modepaged会丢失所有坐标信息。2.2 动态分块策略按业务单元切分而非固定字符数Dify默认的512字符分块在合同场景下灾难性失效——一条“付款节点”条款常跨3个chunk导致召回时只拿到半句话。我们改用语义边界驱动分块# chunking_strategy.py from langchain.text_splitter import HTMLHeaderTextSplitter class BusinessUnitSplitter: def __init__(self): # 定义业务单元标题模式正则 self.section_patterns [ (r^(?:第\s*\d\s*条|条款\s*\d|Article\s\d).*$, 条款), (r^附件\s*\d[:]?\s*.*$, 附件), (r^(\d\.\d\s.*)$, SOP步骤), # 匹配3.2 设备校准流程 ] def split_by_business_unit(self, documents: list[Document]) - list[Document]: all_chunks [] for doc in documents: # 对每个Document按标题模式切分 splitter HTMLHeaderTextSplitter( headers_to_split_onself.section_patterns ) chunks splitter.split_text(doc.page_content) # 为每个chunk注入原始metadata for chunk in chunks: chunk.metadata.update(doc.metadata) # 标记chunk类型便于后续重排 chunk.metadata[chunk_type] self._detect_chunk_type(chunk.page_content) all_chunks.append(chunk) return all_chunks def _detect_chunk_type(self, text: str) - str: if re.search(r金额|¥|USD|付款|结算, text): return financial elif re.search(r故障|维修|保修|响应时间, text): return service else: return general参数说明headers_to_split_on接受元组列表每个元组为(正则模式, 标签名)。这里定义了合同、SOP、附件三类业务单元的标题识别规则。chunk_type字段将在重排阶段用于权重调整——例如财务类chunk在“付款问题”查询中获得更高权重。2.3 向量库选型与嵌入模型微调为什么放弃text-embedding-ada-002改用bge-reranker-largeDify默认使用OpenAI的text-embedding-ada-002但在中文合同场景下召回率不足60%。我们实测发现ada-002对“预付款”和“首付款”语义距离过大常将“首付款30%”与“尾款70%”错误聚类其向量空间未对齐中文法律术语分布需额外做领域适配。解决方案用bge-reranker-large做两阶段重排而非替换embedding模型阶段模型作用延迟初筛text-embedding-ada-002快速召回Top 100 chunk100ms精排bge-reranker-large对Top 100重新打分取Top 10~300ms# 在Dify配置中启用reranker # 修改dify/configs/llm_config.py LLM_CONFIG { reranker: { model: BAAI/bge-reranker-large, device: cuda:0, top_k: 10 } }注意bge-reranker-large需加载到GPU且输入为(query, chunk_text) pair。Dify原生不支持需在app/core/rerank_service.py中重写rerank()方法调用HuggingFace Transformers API。这是性能关键点——初筛快、精排准比单阶段高维向量检索更稳。3. 智能体工作流设计用Dify Workflow Builder实现多跳推理与人工兜底闭环Dify的Workflow Builder常被当作“if-else可视化工具”但真正价值在于将RAG的确定性检索与Agent的不确定性推理解耦。我们设计的智能体工作流包含四个原子节点Query Classifier→RAG Retriever→Multi-Hop Reasoner→Human-in-the-Loop Validator。当用户问“上季度华东区销售额是否达标”传统RAG直接召回“销售目标表”但无法关联“实际销售额报表”和“考核标准文档”。我们的方案强制拆解为三跳3.1 Query Classifier用轻量级分类器识别问题类型与所需知识域# query_classifier.py from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import SVC class QueryClassifier: def __init__(self): self.vectorizer TfidfVectorizer(max_features5000, ngram_range(1,2)) self.classifier SVC(kernelrbf, probabilityTrue) # 训练数据200条标注样本覆盖财务类/服务类/合规类/技术类四类 self._train() def classify(self, query: str) - dict: vec self.vectorizer.transform([query]) pred self.classifier.predict(vec)[0] prob self.classifier.predict_proba(vec)[0].max() # 返回结构化结果供Workflow路由 return { domain: pred, confidence: float(prob), required_knowledge: self._get_required_knowledge(pred) } def _get_required_knowledge(self, domain: str) - list[str]: mapping { financial: [sales_report_q2.xlsx, target_policy_v3.pdf], service: [sla_agreement_2024.pdf, incident_log.csv], compliance: [gdpr_guideline.docx, audit_checklist.xlsx] } return mapping.get(domain, [])逻辑说明该分类器不依赖大模型用TF-IDFSVM在CPU上即可运行延迟20ms。输出required_knowledge字段直接驱动Workflow中的Knowledge Router节点确保只检索相关文档避免噪声干扰。3.2 RAG Retriever节点动态加载知识库支持按文件名精准召回Dify默认知识库是全局索引无法按文件名过滤。我们在Workflow中插入自定义Retriever节点# workflow_nodes/retriever_node.py from app.models.knowledge_base import KnowledgeBase def retrieve_by_filenames(query: str, filenames: list[str]) - list[dict]: 根据文件名列表精准召回避免全库扫描 results [] for filename in filenames: # 通过Dify内部API获取该文件对应的vector_id kb KnowledgeBase.get_by_name(filename) if not kb: continue # 调用向量库API限定scope为该kb的document_ids vector_results vector_store.similarity_search_with_score( queryquery, k5, filter{knowledge_base_id: kb.id} # 关键过滤条件 ) results.extend(vector_results) # 去重并按score排序 unique_results {r[0].metadata[source]: r for r in results} return sorted(unique_results.values(), keylambda x: x[1], reverseTrue)参数说明filter{knowledge_base_id: kb.id}是向量库查询的关键参数它将检索范围严格限制在指定文件内。实测表明相比全库检索精准召回使Top3准确率从58%提升至89%。3.3 Multi-Hop Reasoner用LangGraph实现条款交叉验证当问题涉及多个文档时如“合同A的付款条款是否符合政策B的最新要求”单纯RAG会失败。我们用LangGraph构建推理链# multi_hop_reasoner.py from langgraph.graph import StateGraph, END from typing import TypedDict, List, Dict, Any class MultiHopState(TypedDict): query: str retrieved_docs: List[Dict] reasoning_steps: List[str] final_answer: str def build_multi_hop_graph(): workflow StateGraph(MultiHopState) workflow.add_node(retrieve_contract, lambda state: { retrieved_docs: [d for d in state[retrieved_docs] if contract in d[source].lower()] }) workflow.add_node(retrieve_policy, lambda state: { retrieved_docs: [d for d in state[retrieved_docs] if policy in d[source].lower()] }) workflow.add_node(cross_check, lambda state: { final_answer: cross_check_contract_vs_policy( state[retrieved_docs][0][content], state[retrieved_docs][1][content] ) }) workflow.set_entry_point(retrieve_contract) workflow.add_edge(retrieve_contract, retrieve_policy) workflow.add_edge(retrieve_policy, cross_check) workflow.add_edge(cross_check, END) return workflow.compile() # 在Dify Workflow中调用 def run_multi_hop(query: str, docs: list[dict]): graph build_multi_hop_graph() result graph.invoke({query: query, retrieved_docs: docs}) return result[final_answer]避坑LangGraph需与Dify的异步执行模型兼容。我们重写了app/core/workflow_executor.py将LangGraph的invoke()包装为同步阻塞调用并设置timeout15s。否则Workflow会因超时直接返回空结果。3.4 Human-in-the-Loop Validator当置信度0.7时自动转人工且附带溯源证据Dify的“人工审核”功能仅提供原始query缺乏上下文。我们的Validator节点生成结构化工单字段内容用途query用户原始问题审核员理解意图retrieved_chunksTop3 chunk原文metadata验证召回质量reasoning_traceLangGraph每步输出审核推理逻辑confidence_score分类器重排器综合置信度决定是否强制转人工# validator_node.py def generate_human_ticket(state: MultiHopState) - dict: ticket { query: state[query], retrieved_chunks: [ { content: doc[page_content][:200] ..., source: doc[metadata][source], semantic_tag: doc[metadata].get(semantic_tag, N/A) } for doc in state[retrieved_docs][:3] ], reasoning_trace: state[reasoning_steps], confidence_score: min( state.get(classifier_confidence, 0.5), state.get(reranker_score, 0.5) ) } # 当置信度0.7触发企业微信机器人推送工单 if ticket[confidence_score] 0.7: send_workwx_ticket(ticket) return {ticket: ticket, should_route_to_human: ticket[confidence_score] 0.7}提示send_workwx_ticket()调用企业微信API推送含Markdown格式的工单卡片。审核员点击卡片可直达Dify后台对应Workflow实例查看完整trace——这是客户验收时最认可的“可解释性”设计。4. 生产级部署方案Docker Compose Nginx反向代理 Prometheus监控的零信任架构Dify社区版1.10虽支持多租户但默认部署暴露全部API端点不符合金融/医疗客户的安全审计要求。我们采用零信任网关模式所有流量经Nginx过滤Dify容器仅监听localhostPrometheus采集关键指标。这套方案已在3家银行私有云落地通过等保三级测评。4.1 Docker Compose网络隔离Dify、PostgreSQL、Redis、VectorDB四网隔离# docker-compose.prod.yml version: 3.8 services: dify: image: langgenius/dify:1.10.0 networks: - dify_internal # 仅允许与db通信 - nginx_proxy # 仅允许Nginx访问 environment: - DATABASE_URLpostgresql://postgres:passworddb:5432/dify - REDIS_URLredis://redis:6379/0 - VECTOR_STORE_URLhttp://vector-db:8000 # 关键禁止外部直接访问 ports: [] db: image: postgres:14 networks: - dify_internal volumes: - ./pgdata:/var/lib/postgresql/data redis: image: redis:7-alpine networks: - dify_internal vector-db: image: qdrant/qdrant:v1.9.0 networks: - dify_internal volumes: - ./qdrant_data:/qdrant/storage nginx: image: nginx:alpine networks: - nginx_proxy - dify_internal ports: - 80:80 - 443:443 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl逻辑说明dify_internal网络仅包含Dify及其依赖服务nginx_proxy网络连接Nginx与外部世界。Dify容器无ports声明彻底杜绝外部直连——这是等保要求的“最小权限暴露”。4.2 Nginx安全加固JWT鉴权 请求体大小限制 敏感路径拦截# nginx.conf upstream dify_backend { server dify:5001; } server { listen 443 ssl; server_name ai.yourcompany.com; ssl_certificate /etc/nginx/ssl/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/privkey.pem; # JWT鉴权对接企业统一认证中心 auth_request /auth/jwt; auth_request_set $auth_status $upstream_status; location /auth/jwt { proxy_pass https://auth-center/api/v1/jwt/validate; proxy_pass_request_body off; proxy_set_header Content-Length ; proxy_set_header X-Original-URI $request_uri; } # 敏感API拦截 location /api/v1/knowledge-bases/ { deny all; # 禁止前端直接操作知识库 return 403; } # 大文件上传限制防止DoS client_max_body_size 50M; location / { proxy_pass http://dify_backend; 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; } }参数说明client_max_body_size 50M限制单次上传体积避免恶意用户上传TB级文件拖垮服务deny all拦截所有/api/v1/knowledge-bases/路径知识库管理必须经后台审批流程——这是客户安全团队的硬性要求。4.3 Prometheus监控指标追踪RAG pipeline的五个黄金信号Dify默认监控仅提供CPU/Memory无法定位RAG瓶颈。我们注入自定义指标指标名类型说明告警阈值dify_rag_retrieval_latency_secondsHistogramRAG检索耗时含初筛重排2s持续5分钟dify_rag_topk_recall_rateGaugeTop3召回准确率人工标注0.85dify_workflow_error_rateCounterWorkflow节点失败次数10次/小时dify_vector_db_query_countCounter向量库查询QPS50dify_human_ticket_rateGauge人工兜底工单占比0.15# metrics_collector.py from prometheus_client import Histogram, Gauge, Counter # 定义指标 RAG_LATENCY Histogram( dify_rag_retrieval_latency_seconds, RAG retrieval latency in seconds, buckets[0.1, 0.5, 1.0, 2.0, 5.0] ) RAG_RECALL_RATE Gauge( dify_rag_topk_recall_rate, Top-k recall rate for RAG queries ) WORKFLOW_ERRORS Counter( dify_workflow_error_rate, Number of workflow node errors ) def record_rag_metrics(latency: float, recall_rate: float): RAG_LATENCY.observe(latency) RAG_RECALL_RATE.set(recall_rate)避坑Dify的Flask应用需在app/__init__.py中注册Prometheus WSGI中间件from prometheus_client import make_wsgi_app from werkzeug.middleware.dispatcher import DispatcherMiddleware app.wsgi_app DispatcherMiddleware(app.wsgi_app, { /metrics: make_wsgi_app() })否则/metrics端点无法访问监控数据断链。4.4 常见问题排查五条血泪经验总结的“部署必踩坑”现象Dify启动后/api/v1/workflows返回502 Bad Gateway原因Nginx upstream配置中server dify:5001的端口与Dify容器实际监听端口不一致。Dify 1.10默认监听5001但若修改过PORT环境变量Nginx未同步更新。解决检查Dify容器日志docker logs dify | grep Running on, 确认实际端口同步修改Nginx配置。现象上传Excel后知识库页面显示“解析失败”但日志无报错原因Unstructured库依赖libmagicAlpine镜像中未预装导致文件类型识别失败。解决在Dify Dockerfile中添加RUN apk add --no-cache libmagic或改用Debian基础镜像。现象向量库Qdrant写入速度极慢10 QPS原因Qdrant默认配置使用WALWrite-Ahead Log保证持久性但牺牲写入性能。解决在qdrant_config.yaml中设置storage参数storage: wal: enabled: false # 开发/测试环境可关闭 sync_interval_sec: 10现象JWT鉴权后Dify后台登录态丢失原因Nginx反向代理未透传Authorization头Dify无法读取JWT。解决在Nginxlocation /块中添加proxy_set_header Authorization $http_authorization;。现象Prometheus抓取/metrics返回404原因Dify应用未正确挂载Prometheus WSGI中间件或WSGI应用路径错误。解决确认app.wsgi_app被DispatcherMiddleware包裹且/metrics路径在make_wsgi_app()中注册。5. Excel文档深度解析实战如何让RAG读懂带公式的销售合同并回答“按当前汇率折算应付美元金额是多少”这才是检验RAG是否落地的核心场景。客户给的销售合同Excel里A列是人民币金额B列是汇率实时更新C列是公式A2*B2计算美元金额。Dify默认解析只会提取C列的“显示值”但当汇率变更时旧缓存值失效。我们必须让RAG理解公式逻辑而非静态文本。5.1 用openpyxl重写Excel Loader提取公式而非值# excel_formula_loader.py from openpyxl import load_workbook from langchain.schema import Document def load_excel_with_formulas(file_path: str) - list[Document]: wb load_workbook(file_path, data_onlyFalse) # 关键data_onlyFalse docs [] for sheet in wb.worksheets: for row in sheet.iter_rows(min_row1, max_rowsheet.max_row): for cell in row: if cell.has_style and cell.data_type f: # 公式单元格 # 提取公式字符串而非计算结果 formula cell.value # 构建上下文前一列值、当前汇率、公式逻辑 context f公式{formula} | 前一列值{cell.offset(column-1).value} | 当前列标题{cell.column_letter} docs.append( Document( page_contentcontext, metadata{ source: file_path, sheet_name: sheet.title, cell_address: cell.coordinate, formula: formula, data_type: formula } ) ) return docs逻辑说明data_onlyFalse让openpyxl返回公式字符串如A2*B2而非计算结果。cell.offset(column-1)获取相邻单元格值构建业务上下文。这样向量库中存储的是“公式逻辑”而非易失效的数值。5.2 构建公式推理Prompt让LLM执行符号计算而非记忆答案Dify的LLM节点需配置专用Prompt你是一个财务计算引擎请严格按以下规则执行 1. 输入为Excel公式字符串及上下文变量值如公式A2*B2 | A2值100000 | B2值0.1385 2. 输出仅为计算结果数字不带单位、不解释、不加句号 3. 若公式含IF函数先求值再计算如IF(A250000,A2*0.05,A2*0.03) 现在计算{{formula_context}}参数说明{{formula_context}}由Workflow中FormulaExtractor节点注入格式为公式A2*B2 | A2值100000 | B2值0.1385。LLM无需理解财务知识只需做符号运算——这比让模型记忆汇率更可靠。5.3 验证流程用真实合同测试“汇率变动”场景我们用某车企采购合同做验证原始合同人民币金额1,000,000汇率6.8美元应为147,058.82模拟汇率更新为7.2重新提问“按当前汇率折算应付美元金额是多少”传统RAG返回旧值147,058.82缓存失效本方案提取公式A2*B2注入新汇率7.2LLM计算得138,888.89关键指标对比方案汇率更新后首次响应准确率缓存刷新延迟运维复杂度默认Dify知识库0%完全依赖缓存2小时手动重索引低本方案公式解析100%5秒实时计算中需配置Prompt避坑LLM可能拒绝执行计算返回“我不能进行数学计算”。解决方案是在Prompt开头强制声明角色“你是一个财务计算引擎”并在system message中禁用拒绝话术。实测GPT-4-turbo和Qwen2-72B均支持此模式。5.4 进阶技巧用Excel宏录制生成RAG训练数据客户常抱怨“RAG答不对条款编号”。根源是模型未见过“第3.2.1条”这种编号格式。我们用Excel宏自动生成训练数据在合同Excel中选中条款区域按AltF8打开宏录制录制动作复制条款文本 → 粘贴到新Sheet → 在旁列输入标准问法如“第3.2.1条的内容是什么”导出为CSV作为Few-shot Prompt的示例库query,answer 第3.2.1条的内容是什么,买方应在收到发票后30日内支付全款。 付款节点是否早于交货期,否付款节点为交货后30日。技巧说明宏录制生成的数据天然对齐业务语境比人工编写更高效。我们将此CSV注入Dify的LLM Node的few_shot_examples参数显著提升条款编号理解准确率。从那以后我每次交付新行业知识库都强制走一遍宏录制生成50条典型QA——这成了我的后悔药也是客户验收时最直观的说服力。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

从抵触到依赖:前端工程师如何用 TaoToken 搭建 AI 工作流,实现能力升级与收藏 2026/9/26 15:48:36

从抵触到依赖:前端工程师如何用 TaoToken 搭建 AI 工作流,实现能力升级与收藏

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
【AI Agent 开发避坑】上下文越长,Agent越“傻”?一文讲清原因与优化策略 2026/9/26 15:48:30

【AI Agent 开发避坑】上下文越长,Agent越“傻”?一文讲清原因与优化策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
OpenClaw+LibTV视频生成实测(含安装+配置+分析):ai生成工作流很规范,但画面在“打架“ 2026/9/26 15:48:23

OpenClaw+LibTV视频生成实测(含安装+配置+分析):ai生成工作流很规范,但画面在“打架“

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
OpenClaw 2026.5.3-1 修正版更新解读:修复官方 bundled plugin 被安装扫描器误拦问题 2026/9/26 15:48:23

OpenClaw 2026.5.3-1 修正版更新解读:修复官方 bundled plugin 被安装扫描器误拦问题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
使用 AWS SDK for Kotlin 操作 Amazon Data Firehose:创建、写入与删除 Delivery Stream 实战指南 2026/9/26 15:48:04

使用 AWS SDK for Kotlin 操作 Amazon Data Firehose:创建、写入与删除 Delivery Stream 实战指南

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地…

阅读更多 →
DeepSearcher 接入 Docling:本地文件加载与 Web 爬取一体化实战指南 2026/9/26 15:47:58

DeepSearcher 接入 Docling:本地文件加载与 Web 爬取一体化实战指南

人工智能大模型RAGAI Agent深度研究知识库 【免费下载链接】deep-searcher Open Source Deep Research Alternative to Reason and Search on Private Data. Written in Python. 项目地址: https://gitcode.com/gh_mirrors/de/deep-searcher 点击查看 免费下载 本指…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉