diff --git a/pipeline_service/llm_bridge.py b/pipeline_service/llm_bridge.py index 769805a..e7ee630 100644 --- a/pipeline_service/llm_bridge.py +++ b/pipeline_service/llm_bridge.py @@ -105,11 +105,13 @@ def _no_llm_error(model_name=None, org_id=None) -> ValueError: async def llm_call(prompt: str, model: str = None, temperature: float = 0.7, - org_id: str = None, user_id: str = None) -> str: + org_id: str = None, user_id: str = None, purpose: str = '') -> str: """Call LLM and return text response. 统一走模型治理推理 API(门禁链 + 双维度记账)。 org_id 为空 = 系统级('0'),与旧语义(不过滤机构)等价。 + purpose='utility':辅助任务(分类/选择/摘要),治理层按用途选模型链 + (机构策略配置辅助模型优先),经 payload 的 _purpose 键透传到端点。 """ # 兼容旧优先级:harnessed_agent(若宿主加载了独立推理后端) try: @@ -129,6 +131,8 @@ async def llm_call(prompt: str, model: str = None, temperature: float = 0.7, "messages": [{"role": "user", "content": prompt}], "temperature": temperature, } + if purpose: + payload["_purpose"] = purpose data = await _http_chat(payload, org_id or '0', user_id or '', model or '') try: return data["choices"][0]["message"]["content"] @@ -143,9 +147,14 @@ async def call_llm(tenant_id: str, prompt: str, model: str = None, temperature: async def llm_call_msgs(messages: list, model: str = None, temperature: float = 0.7, - org_id: str = None, user_id: str = None) -> str: - """Call LLM with full message array (system/user/assistant).""" + org_id: str = None, user_id: str = None, purpose: str = '') -> str: + """Call LLM with full message array (system/user/assistant). + + purpose='utility':辅助任务(分类/选择/摘要),治理层按用途选模型链。 + """ payload = {"model": model or '', "messages": messages, "temperature": temperature} + if purpose: + payload["_purpose"] = purpose data = await _http_chat(payload, org_id or '0', user_id or '', model or '') try: return data["choices"][0]["message"]["content"] @@ -156,17 +165,20 @@ async def llm_call_msgs(messages: list, model: str = None, temperature: float = async def llm_call_msgs_native(messages: list, tools: list = None, model: str = None, temperature: float = 0.7, org_id: str = None, - user_id: str = None) -> dict: + user_id: str = None, purpose: str = '') -> dict: """Native function calling. 传入 tools JSON schema,返回 message dict。 Returns: {"content": str, "tool_calls": [{"id","type","function":{"name","arguments"}}]} 当模型返回 tool_calls 时,content 通常为空字符串。 + purpose='utility':辅助任务(分类/选择/摘要),治理层按用途选模型链。 """ payload = {"model": model or '', "messages": messages, "temperature": temperature} if tools: payload["tools"] = tools payload["tool_choice"] = "auto" + if purpose: + payload["_purpose"] = purpose data = await _http_chat(payload, org_id or '0', user_id or '', model or '') try: msg = data["choices"][0]["message"]