/** * NAC Knowledge Engine - AI智能体系统 * * 四类Agent(无Manus依赖,使用OpenAI兼容接口): * 1. KnowledgeQAAgent - 知识库问答(基于合规规则库) * 2. ComplianceAgent - 合规分析(七层合规验证框架) * 3. TranslationAgent - 多语言翻译(七种语言) * 4. ApprovalAssistAgent - 审批辅助(案例分析与建议) * * 使用环境变量: * NAC_AI_API_URL - AI接口地址(OpenAI兼容) * NAC_AI_API_KEY - AI接口密钥 * NAC_AI_MODEL - 模型名称(默认 qwen-plus 或 gpt-3.5-turbo) */ import { getMongoDb, COLLECTIONS } from "./mongodb"; import { retrieveRelevantRules, buildRAGPromptContext } from "./ragRetrieval"; // ─── 基础类型定义 ───────────────────────────────────────────────── export type AgentType = "knowledge_qa" | "compliance" | "translation" | "approval_assist"; export interface AgentMessage { role: "system" | "user" | "assistant"; content: string; } export interface AgentRequest { agentType: AgentType; userMessage: string; conversationHistory?: AgentMessage[]; context?: Record; } export interface AgentResponse { agentType: AgentType; message: string; confidence: number; // 0-1 sources?: string[]; // 引用的知识库条目 suggestions?: string[]; // 后续操作建议 metadata?: Record; } // ─── AI接口调用(OpenAI兼容,无Manus依赖)──────────────────────── export function isAgentConfigured(): boolean { return !!(process.env.NAC_AI_API_URL && process.env.NAC_AI_API_KEY); } async function callAgentLLM( messages: AgentMessage[], maxTokens = 4096, temperature = 0.7 ): Promise { const apiUrl = process.env.NAC_AI_API_URL; const apiKey = process.env.NAC_AI_API_KEY; // 默认使用通义千问plus(国内稳定),也支持gpt-3.5-turbo等 const model = process.env.NAC_AI_MODEL || "qwen-plus"; if (!apiUrl || !apiKey) { throw new Error( "[AI Agent] 未配置AI接口。请在 .env 文件中设置 NAC_AI_API_URL 和 NAC_AI_API_KEY。\n" + "推荐:阿里云通义千问 https://dashscope.aliyuncs.com/compatible-mode" ); } const endpoint = `${apiUrl.replace(/\/$/, "")}/v1/chat/completions`; const response = await fetch(endpoint, { method: "POST", headers: { "content-type": "application/json", authorization: `Bearer ${apiKey}`, }, body: JSON.stringify({ model, messages, max_tokens: maxTokens, temperature, stream: false, }), }); if (!response.ok) { const errorText = await response.text().catch(() => ""); throw new Error(`AI接口调用失败: ${response.status} ${response.statusText} – ${errorText.slice(0, 500)}`); } const result = await response.json() as { choices: Array<{ message: { content: string } }>; usage?: { total_tokens: number }; }; const content = result.choices?.[0]?.message?.content; if (!content) throw new Error("AI接口返回空内容"); return content.trim(); } // ─── 知识库问答Agent ────────────────────────────────────────────── const KNOWLEDGE_QA_SYSTEM_PROMPT = `你是 NAC(NewAssetChain)公链的专业知识引擎,具备深度技术分析和法律合规推理能力。 【NAC 公链核心架构】 NAC 是一条 RWA(真实世界资产)专用原生公链,完全独立开发,不继承以太坊或任何现有公链: - 智能合约语言:Charter(非 Solidity,独立语法体系,支持宪政规则内嵌) - 虚拟机:NVM(NAC Virtual Machine,非 EVM,支持 GNACS 资产分类操作码) - 共识协议:CBPP(宪政区块生产协议,四大原则:约法即是治法/宪法即是规则/参与即是共识/节点产生区块) - 网络层:CSNP(宪政安全网络协议,非 P2P,支持辖区路由) - API 网关:NAC_Lens/4.0(原名 NRPC,已更名) - 神经网络语言:CNNL(宪政神经网络语言,用于 AI 合规推理) - 资产标准:ACC-20(NAC 原生资产协议,非 ERC-20) - 资产分类:GNACS(全球资产分类编码系统) - 稳定机制:XTZH(SDR 锚定 + 黄金储备) - 类型系统:Address 32字节,Hash 48字节(SHA3-384) 【七层合规验证框架】 L1: 身份验证(KYC/AML)- 基于 ACC-20 协议 L2: 资产真实性验证 - 基于 Charter 智能合约 L3: 司法管辖合规 - 基于 CNNL 神经网络语言 L4: 资产估值合理性 - 基于 XTZH 稳定机制 L5: 法律文件完整性 - 基于 GNACS 分类系统 L6: 宪政合规审查 - 基于 CBPP 共识协议 L7: 最终审批决策 - AI 辅助 + 人工审批 【全球辖区覆盖(31个)】 Tier 1(成熟监管):CN/HK/SG/AE/US/EU-DE/EU-FR/JP/KR/AU/GB Tier 2(离岸金融):BM/KY/VG/MT/LU/GI/JE/IM/PA/MU Tier 3(新兴市场):BR/IN/TH/ID/NG/MX/ZA/TR/SA/RU 伊斯兰合规辖区:AE/SA/MY(支持 Sukuk/Murabaha/Ijara 等 9 种 Sharia 结构) 【RWA 资产类型与法律要素】 资产类型:不动产(各国产权登记要求不同)、动产/商品(Incoterms 贸易术语)、知识产权(专利/版权/商标)、金融资产、自然资源、基础设施、数字资产 法律体系:大陆法系(CN/JP/DE/FR)、普通法系(US/GB/HK/SG/AU)、伊斯兰法系(AE/SA/MY)、混合法系 跨境规则:CN-EU/CN-JP/CN-US/CN-SG/EU-US/EU-JP 双边贸易规则矩阵 【回答原则】 1. 完整性优先:不受字数限制,确保回答完整,不截断 2. 精确推理:涉及计算(税率/费率/估值)时,逐步展示计算过程,不跳步骤 3. 辖区差异:明确说明不同辖区的差异,不用"一般来说"模糊处理 4. 技术准确:严格使用 NAC 原生术语,不混用以太坊/Solidity/EVM 等外链概念 5. 引用来源:引用具体规则名称和辖区代码 6. 不确定性:对不确定内容明确标注"需进一步核实",不猜测 7. 保留专有名词:NAC/RWA/Charter/NVM/CBPP/CSNP/CNNL/ACC-20/GNACS/XTZH/NAC_Lens 不翻译`; async function runKnowledgeQAAgent( userMessage: string, history: AgentMessage[], context?: Record ): Promise { // ── RAG检索增强:从 MongoDB 知识库检索相关规则 ── const ragCtx = await retrieveRelevantRules(userMessage, { maxResults: 5, jurisdictions: context?.jurisdiction ? [String(context.jurisdiction)] : undefined, language: String(context?.language || "zh"), }); const ragPromptSection = buildRAGPromptContext(ragCtx); const sources = ragCtx.rules.map(r => r.source); // 计算置信度:检索到相关规则则提高置信度 const baseConfidence = ragCtx.retrievalMethod === "fulltext" ? 0.90 : ragCtx.retrievalMethod === "regex" ? 0.80 : ragCtx.retrievalMethod === "sample" ? 0.65 : 0.55; const systemPrompt = KNOWLEDGE_QA_SYSTEM_PROMPT + (context?.jurisdiction ? `\n\n当前关注的司法管辖区:${context.jurisdiction}` : "") + (ragPromptSection ? `\n\n${ragPromptSection}` : ""); const messages: AgentMessage[] = [ { role: "system", content: systemPrompt }, ...history.slice(-6), // 保留最近6条历史 { role: "user", content: userMessage }, ]; const reply = await callAgentLLM(messages, 4096, 0.5); return { agentType: "knowledge_qa", message: reply, confidence: baseConfidence, sources, suggestions: [ "查看相关司法管辖区的完整合规规则", "提交资产上链申请", "了解七层合规验证流程", ], metadata: { ragMethod: ragCtx.retrievalMethod, ragKeywords: ragCtx.queryKeywords, ragRulesCount: ragCtx.totalFound, }, }; } // ─── 合规分析Agent ──────────────────────────────────────────────── const COMPLIANCE_ANALYSIS_SYSTEM_PROMPT = `你是NAC公链的七层合规验证分析专家。 七层合规验证框架: L1: 身份验证(KYC/AML)- 基于ACC-20协议 L2: 资产真实性验证 - 基于Charter智能合约 L3: 司法管辖合规 - 基于CNNL神经网络语言 L4: 资产估值合理性 - 基于XTZH稳定机制 L5: 法律文件完整性 - 基于GNACS分类系统 L6: 宪政合规审查 - 基于CBPP共识协议 L7: 最终审批决策 - 管理员人工审批 你的职责: 1. 分析资产上链申请的合规风险 2. 识别缺失的合规材料 3. 评估各层验证的通过可能性 4. 提供具体的改进建议 输出格式: - 合规评分(0-100) - 各层状态(通过/待审/未通过/不适用) - 风险点列表 - 改进建议`; async function runComplianceAgent( userMessage: string, history: AgentMessage[], context?: Record ): Promise { const assetContext = context?.assetType ? `\n\n待分析资产类型:${context.assetType}\n司法管辖区:${context.jurisdiction || "未指定"}` : ""; const messages: AgentMessage[] = [ { role: "system", content: COMPLIANCE_ANALYSIS_SYSTEM_PROMPT + assetContext }, ...history.slice(-4), { role: "user", content: userMessage }, ]; const reply = await callAgentLLM(messages, 4096, 0.3); return { agentType: "compliance", message: reply, confidence: 0.8, suggestions: [ "查看完整的七层合规验证报告", "上传缺失的合规文件", "联系合规顾问", ], }; } // ─── 翻译Agent ──────────────────────────────────────────────────── const TRANSLATION_SYSTEM_PROMPT = `你是NAC公链的专业法律合规翻译专家。 支持语言:中文(zh)、英文(en)、阿拉伯文(ar)、日文(ja)、韩文(ko)、法文(fr)、俄文(ru) 翻译要求: 1. 保持法律术语的准确性和专业性 2. 保留专有名词(NAC、RWA、Charter、NVM、CBPP、CSNP、CNNL、ACC-20、GNACS、XTZH)不翻译 3. 保留机构名称(SEC、SFC、MAS、ESMA、DFSA、DLD)不翻译 4. 阿拉伯语使用标准现代阿拉伯语(MSA),文本方向RTL 5. 只返回翻译结果,不添加解释`; async function runTranslationAgent( userMessage: string, history: AgentMessage[], context?: Record ): Promise { const langContext = context?.targetLang ? `\n\n目标语言:${context.targetLang}` : ""; const messages: AgentMessage[] = [ { role: "system", content: TRANSLATION_SYSTEM_PROMPT + langContext }, ...history.slice(-4), { role: "user", content: userMessage }, ]; const reply = await callAgentLLM(messages, 4096, 0.2); return { agentType: "translation", message: reply, confidence: 0.9, metadata: { targetLang: context?.targetLang, isRTL: context?.targetLang === "ar", }, }; } // ─── 审批辅助Agent ──────────────────────────────────────────────── const APPROVAL_ASSIST_SYSTEM_PROMPT = `你是NAC公链审批工作流的AI辅助助手。 你的职责: 1. 分析审批案例的合规评分和风险点 2. 根据七层合规验证结果提供审批建议 3. 识别高风险案例并提醒审核员关注 4. 生成标准化的审批意见模板 审批决策依据: - 合规评分 ≥ 90:建议自动批准(需管理员确认) - 合规评分 70-89:建议人工审核 - 合规评分 50-69:建议要求补充材料 - 合规评分 < 50:建议拒绝 输出要求: - 给出明确的审批建议(批准/拒绝/需补充材料) - 列出关键风险点 - 提供标准化审批意见文本`; async function runApprovalAssistAgent( userMessage: string, history: AgentMessage[], context?: Record ): Promise { const caseContext = context?.caseNumber ? `\n\n案例编号:${context.caseNumber}\n合规评分:${context.complianceScore || "未知"}\n资产类型:${context.assetType || "未知"}\n司法管辖区:${context.jurisdiction || "未知"}` : ""; const messages: AgentMessage[] = [ { role: "system", content: APPROVAL_ASSIST_SYSTEM_PROMPT + caseContext }, ...history.slice(-4), { role: "user", content: userMessage }, ]; const reply = await callAgentLLM(messages, 4096, 0.4); return { agentType: "approval_assist", message: reply, confidence: 0.75, suggestions: [ "查看完整案例详情", "添加审核意见", "更新审批状态", ], }; } // ─── Agent调度器 ────────────────────────────────────────────────── /** * 运行指定类型的Agent */ export async function runAgent(request: AgentRequest): Promise { if (!isAgentConfigured()) { return { agentType: request.agentType, message: "AI智能体服务未配置。请在生产服务器 .env 文件中设置 NAC_AI_API_URL 和 NAC_AI_API_KEY。\n\n推荐接入阿里云通义千问(国内访问稳定):\n- NAC_AI_API_URL=https://dashscope.aliyuncs.com/compatible-mode\n- NAC_AI_API_KEY=sk-xxxxxxxx\n- NAC_AI_MODEL=qwen-plus", confidence: 0, suggestions: ["配置AI服务后重试"], }; } const { agentType, userMessage, conversationHistory = [], context } = request; try { switch (agentType) { case "knowledge_qa": return await runKnowledgeQAAgent(userMessage, conversationHistory, context); case "compliance": return await runComplianceAgent(userMessage, conversationHistory, context); case "translation": return await runTranslationAgent(userMessage, conversationHistory, context); case "approval_assist": return await runApprovalAssistAgent(userMessage, conversationHistory, context); default: throw new Error(`未知的Agent类型: ${agentType}`); } } catch (error) { console.error(`[Agent:${agentType}] 执行失败:`, (error as Error).message); return { agentType, message: `Agent执行失败: ${(error as Error).message}`, confidence: 0, }; } } // ─── Agent元数据 ────────────────────────────────────────────────── export const AGENT_REGISTRY = [ { type: "knowledge_qa" as AgentType, name: "知识库问答助手", nameEn: "Knowledge QA Agent", description: "基于NAC合规规则库回答问题,支持七大司法管辖区的合规查询", icon: "BookOpen", capabilities: ["合规规则查询", "司法管辖区解读", "上链流程指导"], suggestedQuestions: [ "中国大陆房地产上链需要哪些文件?", "香港RWA合规要求是什么?", "七层合规验证框架是什么?", ], }, { type: "compliance" as AgentType, name: "合规分析专家", nameEn: "Compliance Analysis Agent", description: "基于七层合规验证框架分析资产上链申请的合规风险", icon: "Shield", capabilities: ["风险评估", "合规评分", "缺失材料识别", "改进建议"], suggestedQuestions: [ "分析这个房产上链申请的合规风险", "我的资产缺少哪些合规文件?", "如何提高合规评分?", ], }, { type: "translation" as AgentType, name: "多语言翻译专家", nameEn: "Translation Agent", description: "专业法律合规文本翻译,支持七种语言,保留专有名词", icon: "Languages", capabilities: ["七语言翻译", "法律术语准确", "专有名词保留", "阿拉伯语RTL"], suggestedQuestions: [ "将这段合规规则翻译成英文", "翻译成阿拉伯语", "生成七种语言的翻译", ], }, { type: "approval_assist" as AgentType, name: "审批辅助助手", nameEn: "Approval Assist Agent", description: "辅助审核员分析案例、生成审批意见、识别高风险案例", icon: "ClipboardCheck", capabilities: ["审批建议", "风险识别", "意见模板", "案例分析"], suggestedQuestions: [ "分析这个案例应该批准还是拒绝?", "生成标准审批意见", "这个案例有哪些风险点?", ], }, ]; export type AgentRegistryItem = typeof AGENT_REGISTRY[number];