当前位置: 首页 > news >正文

面向 LLM 的程序设计 11:多语言与多模态下的工具描述

问题:当用户用中文问"查一下我的订单",而你的工具名叫search_orders、参数键是order_id时,模型会不会搞混?当用户上传一张发票照片,模型"看到"的是图像像素,但你的查单工具只接受字符串order_id,这个gap怎么补上?

总结:工具的技术标识(名字、参数键)保持英文稳定,让模型在任何语言环境下都认得;自然语言描述用用户母语,让模型理解何时该用;多模态输入先经过结构化转换(OCR/提取),再进工具调用,别让工具直接"看像素"。

关键词:多语言;多模态;工具元数据;稳定标识符;MCP;Token 预算


0 系列回顾

  • 面向 LLM 的程序设计 1:API 契约设计:从 REST 到「能力端点」。能力化端点:为具体业务动作各自暴露的专用接口,例如/summarize-document/list-orders-by-user;不要把所有需求都丢进一个万能/ask接口。
  • 面向 LLM 的程序设计 2:确定性契约:为什么 LLM 调用的 API 需要严格 JSON Schema。用 JSON Schema 钉死类型、枚举与必填,对冲模型输出的随机性,减少歧义与解析失败。
  • 面向 LLM 的程序设计 3:LLM-Friendly 的响应结构:扁平键、稳定字段与类型标注。键名稳定、结构尽量扁平、语义一眼可读,方便模型与下游工具链消费。
  • 面向 LLM 的程序设计 4:API 版本化与演进——在「模型会记忆旧文档」前提下的兼容策略。显式版本、可渐进扩展与废弃公告,避免模型仍按旧文档调用已变更接口。
  • 面向 LLM 的程序设计 6:Tool Calling 的完整生命周期——从定义、决策、执行到观测回注。从工具定义到回注再推理串成闭环,每步可校验、可观测、失败可处理。
  • 面向 LLM 的程序设计 7:工具描述的工程化——name、description、parameters 怎么写才少误用。稳定 name、写清何时用与边界、Schema 与文案一致,降低选错工具与填错参的概率。
  • 面向 LLM 的程序设计 8:「少而宽」还是「多而窄」——工具粒度与 Token 预算的权衡。在工具个数、单工具覆盖面与上下文占用之间做工程权衡,平衡误触率与 Token 成本。
  • 面向 LLM 的程序设计 9:系统提示中的「能力边界」——减少越权与幻觉调用。在系统提示里划清能做与不能做,减少越权操作与「假装能调」的幻觉调用。
  • 面向 LLM 的程序设计 10:链式任务中的中间输出格式——如何写提示才能稳定得到可解析结构。探讨在多步推理、Prompt 链、LangGraph 节点之间,如何将中间输出约定为稳定的结构化格式:定义字段、类型、缺值处理方式,在提示词中给出正反示例,并与解析、校验、重试机制配合。

1 多语言:一套接口,多语用户

1.1 什么必须固定不变?

无论用户说中文、英文还是日文,以下这些技术标识必须全球统一:

要素正确做法错误做法
工具名search_orderssearch_orders_cn查询订单
参数键order_idstart_date订单号开始日期
枚举值pendingpaidshipped待付款已支付已发货

原因:模型可能在思维链里中英混杂,但最终生成的 JSON 必须能被程序正确路由。如果工具名随语言变,同样的功能就要维护多套定义,迟早会出现"中文用户调不到英文工具"的 bug。

1.2 什么可以本地化?

只有给人读的自然语言可以本地化:

  • 工具描述(description):告诉模型"这个工具什么时候用、输入什么、返回什么"。用户说中文,你就给中文描述。
  • 参数说明:每个字段的含义解释,用用户能懂的语言写。
  • 示例(few-shot):放几条用户语言的调用示例在 prompt 里。

1.3 推荐的描述格式:双语块

与其维护两套独立的工具定义(中英文各一份),不如在一个描述里并列双语,维护成本低,模型也能对照理解:

[工具] search_orders [参数] keyword (string), status (enum: pending|paid|shipped) [中文] 按关键词搜索订单列表,只读操作。当用户问"我的订单在哪"但没说具体订单号时使用。 [EN] Search orders by keyword. Read-only. Use when user asks about orders but doesn't provide a specific order_id. [注意] 不要与 find_shipment 混淆:本工具查订单主数据,物流追踪请用 find_shipment。

这样同一套search_orders定义,中英文界面都能用,只是系统 prompt 里的描述段切换或双语并列。

1.4 跨语言误选:一个真实问题

场景:用户用中文问"我订单到哪了",你的工具库里有两个:

  • search_orders(查订单列表)
  • find_shipment(查物流轨迹)

如果search_orders的描述只有英文,模型可能误判用户想问物流,从而选错工具。

解决

  1. 至少给每个工具一行用户语言的摘要
  2. 在描述里写清边界:“本工具只查订单列表,不查物流。物流请用 find_shipment”

2 多模态:图像/文档怎么进工具?

2.1 别让工具"直接看像素"

除非你的工具后端真的接了一个视觉模型,否则工具参数应该是引用,而不是原始图像

用户上传上游处理工具接收
发票照片OCR 提取 →{"order_id": "ORD-12345", "amount": 299}query_order(order_id="ORD-12345")
商品截图物体识别 →{"product_id": "SKU-67890"}get_product_info(product_id="SKU-67890")
PDF 合同版面分析 →{"contract_id": "CTR-001", "parties": [...]}review_contract(contract_id="CTR-001")

原则:把"看懂图像"和"执行业务"拆成两道工序——

  1. 多模态理解节点:用视觉模型把图/文档转成结构化数据
  2. 工具调用节点:用确定性参数调用业务工具

2.2 只传"最小必要信息"

视觉模型往往输出一堆字段:订单号、金额、日期、商户名、商品列表……但你的查单工具可能只需要order_id。不要把整张 OCR 结果塞进工具参数,既浪费 Token 又稀释模型注意力。

做法:在视觉节点和工具节点之间加一道"字段映射",只挑工具真正需要的字段传递。

2.3 生成任务 vs 工具调用要分开

用户上传照片后,模型可能想干两件事:

  1. 描述图片内容给用户听(生成任务)
  2. 调用工具处理图片里的信息(工具调用)

这两件事在架构上要拆成两个节点

  • Caption 节点:给模型看图片,让它生成自然语言描述(用户可见)
  • Tool Planner 节点:基于结构化数据决定调用什么工具(程序消费)

不要让"描述图片"和"执行操作"在同一个 LLM 调用里混着做,容易出错且难调试。


3 Token 控制:双语描述的取舍

中英双语描述会让工具说明体积翻倍。根据场景选择策略:

场景策略
高频工具双语全量注入,确保准确率
低频/内部工具默认语言全量 + 其他语言一行摘要
多语言应用locale动态组装,只注入当前语言版本(参考第 8 篇动态注入)
从不触发的域不要因为"翻译完整"就提前注入,浪费 Token

4 与 MCP / 开放生态衔接

MCP (Model Context Protocol) 等开放协议中,建议对外注册工具时提供:

{"name":"search_orders","title_zh":"搜索订单","title_en":"Search Orders","description":"...","tags":["order","read-only","e-commerce"]}
  • name:永远稳定、语言无关
  • title_*:可选的本地化显示名
  • tags:语言无关的主题标签,便于检索和过滤

5 小结

维度原则
多语言技术标识(name、参数键)用英文统一;描述和示例用用户母语;双语并列优于维护两套定义
多模态图像/文档先结构化再进工具;工具参数只接引用(ID/URI),不接原始像素或全文 OCR
Token按频率和语言动态裁剪,低频工具不必全量翻译

实践建议:建立一张tool_i18n表,记录每个工具在各语言的描述摘要和"易混淆工具"对照。在 CI 里检查"每个工具至少有一种用户语言的摘要",避免上线后某语言用户集体误选。


参考资源

以下是关于多语言与多模态工具设计的权威资料,可帮助你深入理解相关实践:

官方文档

  1. OpenAI Function Calling Guide

    • 函数定义的基础规范,包括名称、描述、参数 Schema 的最佳实践
    • 支持工具搜索(tool search)以优化大规模工具集场景
  2. Anthropic Tool Use Documentation

    • Claude 的工具使用机制详解
    • 提供strict: true选项确保输出严格匹配 Schema
    • 强调工具描述应至少 3-4 句话,越详细越好
  3. Google Vertex AI Multimodal Function Calling

    • Gemini 模型的多模态函数调用实现
    • 支持函数返回图像/PDF 等多模态内容
    • 最多支持 512 个 FunctionDeclarations

社区实践

  1. Writing Tools for AI Agents - Anthropic Engineering Blog

    • 如何编写有效的工具描述
    • 工具命名空间(namespacing)与功能边界划分
    • Token 效率优化建议
  2. Designing Tool Schemas for AI Agents - CallSphere

    • JSON Schema 设计最佳实践
    • 适用于多语言场景的 Agent 架构设计
  3. Multimodal Function Calling with Gemini - Philipp Schmid

    • Gemini 3 多模态函数调用的实战示例
    • 如何处理函数返回的图像数据

延伸阅读

  1. MCP Model Context Protocol

    • 标准化的工具注册与发现协议
    • 支持元数据本地化(title、description 的多语言版本)
  2. LLM Function Calling Implementation Guide - PremAI

    • 完整的函数调用实现指南(2026 版)
    • Schema 合规性保证机制
http://www.jsqmd.com/news/654898/

相关文章:

  • 可靠的空调品牌推荐哪家,分析开利空调风速调节、清洗和与大金对比 - 工业品网
  • laravel-translatable核心原理解析:深入了解JSON存储机制
  • 告别状态机混乱:用BehaviorTree.CPP重构你的ROS机器人决策逻辑(保姆级实战)
  • Mem Reduct内存管理工具的高级配置架构与原理解析
  • WebSocket在Vue2中的实战:告别轮询,实现服务器主动推送(含避坑指南)
  • 模拟CMOS集成电路(3):共源放大器的偏置、增益与摆幅实战解析
  • 从机器学习实战看贝叶斯与频率学派的融合与分野
  • 给Android开发者的BootLoader与内核启动速成课:从按下电源到第一个进程
  • 用Python和NumPy的SVD功能,5分钟搞定图片压缩(附完整代码和效果对比图)
  • 技术先进、服务好的超声波雾化设备供应商怎么选,深度剖析与综合推荐 - myqiye
  • 日本进口五轴加工中心-日桥机械 - 品牌推荐大师
  • VS2019 MFC TeeChart V5.1动态曲线绘制实战:从安装到高级功能封装
  • 教你轻松处理闲置瑞祥卡,线上回收省时又安全 - 团团收购物卡回收
  • 从Log4j 1.x到Log4j 2.x的JMX迁移实践
  • 鱼香ros学习第三章话题
  • Latex排版+实验设计:我是如何在家‘纸上谈兵’完成TCSVT顶会论文初稿的
  • RVC WebUI界面详解:每个按钮功能说明,小白秒懂操作
  • 知名企业家诉讼离婚请律师委托费多少,有哪些上海本地的律师推荐 - 工业设备
  • 2026年靠谱的图像质量测试设备型号推荐,摄像头测试设备多少钱揭秘 - mypinpai
  • 引用vs指针
  • 从Prompt注入到训练数据投毒:生成式AI全链路隐私攻击图谱(2024最新ATTCK for AI v2.1)
  • R| 纵向数据可视化:用增强版云雨图(Raincloudplots)揭示时间序列变化
  • 802.11AX资源调度探秘:NDP反馈报告(NFR)机制详解
  • 2026年4月佛山顺德五金模具定制供应商深度对标指南——金属制品与五金配件采购避坑全攻略 - 精选优质企业推荐官
  • Windows虚拟机CPU跑满?别急着重启,用perf和火焰图揪出QEMU-KVM里的“电老虎”
  • 2026移民美国中介排名及行业服务参考 - 品牌排行榜
  • 甘肃万通技工学校教学方法大揭秘,专业是否靠谱一看便知 - 工业设备
  • 抖音无水印批量下载实战指南:3分钟搞定高效内容管理
  • 双硬盘用户必看!DISM++安装Win10 22H2时如何避免误删数据盘(含DiskGenius分区详解)
  • 3步掌握StreamFX:OBS视频特效插件的终极指南