agent-config.yml 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. # ════════════════════════════════════════════════════════════
  2. # qaagent67lambda — LambdaRAG 通用领域问答智能体
  3. # ════════════════════════════════════════════════════════════
  4. #
  5. # 架构: LambdaRAG True Fusion
  6. # 4 路并行检索 → 加权 RRF 融合 → 丰富上下文 → LLM 生成
  7. # BM25 (关键词) ∥ Vector (语义) ∥ Graph (关系) ∥ Wiki (编译知识)
  8. #
  9. # Lambda:
  10. # λ = Classify(q) → weights
  11. # >> Par(BM25(q), Vector(q), GraphExpand(q), WikiRead(q))
  12. # >> WeightedRRF(results, weights)
  13. # >> BuildContext(fused, relations, wiki)
  14. # >> LLM(enriched_context, question)
  15. #
  16. # 三层抽象:
  17. # Layer 1 Skill: bm25_search, vector_search, graph_walk,
  18. # wiki_read, entity_extract, rrf_merge, time_filter
  19. # Layer 2 Pattern: keyword | hybrid | fusion | graph | wiki | synthesis
  20. # Layer 3 Orchestration: Classify → Weighted Route → Feedback
  21. agentId: qaagent67lambda-v1
  22. name: lambdarag-agent
  23. description: >
  24. LambdaRAG 通用领域问答智能体。基于 True Fusion 架构,
  25. 4 路并行检索(BM25+向量+图谱+Wiki)加权融合,
  26. 自适应路由,知识反馈闭环。
  27. 适用于任何领域的专业知识问答。
  28. type: react
  29. # ═══ 模型配置 ═══
  30. model:
  31. provider: ollama
  32. name: qwen2.5:32b
  33. temperature: 0.3
  34. maxTokens: 6144
  35. conversation: true
  36. maxHistoryTokens: 40000
  37. # 部署时按需修改:
  38. # baseUrl: http://127.0.0.1:8000/v1 # vLLM NPU
  39. # baseUrl: http://127.0.0.1:11434 # Ollama CPU
  40. # ═══ 系统提示词 (通用) ═══
  41. systemPrompt: |
  42. 你是一个专业的领域知识问答助手 (LambdaRAG)。
  43. ## 工作原则
  44. - 仅使用检索到的知识库内容回答,不得编造或推测
  45. - 如存在多个文件信息冲突,以最新文件内容为准
  46. - 所有回答必须标明信息来源
  47. - 如果知识库中没有相关信息,明确回答"知识库中暂无相关信息"
  48. - 回答要完整、准确、简洁
  49. # ═══ 分类型提示词模板 (通用框架) ═══
  50. # 领域相关的具体提示词在 instance.yml 中覆盖
  51. prompts:
  52. # Step 1: 意图分类 (通用)
  53. classify: |
  54. 你是一个意图分类器。请判断用户问题的意图类型:
  55. - "person": 问某个人(谁负责、找谁、联系方式)
  56. - "process": 问流程(怎么办、操作步骤、能不能做)
  57. - "fact": 问具体事实(标准多少、有效期、费率)
  58. - "compare": 对比类问题
  59. - "temporal": 时效类问题(最新版本、什么时候)
  60. 请只输出一个词。
  61. 用户问题:{question}
  62. # Step 2a: 找人 — 槽位填充 (通用)
  63. person_extract: |
  64. 你是一名知识库信息抽取助手。
  65. 请基于检索到的知识库内容,提取人员信息。
  66. 【规则】仅使用知识库信息,不得编造。无信息则返回空字符串。
  67. 输出 JSON:
  68. {{"person_name":"", "position":"", "department":"", "phone":"",
  69. "email":"", "responsibilities":"", "source":""}}
  70. 知识库内容:{context}
  71. 用户问题:{question}
  72. # Step 2b: 找人 — 生成回答 (通用)
  73. person_answer: |
  74. 基于以下人员信息,生成面向用户的回答。
  75. 要求:自然语言、正式礼貌、标明来源、空字段不提及。
  76. 人员信息:{slot_data}
  77. 用户问题:{question}
  78. # Step 3a: 流程 — 槽位填充 (通用)
  79. process_extract: |
  80. 你是一名知识库流程信息抽取助手。
  81. 请基于检索内容,完成流程信息的结构化抽取。
  82. 【规则】仅使用知识库信息,不得编造。无信息则返回空字符串。
  83. 输出 JSON:
  84. {{"process_type":"", "process_name":"", "applicable_conditions":"",
  85. "steps":"", "departments_involved":"", "roles_or_targets":"",
  86. "fund_type_constraints":"", "expense_category":"",
  87. "calculation_factors":"", "policy_basis":"", "source":""}}
  88. 知识库内容:{context}
  89. 用户问题:{question}
  90. # Step 3b: 流程 — 生成回答 (通用)
  91. process_answer: |
  92. 基于以下流程信息,生成面向用户的回答。
  93. 要求:
  94. - 流程说明类:按条件→步骤→注意事项组织
  95. - 判断类(能不能):明确结论+依据
  96. - 金额标准类:说明计算依据,不超出政策推算
  97. - 标明信息来源,空字段不提及
  98. 流程信息:{slot_data}
  99. 用户问题:{question}
  100. # Step 4: 通用事实回答 (通用)
  101. fact_answer: |
  102. 请根据检索到的知识库内容回答用户问题。
  103. 【要求】
  104. 1. 以最新文件内容为准
  105. 2. 回答完整、准确、简洁
  106. 3. 标明信息来源
  107. 4. 无相关内容则回答"知识库中暂无相关信息"
  108. 知识库内容:{context}
  109. 用户问题:{question}
  110. # ═══ ReAct 配置 ═══
  111. react:
  112. maxSteps: 20
  113. observationEnabled: true
  114. toolTimeout: 120
  115. thinkTimeout: 300
  116. verbose: true
  117. # ═══ 记忆 ═══
  118. memory:
  119. enabled: true
  120. strategy: local
  121. size: 50
  122. ttl: 14400
  123. # ═══ 工具 ═══
  124. mcp:
  125. localTools:
  126. - IngestFiles
  127. - QueryKnowledge
  128. - ListKnowledge
  129. - RemoveKnowledge
  130. - DeepAnalysis
  131. - ReadFile
  132. - ListFiles
  133. - SearchContent
  134. - Bash
  135. - terminate
  136. policy:
  137. mode: auto
  138. # ═══ 安全 ═══
  139. guard:
  140. dangerousCommandBlock: true
  141. highRiskConfirmation: false
  142. maxOutputLength: 50000
  143. retry: 0
  144. fallback: last
  145. # ═══ 人设 ═══
  146. persona:
  147. name: lambdarag-agent
  148. style: helpful-precise
  149. template: qaagent
  150. # ═══ 运行时 ═══
  151. runtime:
  152. engine: cek
  153. costBudget: 0.50
  154. maxSteps: 10000
  155. # ═══ 知识库配置 ═══
  156. # 部署时修改 baseDir 指向实际数据目录
  157. knowledge:
  158. baseDir: /home/67/knowledge/finance # 知识库根目录
  159. rawDir: /home/67/knowledge/finance/raw # 原始文件 (PDF/txt/md/pptx/docx)
  160. processedDir: /home/67/knowledge/finance/processed
  161. indexFile: /home/67/knowledge/finance/rag_index.json
  162. keywordFile: /home/67/knowledge/finance/rag_index.keywords.json
  163. vectorIndex: /home/67/knowledge/finance/rag_vectors_v2.npy
  164. vectorMeta: /home/67/knowledge/finance/rag_vectors_meta_v2.pkl
  165. # ═══ RAG 配置 ═══
  166. rag:
  167. enabled: true
  168. collection: default
  169. chunkSize: 512
  170. chunkOverlap: 64
  171. chunkSeparator: "\n\n"
  172. topK: 5
  173. # ═══ 检索配置 (LambdaRAG True Fusion) ═══
  174. retrieval:
  175. mode: unified
  176. # Layer 1: Skills
  177. skills:
  178. bm25:
  179. enabled: true
  180. topK: 10
  181. embedding:
  182. enabled: true
  183. model: bge-m3
  184. backend: npu
  185. baseUrl: http://127.0.0.1:11435/api/embed
  186. batchSize: 32
  187. dimensions: 1024
  188. rerank:
  189. enabled: true
  190. backend: vllm
  191. baseUrl: http://127.0.0.1:8000/v1
  192. graph:
  193. enabled: true
  194. relationsFile: /home/67/knowledge/finance/wiki/relations.json
  195. maxHops: 2
  196. maxExpand: 20
  197. wiki:
  198. enabled: true
  199. dir: /home/67/knowledge/finance/wiki/
  200. # Layer 2: Weight Profiles (classifier → weights)
  201. weights:
  202. fact: {bm25: 1.0, vector: 0.5, graph: 0.1, wiki: 0.1}
  203. compare: {bm25: 0.5, vector: 0.8, graph: 0.4, wiki: 0.7}
  204. relation: {bm25: 0.5, vector: 0.3, graph: 0.7, wiki: 0.8}
  205. synthesis: {bm25: 0.6, vector: 0.5, graph: 0.5, wiki: 0.6}
  206. temporal: {bm25: 1.0, vector: 0.2, graph: 0.05, wiki: 0.2}
  207. default: {bm25: 0.7, vector: 0.5, graph: 0.3, wiki: 0.3}
  208. # Layer 3: Orchestration
  209. orchestration:
  210. classifier:
  211. fastClassify: true
  212. llmFallback: true
  213. rrfK: 60
  214. pathTimeout: 15
  215. parallel: true
  216. # Self-enhancement
  217. feedback:
  218. enabled: true
  219. minSources: 2
  220. queryLog: /home/67/knowledge/finance/feedback/query_log.jsonl
  221. routingStats: /home/67/knowledge/finance/feedback/routing_stats.json
  222. # ═══ Wiki 编译配置 ═══
  223. wiki:
  224. dir: /home/67/knowledge/finance/wiki
  225. relationsFile: /home/67/knowledge/finance/wiki/relations.json
  226. compileModel: qwen2.5-32b
  227. temporalNormalization: true