阿里妹导读
本文主要描述如何通过语义富化和搜索技术,帮助用户更好地理解大模型的输入输出,从而更有效地构建大模型应用。
大模型内容评估的挑战
当我们开发一段代码,可以精确地用测试用例来测试这段代码,固定的输入对应固定的输出,测试所有的输入就可以覆盖所有的代码逻辑。然而大模型输入输出是自然语言 ,自然就会接收千奇百怪的输入 。例如:
-
产品研发时,需要对大模型的输入输出做调试,确定任务拆解能力是否符合预期;
-
业务上线后,需要评估大模型面向真实场景的质量,是否解决实际问题;
-
日常经营中,需要对所有输入输出做审计、以保持合规性。
结合以上需求,我们需要对大模型应用的输入与输出具备评判的能力,对内容进行检索、分析与评估,确保应用整体行为符合预期。
语义分析:从多角度理解大模型输入输出
为了更好的处理大模型输入输出日志,从而更好的理解用户需求、评估大模型的表现。这就要求日志管理工具具备面向自然语言的搜索、处理、分析的能力,包括:
-
语义富化:多角度提炼结构化信息,包括用户意图、主题、情绪等内容;
-
向量检索:一站式向量检索能力,集成 embedidng/vector_index 能力,开箱即用。除了关键字、子串匹配外,还能够根据意图来检索内容。
-
混合检索:同时使用关键字精确匹配和向量近似匹配,融合多字段检索需求。
-
聚类:同更高视角对自然语言进行聚类分析,掌握热点和离群点。
(1)语义富化
在 RAG 领域,要把文件转化为结构化 Markdown 信息,再对 Markdown 文件切分 chunk 构建向量索引。在 RAG 场景中,传统文档处理流程存在信息损耗问题。需要通过多模态特征提取,构建多维度语义特征空间,从不同的角度来观察 LLM 输入输出,这些角度包括:
-
用户意图:用户在会话中所展示出来的意图,例如是翻译、技术咨询、法律咨询、查询与检索;
-
所属主题:会话所属主题,例如教育、云计算、法律;
-
总结:原始的会话往往叠加复杂的上下文,语义索引用一句话描述会话的信息,用户搜索总结可以快速命中记录;
-
情绪:用户在会话中所展示的情绪,是正面、负面、中性;
-
关键词:抽取会话中的关键词;
-
问题:针对原始会话提出几个问题,而原始会话是问题的答案。当用户使用问题去召回历史会话时,可以直接通过该字段召回;
-
实体抽取:抽取出现的实体,例如国家、地名、人名等。
借助于 LLM 评估、向量索引,给 Prompt/Response 提取出结构化信息,并且以可视化的形式展示分析结果。基于评估结果,从而实现对用户意图、情绪、关注点、常见问题的理解,了解 LLM 响应质量,方便下一次训练积习难改调优,对输入、输出进行合规审计,避免法律风险。
利用日志服务 SLS 的语义处理能力,在数据加工过程中提供开放式接口的方案,对接百炼托管模型 API 或者自研 LLM API,从而实现基于 LLM 进行语义富化。
LLM 评估架构包括以下几个关键组件:
-
通用 HTTP 函数:数据加工 SPL 语法提供了通用的 HTTP 调用函数,传入URL、 Body、Header等信息,调用外部服务来处理数据,获取处理结果。
-
调用 Qwen 模型:在通用 HTTP 函数之上,封装出 Qwen 的 AIGC 函数,传入 Qwen 地址,百炼 access-key,system prompt,user prompt 来调用百炼的 Qwen 模型。
-
系统/自定义 Prompt 库:SLS 提供用于评估功能的 Evaluation System Prompt 模板库,选择需要的评估功能所对应的 Evaluation System Prompt,并把日志中的 prompt/response 作为普通文本传入 User Prompt。也可以传入自己的 Prompt,自定义处理逻辑。
通过可自定义 Prompt,自定义 endpoint,自定义 model 来实现独特的业务需求。以下是 SLS内置的语义富化语句:
*
| extend "__tag__:__sls_qwen_user_tpl__" = replace(replace(replace(replace(replace(replace(replace(replace("__tag__:__sls_qwen_user_tpl__", '
' , "output.value"), '\', '\\'), '"', '\"'), chr(8), '\b'), chr(12), '\f'), chr(10), '\n'), chr(13), '\r'), chr(9), '\t')| extend "__tag__:__sls_qwen_sys_tpl__" = replace(replace(replace(replace(replace(replace(replace("__tag__:__sls_qwen_sys_tpl__", '\', '\\'), '"', '\"'), chr(8), '\b'), chr(12), '\f'), chr(10), '\n'), chr(13), '\r'), chr(9), '\t')
| extend request_body = replace(replace("__tag__:__sls_qwen_body_tpl__", '
', " __tag__:__sls_qwen_sys_tpl__"), '', " __tag__:__sls_qwen_user_tpl__")| http-call -method='post'
-headers='{"Authorization": "Bearer xxxxxx", "Content-Type": "application/json", "Host": "dashscope.aliyuncs.com", "User-Agent":"sls-etl-test"}'
-timeout_millis=60000
-body='request_body'
'http://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' as status, response_body
| extend tmp_content = json_extract_scalar(response_body, '$.output.choices.0.message.content')
| extend output_enrich = regexp_replace(regexp_replace(tmp_content, '^([^{]|\s)+{', '{'), '}([^}]|\s)+$', '}')
| project-away "__tag__:__sls_qwen_sys_tpl__", "__tag__:__sls_qwen_user_tpl__", "__tag__:__sls_qwen_body_tpl__", trimed_input, tmp_content, request_body , response_body
语义评估结果:
(2)向量检索