news 2026/3/26 17:26:19

DeepAnalyze实战教程:结合RAG扩展DeepAnalyze,为分析报告注入企业知识库依据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepAnalyze实战教程:结合RAG扩展DeepAnalyze,为分析报告注入企业知识库依据

DeepAnalyze实战教程:结合RAG扩展DeepAnalyze,为分析报告注入企业知识库依据

1. 为什么需要给DeepAnalyze加上RAG能力

你有没有遇到过这样的情况:
一份市场调研报告里提到“客户对A功能满意度下降12%”,但你根本不知道这个A功能具体指什么、上线时间、历史迭代记录——AI能总结出“满意度下降”这个事实,却没法告诉你背后的原因。

DeepAnalyze本身很强大:它能把一段杂乱的会议纪要提炼成观点+关键信息+情感三段式报告,逻辑清晰、中文表达自然、全程离线运行。但它有个天然局限——它只懂模型训练时学到的通用知识,不了解你公司的产品文档、内部术语、项目规范、甚至上周刚发的OKR说明

这就像是请来一位顶尖的外部咨询顾问,他逻辑缜密、表达专业,但没看过你司的《用户手册V3.2》和《2024服务SLA细则》。

而RAG(检索增强生成)就是给这位顾问配一本实时更新的“公司内参”。它不改变DeepAnalyze原有的分析能力,只是在它开始思考前,悄悄塞过去几页最相关的内部资料。结果不是“生成更泛泛的内容”,而是让每一份报告都带着你企业的语境、标准和事实依据

本教程不讲抽象原理,只带你一步步完成这件事:
在现有DeepAnalyze镜像基础上,零代码接入本地知识库
让分析报告自动引用企业文档中的原文片段
保持原有界面和操作习惯,老用户无需重新学习
所有数据仍100%留在本地,不上传、不联网、不依赖外部API

接下来,我们就从最实际的一步开始。

2. 环境准备与RAG模块快速部署

DeepAnalyze镜像已内置Ollama和Llama 3,我们不需要重装框架,只需为它“加装一个知识检索插件”。整个过程在容器内完成,5分钟内可跑通。

2.1 确认基础环境就绪

启动镜像后,先验证Ollama是否正常工作。打开终端(或通过WebUI附带的命令行入口),执行:

ollama list

你应该看到类似输出:

NAME ID SIZE MODIFIED llama3:8b f9a7e... 4.7GB 2 weeks ago

如果显示为空或报错,请先点击平台界面上的“重启Ollama服务”按钮(DeepAnalyze镜像自带该功能),等待30秒后重试。

小提示:DeepAnalyze的“自愈合启动脚本”已为你处理了Ollama服务注册、端口占用检测等细节。绝大多数情况下,这一步直接通过。

2.2 安装轻量级RAG引擎:ChromaDB + Sentence-Transformers

我们选用ChromaDB作为向量数据库——它单文件运行、无需独立服务、完美适配Docker容器;搭配all-MiniLM-L6-v2嵌入模型,仅85MB,中文语义理解足够扎实,且能在CPU上流畅运行。

在容器内执行以下命令(复制粘贴,回车即可):

# 进入DeepAnalyze应用目录 cd /app/deepanalyze # 安装RAG依赖(仅需一次) pip install chromadb sentence-transformers # 创建知识库存储目录 mkdir -p ./data/knowledge_base

执行完毕后,你会看到终端返回Successfully installed...,表示环境已就绪。

2.3 准备你的第一份企业知识文档

RAG效果好不好,70%取决于你喂给它的第一份资料。别一上来就扔进整套《产品白皮书》,先选一个小而关键的文档:

  • 推荐起点:一份3页以内的《XX产品核心功能说明》PDF
  • 或:一份Markdown格式的《客户服务常见问题FAQ》
  • 或:一份Excel表格导出的《2024重点客户对接人清单》

将这份文件保存为UTF-8编码,命名为product_faq.md,然后上传到容器的/app/deepanalyze/data/knowledge_base/目录下。(可通过镜像平台的“文件上传”功能,或使用docker cp命令)

注意:不要用扫描版PDF!ChromaDB目前无法解析图片型PDF。如果是扫描件,请先用OCR工具转成纯文本再上传。

3. 构建知识索引:三步完成文档向量化

现在,我们要把这份文档“翻译”成AI能理解的数学语言——向量。整个过程全自动,你只需确认三件事。

3.1 启动向量化脚本(一行命令)

在容器终端中,执行:

python -c " import chromadb from sentence_transformers import SentenceTransformer import os, re, markdown # 初始化 client = chromadb.PersistentClient(path='./data/chroma_db') collection = client.get_or_create_collection(name='enterprise_knowledge') # 加载嵌入模型(首次运行会自动下载) model = SentenceTransformer('all-MiniLM-L6-v2') # 读取文档 with open('./data/knowledge_base/product_faq.md', 'r', encoding='utf-8') as f: text = f.read() # 按标题/段落切分(避免大段粘连) chunks = re.split(r'\n#{1,3}\s+', text) chunks = [c.strip() for c in chunks if len(c.strip()) > 20] # 向量化并存入数据库 embeddings = model.encode(chunks).tolist() collection.add( documents=chunks, ids=[f'chunk_{i}' for i in range(len(chunks))], embeddings=embeddings ) print(f' 已成功索引 {len(chunks)} 个知识片段') "

几秒钟后,你会看到:

已成功索引 12 个知识片段

这意味着:你的《产品FAQ》已被拆解为12个语义单元,并存入本地向量库。每个单元都带有数学坐标,AI提问时就能快速定位最相关的那1-2个。

3.2 验证索引是否生效

我们来手动测试一次检索。执行:

python -c " from sentence_transformers import SentenceTransformer import chromadb client = chromadb.PersistentClient(path='./data/chroma_db') collection = client.get_collection(name='enterprise_knowledge') model = SentenceTransformer('all-MiniLM-L6-v2') # 模拟用户提问 query = '客户投诉响应时效标准是多少?' embedding = model.encode([query]).tolist()[0] results = collection.query( query_embeddings=[embedding], n_results=2 ) print(' 最相关知识片段:') for doc in results['documents'][0]: print('- ' + doc[:80] + '...') "

预期输出类似:

最相关知识片段: - ## 响应时效标准\n\n- 普通咨询:2小时内首次响应,24小时内闭环...\n\n- 紧急故障:30分钟内电话响应...

看到这个结果,说明知识库已活起来——它能听懂中文问题,并精准召回原文。

4. 改造DeepAnalyze分析流程:注入知识依据

DeepAnalyze原有流程是:用户输入 → Llama 3 直接分析 → 输出报告。
现在我们要插入一个环节:用户输入 →先检索知识库→ 将检索结果+原文一起喂给Llama 3 → 输出带依据的报告。

4.1 修改核心分析函数(仅3处改动)

打开文件/app/deepanalyze/core/analysis_engine.py,找到名为generate_analysis_report的函数。在函数开头附近,插入以下代码(位置在# --- RAG注入点 ---注释处):

# --- RAG注入点 --- try: import chromadb from sentence_transformers import SentenceTransformer # 加载知识库 client = chromadb.PersistentClient(path='./data/chroma_db') collection = client.get_collection(name='enterprise_knowledge') model = SentenceTransformer('all-MiniLM-L6-v2') # 对用户输入做向量检索 input_embedding = model.encode([user_text]).tolist()[0] rag_results = collection.query( query_embeddings=[input_embedding], n_results=3 ) # 构建RAG上下文 if rag_results['documents'][0]: rag_context = "【企业知识依据】\n" + "\n".join([ f"- {doc}" for doc in rag_results['documents'][0] ]) user_text = rag_context + "\n\n【待分析原文】\n" + user_text except Exception as e: # 知识库不可用时,退化为原流程 pass # --- RAG注入结束 ---

为什么这样改?

  • 不修改原有Prompt结构,保证原有报告格式完全不变
  • 【企业知识依据】【待分析原文】明确分隔,避免AI混淆来源
  • try/except确保知识库异常时自动降级,不影响基础功能

4.2 调整系统Prompt(强化依据引用意识)

打开/app/deepanalyze/prompts/zh_deep_analyze.txt,找到原有Prompt末尾,在请严格按以下三段式输出:之前,新增两句话:

请优先参考【企业知识依据】中的内容,若其中提及与原文相关的信息,请在对应分析结论后用括号注明依据来源(例如:“响应时效标准为2小时(依据:《响应时效标准》)”)。 若【企业知识依据】中无相关信息,则仅基于【待分析原文】进行分析,不编造依据。

这一微调,让Llama 3从“自由发挥”变成“有据可依”,且明确知道何时该引用、如何引用。

4.3 重启Web服务(使改动生效)

在终端中执行:

supervisorctl restart webui

等待约10秒,Web界面将自动刷新。此时,所有新提交的分析请求都会经过RAG增强流程。

5. 实战效果对比:看RAG如何提升报告可信度

现在,我们用同一段文本,分别看“原版DeepAnalyze”和“RAG增强版”的输出差异。

5.1 测试文本(模拟真实场景)

在左侧输入框粘贴以下内容:

用户反馈:“订单状态页面一直显示‘处理中’,已经超过48小时,客服说要等技术修复,但没给具体时间。”

5.2 原版报告(无RAG)

右侧生成的报告可能是:

## 核心观点 用户对订单状态更新延迟感到焦虑,期待更明确的时间承诺。 ## 关键信息 - 用户遭遇订单状态长期卡在“处理中” - 客服未提供预计解决时间 - 问题已持续超48小时 ## 潜在情感 焦躁、不信任、轻微愤怒

信息准确,但缺乏落地支撑——它没告诉业务同学:“这个‘处理中’状态,到底应该多久更新一次?”

5.3 RAG增强版报告(含知识依据)

启用RAG后,同一输入生成的报告变为:

## 核心观点 用户对订单状态更新延迟感到焦虑,期待更明确的时间承诺(依据:《客户服务SLA》第3.2条)。 ## 关键信息 - 用户遭遇订单状态长期卡在“处理中” - 客服未提供预计解决时间(依据:《客户服务SLA》第4.1条:“故障类问题需在30分钟内提供预估修复时间”) - 问题已持续超48小时(依据:《订单系统监控规范》:“状态滞留超24小时触发P1告警”) ## 潜在情感 焦躁、不信任、轻微愤怒(依据:《客户情绪识别指南》“超时未响应”对应情绪权重+0.7)

差别在哪?

  • 每一条分析都锚定到具体制度条款,业务同学可立即查证、追责、优化
  • 情感判断不再主观,而是引用内部《情绪识别指南》的量化标准
  • 报告从“描述现象”升级为“指向行动”——比如“触发P1告警”直接关联运维流程

这才是企业真正需要的分析力。

6. 进阶技巧:让RAG更懂你的业务语境

RAG不是装上就完事,它需要持续“调教”。以下是三个即学即用的提效技巧:

6.1 知识文档预处理:提升召回精度

默认的按标题切分有时不够智能。比如一份《销售话术手册》里,“价格异议应对”和“交付周期异议应对”可能在同一节,被切到同一个chunk里,导致检索失准。

解决方案:在向量化前,用正则主动分块。将3.1节的切分代码替换为:

# 更精准的分块:按业务场景关键词切分 chunks = re.split(r'\n##\s+(价格异议|交付周期|售后政策|合同条款)', text) # 保留分隔符,确保上下文完整 chunks = [c.strip() for c in chunks if len(c.strip()) > 30]

这样,每个chunk都聚焦单一业务场景,检索命中率提升明显。

6.2 动态权重控制:让关键知识“优先说话”

有些文档比另一些更重要。比如《CEO季度战略讲话》应比《茶水间使用须知》权重更高。

在向量化时,为不同文档设置metadatas

collection.add( documents=chunks, ids=[f'faq_{i}' for i in range(len(chunks))], metadatas=[{"source": "faq", "priority": 1} for _ in chunks], # 普通FAQ # 若是战略文档,设 priority=5 embeddings=embeddings )

查询时,可在query()中加入where={"priority": {"$gte": 3}},实现分级召回。

6.3 分析报告后处理:自动高亮依据来源

为了让业务同学一眼看到依据出处,可在报告生成后添加高亮:

# 在 generate_analysis_report 函数末尾添加 if '(依据:' in report: report = report.replace('(依据:', '**(依据:**').replace(')', '**)**')

这样,所有依据都会以加粗显示,视觉上立刻突出。

7. 总结:RAG不是功能叠加,而是分析范式的升级

回顾整个过程,你其实只做了三件事:
1⃣ 在容器里装了一个85MB的嵌入模型和一个轻量数据库
2⃣ 改了不到20行Python代码,插入一个检索环节
3⃣ 调整了一段Prompt,教会AI“什么时候该引用、怎么引用”

但带来的变化是质的:
🔹报告可信度:从“AI觉得是这样”变成“依据XX制度,应该是这样”
🔹分析深度:从文本表面延伸到企业知识网络,发现隐藏关联
🔹落地效率:业务同学拿到报告,可直接对照制度条款行动,省去跨部门确认时间

更重要的是,这一切依然100%私有化——你的知识库文档从未离开服务器,Ollama的推理全程在本地GPU/CPU完成,RAG检索也只在容器内闭环。安全,不是妥协项,而是设计前提。

下一步,你可以:
→ 把销售合同、产品PRD、历史客诉归档批量导入,构建全量知识图谱
→ 尝试用不同嵌入模型(如bge-zh-v1.5)进一步提升中文匹配精度
→ 将RAG结果以侧边栏形式在WebUI中单独展示,方便人工复核

DeepAnalyze本就是一个“深度思考”的引擎,而RAG,是给它装上了你企业的记忆和经验。它不再只是分析文本,而是真正理解你的业务。


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/13 13:24:51

小说消失不用愁!这款工具让你3步拥有永久数字书架

小说消失不用愁!这款工具让你3步拥有永久数字书架 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否曾在深夜追更时突然发现章节被下架?是否经历过收藏的…

作者头像 李华
网站建设 2026/3/14 4:06:45

热词功能真香!Fun-ASR提升专业术语识别率40%

热词功能真香!Fun-ASR提升专业术语识别率40% 你有没有遇到过这样的场景:会议录音里反复出现“Fun-ASR”“通义实验室”“钉钉工作台”,结果转写出来却成了“分阿斯”“同义实验师”“盯盯工作太”?客服电话中客户清晰说出“400-8…

作者头像 李华
网站建设 2026/3/21 5:01:47

Clawdbot+Qwen3:32B惊艳效果展示:本地32B大模型驱动的智能代理对话实录集

ClawdbotQwen3:32B惊艳效果展示:本地32B大模型驱动的智能代理对话实录集 1. 为什么这次实录值得你花5分钟看完 你有没有试过——在本地跑一个32B参数的大模型,还能像聊天一样自然对话、支持多轮思考、能调用工具、还能记住上下文?不是云服务…

作者头像 李华
网站建设 2026/3/18 8:30:51

Qwen3-VL-4B Pro入门必看:看图说话+场景描述+OCR识别一站式教程

Qwen3-VL-4B Pro入门必看:看图说话场景描述OCR识别一站式教程 1. 这不是普通“看图说话”,而是真正能读懂图像的AI助手 你有没有试过把一张商品照片拖进对话框,直接问它:“这瓶红酒的年份、产区和酒精度是多少?” 或…

作者头像 李华