基于AI智能体与技能架构的招投标合规审查引擎设计与实践
1. 项目概述当AI智能体遇上招投标合规审查招标文件对于任何一个参与市场竞争的企业来说都是决定项目成败的“入场券”。动辄上百页的招标文件密密麻麻的条款、技术规范、商务要求背后隐藏着无数合规“陷阱”。一个不起眼的资质要求、一个模糊的技术参数、一个苛刻的付款条件都可能让团队数月的努力付诸东流。传统的审查方式高度依赖资深专家的“火眼金睛”不仅效率低下而且极易因疲劳或疏忽产生疏漏。我们团队一直在思考能否将当下火热的AI智能体Agent技术从一个通用的、概念性的工具真正落地到一个具体、高频、高价值的业务场景中让它成为我们业务人员的“数字合规专家”这就是“招标文件合规引擎”项目的初衷。这个项目的核心不是要创造一个无所不能的通用AI而是要打造一个高度专业化、工程化的“特种兵”。我们选择了基于openJiuwen框架和自定义Skills技能库的技术路线。openJiuwen提供了一个稳定、可扩展的智能体基础架构而Skills则让我们能够将复杂的招投标法规、公司红线条款、历史经验教训封装成一个个可被AI调用的“微服务”。最终的目标是让这个引擎能够像一位不知疲倦的资深专家一样自动解析招标文件精准识别风险点并给出结构化的、可操作的审查报告。这不仅仅是技术上的尝试更是一次对传统工作流程的深度改造。2. 核心思路与架构设计从“通用”到“专精”的蜕变2.1 为什么选择“智能体技能”架构在项目初期我们评估过多种技术方案。比如直接使用大语言模型的API进行全文问答或者训练一个专门的文本分类模型。但这些方案都存在明显短板。纯API调用缺乏可控的业务逻辑和状态管理回答随机性强难以保证审查的稳定性和可追溯性。而训练专用模型则面临招投标领域高质量标注数据稀缺、法规更新频繁导致模型需要频繁重训的挑战。智能体Agent 技能Skills的架构完美地解决了这些问题。智能体在这里扮演“总指挥”的角色它负责理解任务“审查这份招标文件”制定执行计划“先解析文档结构再逐章审查商务、技术、服务条款”并调度合适的技能去完成具体任务。而技能则是封装好的、具有确定性的工具函数。例如“资质条款提取技能”、“付款条件分析技能”、“关联方识别技能”等。这种架构的优势在于模块化与可维护性法规变了我们只需要更新对应的“技能”模块无需改动智能体的核心逻辑。新增一种风险类型开发一个新的“技能”接入即可。确定性可控技能的执行逻辑是代码写死的确保了核心判断规则的稳定输出避免了纯LLM的“幻觉”问题在关键合规点上带来风险。可解释性强整个审查过程被分解为智能体的决策流和技能的执行记录每一步都有迹可循方便人工复核和审计。2.2 基于 openJiuwen 的工程化底座选型openJiuwen是一个开源的、面向生产环境的AI智能体开发框架。我们选择它主要基于以下几点工程化考量完整的生命周期管理它提供了智能体的创建、注册、版本管理、部署和监控的一整套工具这让我们能像管理微服务一样管理我们的合规审查智能体。强大的技能编排能力框架内置的工作流引擎可以让我们以可视化的方式或通过代码定义复杂的审查流程例如串行审查、并行审查、条件分支如果发现某条款则触发更深层次的关联审查。与现有系统集成友好它支持标准的REST API和消息队列接口可以轻松嵌入我们现有的OA系统、项目管理系统或文档管理平台实现从“上传文件”到“收到报告”的全自动流水线。开源可控避免了供应商锁定风险我们可以根据自身业务需求进行深度定制和优化。注意框架选型没有绝对的好坏关键是匹配团队技术栈和业务需求。如果团队以Python为主且需求相对简单LangChain也是一个优秀的选择如果追求极致的性能和可控性甚至可以考虑基于FastAPI或Spring AI自研轻量级框架。我们的选择是基于对长期维护和复杂流程编排的需求。2.3 合规引擎的核心工作流设计我们将审查流程设计为一个多阶段、可回溯的智能工作流文档解析与标准化阶段输入用户上传的PDF/Word格式招标文件。技能调用Doc_Parser_Skill使用PyMuPDF(PDF)或python-docx(Word)解析文档提取原始文本、字体、位置等元信息。Layout_Analysis_Skill基于规则和轻量级ML模型如用于表格识别的Camelot或Tabula识别文档的章节结构如第一章 招标公告、第二章 投标人须知、标题层级、表格、列表。这一步的输出是一棵结构化的“文档树”是后续所有分析的基础。输出结构化的文档对象包含章节、段落、表格及其层级关系。风险点扫描与提取阶段智能体调度智能体根据文档树按章节发起并行扫描任务。技能调用针对不同章节调度不同的扫描技能包。商务条款扫描包包含Qualification_Check_Skill检查资质要求是否超出常规或存在排他性、Payment_Term_Analysis_Skill分析付款比例、账期是否苛刻、Penalty_Clause_Extract_Skill提取违约金条款。技术条款扫描包包含Specification_Ambiguity_Check_Skill利用LLM分析技术参数描述是否存在模糊、歧义或指向特定品牌、Delivery_Timeline_Check_Skill检查交货期是否合理。法律合规扫描包包含Regulation_Keyword_Match_Skill基于关键词和规则匹配识别违反《招标投标法》等法规的明显条款。输出一个初步的“风险点”列表每个风险点包含原文位置、风险类型、初步描述。深度分析与报告生成阶段智能体调度智能体对初步风险点进行优先级排序和关联分析。技能调用LLM_Deep_Analysis_Skill对于复杂、需要上下文理解的风险点如一个看似公平但隐含倾向性的技术描述将相关段落和背景信息发送给大语言模型如GPT-4、文心一言等要求其进行合规性分析和改写建议。这里是AI能力与规则引擎的结合点。Historical_Case_Match_Skill将当前风险点与历史项目风险库进行匹配给出类似案例的处理结果和应对建议。Report_Generation_Skill将所有的风险点、分析结果、建议、原文引用整合成一份结构化的审查报告Markdown/Word/HTML格式。输出最终的合规审查报告。3. 核心技能Skills的设计与实现细节技能是引擎的“肌肉”其设计直接决定了系统的能力边界和可靠性。3.1 规则引擎技能 vs. LLM分析技能这是技能设计的核心哲学能用规则解决的绝不用LLM必须用LLM的要为其提供严格的上下文和输出约束。规则引擎技能确定性技能场景资质证书名称是否在允许清单内、投标保证金比例是否超过法定上限、关键日期格式是否正确等。实现通常基于正则表达式、关键词列表、决策树或简单的逻辑判断。例如def check_qualification(text, allowed_certs): # 从文本中提取所有疑似证书名称 found_certs extract_certificates(text) risky_certs [] for cert in found_certs: if cert not in allowed_certs: # 检查是否为“或同等效力”的模糊表述 if not has_equivalent_clause(text, cert): risky_certs.append(cert) return risky_certs优点速度快、结果100%确定、零成本、易于测试和维护。LLM分析技能非确定性技能场景评估技术方案描述中是否存在隐含的倾向性、判断某个服务要求是否过于模糊可能引发后续纠纷、对一段复杂的法律条款进行通俗化解释。实现关键在于设计高质量的System Prompt和结构化输出要求。def analyze_ambiguity_with_llm(paragraph, context): prompt f 你是一名资深的招投标专家。请分析以下招标文件段落判断其在技术或服务要求描述上是否存在模糊、歧义或可能产生争议的地方。 上下文章节标题{context} 待分析段落{paragraph} 请严格按照以下JSON格式输出 {{ risk_level: 高/中/低/无, ambiguity_description: 清晰描述模糊之处在哪里, potential_risk: 说明可能引发的具体风险, suggestion: 给出具体的条款修改建议 }} 只输出JSON不要有任何其他解释。 # 调用LLM API response call_llm_api(prompt) return parse_json_response(response)要点必须限制输出格式并通过上下文如章节标题约束LLM的分析范围防止其过度发散。3.2 文档解析技能的关键从“文本流”到“文档树”这是整个项目的基础也是最容易踩坑的地方。很多开源解析工具只能提取纯文本丢失了所有的结构信息。我们的Layout_Analysis_Skill采用了混合策略基于规则的头部分析利用字体大小、加粗、居中、编号模式如“1.1”、“2.3.4”来识别标题。基于机器学习的表格恢复使用Camelot或自定义训练的表格检测模型确保复杂表格能被正确提取为结构化数据如Pandas DataFrame而不是杂乱的文本。后处理与纠错建立章节标题的常见模式库如“投标人须知前附表”、“技术规格和要求”对识别结果进行校验和修正。最终生成一个包含id,level,title,content,parent_id等字段的文档树。这个树形结构是后续所有技能进行“定位”和“引用”的坐标系。实操心得不同招标方使用的文档模板差异巨大解析技能需要具备一定的鲁棒性。我们建立了一个“解析错误样本库”持续收集解析失败的案例用于迭代优化规则和模型。同时系统必须提供一个“解析结果预览”界面允许用户在关键步骤进行人工确认或微调这是人机协同的重要一环。3.3 历史案例匹配技能让引擎拥有“记忆”单纯的规则和LLM分析缺乏“经验”。我们开发了Historical_Case_Match_Skill其核心是一个向量数据库如ChromaDB或Milvus。数据准备将历史中标/废标项目的招标文件、识别出的风险点、专家的处理意见和最终结果整理成一条条“案例知识”。向量化使用文本嵌入模型如BGE或OpenAI的text-embedding-3将案例知识的核心描述转换为向量。检索当新文件识别出一个风险点时将该风险点描述向量化并在向量数据库中搜索最相似的Top-K个历史案例。呈现将相似案例的风险描述、应对策略和结果作为参考信息附加到审查报告中。例如“当前发现的‘要求提供特定年限的本地化服务团队证明’条款在2023年XX项目中同样出现我方当时通过提供总部资深工程师派遣计划本地合作伙伴支持函的方案成功化解。”这个技能极大地提升了引擎建议的实用性和说服力让AI从“照本宣科”走向“经验之谈”。4. 工程化落地实践从Demo到生产系统4.1 系统架构与部署我们将整个系统部署为微服务架构前端一个简单的Web界面用于文件上传、报告查看和解析结果预览。使用Vue.js开发。API网关使用Nginx负责路由、负载均衡和认证。核心引擎服务基于openJiuwen框架开发的智能体服务是无状态的服务可以水平扩展。它接收任务协调各个技能。技能服务集群每个或每组技能可以独立部署为一个微服务如parser-service,rule-check-service,llm-service。技能服务通过gRPC或REST与核心引擎通信。消息队列使用RabbitMQ或Kafka。文件上传后生成一个审查任务消息引擎消费消息并执行实现异步处理和削峰填谷。存储使用PostgreSQL存储任务元数据、报告结果和用户信息使用MinIO或阿里云OSS存储上传的原始文件和生成的报告使用向量数据库存储案例知识。缓存使用Redis缓存频繁访问的规则库、资质清单以及LLM API的响应在提示词完全相同时。4.2 性能优化与成本控制异步并行处理文档解析、各章节风险扫描等IO密集型或可独立运行的任务全部采用异步并行模式充分利用服务器资源将单次审查耗时从小时级降到分钟级。LLM调用优化提示词压缩在调用LLM进行深度分析前先对相关文本进行摘要或关键信息提取减少token消耗。分级调用策略对于简单分析使用成本更低的模型如GPT-3.5-Turbo仅对高风险或复杂条款才调用GPT-4等高级模型。缓存对常见、标准的条款分析结果进行缓存。技能懒加载与预热不常用的技能服务在空闲时可以被调度器缩容而在高峰期前进行预热。4.3 监控、日志与持续迭代一个生产系统必须可观测、可维护。监控使用Prometheus收集各项指标API响应时间、各技能执行耗时、LLM调用次数与token消耗、任务队列长度、系统错误率等。并配置Grafana看板。日志结构化日志JSON格式记录每一个任务的完整生命周期包括智能体的决策过程、每个技能的输入输出。使用ELKElasticsearch, Logstash, Kibana栈进行集中管理和检索。当用户对某条风险提示有疑问时我们可以通过任务ID快速定位到当时的完整分析链路。反馈闭环在报告界面设置“反馈”按钮业务专家可以标记“风险误判”、“漏报”或“建议有用”。这些反馈数据自动流入一个标注池用于定期评估技能效果和优化规则/提示词。5. 常见问题与实战避坑指南在实际开发和上线过程中我们遇到了诸多挑战以下是部分典型问题及解决方案。5.1 解析准确率问题问题对于扫描版PDF、图片嵌入的表格、特殊排版的文件解析技能出错率高导致后续分析全盘皆输。解决方案前置OCR集成PaddleOCR或Tesseract对扫描件进行OCR处理并将识别结果与原有解析路径融合。多解析器投票对于关键文件同时使用PyMuPDF、pdfplumber和商业解析服务如有进行解析对结果进行比对和投票选择置信度最高的或人工介入选择。提供人工修正入口在解析后提供一个可视化界面允许用户手动调整章节切分点、合并被错误拆分的段落。这个“人工修正”的结果会被记录用于反哺解析模型的训练。5.2 LLM的“幻觉”与稳定性问题LLM有时会“无中生有”编造一个文件中不存在的风险点或者对同一份文件多次审查的结果有轻微差异。解决方案强约束提示词如前所述使用严格的JSON输出格式并在提示词中反复强调“仅基于提供的文本进行分析”。引用溯源要求LLM在输出风险描述时必须注明引用的原文片段如“第X章第Y条”。在报告中将这些引用高亮显示方便用户核对。如果LLM无法提供具体引用则降低该条风险的置信度。多数投票与置信度对于高风险条款可以配置引擎调用LLM分析多次如3次取多数一致的结果并计算一个“置信度”分数附在报告上。建立“幻觉”黑名单将反复出现的、典型的幻觉表述加入一个过滤列表在结果后处理阶段进行过滤。5.3 规则库的维护与更新问题法规、公司政策、市场常规都在变化规则库容易过时。解决方案版本化管理对规则库资质清单、红线条款、关键词库进行Git版本控制任何修改都有记录、可回滚。定期评审机制建立月度评审会议由法务、商务、技术专家共同审议规则库的有效性根据最新项目反馈和法规变动进行更新。动态加载规则库以配置文件或数据库形式存储支持热更新无需重启服务。5.4 业务接受度与人机协同问题业务专家不信任AI的结果觉得它是“黑盒”或者担心自己被取代。解决方案定位为“辅助”而非“替代”始终强调引擎是“初级合规员”或“专家助手”它的作用是完成海量、重复的初步筛查将专家从繁琐劳动中解放出来专注于最高风险的决策。极致透明的可解释性报告中的每一条风险都必须清晰展示风险类型、原文定位、判断依据是触发了哪条规则还是LLM基于什么分析、参考案例。让专家一眼就能看懂引擎的“思考过程”。设计流畅的协同流程专家可以在报告上直接批注“此条忽略原因...”、“此条风险需升级讨论”这些批注会自动更新任务状态并反馈给引擎的学习系统。从通用Agent的概念到解决具体业务痛点的招标文件合规引擎这个过程充满了工程上的权衡与细节上的打磨。最大的体会是AI项目的成功技术只占一半另一半在于对业务场景的深度理解、对生产环境复杂性的敬畏以及设计出良好的人机协同模式。我们的引擎上线后将单份文件的初步审查时间从平均4-6人时缩短到了10分钟以内风险漏报率低于5%已经成为业务团队不可或缺的“第一道防线”。未来我们计划将技能扩展到投标文件撰写辅助、竞争对手分析等更多环节让这个“数字专家”在招投标的全链条中发挥更大价值。

相关新闻

企业AI落地指南:从工具到生产力的关键路径

企业AI落地指南:从工具到生产力的关键路径

在过去的两年时间里, 企业级人工智能应用由概念验证阶段迅速踏入实际生产环境。《人工智能发展报告》由中国信息通信研究院于2025年发布 , 该报告表明 , 截止到2024年底 , 已有国内42.7%的规模以上企业把AI技术融入了至少一项核心业务流程 , 相较于2022年 , 这一比例提升了将近…

2026/9/22 8:22:52 阅读更多 →
Spring Boot 3 结合 Redis Lua 实现分布式批量数据导入内存配额控制

Spring Boot 3 结合 Redis Lua 实现分布式批量数据导入内存配额控制

Spring Boot 3 结合 Redis Lua 实现分布式批量数据导入内存配额控制 问题背景 在企业级业务中,用户、订单、商品等数据的批量导入是常见需求,通常基于 EasyExcel、OpenCSV 等工具实现 Excel/CSV 文件的解析。当导入文件行数超过 10 万、或分布式集群多实…

2026/9/24 21:30:27 阅读更多 →
图片审核策略调优实战:从误判诊断到闭环迭代的工程实践

图片审核策略调优实战:从误判诊断到闭环迭代的工程实践

1. 项目概述:从“误判”到“精准”的审核策略调优实战图片审核这事儿,干过的都知道,它就像个“薛定谔的猫”——你永远不知道下一张图会被系统判定成什么。明明是一张普通的风景照,可能因为光影对比强烈,被误判为“低俗…

2026/9/24 20:54:54 阅读更多 →

最新新闻

SAP HANA SQLScript 游标关闭机制详解,从 CLOSE 语句到数据库资源管理与生产环境实践

SAP HANA SQLScript 游标关闭机制详解,从 CLOSE 语句到数据库资源管理与生产环境实践

在 SAP HANA 的存储过程开发中,游标经常出现在需要逐行处理数据的业务逻辑里。我们可能正在开发一套财务结算程序,需要逐笔检查尚未完成的付款记录,也可能正在维护一套库存管理程序,需要根据每条库存异常记录执行不同的处理逻辑。 这些程序通常会通过 SQL 查询获取一批数据…

2026/9/25 21:30:14 阅读更多 →
Windows 11 EFI引导故障诊断与修复实战指南

Windows 11 EFI引导故障诊断与修复实战指南

1. 这不是普通重装:Server 14 与 Windows 11 的 EFI 引导故障,本质是固件层与操作系统层的“握手失败”你手头那台标着“Server 14”的设备,大概率不是微软官方发布的版本号——它更可能是某家国产服务器厂商(如浪潮、华为、中科曙…

2026/9/25 21:30:14 阅读更多 →
SAP HANA Updatable Cursor 深度解析,从逐行更新到事务锁定,掌握可更新游标的工作机制

SAP HANA Updatable Cursor 深度解析,从逐行更新到事务锁定,掌握可更新游标的工作机制

在 SAP HANA 中处理业务数据时,我们经常遇到一种情况,系统需要逐条读取数据库记录,根据每条记录的业务属性决定究竟执行更新、删除,还是保持原状。 以企业员工主数据维护为例,员工编号可能来自不同的历史系统。某些历史记录使用不足五位的编号,新系统则要求采用统一的编…

2026/9/25 21:30:14 阅读更多 →
校园圈子小程序源码拆包:微信开发者工具+MySQL毕设全流程跑通指南

校园圈子小程序源码拆包:微信开发者工具+MySQL毕设全流程跑通指南

简介:这份资源是面向高校计算机相关专业学生的微信小程序毕业设计完整源码,选题为校园圈子小程序,适合正在准备毕业设计、需要真实项目参考或二次开发练手的同学。项目基于微信开发者工具与MySQL数据库开发,功能覆盖注册登录、学习…

2026/9/25 21:29:14 阅读更多 →
XXL-JOB分片广播模式实战:原理、分片逻辑与生产避坑指南

XXL-JOB分片广播模式实战:原理、分片逻辑与生产避坑指南

1. 为什么分片广播模式值得单独拿出来讲做过分布式任务调度的朋友大概率都遇到过这样的场景:一张订单表里有几千万条待处理记录,单机跑批处理要跑几个小时,业务方催得急,机器却闲着一大半。这时候你自然会想到——能不能让多台机器…

2026/9/25 21:29:14 阅读更多 →
VS Code 插件位置迁移实战:用 TaoToken 统一管理 AI 编程助手配置

VS Code 插件位置迁移实战:用 TaoToken 统一管理 AI 编程助手配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 21:29:14 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →