使用 LLM 应用和提取不可言说知识
一、与 LLM 交互的默认模式是复杂认知模式
由于 LLM 的回答具有不确定性,我们与 LLM 的默认交互模式是复杂认知模式,表现为:
- 探测(Probe):向 LLM 提出问题或任务,LLM 产生初始结果
- 感知(Sense):依照返回结果,思考哪些地方不满意或需要进一步了解,提出新问题或重新调整初始问题
- 响应(Respond):通过不同的问题调整,最终拿到满意的结果
但这并不意味着 LLM 只能在复杂模式下发挥作用。当我们给予 LLM 一个非常明确的任务时(比如生成特定 SQL 查询),我们对于要做的修改有清晰的认识,实际上处在清晰的认知模式中------交互上表现为复杂模式,只是为了应对 LLM 的不确定性。
因此,讨论 LLM 的交互模式时,需要区分:哪些是应对 LLM 不确定性的,哪些是我们认知行为的体现。
二、清晰与庞杂模式下的 LLM 交互
清晰模式下,认知行为表现为感知(sense)- 归类(categorize)- 响应(Respond)。与 LLM 的交互方式是通过**指导性提示词(Instruction Prompting)**充分详细地描述任务的上下文和要求,让 LLM 负责生成最后的结果。
具体做法是使用提示词模板,将提取到的知识填入模板中。比如生成 RESTful API 的模板,将需求背景作为变量,API 要求作为固定约束,任务部分明确指定操作。除了直接套用模板执行任务之外,还可以通过**链(Chains)**建立复杂的任务------将 API 设计模板和功能实现模板串联,一次性完成从设计到编码的全流程。
庞杂模式下,认知行为表现为感知(sense)- 分析(analysis)- 响应(Respond)。与清晰模式的差别在于:我们并不知道具体的任务有哪些。这时候可以使用**知识生成(Generated Knowledge)**让 LLM 帮助分析要处理的问题------先抛开最终诉求,让 LLM 先生成一些关于最终诉求的知识(事实信息、规则或示例),再将这些生成的知识作为补充输入提供给 LLM。
庞杂模式下最有用的知识生成是生成任务列表,因为任务列表本来就是分析的结果,是思路的体现。对任务列表达成一致,就是思路的对齐。任务列表的生成可以通过**思维链(Chain of Thought,CoT)**来实现------在提示词中明确给出任务划分的依据和要求,鼓励 LLM 解释其推理过程。
三、复杂模式下的 LLM 交互与不可言说知识的提取
复杂模式下,我们对于要解决的问题甚至没有完整的思路,获取思路才是重点。
对比庞杂模式和复杂模式下 LLM 的返回结果,会发现复杂模式下还需要进一步的迭代与反馈,才能达到可用的状态。这形象地表现了未被充分学习 和已经被充分学习 的不可言说知识在 LLM 上的差别:能够转化为 CoT(或类似技术)的,就是已经被充分学习了的不可言说知识。因而,不可言说知识的提取就是提取 CoT 的过程。
在复杂模式下,影响任务拆分效果的不可言说知识往往是关于架构的知识。我们可以在与 LLM 反馈学习的过程中,补充架构相关的知识,以提高任务列表的质量。
四、通过 RAG 学习已有的不可言说知识
除了通过反馈学习提取不可言说知识之外,发现并学习已经被提取出来的不可言说知识,也是复杂模式下一种重要的行为模式。目前比较流行的方式是使用检索增强生成(Retrieval Augmented Generation,RAG)。
在 RAG 架构下,提出的问题并不会被直接处理,而是根据问题首先从知识库中检索相关片段,再将对应片段综合,生成最终的 prompt 提供给 LLM 进行回答。它包含根据问题检索、依据结果增强、增强之后生成三个部分。
在检索的基础上,可以通过提问进行互动学习,这是不可言说知识传递的重要模式。比如,要求 LLM 根据已经存在的不可言说知识,解释任务拆分的原因,从而帮助学习者理解背后的思维逻辑,而不仅仅是得到一个结果。