尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
快速RAG系统落地指南:四段式链路、参数调优与避坑实践
简介一份聚焦快速RAG系统落地的软件包与源码资源面向需要构建高性能检索增强生成的研发人员。方案以SambaNova DeepSeek-R1作为高性能推理引擎Qdrant通过二进制量化实现约32倍内存缩减用1 bit压缩大幅降低向量存储开销同时维持检索质量与速度配合LangGraph编排用户提问、快速候选检索、精确重评分和答案生成的完整流程适合高维嵌入、海量向量和在线问答等场景。压缩包内共2个文件包含inscode代码文件与html说明页面便于查看方案设计与关键实现包体仅3KB轻量易解析。该资源已有77人学习开发者可从中获取组件选型思路、流程编排参考以及二进制量化技术的实际运用方法对快速搭建或优化RAG系统具有直接借鉴价值。1. 快速RAG系统方案先跑通再谈优化的最小闭环快速RAG系统方案这个标题最近在不少团队里被反复提起尤其是手头有一批私有文档、想先跑出一个能用的知识库问答时。快速RAG的意思是不追求一次做成生产级平台而是用一个最小的检索增强生成链路在半天内把上传文档→切块→向量化→检索→生成答案闭环跑通让业务方先看到效果再逐步加权限、重排和评估。适合有Python基础、已经碰过LLM API、但还不想一上来就上重向量库和微调的工程师。这篇文章就按这个路线把方案、参数和踩坑一次讲清楚。2. RAG四段式链路与选型为什么这套组合最快落地先把快速RAG拆成一段能落地的链路。它一共四步文档解析、文本切块、向量召回、提示词生成。每一步都有一堆可选做法但快速方案的关键是控制变量先固定一种最顺手的组合把端到端跑通再去调里面的一两个环节。多数rag实战项目卡住不是因为模型不行而是因为环节太多不知道瓶颈在哪。2.1 四段式链路拆解解析、切块、召回与生成的职责边界文档解析只做一件事把PDF、Word、网页变成干净文本。常见做法是直接用pypdf、python-docx、trafilatura这类库不需要自己实现。解析质量影响后续所有环节但快速方案里不需要追求完美只要保证正文能抽出来标题层级能保留表格和代码块别丢太多就行。如果发现某些文档解析后大量乱码先检查是不是扫描版PDF这类文件要先OCROCR本身不是快速RAG该解决的事建议另开任务。切块是把长文本切成若干个能被embedding模型接受的片段。切块粒度直接决定检索命中率切得太粗一个块里混多个主题向量表示被稀释切得太细单个块信息密度低模型拿到也可能答不全。快速方案我从800字符的块开始重叠120字符后续根据文档结构微调。为什么用字符而不是token因为中文按token切容易把词切碎按字符切虽然粗但肉眼可见调试更直观。召回阶段把query向量和库里所有chunk向量做相似度计算返回TopK。这里要注意相似度具体是什么距离Chroma默认用的是L2但文本embedding常用cosine我会在创建collection时显式设置{hnsw:space: cosine}。否则同一个query在调试时看到的分数字段含义完全不同很容易误判。生成阶段把召回结果拼进提示词交给LLM输出。这个环节最容易被忽视的是上下文组织不要把TopK的原始文本无脑拼接而要把每个chunk的来源、标题、页码带上让模型在回答时能看到出处。同时提示词要写明只依据资料回答否则模型会凭自己的参数知识开始自由发挥这是最典型的翻车场景。2.2 快速方案的选型理由本地Embedding、轻量向量库与兼容式LLM接口个人习惯第一版RAG全部选轻量组合理由只有一个出了问题你能定位。Embedding模型我优先选BAAI/bge-m3这类中文效果稳定、且能在本地部署的模型。它支持长文本还提供稠密和稀疏向量两种表示后续如果要做关键词向量混合检索不用换模型。如果你的机器跑不动退而选更小的bge-small也行但不要一上来就用云端embedding API因为索引调试阶段要反复跑全量文档本地推理快很多成本也更可控。向量库方面快速方案首选Chroma。它是嵌入式库数据落盘在本地目录接口简单到只有create/query/update/delete几个操作适合胶水式集成。FAISS更底层性能上限更高但你得自己管索引序列化和增量写入Milvus和Qdrant适合数据量大、需要多实例共享的场景对一个几天内验证效果的项目来说偏重。如果后续要上生产再把Chroma的代码层换成Qdrant接口差异不算大替换成本可控。LLM接口统一用OpenAI兼容格式。这样本地Ollama部署的Qwen、云端DeepSeek或Moonshot都能用同一套SDK接入切换时只改base_url和model名业务代码不动。这里的兼容指HTTP路径和请求体结构一致调用方式完全一样是最便宜的后悔药。快速RAG项目里最怕的就是每个模型一套SDK最后代码里全是if-else分支。2.3 什么时候不该上RAG先判断是不是检索问题不是所有让模型回答业务问题的需求都适合RAG。如果语料只有几十条固定问答直接维护提示词里的Few-Shot示例更快更准如果问题都需要跨多份文档推理那要先做多跳检索或者引入Agentic RAG那已经不是快速方案的范畴。RAG解决的核心矛盾是知识不新、不专、不全不是万能外挂。如果预期场景里90%的问题在文档里根本没有答案RAG只会放大幻觉因为检索不到的时候模型也会硬凑。这种情况先把知识库补齐再谈RAG。Ontology RAG通过构建实体关系图谱来约束检索范围效果确实更好但建图谱本身成本很高不适合作为第一版上手方案。快速方案的定位永远是用最少成本验证检索生成这件事在你的场景里有没有价值而不是一步到位。3. 最小实现把RAG装进本地API服务的完整代码快速RAG方案的快体现在从零到一能跑通的代码量。下面这套实现刻意不引入框架只依赖四个库chromadb做存储openai做Embedding和LLM调用FastAPI做服务入口pypdf做PDF解析。逻辑全部放进一个app.py里方便调试。3.1 准备环境与依赖一套兼容式接口就够了安装命令用pip。注意chromadb在Python 3.12上的某些版本需要编译依赖如果你本地没有编译器建议直接用3.10或3.11的虚拟环境。pip install chromadb openai fastapi uvicorn pypdf逻辑说明chromadb提供Collection接口openai用统一的Embedding/Chat接口FastAPI把索引和查询暴露成HTTP路由pypdf负责从PDF抽文本。这五个库已经覆盖全部功能不需要额外引入RAG框架。参数说明如果你没有本地模型服务可以先用一个支持OpenAI兼容格式的云端API地址占位。代码里统一用base_url变量表示改一处就行。api_key写EMPTY即可很多本地推理服务会忽略它。环境准备好后项目结构如下quick_rag/ app.py data/ # 放PDF文档 chroma_data/ # 向量数据库落盘目录3.2 索引与检索核心代码切块、向量入库、TopK召回先写切块函数。这里不按自然语言模型化切因为灵活性和可控性最好。def chunk_text(text: str, chunk_size: int 800, overlap: int 120) - list[str]: chunks [] start 0 while start len(text): end start chunk_size chunks.append(text[start:end].strip()) if end len(text): break start end - overlap return chunks逻辑说明按字符滑窗切块不判断标点边界。好处是任何文本都能稳定切分坏处是可能切断语句所以overlap会在后续检索时补偿。这个函数的返回值直接作为embedding的输入。参数说明chunk_size的取值要平衡两个约束——embedding模型的token上限和单块语义完整度。bge-m3支持很长的上下文但实际建议chunk_size不超过1500字符因为文本块太长向量表示会偏向平均语义反而找不到要点。overlap建议设为chunk_size的15%左右太少起不到跨块衔接作用太多会让重复内容占存储。接下来是索引。为了让代码能直接跑我让它扫描指定目录下的所有PDF。索引函数如下import os from pypdf import PdfReader from chromadb import PersistentClient from openai import OpenAI client OpenAI(base_urlhttp://localhost:8899/v1, api_keyEMPTY) EMBED_MODEL bge-m3 LLM_MODEL qwen2.5:7b collection PersistentClient(path./chroma_data).get_or_create_collection( namequick_rag, metadata{hnsw:space: cosine} ) def embed_texts(texts: list[str]): resp client.embeddings.create(modelEMBED_MODEL, inputtexts) return [item.embedding for item in resp.data] def build_index(doc_dir: str): all_ids, all_docs, all_meta [], [], [] for fname in os.listdir(doc_dir): if not fname.endswith(.pdf): continue reader PdfReader(os.path.join(doc_dir, fname)) text \n.join(page.extract_text() for page in reader.pages) chunks chunk_text(text) for i, chunk in enumerate(chunks): all_ids.append(f{fname}_{i}) all_docs.append(chunk) all_meta.append({source: fname}) embs embed_texts(all_docs) collection.add(idsall_ids, documentsall_docs, embeddingsembs, metadatasall_meta)逻辑说明这个函数先遍历data目录下的PDF用PdfReader逐页抽文本再调用chunk_text切块通过embed_texts批量向量化最后写入collection。注意collection.add需要三个核心参数id、document和embedding。如果只传documents不传embeddingsChroma会自动调用内置embedding函数导致它内置的模型和我们查询时用的模型不一致这是很多RAG项目上线后检索质量不稳的根源。参数说明build_index没有做批量控制文档几十页时没问题几百页时建议分批一次embed 100个chunk比较稳。另外page.extract_text()在扫描版PDF上会返回空字符串处理前应先判断text长度。元数据里的source字段会在后面的提示词里作为引用来源。然后是检索和生成def rag_query(question: str, top_k: int 5) - str: qemb embed_texts([question])[0] hits collection.query(query_embeddings[qemb], n_resultstop_k) chunks, metas hits[documents][0], hits[metadatas][0] context \n\n.join(f[{m.get(source, unknown)}] {c} for c, m in zip(chunks, metas)) response client.chat.completions.create( modelLLM_MODEL, messages[ {role: system, content: 只依据资料回答资料中没有的信息必须回答资料中未找到不要推测。}, {role: user, content: f资料\n{context}\n\n问题{question}}, ], temperature0.2, ) return response.choices[0].message.content逻辑说明rag_query先对问题做embedding从collection中取top_k个chunk把来源和内容一起拼进上下文最后交给LLM生成。这里temperature设到0.2是刻意的RAG场景要的是稳定和忠实不是发散。如果答案要求严格一致可以改为0。参数说明top_k决定模型能看到多少资料。5是通用起点如果一个问题经常需要跨好几个chunk才能答全可以提到10但要同时接受更多噪声。collection.query返回的distances是创建collection时那个space的度量结果用cosine时值越小越相似。提示collection.add传入的ids不能重复。如果重复跑build_index建议先执行collection.delete(where{})清空当前库或者在写入前按source删除旧文件对应的chunk否则Chroma会抛唯一约束错误。3.3 把RAG包成APIFastAPI路由与调用示例索引和查询不能每次都在脚本里跑包成服务更方便测试。下面只贴路由部分直接用上面定义的函数。from fastapi import FastAPI from pydantic import BaseModel app FastAPI() class IndexRequest(BaseModel): doc_dir: str ./data class QueryRequest(BaseModel): question: str top_k: int 5 app.post(/index) def index_api(req: IndexRequest): build_index(req.doc_dir) return {status: ok, indexed: True} app.post(/query) def query_api(req: QueryRequest): return {answer: rag_query(req.question, req.top_k)}逻辑说明用FastAPI的BaseModel做请求体校验/index接口接受一个doc_dir参数/query接口接受question和top_k。启动方式在命令行里执行uvicorn app:app --port 8899即可。实际调用时先调/index把文档加载入库再调/query。参数说明doc_dir默认相对路径你也可以改成绝对路径。QueryRequest里的top_k是可选项默认5方便前端在调试时临时调整。注意不要让用户传大于50的top_k否则上下文会超过模型窗口建议在接口入口做一次上限检查。调用方式用curl验证curl -X POST http://localhost:8899/query \ -H Content-Type: application/json \ -d {question: 这个系统的部署步骤是什么, top_k: 5}逻辑说明curl请求体里传question和top_k返回JSON里的answer就是最终回答。排错时建议在/query接口加一个debug参数把hits的documents一起返回。这个习惯能省很多时间因为问题到底是检索没召回到还是LLM没用好只有看到chunk才知道。4. 参数调优切块、TopK和重排序的搭配策略快速RAG跑通只是开始真正决定好不好用的是三个参数切块大小、召回数量、相似度阈值。这三个参数互相牵制不能分开调。下面按顺序讲一套可以照着做的调优流程并说明每个参数在什么情况下需要换。4.1 切块与重叠参数800字符切片为什么比1200常用经验上通用知识文档从chunk_size800、overlap120起步是最稳的。原因有三第一800字符大约覆盖中文400~600个词足够容纳一个完整技术要点的论述第二大部分embedding模型在文本较短时向量表示更集中检索命中更准确第三120字符的重叠能把被切断的句尾和句首重新关联起来。为了更直观地看差异我整理了不同chunk_size的适用场景chunk_size适合场景主要风险300-500代码片段、FAQ、短段落上下文碎片化模型看不到主题800-1000通用知识文档、技术手册无明显短板推荐起步值1500完整章节、长表格向量表示被稀释噪音变多调的时候不要只看一两篇文档而是找10个高频问题人工标记每个问题的标准答案落在哪个chunk里再统计检索命中率。比如你问部署失败如何回滚如果命中chunk来自部署步骤的上一节说明切块把回滚章节切得太碎需要调大chunk_size或按标题结构调整。如果你手头是Markdown源文档可以先按标题切到二级/三级小节再在小节内继续切比纯字符切块稳定得多PDF没有标题结构时只能用字符切块加overlap兜底。overlap的调节没那么敏感一般固定为chunk_size的15%。但有一种情况必须调大文档段落之间有频繁的承接词比如如上所述因此如果重叠太少后半段失去前半段指代检索到的chunk读起来没头没尾。此时把overlap增加到200甚至300比改chunk_size更有效。4.2 召回数量与相似度阈值统计分布先于拍脑袋TopK常见的误区是拍脑袋选一个固定值。快速方案里我建议按先粗后精的思路来初次检索TopK取20~50然后人工扫一眼返回片段看正确的资料是否在候选里。如果正确片段在Top50都在但不在Top5说明你该上重排而不是继续调TopK如果Top50都没有那就是切块或embedding的问题改TopK也没用。相似度阈值更玄学。不同embedding模型产出的分数范围不一样同一个模型在不同领域文档上分数分布也不一样。我见过在QA语料上正常命中的cosine距离是0.2左右换到技术手册就变成0.5如果按固定的距离小于0.3过滤第二份语料全被过滤掉。所以初始化阈值前的第一步先把线上真实query跑一遍打印距离分布。下面这段脚本帮你完成统计import numpy as np def collect_scores(collection, embed_fn, queries): scores [] for q in queries: qemb embed_fn([q])[0] res collection.query(query_embeddings[qemb], n_results20) for item in res[distances]: scores.extend(item) return np.array(scores) q_list [如何配置日志级别, 部署失败怎么排查, API鉴权方式] arr collect_scores(collection, embed_texts, q_list) print(中位数:, np.median(arr), P10:, np.percentile(arr, 10))逻辑说明这个脚本统计一批query距离的前20个命中值的分布你可以看到正确片段落在哪个区间。注意我们用的是cosine距离所以数值越小越相似不是越大越好。设定阈值时观察正确命中的距离上界如果正确命中的最大距离是0.35那就把阈值设在0.38左右。参数说明如果P10仍然大于0.6说明这个embedding对这些query整体不匹配优先换embedding模型而不是硬调阈值。另外阈值只用来排除明显不相关的命中不要指望它解决返回了但内容不对的问题那是重排和query改写的事。4.3 重排序的引入时机先粗召回后精排的调用方式当TopK召回结果里正确资料存在但排位靠后时重排序是最划算的优化。常见做法是用bge-reranker这类专门训练过的排序模型对query候选chunk对打分再按分数取前几个。它的原理不再依赖向量空间而是模型直接判断文本相关性效果比单纯改阈值好很多。引入Rerank的时机很简单先跑通基础链路再构造20条query逐个看基础检索的Top5里有没有正确答案。如果大多有但排得靠后就加Rerank如果大多没有先别加回头处理切块和embedding。Rerank不是万能药它只能重排已经被召回的内容不能凭空找回切没切对的段落。from FlagEmbedding import FlagReranker reranker FlagReranker(BAAI/bge-reranker-v2-m3) def rerank(query, docs, top_k5): pairs [[query, doc] for doc in docs] scores reranker.compute_score(pairs) pairs_with_score sorted(zip(docs, scores), keylambda x: x[1], reverseTrue) return [doc for doc, _ in pairs_with_score[:top_k]]逻辑说明compute_score接收一组query-doc对返回每个对的相似度分数然后按降序取前top_k。注意这里的评分范围和向量余弦距离完全不同不能混用阈值经验。我在实际rag项目里通常先Top50粗召回再Rerank取Top5整体耗时会比纯Top30直接生成多几十毫秒但答案质量明显提升。参数说明候选文档数建议在20~50。候选太少重排提升有限候选太多重排耗时线性增长。如果你的query请求并发高可以用异步批处理或把Rerank结果缓存起来避免每次都重复计算相同query的结果。5. 避坑清单RAG最容易翻车的5个点与处理办法快速RAG踩坑次数最多的往往不是模型而是数据准备和调用参数。下面这5个问题我都在实际项目里遇到过按现象、原因、解决的顺序说可以直接对照排查。5.1 按字符硬切导致跨段语义割裂现象检索某个操作步骤时返回的chunk只包含步骤前半段后半段在相邻chunk里。模型按前半段生成答案结果少了一个关键前置条件方案看起来没问题但实际不可执行。原因固定字符切块完全忽略文档结构把标题、列表、代码块切成两半。当用户查询内容刚好落在切片边界附近召回信息天然不完整。解决先用正则切到二级标题级别再在标题内部按800字符切块。给每个chunk添加标题和来源元数据把标题路径拼在chunk文本前面。示例做法是解析PDF时先按页码获取文本再用正则切出二级/三级标题块。这样即使检索到后半段元数据里的标题也能让模型理解上下文场景。提示不要迷信重叠120字符能解决所有跨段问题。重叠只是补偿文档结构切分才是根因。5.2 相似度阈值设置不当导致空召回或乱答现象阈值设0.85距离小于0.15结果一个也查不到降到0.7又发现模型开始答非所问甚至把不相关文档内容强行组织成答案。原因不同模型与语料的相似度分布差异极大固定阈值不具有可迁移性。更糟的是Chroma创建collection时如果用的是L2距离而你的query代码里假设的是cosine相似度看到的数字没有任何对比意义。解决统一距离类型先跑一段距离分布脚本参考4.2节的collect_scores把正确回答命中的距离上界设为阈值下界再留20%余量。例如正确命中距离都在0.2~0.4之间阈值就设0.45。上线后把被拒掉的query收集起来每周重算一次分布。5.3 只取TopK不重排噪声上下文干扰答案现象TopK5时正确chunk排在第三前面两个是别的章节碎片。模型被前面两个chunk带偏回答了一个表面上相关实际错误的内容。原因向量召回只保证语义相近不保证问题直接相关。一个章节里提到部署失败和回滚两个词会被检索模型高亮召回但在该章节里它们只是背景介绍不是问题答案。没有重排时这些背景片段照样进提示词。解决先Top50粗召回再走Rerank选Top5。如果你的环境跑不了Rerank模型可以用一个更轻的替代方案把TopK增大到10然后在提示词里让模型先判断哪段资料真正回答了问题哪些只是相关背景再作答。但这只是退路最终还是建议上Rerank。5.4 提示词没有约束仅凭上下文回答现象资料里明明没有某个数字模型却根据训练数据给出了一个业界通用数值而且回答得理直气壮用户很难分辨。原因LLM自身续写能力太强提示词里没有限制信息来源系统默认会把模型参数里的知识当成资料的一部分。这是RAG幻觉的主要来源。解决系统提示词写死为只依据资料回答资料中没有的信息必须回答资料中未找到不要推测。如果担心模型误判再加一条如果你不确定资料是否覆盖了问题请引用资料原文。在评估集里专门安排几个资料外问题如果一个劲儿回答而不是拒答说明提示词约束不够硬。5.5 文档更新后旧索引仍在新旧版本内容混答现象产品手册更新后用户问新版功能模型回答混杂了旧版已经废弃的参数运维查了半天发现是知识库内容错位。原因向量库只管理chunk没有文档级版本管理。旧文档的chunk还留在collection里更新时如果按文件名页码写ID新文档和旧文档的ID可能冲突也可能并存完全取决于你如何命名。解决每个文档建立一个doc_id格式建议用文件名版本号时间戳。更新时先按metadatas里的doc_id删除旧chunk再重建索引。在Chroma里对应collection.delete(where{doc_id: old_doc_id})然后重新add。查询响应里也带上doc_id方便前端展示资料来源版本比只显示文件名更可靠。6. 验证与进阶给快速RAG方案加上评估基线快速RAG从能答到答得稳中间缺的不是模型而是评估基线。我每次换参数或换embedding模型都会先跑同一组20~50条真实query记录三个指标命中率正确chunk是否在TopK里、正确率生成答案是否包含标准要点、拒答率资料外问题是否正确拒答。改动前后横向对比而不是凭感觉看一次回答。一条最小验证代码长这样def eval_hit_rate(queries, gold_ids): hit 0 for q, gold_id in zip(queries, gold_ids): res collection.query(query_embeddings[embed_texts([q])[0]], n_results5) hit 1 if gold_id in res[ids][0] else 0 return hit / len(queries)这里的gold_ids是标准答案所在chunk的id构建索引时由文件名_序号组成验证阶段手工标好一份之后每次调参都复跑。指标说明达标线命中率正确答案所在chunk是否被召回90%以上正确率生成答案是否包含标准要点80%以上拒答率资料外问题是否正确拒答接近100%进阶方向里Agentic RAG是自然下一步让Agent根据问题决定检索一次还是多次需不需要调用代码库或网页工具。RAG as Service则是把上面这套接口打包成团队内部服务加入鉴权、日志和模型版本管理。顺便说一句RAG和MCP的区别MCP解决的是Agent如何标准化地访问外部工具和数据RAG解决的是私有知识如何被检索并注入生成上下文两者不是替代关系。你可以把检索接口封装成一个MCP Server让多个Agent共用同一个知识库这才是组合使用的方式。最后分享一个提升召回率的技巧查询改写。用户提问经常很短比如这个报错怎么办直接向量检索很难命中具体FAQ。可以先让一个小模型把问题扩写成多个检索变体分别召回再合并TopKdef rewrite_query(q): rsp client.chat.completions.create( modelLLM_MODEL, messages[{role: user, content: f把问题改写成适合检索的3个短变体只输出变体{q}}], temperature0.3, ) return rsp.choices[0].message.content.strip().splitlines()这段改写的核心是逼着模型把口语问题补成搜索友好的变体比如这个报错怎么办会被扩展成错误信息常见原因排查步骤三个方向变体分别检索后合并TopK比单次检索稳定很多。我早期做RAG时以为把向量库搭好就完事了后来发现切块和重排占掉了80%的调优时间。现在无论项目多急我都会先给20条query建立评估集再动参数这个习惯让我少踩了很多看似解决了实际上没解决的坑。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

AIOps 落地第四期:自动化闭环自愈的风控防线与人工兜底

AIOps 落地第四期:自动化闭环自愈的风控防线与人工兜底

AIOps 落地第四期:自动化闭环自愈的风控防线与人工兜底在企业智能化运维(AIOps)推进到 第四阶段(L4 自动化闭环自愈,Closed-Loop Self-Healing) 的终极战场时,摆在所有技术专家面前最深沉的考验…

📅 2026/9/25 23:22:46
Atlas 300V 24G部署YOLOv5推理服务:驱动、模型转换与性能调优全记录

Atlas 300V 24G部署YOLOv5推理服务:驱动、模型转换与性能调优全记录

后台读者私信里,问得最多的除了显卡就是Atlas了。上个月我刚好用Atlas 300V 24G这块卡把一套YOLOv5的检测服务跑通了,从驱动安装到模型转换到线上推理,整整折腾了半个月,踩了不少坑。这篇文章就把整个过程和关键决策点完完整整记录…

📅 2026/9/25 23:22:46
本科毕设首选:基于Hugging Face的中文文本摘要实战指南

本科毕设首选:基于Hugging Face的中文文本摘要实战指南

简介:本资源是一份面向本科生的深度学习文本摘要实践项目,聚焦自然语言处理中的自动摘要任务,以Transformer模型为核心技术方案,完整覆盖数据预处理、模型构建、训练调优与评估全流程,特别适合作为本科毕业设计选题与实…

📅 2026/9/25 23:22:46
MORE NEWS

更多资讯

📰

VSCode 插件 TONGYILingma 配置 TaoToken:settings.json 骨架与连通性验证

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

📰

【干货收藏】AI大模型性能评估指南:用TaoToken统一Key实测延迟、吞吐量与成本

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

📰

一天一个开源项目(第18篇):OpenWork - 开源版Claude Cowork,本地AI代理工作台

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

📰

TEN Framework 中的 FFmpeg Demuxer 扩展:媒体流解复用与音视频帧输出全解析

人工智能AI Agent多模态语音AI 应用 【免费下载链接】ten-framework Open-source framework for conversational voice AI agents 项目地址: https://gitcode.com/TEN-framework/ten-framework 点击查看 免费下载 导读 ffmpeg_demuxer 是 TEN Framework 提供的一个…

📰

上下文为何越聊越长?CANNBot-Sentry上下文增长曲线与/compact标记可视化完整指南

上下文为何越聊越长?CANNBot-Sentry上下文增长曲线与/compact标记可视化完整指南 【免费下载链接】cannbot-sentry CANN 生态中面向 Agent 工作流的“哨兵”:观测 审计 评测三位一体的质量基础设施 项目地址: https://gitcode.com/cann/cannbot-sent…

📰

无人茶室系统实战:Java Spring Boot预约与设备联动设计

把无人茶室这套系统从零到一落地,前后大概用了三周。项目本身不复杂,但“无人”两个字把所有压力都压在了后台——预约排期、订单计费、门锁联动、异常告警,哪一个环节断了,客人都会被关在门外。技术底座选了 Java,原因…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬