LLM的知识与能力边界
以下摘要由GPT-4o生成:
自2022年11月ChatGPT发布后,基于Transformer的LLM技术迅速发展,但早期LLM在回答即时性问题时存在局限性,容易出现幻觉或无法获取最新信息。为了解决这些问题,提示词工程(Prompt Engineering)技术应运而生。进一步地,通过构建检索增强生成(RAG)系统并结合工具调用(Tool Use)功能,AI能够实时访问网络信息或企业内部私有数据,大幅优化了回答的准确性与时效性。然而,在实际落地中仍面临数据处理、向量检索阈值设置、工具调用容错等诸多工程挑战。未来的分享将探讨模块化RAG与Agentic RAG等进阶内容。
自2022年11月ChatGPT发布以来,以Transformer为核心的大语言模型(LLM)技术迎来了爆发式的发展。如今,我们在日常生活中经常使用DeepSeek、Qwen、Kimi等大模型来解答各种疑惑。
传统LLM存在的局限性
然而,在早期的LLM中(即尚未引入联网搜索 Web Search 和检索增强生成 RAG 之前),我们会发现AI在回答问题时,常常会出现“幻觉”或给出过时的信息。
比如用户提问:
- “今天西安天气怎么样?”
- “XXX公司XX工具如何使用?”
- “西安2026年5月最新重要新闻都有哪些?”
AI可能回复:
- “西安今天天气55度”或者“你好,我无法查询天气,我的知识库截止时间为2025年5月。”
- “你好,我不了解XXX公司的具体内部工具信息。”
- “你好,我无法了解最新的新闻信息,因为我的知识库截止时间为2025年5月。”
之所以会出现这些问题,本质上是因为LLM的工作原理类似于“词语接龙”,它仅能基于预训练阶段见过的数据生成回答,无法实时获取最新信息或外部领域的私有知识。
一种简单的解决方式是:在提问时,直接将AI所需的背景信息提供给它。比如在提问时附带上“今天西安的天气是31度”,这样AI在进行推理时就能参考这些最新信息进行交流。
举个例子:
你问AI:“你好,我是mcc。”
AI回复:“你好,mcc,有什么可以帮助你的吗?”你问AI:“你好,我今天准备去户外玩,今天西安天气31°。”
AI回复:“今天西安天气较热,温度达到31度,户外活动请注意避暑和降温。”
这种通过精心设计提示词(Prompt)来引导大模型生成预期输出的技术,被称为提示词工程(Prompt Engineering)。一些高阶的提示词技术包括:
- 让LLM把大任务拆分为可逐个求解的小任务,一步一步执行(Step By Step)。
- 让LLM在给出最终答案前先输出思考过程,基于思考脉络回答原始问题(Chain of Thought, CoT)。
- 给予模型少量示例参考,让它照葫芦画瓢作答(Few-shot learning)。
突破传统LLM局限的解决方案
为了让AI给出准确且实时的回答,我们需要解决的核心问题是:如何让AI自主获取最新的网络信息或企业内部的私有信息?
1. 应对企业内部私有数据的挑战(RAG技术)
模型在预训练阶段无法接触到企业的内部私有数据。我们不可能每次都手动查好内部资料再喂给AI让它总结(这属于本末倒置);同时,我们也不能把整个企业文档直接丢给大模型,因为这很容易超出模型的上下文长度限制(Context Window,尽管目前已有支持1M上下文的模型,但成本和延迟依然很高)。
因此,我们需要在后端程序中进行预处理:提前构建企业专属知识库。当用户提问时,系统会先在知识库中检索与问题相关的信息,然后将检索到的数据片段与用户的提问拼接成一个完整的Prompt交由AI处理。此时,AI便拥有了问题背后的背景知识,从而给出精准的回答。这种技术即为检索增强生成(Retrieval-Augmented Generation,简称RAG)。
构建RAG系统涉及四个核心流程:
- 数据收集与处理:将企业内部文档解析并进行智能切块处理。
- 向量转换与存储:使用Embedding模型将文本块转换为向量,并存储至向量数据库中。
- 向量检索与召回:将用户的提问转为向量,并从数据库中检索出最相似的数据块。
- 回答增强与生成:将检索到的数据块内容作为上下文,连同用户问题一起输入LLM,生成最终回答。
借助RAG,LLM已经可以顺利解答企业内部的专属问题了。但这依然无法完全解决对时效性要求极高的问题,例如:“今西安天气多少度?” 或 “西安2026年5月最新新闻有哪些?”。
2. 解决信息时效性问题(Tool Use / Function Calling)
对于实时性极强的信息,我们不可能将其随时同步构建到知识库中。因此,我们引入了工具调用(Function Calling / Tool Use)能力。
简单来说,就是提前赋予模型使用工具(如网页搜索 Web-search、天气查询 get_weather 等)的能力。我们只需与LLM约定一种交互格式(通常是基于模型经过微调后具备的结构化JSON输出能力),例如:
1 | { |
在上述定义中,工具提供方需要详细定义各个字段。其中 description 描述了工具的作用和适用场景,以便大模型判断何时该使用它;parameters 定义了成功调用该工具所需的具体参数。大模型在理解上下文后,会严格按照 JSON Schema 生成带有相应参数(arguments)的 JSON 对象,以此来发起工具调用。
以Web Search查询“最新西安5月重要新闻”为例:
1 | { |
简而言之,LLM调用工具的全过程如下:
第一轮交互:
- User:2026年5月西安最新新闻有哪些?
- AI:判断需要最新信息,输出工具调用指令
tool_use(web_search(query="2026年5月西安最新新闻")) - System:拦截指令并执行搜索,返回结果:
Tool result(1. 某某地方20号线通车了,方便出行,URL: www.example.com;2. 西安未来投资20亿着重发展互联网企业,URL: www.example2.com)
第二轮交互:
- System:将第一轮对话、工具调用的过程以及返回的检索结果全部投递给大模型。
- AI:结合最新信息生成最终回答:“根据最新消息,西安5月的重要新闻有:1. 某某地方20号线已通车,市民出行更加方便;2. 西安计划投资20亿,着重发展互联网企业等。”
总结与工程挑战
通过引入RAG技术和Tool Use功能,我们能在向LLM提问时动态补充背景信息和实时数据,从而大幅提升回答的准确性与时效性,有效降低模型的“幻觉”。然而,在实际的工程落地中,仍然面临诸多细节挑战:
RAG 面临的挑战
- 数据收集与处理:
- 企业文档格式繁多(PDF、Word、Markdown等),程序需具备多格式解析能力。
- 如何进行智能切块(Chunking)?例如,确保切块时不会将完整的URL链接截断。
- 相邻的文本块之间,重叠度(Overlap)大小该如何合理设置?
- 向量转换与存储:
- 向量维度应设置为多少?(如1024或2048维)。
- 是使用传统的PostgreSQL(搭配pgvector),还是选择Milvus等专业的向量数据库?
- Embedding模型如何选择?针对中文偏多的知识库,需挑选对中文更友好的向量模型。
- 向量检索与召回:
- 向量检索的相似度阈值如何设置?是0.5还是0.6更合适?
- 若用户提问(Query)表述不清,该如何进行问题改写(Rewrite)?
- 如何将用户的单一问题扩展(Expand)为多个方向进行并行检索?
- 跨语言检索问题:用户用英文提问,而知识库是中文的,如何提前处理转换?
- 多路并行检索后如何去重?如何通过MMR算法兼顾结果的相关性与多样性?
- 如何通过父子块(Parent-Child Chunks)检索策略确保信息的语序和上下文完整?
- 意图消歧与排序问题:知识库A包含“XX工具使用教程”,知识库B包含“入职流程”。当用户提问“入职流程”(流程中涉及领取某工具)时,系统该如何区分主次并排序?
- 如何引入Reranker模型对初步召回的数据块进行二次精准排序(精排)?
- 回答增强与生成:
- 上下文干扰:即使检索到了正确的文本块A,但由于输入给大模型的上下文过长,大模型可能依然未基于该文本块作答。
- 检索召回为空:若检索阈值设置过高导致无数据召回,AI是否会在缺乏背景知识的情况下强行回答(从而产生幻觉)?
Tool Use 面临的挑战
- 容错处理: 当工具调用失败或大模型指令遵循能力不佳,输出无法解析的非结构化数据时,系统该如何兜底处理?
- 调用时机不准: 用户明明询问“最新新闻”,但模型却没有调用
web_search工具。这是否是因为工具的描述(Description)不够清晰,或是参数说明存在歧义? - 工具路由问题: 若系统集成了大量工具,所有的工具描述会占据过多的上下文空间,此时大模型该如何快速、准确地选择需要的工具?
未来的分享中,我们将进一步探讨模块化RAG与Agentic RAG的演化,以及Agent Memory(智能体记忆)和长线任务(Long-running Task)的产生背景与解决方案,敬请期待!
