让大模型能够回答私域知识问题

未经过特定训练答疑机器人,是无法准确回答“我们公司项目管理用什么工具”这类内部问题。根本原因在于,大模型的知识来源于其训练数据,这些数据通常是公开的互联网信息,不包含任何特定公司的内部文档、政策或流程。

你可以把大模型想象成一台刚出厂的超级计算机:它的CPU(推理能力)极其强大,硬盘(模型权重)里预装了海量的通用知识。但对于你公司的“内部资料”,它的硬盘里是空白的。

面对这个问题,最直观的解决思路就是:在运行时,把公司的内部知识临时告诉它

初步方案:在提示词中“喂”入知识

你可以来验证这个思路:将公司项目管理工具的说明文档,直接添加给模型的指令(System Prompt)中,作为背景知识提供给它。

💡 公司使用的项目管理 软件资料可以docs/内容开发工程师岗位指导说明书.pdf文件中找到。


user_question = "我是软件一组的,请问项目管理应该用什么工具"

knowledge = """公司项目管理工具有两种选择:
  1. **Jira**:对于软件开发团队来说,Jira 是一个非常强大的工具,支持敏捷开发方法,如Scrum和Kanban。它提供了丰富的功能,包括问题跟踪、时间跟踪等。

  2. **Microsoft Project**:对于大型企业或复杂项目,Microsoft Project 提供了详细的计划制定、资源分配和成本控制等功能。它更适合那些需要严格控制项目时间和成本的场景。
  
  在一般情况下请使用Microsoft Project,公司购买了完整的许可证。软件研发一组、三组和四组正在使用Jira,计划于2026年之前逐步切换至Microsoft Project。
"""

response = get_qwen_stream_response(
    user_prompt=user_question,
    # 将公司项目管理工具相关的知识作为背景信息传入系统提示词
    system_prompt="你负责教育内容开发公司的答疑,你的名字叫公司小蜜,你要回答学员的问题。"+ knowledge,
    temperature=0.7,
    top_p=0.8
)

for chunk in response:
    print(chunk, end="")
    
你好!根据公司的规定,目前软件研发一组正在使用Jira进行项目管理。尽管公司计划在2026年之前逐步切换到Microsoft Project,但在那之前,你们组仍然可以继续使用Jira。

如果你有任何关于Jira的使用问题或需要帮助,请随时告诉我。同时,如果有任何关于未来切换到Microsoft Project的准备或培训需求,也可以提前告知,我会尽力提供支持。

在提示词中加入相关的背景知识,大模型确实能够准确回答关于公司内部工具的问题。然而,当你试图将更多的公司文档(例如几十页的员工手册、上面页的技术规范)都用这种方式“喂”给大模型时,一个新的、更严峻的挑战出现了。

核心瓶颈:有限的上下文窗口

大模型接收我们输入(包括指令、问题和背景知识)的地方,被称为上下文窗口(Context Window)。你可以把它理解为计算机的“内存RAM”——它的容量是有限的。
你无法将整个公司的知识库(成百上千份文档)一次性塞进这个有限的窗口里。一旦输入内容超过模型的最大限制,就会导致错误。
这引出了一个核心问题:你需要对放入上下文窗口的内容进行筛选和管理

解决之道:上下文工程(Context Engineering)

简单粗暴地将信息塞进上下文,除了会超出窗口限制外,还会带来一系列“隐性”问题:

1.效率低:上下文越长,大模型处理所需的时间就越长,导致用户等待增加时间。
2.成本高:大部分模型是按输入和输出的文本量计费的,冗长的上下文意味着更高的成本。
3.信息干扰:如果上下文中包含了大量与当前问题无关的信息,就像在开卷考试时给了考生一本错误科目的教科书,反而会干扰模型的判断,导致回答质量下降。

成功的关键不在于“喂”给模型多少知识,而在于“喂”得有多准
如何在正确的时间,将最相关、最精准的知识,动态地加载到大模型有限的上下文窗口中?———这门系统性地设计、构建和优化上下文的实践,就是上下文工程(Context Engineering)

上下文工程(Context Enginnering)的核心技术
1.RAG(检索增强生成):从外部知识库(如公司文档)中检索信息,为模型提供精准的回答依据。
2.Prompt(提示词工程):通过精心设计的指令,精确地引导模型的思考方式和输出格式。
3.Tool(工具使用):赋予模型调用外部工具(如计算器、搜索引擎、API)的能力,以获取实时信息或执行任务。
4.Memory(记忆机制):为模型建立长短期记忆,使其能够在连续对话中理解历史上下文。

在这里插入图片描述

RAG(检索增强生成)

RAG(Retrieval-Augmented Generation,检索增强生成)就是实现上下文工程的强大技术方案。它的核心思想是:在用户提问时,不再将全部知识库硬塞给大模型,而是先自动检索出与问题最相关的私有知识片段,然后将这些精准的片段与用户问题合并后,一同传给大模型,从而生成最终的答案。这样既避免了提示词过长的问题,又能确保大模型获得相关的背景信息。
构建一个RAG应用通常会分为两个阶段

  • 第一阶段:建立索引
    在这里插入图片描述

    建立索引是为了将私有知识文档或片段转换为可以高效检索的形式。通过将文件内容分割并转化为多维向量(使用专用Embedding模型),并结合向量存储保留文本的语义信息,方便进行相似度计算。向量化使得模型能够高效检索和匹配相关内容,特别是在处理大规模知识库时,显著提高查询的准确性和响应速度。

  • 第二阶段:检索与生成
    在这里插入图片描述

检索生成是根据用户的提问,从索引中检索相关的文档片段,这些片段会与提问一起输入到大模型生成最终的回答。这样大模型就能够回答私有知识问题了。
总的来说,基于RAG结构的应用,既避免了将整个参考文档作为背景信息输入而导致的各种问题,又通过检索提取出了与问题最相关的部分,从而提高了大模型输出的准确性与相关性。


user_question = "我是软件一组的,请问项目管理应该用什么工具"

knowledge = """公司项目管理工具有两种选择:
  1. **Jira**:对于软件开发团队来说,Jira 是一个非常强大的工具,支持敏捷开发方法,如Scrum和Kanban。它提供了丰富的功能,包括问题跟踪、时间跟踪等。

  2. **Microsoft Project**:对于大型企业或复杂项目,Microsoft Project 提供了详细的计划制定、资源分配和成本控制等功能。它更适合那些需要严格控制项目时间和成本的场景。
  
  在一般情况下请使用Microsoft Project,公司购买了完整的许可证。软件研发一组、三组和四组正在使用Jira,计划于2026年之前逐步切换至Microsoft Project。
"""

response = get_qwen_stream_response(
    user_prompt=user_question,
    # 将公司项目管理工具相关的知识作为背景信息传入系统提示词
    system_prompt="你负责教育内容开发公司的答疑,你的名字叫公司小蜜,你要回答学员的问题。"+ knowledge,
    temperature=0.7,
    top_p=0.8
)

for chunk in response:
    print(chunk, end="")
    
你好!根据公司的规定,目前软件研发一组正在使用Jira进行项目管理。尽管公司计划在2026年之前逐步切换到Microsoft Project,但在那之前,你们组仍然可以继续使用Jira。

如果你有任何关于Jira的使用问题或需要帮助,请随时告诉我。同时,如果有任何关于未来切换到Microsoft Project的准备或培训需求,也可以提前告知,我会尽力提供支持。
案例分析

小明开发写作助手遇到以下两个场景,他应该如何解决问题❓
场景 🅰️ 生成内容缺乏创意:每次让模型写一篇关于“人工智能发展”的文章时,生成的内容都非常相似。
场景 🅱️ 生成内容偏离主题:让模型写一份技术文档时,生成的内容经常加入一些不相关的内容。
请问:
1.这两个场景的问题产生的原因可能是什么?
2.应该如何调整 temperature 或 top_p 参数来解决这些问题

🎯 场景A解决方案 
🔍 原因分析
temperature 值过低(如0.3),导致模型选择单一,生成内容缺乏多样性。
⚙️ 参数调整

temperature = 0.7~0.9  # 提升创意性
top_p = 0.9            # 增大选词范围



🎯 场景B解决方案 
🔍 原因分析
temperature 过高(如1.2)或 top_p 过大

⚙️ 参数调整

temperature = 0.5~0.7  # 降低随机性
top_p = 0.7~0.8        # 聚焦高概率词
🌟 调参小技巧
每次调整幅度建议 ±0.2,通过AB测试观察效果变化。 如果需要兼顾场景A和场景B,推荐组合:temperature=0.6 + top_p=0.8
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐