You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
11 KiB
130 lines
11 KiB
syntax = "proto3";
|
|
option go_package = ".;pb";
|
|
import "user/user_msg_v2.proto";
|
|
import "db.proto";
|
|
|
|
// v3 客户端配置下发:一次拿全「环境变量 + agent + 产品 + 第三方服务 + 会议记录能力」。
|
|
// 与 v2 的差别(v1/v2 保持原样不动,老客户端不受影响):
|
|
// - 不再单独下发 mcps:MCP 已并入第三方服务配置(svc_config 的 MCP 类别),在 thirdsvcs 里,
|
|
// 按 categories 含 "10" 识别;url/type/tools 在 fields 里。
|
|
// - 新增 meet:会议记录支持的语言与可选总结大模型,来自后台「会议记录服务」编排。
|
|
// - agents 换成 AgentItemV3(与 user_getagents_v3 同一结构):带 type(chat|sts-chat) 与服务编排
|
|
// (stt/llm/tts/sts_svc_id)、MCP 绑定、变量、已补全的音色表。v2 下发的旧 DBAgent 结构没有这些,
|
|
// 客户端拿到 agent 却不知道该走哪条链路、调哪个服务。
|
|
// - 新增 call_translate:通话翻译的选路规则 + 规则用到的翻译 agent。后台把「什么语言走哪套
|
|
// 服务编排」配成规则,这里按用户所在区域筛好一并下发,客户端据此在通话里选路。
|
|
// 整体响应经网关 AES-CBC 加密(响应头 X-Encrypted:1),故 fields 里的凭据不再单独加密。
|
|
|
|
message UserGetAppConfigV3Req{
|
|
}
|
|
|
|
//可选总结大模型项(与 echomeet_getsummaryservices 的同名字段口径一致)
|
|
message MeetSummaryServiceItem{
|
|
string svc_id = 1; //@go_tags(`json:"svc_id"`) 服务id(starttask/summary 的 summary_svc_id 传它)
|
|
string name = 2; //@go_tags(`json:"name"`) 服务显示名
|
|
bool is_default = 3; //@go_tags(`json:"is_default"`) 是否后台默认模型
|
|
}
|
|
|
|
//会议记录能力:支持的语言 + 可选总结大模型
|
|
message MeetCapabilitiesItem{
|
|
repeated string transcribe_languages = 1; //@go_tags(`json:"transcribe_languages"`) 录音识别支持的语言(BCP-47)
|
|
bool transcribe_any_language = 2; //@go_tags(`json:"transcribe_any_language"`) true=存在未限定语言的识别服务,不受上面列表约束
|
|
repeated string translate_languages = 3; //@go_tags(`json:"translate_languages"`) 翻译支持的目标语言(BCP-47)
|
|
bool translate_any_language = 4; //@go_tags(`json:"translate_any_language"`) true=存在未限定语言的翻译服务
|
|
bool summary_client_choice = 5; //@go_tags(`json:"summary_client_choice"`) 后台是否允许客户端指定总结模型;false 时 summary_services 仅含默认项
|
|
repeated MeetSummaryServiceItem summary_services = 6; //@go_tags(`json:"summary_services"`) 可选总结大模型列表
|
|
}
|
|
|
|
message UserGetAppConfigV3Resp{
|
|
map<string,string> env = 1; //@go_tags(`json:"env"`) 应用环境变量(app_config + 本区域 global_config)
|
|
repeated AgentItemV3 agents = 2; //@go_tags(`json:"agents"`) 智能体列表(结构同 user_getagents_v3,含 type 与服务编排)
|
|
repeated DBProduct products = 3; //@go_tags(`json:"products"`) 产品列表
|
|
repeated ThirdSvcItem thirdsvcs = 4; //@go_tags(`json:"thirdsvcs"`) 第三方服务(含 MCP 类,按用户区域合并、凭据已解密为明文)
|
|
MeetCapabilitiesItem meet = 5; //@go_tags(`json:"meet"`) 会议记录能力(语言 + 总结大模型)
|
|
CallTranslateItem call_translate = 6; //@go_tags(`json:"call_translate"`) 通话翻译配置(本区域生效的选路规则 + 规则引用的翻译 agent)
|
|
}
|
|
|
|
// ===================== 通话翻译(call_translate) =====================
|
|
//
|
|
// 后台「通话翻译配置」把「什么语言走哪套服务编排」拆成两层:规则负责按语言选路,
|
|
// 选中的翻译 agent 负责给出具体服务(三段式 translate = stt+mt+tts;端到端 ast-translate = ast)。
|
|
// 这里下发的是**已按用户所在区域筛过**的那一份:不限区域(region=0)的兜底规则与本区域的规则,
|
|
// 已停用的规则、以及引用不到可用翻译 agent 的规则都不会出现。
|
|
|
|
//通话翻译选路规则:一条规则覆盖「多源语言 × 多目标语言」,命中后走 agent_id 指定的翻译 agent。
|
|
message CallTranslateRuleItem{
|
|
uint64 id = 1; //@go_tags(`json:"id"`) 规则 id(仅用于日志/排障)
|
|
string name = 2; //@go_tags(`json:"name"`) 规则名(仅便于识别)
|
|
string src_langs = 3; //@go_tags(`json:"src_langs"`) 源语言集合,逗号分隔 BCP-47;单个 "*" = 任意语言
|
|
string dst_langs = 4; //@go_tags(`json:"dst_langs"`) 目标语言集合,同上
|
|
bool bidir = 5; //@go_tags(`json:"bidir"`) true=反向(dst→src)也命中这条规则
|
|
string agent_id = 6; //@go_tags(`json:"agent_id"`) 命中后使用的翻译 agent(在同响应的 call_translate.agents 里)
|
|
int32 priority = 7; //@go_tags(`json:"priority"`) 优先级,越大越先匹配
|
|
}
|
|
|
|
//通话翻译配置:规则集 + 规则引用到的翻译 agent。
|
|
//
|
|
//匹配口径(与服务端 comm.MatchCallTranslateRule 完全一致,客户端照此实现即可):
|
|
// 1. 两侧都命中才算候选。单侧命中分三档:全等=2、主语言子标签相同(zh-CN 规则接住 zh/zh-TW)=1、被 "*" 接住=0;
|
|
// 规则的语言集合里取最好的一档。bidir 规则同时试反向,取更好的一次。
|
|
// 2. 候选间取最优:优先级大 > 两侧得分之和高 > 精确度高(src/dst 每一侧非 "*" 各记 1 分) > id 小。
|
|
// 3. rules 已按「优先级降序 → id 升序」排好,但**不能只取第一条命中的**——得分与精确度会改变名次。
|
|
// 4. 一条都不命中 = 该方向没配通话翻译。
|
|
message CallTranslateItem{
|
|
repeated CallTranslateRuleItem rules = 1; //@go_tags(`json:"rules"`) 本区域生效的规则(已按优先级降序 → id 升序排好)
|
|
repeated AgentItemV3 agents = 2; //@go_tags(`json:"agents"`) 上面规则引用到的翻译 agent(type=translate|ast-translate),结构同 agents
|
|
}
|
|
|
|
// v3 agent 列表:相比 v2 多了「绑定的 MCP 服务 + 变量」,并且 voice_map 是**已补全**的——
|
|
// 服务端按内置音色表(comm/ttsvoice.go)把 agent 支持的每种语言都解析出最终音色,
|
|
// 客户端不必自带音色表,切语言时按 language 直接取即可。
|
|
// 顶层 agents 只下发对话类(chat / sts-chat);翻译类 agent(translate / ast-translate) 复用同一结构,
|
|
// 但走另一条链路——它是通话翻译规则的服务编排载体,在 call_translate.agents 里下发。
|
|
// 故四类的服务槽位都在这个结构里,按 type 取用其中若干,用不到的为空串。
|
|
message UserGetAgentsV3Req{
|
|
}
|
|
|
|
//agent 变量项:提示词/开场白里的占位符,客户端替换后再用
|
|
message AgentVariableItem{
|
|
string key = 1; //@go_tags(`json:"key"`) 变量名;在提示词/开场白里用双大括号包住它作占位符
|
|
string label = 2; //@go_tags(`json:"label"`) 展示名
|
|
string def_value = 3; //@go_tags(`json:"def_value"`) 默认值(客户端没有对应上下文时用它)
|
|
string description = 4; //@go_tags(`json:"description"`) 备注
|
|
}
|
|
|
|
//agent 的 MCP 绑定项:绑了哪个 MCP 服务 + 这个 agent 允许它调用的工具。
|
|
//同一个 agent 挂多个 MCP 时工具会互相干扰(同名工具、用不上的工具挤占模型注意力),
|
|
//故除服务自身的 tools 白名单外,再按 agent 收一次口。
|
|
message AgentMcpBindingItem{
|
|
string svc_id = 1; //@go_tags(`json:"svc_id"`) MCP 服务 id(详情在 getappconfig_v3 的 thirdsvcs 里)
|
|
repeated string tools = 2; //@go_tags(`json:"tools"`) 允许调用的工具名;空=该服务的工具全放开(仍受服务自身 tools 白名单约束)
|
|
}
|
|
|
|
message AgentItemV3{
|
|
string id = 1; //@go_tags(`json:"id"`) agent id
|
|
string name = 2; //@go_tags(`json:"name"`) 名称
|
|
string type = 3; //@go_tags(`json:"type"`) chat|sts-chat(call_translate.agents 里则为 translate|ast-translate)
|
|
string description = 4; //@go_tags(`json:"description"`) 描述
|
|
string avatar_url = 5; //@go_tags(`json:"avatar_url"`) 头像
|
|
string stt_svc_id = 6; //@go_tags(`json:"stt_svc_id"`) 识别服务(chat)
|
|
string llm_svc_id = 7; //@go_tags(`json:"llm_svc_id"`) 大模型服务(chat)
|
|
string tts_svc_id = 8; //@go_tags(`json:"tts_svc_id"`) 合成服务(chat)
|
|
string sts_svc_id = 9; //@go_tags(`json:"sts_svc_id"`) 端到端对话服务(sts-chat)
|
|
string system_prompt = 10; //@go_tags(`json:"system_prompt"`) 系统提示词
|
|
int32 gender = 11; //@go_tags(`json:"gender"`) 0未定 1男 2女
|
|
bool greeting_enabled = 12; //@go_tags(`json:"greeting_enabled"`) 开场白开关
|
|
string greeting_text = 13; //@go_tags(`json:"greeting_text"`) 开场白
|
|
string support_langs = 14; //@go_tags(`json:"support_langs"`) 支持语言(逗号分隔 BCP-47)
|
|
string default_lang = 15; //@go_tags(`json:"default_lang"`) 默认语言
|
|
repeated AgentVoiceItem voice_map = 16; //@go_tags(`json:"voice_map"`) 各语言最终音色(已按音色表补全)
|
|
repeated string mcp_svc_ids = 17; //@go_tags(`json:"mcp_svc_ids"`) 绑定的 MCP 服务 id(详情在 getappconfig_v3 的 thirdsvcs 里)
|
|
repeated AgentVariableItem variables = 18; //@go_tags(`json:"variables"`) 变量定义
|
|
int32 sort = 19; //@go_tags(`json:"sort"`) 排序
|
|
repeated AgentMcpBindingItem mcps = 20; //@go_tags(`json:"mcps"`) MCP 绑定(含每个服务允许的工具);mcp_svc_ids 是它的 id 平铺,保留给老客户端
|
|
string mt_svc_id = 21; //@go_tags(`json:"mt_svc_id"`) 机器翻译服务(translate 三段式翻译;对话类为空)
|
|
string ast_svc_id = 22; //@go_tags(`json:"ast_svc_id"`) 端到端语音翻译服务(ast-translate;对话类为空)
|
|
}
|
|
|
|
message UserGetAgentsV3Resp{
|
|
repeated AgentItemV3 agents = 1; //@go_tags(`json:"agents"`) agent 列表
|
|
}
|
|
|