feat(agent): LLM调用org_id可配(params ticket_agent_org_id)——'0'机构无模型网关策略致__LEGACY__降级转人工的实测修复

This commit is contained in:
yumoqing 2026-09-10 16:50:54 +08:00
parent ce685bc684
commit d151ea76d5

View File

@ -6,7 +6,9 @@
原子认领后检索知识库+历史工单,LLM 裁决能否回答。 原子认领后检索知识库+历史工单,LLM 裁决能否回答。
- 知识库:'0' 机构(平台级)KB —— 复用 pipeline_service.rag_client 的 API 模式 - 知识库:'0' 机构(平台级)KB —— 复用 pipeline_service.rag_client 的 API 模式
(dapi Bearer key 按平台账号发放,rag 侧机构隔离自动只见 org_id='0' 的 KB)。 (dapi Bearer key 按平台账号发放,rag 侧机构隔离自动只见 org_id='0' 的 KB)。
- LLM:pipeline_service.llm_bridge.llm_call(内部 token + 门禁链 + 记账,org_id='0')。 - LLM:pipeline_service.llm_bridge.llm_call(内部 token + 门禁链 + 记账)。调用 org_id
默认 '0',可由 params ticket_agent_org_id 指定为任一已在模型网关配好容错策略的机构
('0' 机构未配策略时 llm_bridge 返回 __LEGACY__,agent 走基础设施故障降级→转人工)。
- 语义判断铁律:「能否回答」由 LLM 裁决(严格 JSON),禁关键词匹配。 - 语义判断铁律:「能否回答」由 LLM 裁决(严格 JSON),禁关键词匹配。
- 硬门禁:reply 空或 <20 字符 → 视为答不了转人工(宁转人工不给空话)。 - 硬门禁:reply 空或 <20 字符 → 视为答不了转人工(宁转人工不给空话)。
- 基础设施故障(LLM/RAG 调用异常、JSON 解析失败)≠ 答不了:fail_rounds+1 回退 - 基础设施故障(LLM/RAG 调用异常、JSON 解析失败)≠ 答不了:fail_rounds+1 回退
@ -144,11 +146,19 @@ async def _llm_judge(title, description, category, kb_hits, history):
prompt = '%s\n\n## 客户工单\n标题:%s\n分类:%s\n描述:%s\n\n请判断并输出 JSON。' % ( prompt = '%s\n\n## 客户工单\n标题:%s\n分类:%s\n描述:%s\n\n请判断并输出 JSON。' % (
'\n'.join(ctx_parts), title, category, description[:1500]) '\n'.join(ctx_parts), title, category, description[:1500])
# LLM 调用 org_id:模型网关策略按机构选择+记账。默认 '0'(平台机构语义),
# 但 '0' 机构须在模型网关配好容错策略;未配则 llm_bridge 返回 __LEGACY__ 报错
# → agent 走"基础设施故障"降级(fail_rounds→转人工)。运维可设 params
# ticket_agent_org_id 指向任一已配策略的机构(2026-09-10 部署实测:'0' 无策略)。
db = core._get_db()
async with db.sqlorContext(core._dbname()) as sor:
llm_org_id = await core._get_param(sor, 'ticket_agent_org_id', '0')
try: try:
from pipeline_service.llm_bridge import llm_call from pipeline_service.llm_bridge import llm_call
raw = await llm_call( raw = await llm_call(
_JUDGE_SYSTEM + '\n\n' + prompt, _JUDGE_SYSTEM + '\n\n' + prompt,
org_id='0', user_id='', purpose='utility', timeout=120) org_id=llm_org_id, user_id='', purpose='utility', timeout=120)
except Exception as e: except Exception as e:
return False, 'llm_call 异常: %s' % str(e)[:200] return False, 'llm_call 异常: %s' % str(e)[:200]