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

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 列表
}