{"version":3,"sources":["../src/base/BaseChineseReActParser.ts","../src/parsers/BaichuanReActOutputParser.ts","../src/parsers/ChatGLMReActOutputParser.ts","../src/parsers/ERNIEReActOutputParser.ts","../src/parsers/QwenReActOutputParser.ts","../src/factory.ts","../src/index.ts"],"sourcesContent":["/**\n * 中文 ReAct 解析器基类\n *\n * 为所有中文大模型提供通用的解析逻辑框架\n */\n\nimport { AgentAction, AgentFinish } from '@langchain/core/agents';\nimport { BaseOutputParser, OutputParserException } from '@langchain/core/output_parsers';\nimport {\n  ActionMatch,\n  ChineseModelType,\n  IChineseReActParser,\n  LanguageKeywords,\n  ParseResult,\n  ParserOptions,\n} from '../types.js';\n\n/**\n * 中文 ReAct 解析器基类\n */\nexport abstract class BaseChineseReActParser\n  extends BaseOutputParser<AgentAction | AgentFinish>\n  implements IChineseReActParser\n{\n  protected abstract modelType: ChineseModelType;\n  protected abstract keywords: LanguageKeywords;\n  protected options: ParserOptions;\n\n  // LangChain 需要的命名空间\n  abstract lc_namespace: string[];\n\n  constructor(options: ParserOptions = {}) {\n    super();\n    this.options = {\n      debug: false,\n      relaxedMode: true,\n      maxRetries: 3,\n      ...options,\n    };\n  }\n\n  /**\n   * 解析模型输出\n   */\n  async parse(text: string): Promise<ParseResult> {\n    const cleanText = this.preprocessText(text);\n\n    if (this.options.debug) {\n      console.log(`[${this.modelType}] 解析输入:`, cleanText);\n    }\n\n    // 1. 优先检查最终答案\n    const finalAnswerMatch = this.extractFinalAnswer(cleanText);\n    if (finalAnswerMatch) {\n      if (this.options.debug) {\n        console.log(`[${this.modelType}] 找到最终答案:`, finalAnswerMatch);\n      }\n      return {\n        returnValues: { output: finalAnswerMatch.trim() },\n        log: cleanText,\n      };\n    }\n\n    // 2. 尝试解析动作\n    const actionMatch = this.extractAction(cleanText);\n    if (actionMatch) {\n      if (this.options.debug) {\n        console.log(`[${this.modelType}] 找到动作:`, actionMatch);\n      }\n      return {\n        tool: actionMatch.action.trim(),\n        toolInput: actionMatch.actionInput.trim(),\n        log: cleanText,\n      };\n    }\n\n    // 3. 如果解析失败，抛出异常\n    const errorMessage = this.buildErrorMessage(cleanText);\n    throw new OutputParserException(errorMessage, cleanText);\n  }\n\n  /**\n   * 获取格式化指令\n   */\n  getFormatInstructions(): string {\n    return this.buildFormatInstructions();\n  }\n\n  /**\n   * 获取解析器类型\n   */\n  getType(): string {\n    return `${this.modelType}_react_output_parser`;\n  }\n\n  /**\n   * 预处理文本\n   */\n  protected preprocessText(text: string): string {\n    return text\n      .trim()\n      .replace(/\\r\\n/g, '\\n') // 统一换行符\n      .replace(/[ \\t]+/g, ' ') // 合并多余空格（但保留换行）\n      .replace(/\\n\\s+/g, '\\n') // 清理行首空格\n      .replace(/\\s*[:：]\\s*/g, ': '); // 统一冒号格式，冒号后加空格\n  }\n\n  /**\n   * 提取最终答案\n   */\n  protected extractFinalAnswer(text: string): string | null {\n    const allKeywords = [\n      ...this.keywords.chinese.finalAnswer,\n      ...this.keywords.english.finalAnswer,\n      ...(this.options.customKeywords?.chinese?.finalAnswer || []),\n      ...(this.options.customKeywords?.english?.finalAnswer || []),\n    ];\n\n    for (const keyword of allKeywords) {\n      // 严格匹配模式\n      const strictRegex = new RegExp(`^\\\\s*${this.escapeRegex(keyword)}\\\\s*[:：]\\\\s*(.*)$`, 'im');\n      const strictMatch = text.match(strictRegex);\n      if (strictMatch && strictMatch[1]) {\n        return strictMatch[1];\n      }\n\n      // 多行匹配模式\n      const multiLineRegex = new RegExp(\n        `(?:^|\\\\n)\\\\s*${this.escapeRegex(keyword)}\\\\s*[:：]\\\\s*(.*)(?:\\\\n|$)`,\n        'im',\n      );\n      const multiLineMatch = text.match(multiLineRegex);\n      if (multiLineMatch && multiLineMatch[1]) {\n        return multiLineMatch[1];\n      }\n\n      // 宽松匹配模式\n      if (this.options.relaxedMode) {\n        const relaxedPattern = \n          `${this.escapeRegex(keyword)}[\\\\s]*[:：][\\\\s]*([\\\\s\\\\S]*?)` +\n          '(?=\\\\n\\\\s*(?:思考|动作|最终答案|Thought|Action|Final Answer)|$)';\n        const relaxedRegex = new RegExp(relaxedPattern, 'i');\n        const relaxedMatch = text.match(relaxedRegex);\n        if (relaxedMatch && relaxedMatch[1]) {\n          return relaxedMatch[1].trim();\n        }\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * 提取动作和动作输入\n   */\n  protected extractAction(text: string): ActionMatch | null {\n    // 尝试中文格式\n    const chineseAction = this.extractActionByLanguage(text, 'chinese');\n    if (chineseAction) {\n      return chineseAction;\n    }\n\n    // 尝试英文格式\n    const englishAction = this.extractActionByLanguage(text, 'english');\n    if (englishAction) {\n      return englishAction;\n    }\n\n    // 自定义格式处理在子类中实现\n    return null;\n  }\n\n  /**\n   * 按语言提取动作\n   */\n  protected extractActionByLanguage(\n    text: string,\n    language: 'chinese' | 'english',\n  ): ActionMatch | null {\n    const keywords = this.keywords[language];\n    let action = '';\n    let actionInput = '';\n    let thought = '';\n\n    // 提取思考（可选）\n    for (const thoughtKeyword of keywords.thought) {\n      const thoughtRegex = new RegExp(\n        `(?:^|\\\\n)\\\\s*${this.escapeRegex(thoughtKeyword)}\\\\s*[:：]\\\\s*([^\\\\n]+)`,\n        'im',\n      );\n      const thoughtMatch = text.match(thoughtRegex);\n      if (thoughtMatch) {\n        thought = thoughtMatch[1].trim();\n        break;\n      }\n    }\n\n    // 提取动作\n    for (const actionKeyword of keywords.action) {\n      const actionRegex = new RegExp(\n        `(?:^|\\\\n)\\\\s*${this.escapeRegex(actionKeyword)}\\\\s*[:：]\\\\s*([^\\\\n]+)`,\n        'im',\n      );\n      const actionMatch = text.match(actionRegex);\n      if (actionMatch) {\n        action = actionMatch[1].trim();\n        break;\n      }\n    }\n\n    // 提取动作输入\n    for (const inputKeyword of keywords.actionInput) {\n      const inputRegex = new RegExp(\n        `(?:^|\\\\n)\\\\s*${this.escapeRegex(inputKeyword)}\\\\s*[:：]\\\\s*([^\\\\n]+)`,\n        'im',\n      );\n      const inputMatch = text.match(inputRegex);\n      if (inputMatch) {\n        actionInput = inputMatch[1].trim();\n        break;\n      }\n    }\n\n    // 宽松匹配：如果找到动作但没找到动作输入\n    if (action && !actionInput && this.options.relaxedMode) {\n      actionInput = this.extractActionInputFallback(text, action, language);\n    }\n\n    return action && actionInput ? { action, actionInput, thought } : null;\n  }\n\n  /**\n   * 兜底策略：提取动作输入\n   */\n  protected extractActionInputFallback(\n    text: string,\n    action: string,\n    language: 'chinese' | 'english',\n  ): string {\n    // 查找动作行之后的下一行内容作为输入\n    const actionKeywords = this.keywords[language].action;\n\n    for (const actionKeyword of actionKeywords) {\n      const regexPattern = \n        `(?:^|\\\\n)\\\\s*${this.escapeRegex(actionKeyword)}\\\\s*[:：]\\\\s*` +\n        `${this.escapeRegex(action)}\\\\s*\\\\n([^\\\\n]+)`;\n      const regex = new RegExp(regexPattern, 'im');\n      const match = text.match(regex);\n      if (match) {\n        return match[1].trim();\n      }\n    }\n\n    return '';\n  }\n\n  /**\n   * 构建格式化指令\n   */\n  protected buildFormatInstructions(): string {\n    const chineseKeywords = this.keywords.chinese;\n    const englishKeywords = this.keywords.english;\n\n    return `请按照以下格式回答：\n\n**使用工具时：**\n${chineseKeywords.thought[0]}: 描述你的思考过程\n${chineseKeywords.action[0]}: 工具名称\n${chineseKeywords.actionInput[0]}: 工具的输入参数\n\n**有最终答案时：**\n${chineseKeywords.thought[0]}: 描述你的思考过程\n${chineseKeywords.finalAnswer[0]}: 你的最终答案\n\n**注意事项：**\n- 每行都要以对应的关键字开头，后面跟冒号\n- 支持中英文关键字混用\n- 英文格式：${englishKeywords.thought[0]}:, ${englishKeywords.action[0]}:, ` +\n      `${englishKeywords.actionInput[0]}:, ${englishKeywords.finalAnswer[0]}:\n- 中文格式：${chineseKeywords.thought[0]}:, ${chineseKeywords.action[0]}:, ` +\n      `${chineseKeywords.actionInput[0]}:, ${chineseKeywords.finalAnswer[0]}:`;\n  }\n\n  /**\n   * 构建错误消息\n   */\n  protected buildErrorMessage(text: string): string {\n    const chineseKeywords = this.keywords.chinese;\n\n    return `无法解析 ${this.modelType} 模型输出。请确保输出包含正确的关键字格式。\n\n期望格式：\n${chineseKeywords.thought[0]}: [思考过程]\n${chineseKeywords.action[0]}: [工具名称]\n${chineseKeywords.actionInput[0]}: [工具参数]\n\n或者：\n${chineseKeywords.thought[0]}: [思考过程]\n${chineseKeywords.finalAnswer[0]}: [最终答案]\n\n实际输出: ${text}`;\n  }\n\n  /**\n   * 转义正则表达式特殊字符\n   */\n  protected escapeRegex(str: string): string {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n  }\n\n  /**\n   * LangChain 兼容性\n   */\n  _type(): string {\n    return this.getType();\n  }\n}\n","/**\n * 百川 ReAct 输出解析器\n *\n * 专门适配百川（Baichuan）模型的中文 ReAct 格式输出解析\n */\n\nimport { BaseChineseReActParser } from '../base/BaseChineseReActParser.js';\nimport { ChineseModelType, LanguageKeywords, ParserOptions } from '../types.js';\n\n/**\n * 百川 ReAct 输出格式解析器\n *\n * 百川模型常见格式：\n * ```\n * 思考: 需要搜索相关信息\n * 工具: search\n * 工具输入: 查询内容\n *\n * 思考: 根据搜索结果分析\n * 最终答案: 分析结果\n * ```\n */\nexport class BaichuanReActOutputParser extends BaseChineseReActParser {\n  lc_namespace = ['langchain-react-chinese-parser', 'parsers', 'baichuan'];\n  protected modelType: ChineseModelType = 'baichuan';\n  protected keywords: LanguageKeywords = {\n    chinese: {\n      thought: ['思考', '分析', '推理'],\n      action: ['工具', '动作', '操作', '使用'],\n      actionInput: ['工具输入', '参数', '输入', '内容'],\n      finalAnswer: ['最终答案', '答案', '结果'],\n      observation: ['观察', '工具返回', '返回结果'],\n    },\n    english: {\n      thought: ['thought', 'think', 'reasoning'],\n      action: ['tool', 'action', 'use'],\n      actionInput: ['tool input', 'parameter', 'input'],\n      finalAnswer: ['final answer', 'answer', 'result'],\n      observation: ['observation', 'tool result'],\n    },\n  };\n\n  constructor(options: ParserOptions = {}) {\n    super(options);\n  }\n\n  /**\n   * 百川特殊格式处理\n   * 百川模型倾向于使用\"工具\"而非\"动作\"\n   */\n  protected extractCustomAction(text: string) {\n    // 百川格式：使用[工具名]工具，输入[参数]\n    const useToolPattern = /使用([^工具\\n]+)工具[，]?\\s*输入\\s*([^。\\n]*)/;\n    const useToolMatch = text.match(useToolPattern);\n    if (useToolMatch) {\n      return {\n        action: useToolMatch[1].trim(),\n        actionInput: useToolMatch[2].trim(),\n        thought: '使用工具',\n      };\n    }\n\n    // 格式：调用工具[工具名]进行[操作]\n    const callToolPattern = /调用工具([^进行\\n]+)进行([^。\\n]*)/;\n    const callToolMatch = text.match(callToolPattern);\n    if (callToolMatch) {\n      return {\n        action: callToolMatch[1].trim(),\n        actionInput: callToolMatch[2].trim(),\n        thought: '调用工具',\n      };\n    }\n\n    // 处理省略\"工具\"字样的情况\n    const directToolPattern = /(?:^|\\n)\\s*([a-zA-Z_]+)\\s*[:：]\\s*([^\\n]+)/im;\n    const directToolMatch = text.match(directToolPattern);\n    if (directToolMatch && this.isToolName(directToolMatch[1])) {\n      return {\n        action: directToolMatch[1].trim(),\n        actionInput: directToolMatch[2].trim(),\n        thought: '直接调用工具',\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * 判断是否为工具名称\n   */\n  private isToolName(name: string): boolean {\n    // 常见工具名称模式\n    const commonTools = [\n      'search',\n      'calculator',\n      'weather',\n      'translate',\n      'file',\n      'web',\n      'database',\n      'api',\n      'code',\n    ];\n\n    return (\n      commonTools.some(tool => name.toLowerCase().includes(tool)) ||\n      /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(name)\n    ); // 符合变量命名规范\n  }\n\n  /**\n   * 重写格式化指令\n   */\n  protected buildFormatInstructions(): string {\n    const base = super.buildFormatInstructions();\n\n    return `${base}\n\n**百川特殊格式支持：**\n- 使用[工具名]工具，输入[参数]\n- 调用工具[工具名]进行[操作]\n- 推荐使用\"工具\"而非\"动作\"关键字\n- 支持直接工具名调用：tool_name: parameter`;\n  }\n}\n","/**\n * ChatGLM ReAct 输出解析器\n *\n * 专门适配 ChatGLM 模型的中文 ReAct 格式输出解析\n */\n\nimport { BaseChineseReActParser } from '../base/BaseChineseReActParser.js';\nimport { ChineseModelType, LanguageKeywords, ParserOptions } from '../types.js';\n\n/**\n * ChatGLM ReAct 输出格式解析器\n *\n * ChatGLM 常见格式：\n * ```\n * 思考：我需要查找相关信息\n * 动作：search\n * 动作输入：天气查询\n *\n * 思考：基于搜索结果，我可以给出答案\n * 最终答案：今天天气晴朗\n * ```\n */\nexport class ChatGLMReActOutputParser extends BaseChineseReActParser {\n  lc_namespace = ['langchain-react-chinese-parser', 'parsers', 'chatglm'];\n  protected modelType: ChineseModelType = 'chatglm';\n  protected keywords: LanguageKeywords = {\n    chinese: {\n      thought: ['思考', '分析', '理解', '考虑'],\n      action: ['动作', '行动', '工具', '操作'],\n      actionInput: ['动作输入', '工具输入', '输入', '参数'],\n      finalAnswer: ['最终答案', '答案', '结论', '回答'],\n      observation: ['观察', '观察结果', '结果'],\n    },\n    english: {\n      thought: ['thought', 'thinking', 'analysis'],\n      action: ['action', 'tool', 'operation'],\n      actionInput: ['action input', 'tool input', 'input'],\n      finalAnswer: ['final answer', 'answer', 'conclusion'],\n      observation: ['observation', 'result'],\n    },\n  };\n\n  constructor(options: ParserOptions = {}) {\n    super(options);\n  }\n\n  /**\n   * ChatGLM 特殊格式处理\n   * ChatGLM 经常合并思考和动作，或使用冒号变体\n   */\n  protected extractCustomAction(text: string) {\n    // ChatGLM 常用格式：使用工具：[工具名] 查询：[参数]\n    const toolQueryPattern = /使用工具[：:]([^，\\n]+)[\\s]*查询[：:]([^。\\n]*)/;\n    const toolQueryMatch = text.match(toolQueryPattern);\n    if (toolQueryMatch) {\n      return {\n        action: toolQueryMatch[1].trim(),\n        actionInput: toolQueryMatch[2].trim(),\n        thought: '需要使用工具查询',\n      };\n    }\n\n    // 格式：调用[工具名]，参数为[参数]\n    const callToolPattern = /调用([^，\\n]+)[，]?\\s*参数为\\s*([^。\\n]*)/;\n    const callToolMatch = text.match(callToolPattern);\n    if (callToolMatch) {\n      return {\n        action: callToolMatch[1].trim(),\n        actionInput: callToolMatch[2].trim(),\n        thought: '调用工具',\n      };\n    }\n\n    // 处理只有冒号的情况（ChatGLM 有时省略中文冒号）\n    const colonOnlyPattern =\n      /(?:^|\\n)\\s*(动作|工具|操作)\\s*:\\s*([^\\n]+)\\s*\\n\\s*(?:输入|参数)\\s*:\\s*([^\\n]+)/im;\n    const colonOnlyMatch = text.match(colonOnlyPattern);\n    if (colonOnlyMatch) {\n      return {\n        action: colonOnlyMatch[2].trim(),\n        actionInput: colonOnlyMatch[3].trim(),\n        thought: '执行操作',\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * ChatGLM 倾向于使用中文冒号，重写预处理逻辑\n   */\n  protected preprocessText(text: string): string {\n    return text\n      .trim()\n      .replace(/\\r\\n/g, '\\n')\n      .replace(/：/g, ':') // ChatGLM 特殊处理：统一冒号\n      .replace(/\\s+/g, ' ')\n      .replace(/\\n\\s+/g, '\\n');\n  }\n\n  /**\n   * 重写格式化指令\n   */\n  protected buildFormatInstructions(): string {\n    const base = super.buildFormatInstructions();\n\n    return `${base}\n\n**ChatGLM 特殊格式支持：**\n- 使用工具：[工具名] 查询：[参数]\n- 调用[工具名]，参数为[参数]\n- 支持中文冒号：和英文冒号:混用\n- 推荐使用中文冒号：格式`;\n  }\n}\n","/**\n * 文心一言 ReAct 输出解析器\n *\n * 专门适配文心一言（ERNIE）模型的中文 ReAct 格式输出解析\n */\n\nimport { BaseChineseReActParser } from '../base/BaseChineseReActParser.js';\nimport { ChineseModelType, LanguageKeywords, ParserOptions } from '../types.js';\n\n/**\n * 文心一言 ReAct 输出格式解析器\n *\n * ERNIE 模型常见格式：\n * ```\n * 思考：需要查询相关信息\n * 调用工具：search\n * 输入：查询内容\n *\n * 思考：基于查询结果进行分析\n * 最终答案：分析结果\n * ```\n */\nexport class ERNIEReActOutputParser extends BaseChineseReActParser {\n  lc_namespace = ['langchain-react-chinese-parser', 'parsers', 'ernie'];\n  protected modelType: ChineseModelType = 'ernie';\n  protected keywords: LanguageKeywords = {\n    chinese: {\n      thought: ['思考', '分析', '判断', '考虑'],\n      action: ['调用工具', '使用工具', '执行', '操作'],\n      actionInput: ['输入', '参数', '内容', '查询'],\n      finalAnswer: ['最终答案', '答案', '结论', '回复'],\n      observation: ['观察', '工具结果', '返回', '输出'],\n    },\n    english: {\n      thought: ['thought', 'analysis', 'thinking'],\n      action: ['call tool', 'use tool', 'action'],\n      actionInput: ['input', 'parameter', 'query'],\n      finalAnswer: ['final answer', 'answer', 'conclusion'],\n      observation: ['observation', 'tool result', 'output'],\n    },\n  };\n\n  constructor(options: ParserOptions = {}) {\n    super(options);\n  }\n\n  /**\n   * ERNIE 特殊格式处理\n   * ERNIE 倾向于使用\"调用工具\"和较长的关键字\n   */\n  protected extractCustomAction(text: string) {\n    // ERNIE 格式：我需要调用[工具名]来[操作描述]\n    const needCallPattern = /我需要调用([^来\\n]+)来([^。\\n]*)/;\n    const needCallMatch = text.match(needCallPattern);\n    if (needCallMatch) {\n      return {\n        action: needCallMatch[1].trim(),\n        actionInput: needCallMatch[2].trim(),\n        thought: '需要调用工具',\n      };\n    }\n\n    // 格式：现在调用[工具名]，参数是[参数]\n    const nowCallPattern = /现在调用([^，\\n]+)[，]?\\s*参数是\\s*([^。\\n]*)/;\n    const nowCallMatch = text.match(nowCallPattern);\n    if (nowCallMatch) {\n      return {\n        action: nowCallMatch[1].trim(),\n        actionInput: nowCallMatch[2].trim(),\n        thought: '调用工具',\n      };\n    }\n\n    // 处理中英文混合格式\n    const mixedPattern = /(?:调用|call)\\s*([a-zA-Z_\\u4e00-\\u9fff]+)\\s*[:：]\\s*([^\\n]+)/i;\n    const mixedMatch = text.match(mixedPattern);\n    if (mixedMatch) {\n      return {\n        action: mixedMatch[1].trim(),\n        actionInput: mixedMatch[2].trim(),\n        thought: '执行操作',\n      };\n    }\n\n    return null;\n  }\n\n  /**\n   * ERNIE 特殊的预处理\n   * 处理 ERNIE 经常出现的多余描述文字\n   */\n  protected preprocessText(text: string): string {\n    let cleaned = super.preprocessText(text);\n\n    // 移除 ERNIE 常见的冗余表达\n    cleaned = cleaned\n      .replace(/好的[，,]?/g, '')\n      .replace(/我来帮您[^。]*。?/g, '')\n      .replace(/让我[^。]*。?/g, '')\n      .replace(/根据您的要求[，,]?/g, '');\n\n    return cleaned;\n  }\n\n  /**\n   * 重写格式化指令\n   */\n  protected buildFormatInstructions(): string {\n    const base = super.buildFormatInstructions();\n\n    return `${base}\n\n**文心一言特殊格式支持：**\n- 我需要调用[工具名]来[操作描述]\n- 现在调用[工具名]，参数是[参数]\n- 推荐使用\"调用工具\"关键字\n- 支持中英文混合：call [tool]: [parameter]\n- 会自动过滤常见的冗余表达`;\n  }\n}\n","/**\n * 通义千问 ReAct 输出解析器\n *\n * 专门适配通义千问（Qwen）模型的中文 ReAct 格式输出解析\n */\n\nimport { BaseChineseReActParser } from '../base/BaseChineseReActParser.js';\nimport { ChineseModelType, LanguageKeywords, ParserOptions } from '../types.js';\n\n/**\n * 通义千问 ReAct 输出格式解析器\n *\n * 支持格式：\n * ```\n * 思考: 我需要搜索相关信息\n * 动作: search\n * 动作输入: 搜索内容\n *\n * 思考: 我已经找到了答案\n * 最终答案: 这是最终的答案\n * ```\n */\nexport class QwenReActOutputParser extends BaseChineseReActParser {\n  lc_namespace = ['langchain-react-chinese-parser', 'parsers', 'qwen'];\n  protected modelType: ChineseModelType = 'qwen';\n  protected keywords: LanguageKeywords = {\n    chinese: {\n      thought: ['思考', '推理', '分析', '想法'],\n      action: ['动作', '行动', '操作'],\n      actionInput: ['动作输入', '操作输入', '输入', '参数'],\n      finalAnswer: ['最终答案', '答案', '结果', '回答'],\n      observation: ['观察', '结果', '返回'],\n    },\n    english: {\n      thought: ['thought', 'thinking', 'think'],\n      action: ['action', 'act'],\n      actionInput: ['action input', 'action_input', 'input'],\n      finalAnswer: ['final answer', 'answer', 'result'],\n      observation: ['observation', 'obs'],\n    },\n  };\n\n  constructor(options: ParserOptions = {}) {\n    super(options);\n  }\n\n  /**\n   * 通义千问特殊格式处理\n   * 处理一些通义千问模型特有的输出变体\n   */\n  protected extractCustomAction(text: string) {\n    // 通义千问有时会输出 \"我将...\" 格式\n    const willDoPattern =\n      /我将(?:使用|调用|执行)([^，。\\n]+)(?:工具|功能)[，。]?(?:来|去)?([^。\\n]*)/;\n    const willDoMatch = text.match(willDoPattern);\n    if (willDoMatch) {\n      return {\n        action: willDoMatch[1].trim(),\n        actionInput: willDoMatch[2].trim() || 'default',\n        thought: '需要使用工具',\n      };\n    }\n\n    // 处理 \"执行:\" 格式\n    const executePattern = /(?:^|\\n)\\s*执行\\s*[:：]\\s*([^\\n]+)/im;\n    const executeMatch = text.match(executePattern);\n    if (executeMatch) {\n      const parts = executeMatch[1].split(/[，,]/);\n      if (parts.length >= 2) {\n        return {\n          action: parts[0].trim(),\n          actionInput: parts.slice(1).join(',').trim(),\n          thought: '执行工具',\n        };\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * 重写格式化指令，添加通义千问特殊说明\n   */\n  protected buildFormatInstructions(): string {\n    const base = super.buildFormatInstructions();\n\n    return `${base}\n\n**通义千问特殊格式支持：**\n- 也支持：我将使用[工具名]来[参数描述]\n- 也支持：执行: [工具名], [参数]\n- 支持观察关键字：观察:, 结果:, 返回:`;\n  }\n}\n","/**\n * 中文 ReAct 解析器工厂\n *\n * 提供便捷的方法创建各种中文模型的 ReAct 解析器\n */\n\nimport { AgentAction, AgentFinish } from '@langchain/core/agents';\nimport { BaseOutputParser } from '@langchain/core/output_parsers';\nimport { BaichuanReActOutputParser } from './parsers/BaichuanReActOutputParser.js';\nimport { ChatGLMReActOutputParser } from './parsers/ChatGLMReActOutputParser.js';\nimport { ERNIEReActOutputParser } from './parsers/ERNIEReActOutputParser.js';\nimport { QwenReActOutputParser } from './parsers/QwenReActOutputParser.js';\nimport { ChineseModelType, IChineseReActParser, ParserOptions } from './types.js';\n\n/**\n * 解析器工厂类\n */\nexport class ChineseReActParserFactory {\n  /**\n   * 创建指定类型的解析器\n   */\n  static createParser(\n    modelType: ChineseModelType,\n    options: ParserOptions = {},\n  ): IChineseReActParser {\n    switch (modelType) {\n    case 'qwen':\n      return new QwenReActOutputParser(options);\n\n    case 'chatglm':\n      return new ChatGLMReActOutputParser(options);\n\n    case 'baichuan':\n      return new BaichuanReActOutputParser(options);\n\n    case 'ernie':\n      return new ERNIEReActOutputParser(options);\n\n    case 'glm':\n      // 智谱GLM 使用与 ChatGLM 相同的解析器\n      return new ChatGLMReActOutputParser(options);\n\n    case 'minimax':\n      // Minimax 使用通义千问的解析器（格式相似）\n      return new QwenReActOutputParser(options);\n\n    case 'auto':\n      // 自动模式：返回支持多种格式的通用解析器\n      return new UniversalChineseReActParser(options);\n\n    default:\n      throw new Error(`不支持的模型类型: ${modelType}`);\n    }\n  }\n\n  /**\n   * 获取所有支持的模型类型\n   */\n  static getSupportedModels(): ChineseModelType[] {\n    return ['qwen', 'chatglm', 'baichuan', 'glm', 'ernie', 'minimax', 'auto'];\n  }\n\n  /**\n   * 检查是否支持指定模型\n   */\n  static isSupported(modelType: string): boolean {\n    return this.getSupportedModels().includes(modelType as ChineseModelType);\n  }\n}\n\n/**\n * 通用中文 ReAct 解析器\n * 尝试多种解析策略，适配不同的中文模型输出格式\n */\nclass UniversalChineseReActParser\n  extends BaseOutputParser<AgentAction | AgentFinish>\n  implements IChineseReActParser\n{\n  lc_namespace = ['langchain-react-chinese-parser', 'parsers', 'universal'];\n\n  private parsers: IChineseReActParser[];\n  private options: ParserOptions;\n\n  constructor(options: ParserOptions = {}) {\n    super();\n    this.options = options;\n    this.parsers = [\n      new QwenReActOutputParser(options),\n      new ChatGLMReActOutputParser(options),\n      new BaichuanReActOutputParser(options),\n      new ERNIEReActOutputParser(options),\n    ];\n  }\n\n  async parse(text: string) {\n    const errors: Error[] = [];\n\n    // 依次尝试各个解析器\n    for (const parser of this.parsers) {\n      try {\n        const result = await parser.parse(text);\n\n        if (this.options.debug) {\n          console.log(`[Universal] 成功使用 ${parser.getType()} 解析`);\n        }\n\n        return result;\n      } catch (error) {\n        errors.push(error as Error);\n\n        if (this.options.debug) {\n          console.log(`[Universal] ${parser.getType()} 解析失败:`, error);\n        }\n      }\n    }\n\n    // 所有解析器都失败\n    throw new Error(\n      `所有解析器都无法解析此输出。错误详情:\\n${errors.map(e => e.message).join('\\n\\n')}`,\n    );\n  }\n\n  getFormatInstructions(): string {\n    return `请按照以下任一格式回答：\n\n**通义千问格式：**\n思考: 描述思考过程\n动作: 工具名称  \n动作输入: 工具参数\n\n**ChatGLM格式：**\n思考：描述思考过程\n工具：工具名称\n工具输入：工具参数\n\n**百川格式：**\n思考: 描述思考过程\n工具: 工具名称\n工具输入: 工具参数\n\n**文心一言格式：**\n思考：描述思考过程\n调用工具：工具名称\n输入：工具参数\n\n**最终答案格式（任何模型）：**\n思考: 描述思考过程\n最终答案: 你的答案\n\n**注意：**\n- 支持中英文关键字混用\n- 支持中文冒号：和英文冒号:\n- 工具名和参数要清晰明确`;\n  }\n\n  getType(): string {\n    return 'universal_chinese_react_parser';\n  }\n}\n\n/**\n * 便捷函数：创建解析器\n */\nexport function createChineseReActParser(\n  modelType: ChineseModelType,\n  options: ParserOptions = {},\n): IChineseReActParser {\n  return ChineseReActParserFactory.createParser(modelType, options);\n}\n\n/**\n * 便捷函数：创建通义千问解析器\n */\nexport function createQwenParser(options: ParserOptions = {}): QwenReActOutputParser {\n  return new QwenReActOutputParser(options);\n}\n\n/**\n * 便捷函数：创建 ChatGLM 解析器\n */\nexport function createChatGLMParser(options: ParserOptions = {}): ChatGLMReActOutputParser {\n  return new ChatGLMReActOutputParser(options);\n}\n\n/**\n * 便捷函数：创建百川解析器\n */\nexport function createBaichuanParser(options: ParserOptions = {}): BaichuanReActOutputParser {\n  return new BaichuanReActOutputParser(options);\n}\n\n/**\n * 便捷函数：创建文心一言解析器\n */\nexport function createERNIEParser(options: ParserOptions = {}): ERNIEReActOutputParser {\n  return new ERNIEReActOutputParser(options);\n}\n\n/**\n * 便捷函数：创建自动解析器\n */\nexport function createAutoParser(options: ParserOptions = {}): IChineseReActParser {\n  return ChineseReActParserFactory.createParser('auto', options);\n}\n","/**\n * LangChain 中文 ReAct 解析器\n *\n * 为中文大模型提供 LangChain ReAct 格式的输出解析支持\n * 支持：通义千问、ChatGLM、百川、智谱GLM、文心一言、Minimax 等主流中文模型\n *\n * @author langchain-react-chinese-parser\n * @version 1.0.0\n */\n\n// 类型定义\nexport type {\n  ActionMatch,\n  ChineseModelType,\n  IChineseReActParser,\n  KeywordMapping,\n  LanguageKeywords,\n  ModelParserConfig,\n  ParseResult,\n  ParserOptions,\n} from './types.js';\n\n// 基础解析器\nexport { BaseChineseReActParser } from './base/BaseChineseReActParser.js';\n\n// 具体模型解析器\nexport { BaichuanReActOutputParser } from './parsers/BaichuanReActOutputParser.js';\nexport { ChatGLMReActOutputParser } from './parsers/ChatGLMReActOutputParser.js';\nexport { ERNIEReActOutputParser } from './parsers/ERNIEReActOutputParser.js';\nexport { QwenReActOutputParser } from './parsers/QwenReActOutputParser.js';\n\n// 工厂类和便捷函数\nexport {\n  ChineseReActParserFactory,\n  createAutoParser,\n  createBaichuanParser,\n  createChatGLMParser,\n  createChineseReActParser,\n  createERNIEParser,\n  createQwenParser,\n} from './factory.js';\n\n// 默认导出：便捷的创建函数\nexport { createChineseReActParser as default } from './factory.js';\n\n/**\n * 包版本信息\n */\nexport const VERSION = '1.0.0';\n\n/**\n * 支持的模型列表\n */\nexport const SUPPORTED_MODELS = [\n  'qwen', // 通义千问\n  'chatglm', // ChatGLM\n  'baichuan', // 百川\n  'glm', // 智谱GLM\n  'ernie', // 文心一言\n  'minimax', // Minimax\n  'auto', // 自动识别\n] as const;\n\n/**\n * 快速开始示例\n *\n * @example\n * ```typescript\n * import { createChineseReActParser } from 'langchain-react-chinese-parser';\n *\n * // 创建通义千问解析器\n * const parser = createChineseReActParser('qwen', { debug: true });\n *\n * // 解析模型输出\n * const result = await parser.parse(`\n *   思考: 我需要搜索相关信息\n *   动作: search\n *   动作输入: 北京天气\n * `);\n *\n * console.log(result.tool);      // 'search'\n * console.log(result.toolInput); // '北京天气'\n * ```\n */\n\n/**\n * 模型对比表\n *\n * | 模型         | 推荐关键字             | 特殊格式支持                    | 兼容性 |\n * |--------------|----------------------|--------------------------------|--------|\n * | 通义千问     | 思考/动作/动作输入      | \"我将使用...\"                  | ⭐⭐⭐⭐⭐ |\n * | ChatGLM      | 思考/工具/工具输入      | \"调用[工具]，参数为...\"        | ⭐⭐⭐⭐⭐ |\n * | 百川         | 思考/工具/工具输入      | \"使用[工具]工具，输入...\"      | ⭐⭐⭐⭐  |\n * | 智谱GLM      | 思考/工具/工具输入      | 同 ChatGLM                    | ⭐⭐⭐⭐  |\n * | 文心一言     | 思考/调用工具/输入      | \"我需要调用[工具]来...\"        | ⭐⭐⭐⭐  |\n * | Minimax      | 思考/动作/动作输入      | 同通义千问                     | ⭐⭐⭐   |\n * | 自动识别     | 支持所有上述格式        | 智能识别，自动匹配             | ⭐⭐⭐⭐⭐ |\n */\n"],"mappings":"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","names":["BaseOutputParser","BaseOutputParser"]}