# ════════════════════════════════════════════════════════════ # qaagent67lambda — LambdaRAG 通用领域问答智能体 # ════════════════════════════════════════════════════════════ # # 架构: LambdaRAG True Fusion # 4 路并行检索 → 加权 RRF 融合 → 丰富上下文 → LLM 生成 # BM25 (关键词) ∥ Vector (语义) ∥ Graph (关系) ∥ Wiki (编译知识) # # Lambda: # λ = Classify(q) → weights # >> Par(BM25(q), Vector(q), GraphExpand(q), WikiRead(q)) # >> WeightedRRF(results, weights) # >> BuildContext(fused, relations, wiki) # >> LLM(enriched_context, question) # # 三层抽象: # Layer 1 Skill: bm25_search, vector_search, graph_walk, # wiki_read, entity_extract, rrf_merge, time_filter # Layer 2 Pattern: keyword | hybrid | fusion | graph | wiki | synthesis # Layer 3 Orchestration: Classify → Weighted Route → Feedback agentId: qaagent67lambda-v1 name: lambdarag-agent description: > LambdaRAG 通用领域问答智能体。基于 True Fusion 架构, 4 路并行检索(BM25+向量+图谱+Wiki)加权融合, 自适应路由,知识反馈闭环。 适用于任何领域的专业知识问答。 type: react # ═══ 模型配置 ═══ model: provider: ollama name: qwen2.5:32b temperature: 0.3 maxTokens: 6144 conversation: true maxHistoryTokens: 40000 # 部署时按需修改: # baseUrl: http://127.0.0.1:8000/v1 # vLLM NPU # baseUrl: http://127.0.0.1:11434 # Ollama CPU # ═══ 系统提示词 (通用) ═══ systemPrompt: | 你是一个专业的领域知识问答助手 (LambdaRAG)。 ## 工作原则 - 仅使用检索到的知识库内容回答,不得编造或推测 - 如存在多个文件信息冲突,以最新文件内容为准 - 所有回答必须标明信息来源 - 如果知识库中没有相关信息,明确回答"知识库中暂无相关信息" - 回答要完整、准确、简洁 # ═══ 分类型提示词模板 (通用框架) ═══ # 领域相关的具体提示词在 instance.yml 中覆盖 prompts: # Step 1: 意图分类 (通用) classify: | 你是一个意图分类器。请判断用户问题的意图类型: - "person": 问某个人(谁负责、找谁、联系方式) - "process": 问流程(怎么办、操作步骤、能不能做) - "fact": 问具体事实(标准多少、有效期、费率) - "compare": 对比类问题 - "temporal": 时效类问题(最新版本、什么时候) 请只输出一个词。 用户问题:{question} # Step 2a: 找人 — 槽位填充 (通用) person_extract: | 你是一名知识库信息抽取助手。 请基于检索到的知识库内容,提取人员信息。 【规则】仅使用知识库信息,不得编造。无信息则返回空字符串。 输出 JSON: {{"person_name":"", "position":"", "department":"", "phone":"", "email":"", "responsibilities":"", "source":""}} 知识库内容:{context} 用户问题:{question} # Step 2b: 找人 — 生成回答 (通用) person_answer: | 基于以下人员信息,生成面向用户的回答。 要求:自然语言、正式礼貌、标明来源、空字段不提及。 人员信息:{slot_data} 用户问题:{question} # Step 3a: 流程 — 槽位填充 (通用) process_extract: | 你是一名知识库流程信息抽取助手。 请基于检索内容,完成流程信息的结构化抽取。 【规则】仅使用知识库信息,不得编造。无信息则返回空字符串。 输出 JSON: {{"process_type":"", "process_name":"", "applicable_conditions":"", "steps":"", "departments_involved":"", "roles_or_targets":"", "fund_type_constraints":"", "expense_category":"", "calculation_factors":"", "policy_basis":"", "source":""}} 知识库内容:{context} 用户问题:{question} # Step 3b: 流程 — 生成回答 (通用) process_answer: | 基于以下流程信息,生成面向用户的回答。 要求: - 流程说明类:按条件→步骤→注意事项组织 - 判断类(能不能):明确结论+依据 - 金额标准类:说明计算依据,不超出政策推算 - 标明信息来源,空字段不提及 流程信息:{slot_data} 用户问题:{question} # Step 4: 通用事实回答 (通用) fact_answer: | 请根据检索到的知识库内容回答用户问题。 【要求】 1. 以最新文件内容为准 2. 回答完整、准确、简洁 3. 标明信息来源 4. 无相关内容则回答"知识库中暂无相关信息" 知识库内容:{context} 用户问题:{question} # ═══ ReAct 配置 ═══ react: maxSteps: 20 observationEnabled: true toolTimeout: 120 thinkTimeout: 300 verbose: true # ═══ 记忆 ═══ memory: enabled: true strategy: local size: 50 ttl: 14400 # ═══ 工具 ═══ mcp: localTools: - IngestFiles - QueryKnowledge - ListKnowledge - RemoveKnowledge - DeepAnalysis - ReadFile - ListFiles - SearchContent - Bash - terminate policy: mode: auto # ═══ 安全 ═══ guard: dangerousCommandBlock: true highRiskConfirmation: false maxOutputLength: 50000 retry: 0 fallback: last # ═══ 人设 ═══ persona: name: lambdarag-agent style: helpful-precise template: qaagent # ═══ 运行时 ═══ runtime: engine: cek costBudget: 0.50 maxSteps: 10000 # ═══ 知识库配置 ═══ # 部署时修改 baseDir 指向实际数据目录 knowledge: baseDir: /home/67/knowledge/finance # 知识库根目录 rawDir: /home/67/knowledge/finance/raw # 原始文件 (PDF/txt/md/pptx/docx) processedDir: /home/67/knowledge/finance/processed indexFile: /home/67/knowledge/finance/rag_index.json keywordFile: /home/67/knowledge/finance/rag_index.keywords.json vectorIndex: /home/67/knowledge/finance/rag_vectors_v2.npy vectorMeta: /home/67/knowledge/finance/rag_vectors_meta_v2.pkl # ═══ RAG 配置 ═══ rag: enabled: true collection: default chunkSize: 512 chunkOverlap: 64 chunkSeparator: "\n\n" topK: 5 # ═══ 检索配置 (LambdaRAG True Fusion) ═══ retrieval: mode: unified # Layer 1: Skills skills: bm25: enabled: true topK: 10 embedding: enabled: true model: bge-m3 backend: npu baseUrl: http://127.0.0.1:11435/api/embed batchSize: 32 dimensions: 1024 rerank: enabled: true backend: vllm baseUrl: http://127.0.0.1:8000/v1 graph: enabled: true relationsFile: /home/67/knowledge/finance/wiki/relations.json maxHops: 2 maxExpand: 20 wiki: enabled: true dir: /home/67/knowledge/finance/wiki/ # Layer 2: Weight Profiles (classifier → weights) weights: fact: {bm25: 1.0, vector: 0.5, graph: 0.1, wiki: 0.1} compare: {bm25: 0.5, vector: 0.8, graph: 0.4, wiki: 0.7} relation: {bm25: 0.5, vector: 0.3, graph: 0.7, wiki: 0.8} synthesis: {bm25: 0.6, vector: 0.5, graph: 0.5, wiki: 0.6} temporal: {bm25: 1.0, vector: 0.2, graph: 0.05, wiki: 0.2} default: {bm25: 0.7, vector: 0.5, graph: 0.3, wiki: 0.3} # Layer 3: Orchestration orchestration: classifier: fastClassify: true llmFallback: true rrfK: 60 pathTimeout: 15 parallel: true # Self-enhancement feedback: enabled: true minSources: 2 queryLog: /home/67/knowledge/finance/feedback/query_log.jsonl routingStats: /home/67/knowledge/finance/feedback/routing_stats.json # ═══ Wiki 编译配置 ═══ wiki: dir: /home/67/knowledge/finance/wiki relationsFile: /home/67/knowledge/finance/wiki/relations.json compileModel: qwen2.5-32b temporalNormalization: true