本项目如何解决大模型幻觉:
一种基于“检索增强生成(RAG)”和“多智能体协作”的综合方法
大型语言模型(LLM)产生幻觉,本质上是因为它们有时会脱离现实依据,仅从其内部参数化的“知识”中凭空捏造信息。本项目的核心思想是通过提供外部的、可验证的、真实的数据源来“锚定”或“接地”(Grounding)模型的创造过程,并设计一套严谨的工作流来确保数据被正确使用。
具体来说,项目采用了以下几种关键技术:
1. 构建本地知识库 (Local Knowledge Base)
这是整个系统的基石。
数据源:系统首先通过 load_promotion_data.py 脚本,将您在 推广/ 目录中提供的多个业务相关的 Excel 文件进行读取和处理。
结构化存储:脚本将这些表格数据转换成结构化的 JSON 格式,并存入一个本地的 promotion_data.sqlite 数据库中。数据库包含两个关键表:Categories(记录数据类别,如产品线、市场活动等)和 DataItems(存储与该类别相关的具体数据行)。
优势:这样做的好处是,模型不再依赖其内部可能过时或不准确的知识,而是有了一个为当前任务量身定制的、准确的、可随时查询的“事实库”。
2. 检索增强生成 (Retrieval-Augmented Generation, RAG)
拥有数据库只是第一步,关键在于如何在恰当的时机,智能地使用这些数据。项目通过在不同阶段(Phase)嵌入RAG机制来实现这一点:
智能数据分类 (TaskDataClassifier 阶段):当用户输入初始任务(例如,“为XX产品策划一个推广方案”)时,系统并不立即开始创作。它首先进入 TaskDataClassifier 阶段。此阶段会分析用户的需求,并与数据库中的 Categories 进行匹配,智能地识别出哪些类别的数据与当前任务最相关。
针对性数据检索:在后续的特定阶段,如 RecommendationsForPlacement (投放建议案分析) 阶段,系统会使用前一阶段识别出的类别,执行精确的SQL查询,从数据库中只提取强相关的DataItems(数据行)。例如,SELECT row_data FROM DataItems WHERE category = '相关产品类别'。
动态注入提示词 (Prompt Injection):检索到的数据不会被直接用作最终答案。相反,它会被动态地、结构化地注入到该阶段负责智能体(Agent)的系统提示词(System Prompt)中。例如,在“市场分析”阶段,分析师角色的提示词可能就变成了:“请根据以下最新市场数据:[这里插入从数据库检索到的JSON数据],为我们生成一份市场分析报告。”
通过这种方式,模型的每一次关键生成,都被引导和限制在真实数据的范围之内,大大降低了产生幻觉的概率。
3. 多智能体协作与反思 (Multi-Agent Collaboration & Reflection)
为了进一步确保生成内容的质量和真实性,项目引入了 camel 框架,创建了一个类似“虚拟公司”的多智能体协作环境。
角色扮演与职责分离:系统定义了多个角色,如“首席执行官 (CEO)”、“产品经理”、“程序员”、“市场分析师”等。每个角色都有明确的职责和指令。例如,“市场分析师”负责基于数据进行分析,“文案策划”负责基于分析结果创作广告语。这种职责分离确保了任务的专业性和专注度。
审查与反思机制:在一个智能体完成其任务后(例如,市场分析师提交了报告),系统会进入“反思 (Reflection)” 环节。此时,另一个更高层级的智能体(如“CEO”或“顾问”)会审查这份报告。它的提示词中会包含原始报告和这样一个问题:“你觉得上述分析是否正确?请基于事实进行判断和修改。” 这种对抗性的审查机制为发现和修正幻觉提供了第二重保障。
总结
本项目通过一个三层结构来对抗模型幻觉:
基础层(数据):建立一个准确、可信的本地数据库作为事实的唯一来源。
执行层(RAG):通过智能检索,在任务的恰当时机,将最相关的数据注入到提示词中,为模型提供事实依据。
监督层(多智能体):利用角色扮演和反思机制,对生成的内容进行交叉验证和修正,确保其忠实于数据和任务目标。
这种结合了本地知识库、RAG和多智能体协作的综合方法,构成了一个强大的闭环系统,能够显著抑制大模型的幻觉问题,使其在执行复杂业务任务时更加可靠和可信。