找回密码
 立即注册
首页 业界区 业界 彻底治愈AI“失忆”和胡说八道的真正办法 ...

彻底治愈AI“失忆”和胡说八道的真正办法

诈知 3 天前
这几天我一直在用我在《AI基于Spec开发是巨坑?》 所说的方法来继续MindX2的开发。虽然,在用前文中所提到的方法尽量去抑制AI胡说八道,但感觉还是治标不治本。AI总是时不时就开始任性独断,顺口胡诌。
最要命的是在MindX2中尽管有记忆系统,AI仍然是会犯这种疯病。所以我决心一定要解决这个问题,先得找到根因。而搞笑的是就在同一天,我一个电商公司的销售主管给我抱怨了这么一个情况,由于我没有拿到手机聊天的截图,只能将他和我说的情况用文字来复述了(以下的Alex就是我朋友的代称):
客户(咆哮):"你们客服说买一送一,现在下单又不算了!欺诈消费者!"
Alex(查看记录):"先生,我们从来没做过这个活动啊..."
客户(甩出截图):"自己看!客服亲口说的!'购买 iPhone 17 即送 AirPods Pro' 我现在就要!"
Alex(崩溃):"我们这是AI客服输啊,这很明显是 AI 编造的啊!我们根本没这个政策..."
后面的内容不关我们事了,主动脑补吧,反正也不会是什么好结局,否则也听不到这样的抱怨,我只是庆幸我最多是骂一下AI,我这朋友估计得被扣钱了,AI惹的祸主管来背呗,实在是有点背。
从技术的角度来看我与我朋友所经历的这两件事就暴露一个AI的本质,这根用哪个模型是没有关系的就是:“幻觉”。其实一查网上也是一大堆说这个的,辛亏也是这么一看才发现这东东的根因真的不在大模型,而是在大模型的应用上。之所以我们感觉它在胡说,然而大模型只是在信息匮乏的情况下给出了一个看似【合乎逻辑】的答案而已。
原来治愈这个种AI幻觉的良药是RAG!
RAG(Retrieval-Augmented Generation,检索增强生成)是一种将外部知识检索与大语言模型生成能力相结合的技术框架。它的核心思想是让大模型在生成回答前,先从外部知识库中检索相关信息,然后将这些信息作为上下文提供给模型,从而生成更准确、更可信、更具时效性的答案
说人话:RAG 就是一种建立语义化搜索的知识库。 不查也不知道原来这还是当下AI中最热门的研究主题之一呢。
我查了一下当下最流行的RAG框架,主要有以下这些:
框架类别框架名称主要开发语言备注通用开发框架LangChainPython (主)、JavaScript/TypeScript提供 Python 和 LangChain.js (JS/TS) 两个官方版本。Python 版功能最全、生态最成熟。LlamaIndexPython、TypeScript核心框架提供 Python 和 TypeScript 两种版本。HaystackPython由 deepset.ai 开发,是一个基于 Python 的端到端 NLP 框架。企业级/可视化平台DifyPython (后端)、TypeScript (前端)后端基于 Python (Flask),前端基于 React + TypeScriptRAGFlowPython官方文档及安装指南均标明主要使用 PythonMaxKB未明确(推断为 Python/Java)作为知识库系统,常见技术栈为 Python 或 Java,具体需查阅其源码仓库确认。FastGPT未明确(推断为 TypeScript)作为零代码平台,其技术栈可能以现代 Web 技术(如 TypeScript)为主。前沿/多模态与专项框架UltraRAG 2.1未明确(推断为 Python)由清华大学团队开发的研究型框架,通常基于 Python 生态。Morphik未明确(推断为 Python)知识图谱驱动的多模态RAG数据库,核心逻辑层常用 Python。MilvusGoC++核心数据库引擎由 GoC++ 编写,提供 Python、Java、Go 等多语言 SDK。mem0未明确(推断为 Python)AI 记忆层库,通常与 Python AI 栈深度集成。RAGAS未明确(推断为 Python)RAG 评估框架,极大概率基于 Python 实现。FlashRAG未明确(推断为 Python)研究导向的模块化工具包,常见于 Python 研究社区。从上述列表清一色是 Python 的天下。本来是想找到一个用纯GO版本的 RAG,看完这表就将我劝退了。不是我不喜欢Python,相反的我用Python的时间比Go还长,只是Python从来不是我用来做产品的首选语言,主要我比较看重速度与无依赖部署两点,这是我个人认为做一个产品必须追求做到的原则。python我用得最多也就是内部项目,研究性项目,毕竟它的性能是硬伤与Go, Rust, Java 是无法比的,甚至是达到可感知的状态的,不服可以去装个 Hugo 和 Pelican 运行对比一下就很明显,绝对的10秒以上的速度碾压。
找RAG当然是为了升级MindX了,既然找不到那也只能自己手搓了呗,反正ReAct也搓出来了也不差这么一个RAG了。
过程省去,24小时之后 ... 我写了一个叫 GoRAG 的项目,这次索性一开始就直接开源,有兴趣的朋友可以看我的GitHub或者CSDN的源码库。
因为有意识地控制住编程模型的“幻觉”问题这次是省下不少时间写测试了,这个项目的测试覆盖率可是达到了85%+
性能优势:Go 语言带来的本质提升

先来看看用GO实现RAG带来本质提升,我用Go写了基准测试(Bachmark test),以下是与其它两个知名pyhton库的速度对比:
测试维度(10,100 文档/160 万字符)GoRAGLangChainLlamaIndex索引耗时206 秒(≈20.4ms/文档)600-1000 秒400-600 秒查询耗时20.5 秒40-80 秒30-40 秒内存占用50-100MB200-500MB150-300MB核心关键需求:难点与热点

如果只是仿写重复造轮子,那一点意思都没有还不如直接用,所以我给这个框架加了一些不同的东东,其它该有的功能全部都有,然后还有些高阶能力,可以看下表:
功能特性GoRAG传统 Python 框架解决的核心问题并发目录索引✅ 内置❌ 需手动实现批量文档索引效率低、易卡顿智能体 RAG(Agentic RAG)✅ 完整支持❌ 无/有限支持AI 自主决定检索策略,适配复杂查询(如生成行业报告)RAG-Fusion 多视角检索✅ 独有❌ 不支持单一查询视角检索结果不全的问题多跳检索✅ 独有❌ 无/有限支持处理需要从多个文档获取信息的复杂问题多格式文档自动解析✅ 9 种(PDF/Excel/PPT 等)❌ 需手动装解析库不同格式文档解析兼容性差、配置复杂架构与原理

其实这个项目结构很简单,主要就是由4大部分部分组成:文件解释器,RAG引擎,Embedding提供器,向量储存(已经支持时下最流行的4大向量数据库),每个部分都可以独立扩展,可以支持插件机制进行扩展。
graph TBsubgraph "命令行与示例"CLI["cmd/gorag/main.go
CLI 工具入口"]EXB["examples/basic/main.go
基础示例"]EXA["examples/advanced/main.go
高级示例"]endsubgraph "RAG 引擎"ENG["rag/engine.go
RAG 引擎"]CACHE["rag/cache.go
查询缓存"]ROUTER["rag/routing.go
查询路由"]HYBRID["rag/retrieval/hybrid.go
混合检索"]RERANK["rag/retrieval/reranker.go
重排序"]endsubgraph "能力接口"ARSER["parser/parser.go
文档解析接口"]EMB["embedding/embedding.go
嵌入接口"]VSTORE["vectorstore/vectorstore.go
向量存储接口"]LLM["llm/llm.go
LLM 客户端接口"]endCLI --> ENGEXB --> ENGEXA --> ENGENG --> PARSERENG --> EMBENG --> VSTOREENG --> LLMENG --> ROUTERENG --> HYBRIDENG --> RERANKENG --> CACHE开发体验:降低上手门槛

传统 Python RAG 框架需理解 Chain、Agent、Retriever 等复杂概念,代码量高且易出错;GoRAG 设计极简 API,核心功能 5 行代码即可实现:
  1. // GoRAG 快速实现 RAG 系统
  2. package main
  3. import (
  4.     "context"
  5.     "log"
  6.     "fmt"
  7.     embedder "github.com/DotNetAge/gorag/embedding/openai"
  8.     llm "github.com/DotNetAge/gorag/llm/openai"
  9.     "github.com/DotNetAge/gorag/rag"
  10.     "github.com/DotNetAge/gorag/vectorstore/memory"
  11. )
  12. func main() {
  13.     ctx := context.Background()
  14.     // 1. 初始化嵌入模型和大模型
  15.     embed, _ := embedder.New(embedder.Config{APIKey: "你的API密钥"})
  16.     llmClient, _ := llm.New(llm.Config{APIKey: "你的API密钥"})
  17.    
  18.     // 2. 创建 RAG 引擎
  19.     engine, _ := rag.New(
  20.         rag.WithEmbedder(embed),
  21.         rag.WithLLM(llmClient),
  22.         rag.WithVectorStore(memory.NewStore()),
  23.     )
  24.    
  25.     // 3. 一键索引整个目录(自动并发处理)
  26.     if err := engine.IndexDirectory(ctx, "./company_docs"); err != nil {
  27.         log.Fatal(err)
  28.     }
  29.    
  30.     // 4. 检索增强查询
  31.     resp, _ := engine.Query(ctx, "2024 新品 XPhone 16 Pro 的核心功能?", rag.QueryOptions{
  32.         TopK: 5, // 返回Top5相关文档
  33.     })
  34.    
  35.     // 5. 输出结果(含来源追溯)
  36.     fmt.Println("回答:", resp.Answer)
  37.     fmt.Println("引用来源:")
  38.     for _, src := range resp.Sources {
  39.         fmt.Printf("- %s(第 %d 页)\n", src.FilePath, src.PageNumber)
  40.     }
  41. }
复制代码
其它的特性我写在GitHub上了。
GoRAG 并非单纯的“技术升级”,而是通过 Go 语言的性能优势和工程化设计,解决了传统 RAG 框架在企业落地中的性能、部署、安全痛点,让 RAG 技术真正能低成本、高可靠地服务于实际业务。
应用

那这东西有什么用?RAG 的应用其实是很广泛的,总结起来主要有以下的几种:

  • GoRAG将会是MindX2的核心记忆体的一部分;
  • 可以用GoRAG接入你的Agent优化提示词,有效抑制“幻觉”与“失忆”;
  • 垂直领域智能助手(医疗 / 法律 / 金融)这类领域对专业知识精准度、合规性要求极高,RAG 是解决通用大模型 “外行化” 的核心方案。
  • 即使不用于AI项目也可以广泛地应用于客服与智能客服系统,问答系统的语义化索引与搜索;
  • 企业内部知识库与协同办公,解决企业内部 “知识沉淀难、检索效率低” 的问题,是企业数字化转型的核心场景;
  • 工业与制造业,面向工业场景的 “知识复用、故障排查、运维支持”,解决工业数据分散、专家经验难以传承的问题;
  • 教育与培训,解决教育场景中 “个性化答疑、知识更新、题库管理” 的问题;
  • 政务与公共服务,解决政务场景中 “政策解读、办事指南、公众咨询” 的效率问题。
说白了就是凡需要大型知识库支撑的业务都能用上RAG。这个应用面可是很广的。
当然,如果这GoRAG能有那么一点点入你的法眼,我也希望你能关注或者加入到这个项目中来,在社区中共同发展它。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册