引言
在当前,大模型生成结果并不是100%准确的,它会产生幻觉,主要是因为以下两点:
训练大模型的数据是有时间限制的,如果您询问大模型超出语料数据日期的问题,则大模型无法准确回答。
大模型的数据来源于训练语料,如果是公司内部的私有数据,则大模型无法感知。
本文将介绍如何构建腾讯云代码助手的自定义 RAG(Retrieval-Augmented Generation,检索增强生成) 知识库低成本更新代码助手知识内容、学习企业内部场景资料,帮助研发充分利用腾讯云代码助手的 RAG 知识库功能,提升研发效率与质量。
前提条件
适用版本:腾讯云代码助手企业旗舰版(限免)、腾讯云代码助手企业专享版、腾讯云代码助手私有化版本。
适用人员:腾讯云代码助手创建人、管理员。
自定义 RAG 知识库场景介绍
RAG 知识库的工作原理基于信息检索与生成增强机制。当研发人员提出问题或需求时,系统首先会在知识库中进行高效的信息检索,快速定位相关的知识片段。然后,利用这些检索到的信息作为上下文,结合强大的语言模型进行生成增强,从而为研发人员提供更精准、更全面的答案或代码示例。可以广泛应用于企业软件开发知识落地多个场景。
1. 编程语言知识场景
知识库示例:Java 编程规范、Python 最佳实践、C++ 标准库文档、关联项目代码库或 API 文档。
需求解释:研发人员需要熟悉特定编程语言的语法、特性和最佳实践,以确保代码的质量和可维护性。
进一步拆分:
常用库和框架。
编程规范和最佳实践。
错误处理和调试技巧。
2. 软件架构知识场景
知识库示例:微服务架构设计、单体应用架构优化、事件驱动架构模式。
需求解释:合理的软件架构设计能够提高系统的可扩展性、可维护性和性能。
进一步拆分:
架构风格和模式。
系统分解和模块化。
性能优化策略。
安全和容错设计。
3. 数据库知识场景
知识库示例:SQL 查询优化技巧、NoSQL 数据库使用指南、数据库事务管理。
需求解释:研发人员需要了解如何高效地存储、检索和管理数据,以满足业务需求。
进一步拆分:
数据库设计和规范化。
查询语言和优化技巧。
数据库性能调优。
数据安全和备份恢复。
4. 版本控制知识场景
知识库示例:Git 使用要求、版本控制最佳实践、分支策略。
需求解释:版本控制系统是软件开发中不可或缺的工具,有助于团队协作和管理代码变更。
进一步拆分:
版本控制工具内部使用要求。
分支和合并策略。
代码审查和冲突解决。
持续集成和持续部署(CI/CD)操作规范。
5. 测试知识场景
知识库示例:单元测试框架、集成测试方法、性能测试要求。
需求解释:全面的测试能够确保软件的质量和稳定性,及时发现并修复问题。
进一步拆分:
单元测试和集成测试。
性能测试和负载测试。
自动化测试历史脚本。
6. 安全知识场景
知识库示例:OWASP-Web 安全指南、加密算法参考项目、Java 语言安全编码实践。
需求解释:软件安全是至关重要的,研发人员需要了解如何防止常见的安全漏洞和攻击手段。
进一步拆分:
常见安全漏洞和攻击手段。
安全编码规范和最佳实践。
加密和解密技术要求。
构建高质量自定义知识库
1. 明确目标与范围
在构建软件研发知识库之前,首先要明确其目标和范围。确定知识库旨在解决哪些具体问题,服务于哪些用户群体,以及涵盖哪些研发领域的知识和经验。可以参考下方四个方面评估文本:
1. 相关性:文本内容与问题主题的匹配程度。
2. 帮助性:文本中信息对回答问题的直接贡献。
3. 准确性:文本信息的正确性和可靠性,不包含错误或逻辑问题。
4. 简洁性:文本是否简明扼要,无多余或无关信息。无关信息越多,简洁性越低。
2. 收集与整理知识
1. 内部知识来源(推荐上传项目相关代码库压缩包):
团队内部的技术文档、项目总结报告、团队规范要求。
开发过程中的场景最佳实践文档、复盘文档。
团队成员的专业知识和技能分享文档。
2. 外部知识来源(推荐使用外部官方发布API文档或仓库):
学术论文、行业报告、专业书籍。
开源项目代码、技术论坛讨论。
行业会议、研讨会的技术分享。
3. 语料文档准备
语料文档的基础性作用:语料文档是 RAG 知识库的核心组成部分,其质量直接决定了知识库的有效性和实用性。丰富、准确且格式规范的语料文档能够确保知识库在信息检索和生成增强过程中提供高质量的结果。
格式要求与规范:
文档格式:推荐使用 Markdown 格式,它简洁易读,支持标题、段落、列表、代码块等多种元素的清晰表达,方便知识库系统对内容进行解析和处理。
编码规范:统一采用 UTF - 8编码,以确保文档在不同系统和环境下的兼容性,避免出现乱码等问题,保证知识内容的准确传递。
内容结构:
标题:使用清晰明确的标题来划分文档的不同章节或主题,便于系统和研发人员快速定位和理解内容。标题应遵循一定的层次结构,例如使用 #、##、### 等符号来区分不同级别的标题。命名尽量控制在10字以内,涵义简洁明了,避免标题中出现无意义的数字、符号或缩写。
段落:段落内容应简洁明了,逻辑连贯,围绕一个核心主题展开阐述。避免冗长复杂的句子和段落,以提高信息的可读性和检索效率。
列表:对于列举项、步骤等内容,使用无序列表(-)或有序列表(1. 2. 3. )进行展示,使信息更加清晰有序,易于理解和提取。
数据清洗要求:
去除冗余信息:仔细检查文档内容,删除与主题无关的广告、重复的表述、过时的信息等冗余内容,确保知识库的简洁性和高效性。
减少干扰信息:尽可能减少文档中包含表情的特殊字符、批注、页眉、页脚或水印信息,以免造成解析问题。
统一术语:在涉及专业术语、技术名词时,应确保整个文档中的表述一致。例如,对于 “Function(函数)” 不应在其他地方出现 “方法(Method)” 或 “类(Class)” 等不同写法表达同一指向对象,避免因术语不统一导致检索结果不准确。
构建问答对:因为模型类产品最终的交互是问答的形式,所以在构建知识库时,如果能基于用户可能的提问方式,构建问答对,作为知识库原始数据,一般能达到更好的效果,但构建问答对的过程需要耗费较多人力以及运营成本,低成本做法用户可考虑对文档中的重要的概念或词汇打上标签,帮助 AI 识别关键词从而更好地理解文档主要内容。
4. 自定义知识库数据范围
代码助手当前模型聚焦文本文档类型的数据,主要形式为自上而下、自左向右编辑的文字。文本格式需要遵循常见中文写作规范,提供 Embedding 向量模型选择(已支持 bge-m3);尽可能地使用文字表达信息,如果语料文档中图像的文字比较少且包含重要信息,建议将信息转录成文字的形式。确保所有核心图都有图示说明(即图解或说明),图示说明应清晰地解释图中的主题。
文档格式:支持 .md、.markdown、.docx、.pdf 格式,每个文档不超过30MB。推荐上传 .md 格式文档。
代码文件格式:
支持主流编程语言源文件格式,例如:
Python:.py 文件,包含 Python 源代码。
Java:.java 文件,包含 Java 源代码。
C/C++:.c 或 .cpp 文件,包含 C 或 C++ 源代码
JavaScript:.js 文件,包含 JavaScript 源代码。
HTML/CSS/JavaScript:.html、.css、.js 文件,用于网页开发。
Visual Basic:.vbp、.frm、.bas 等文件,用于 VB 编程开发。
支持配置文件格式,例如:
INI:用于存储程序的配置信息,如数据库连接配置。
JSON:用于存储结构化配置信息,常用于 Web 开发和 API 交互。
YAML:用于存储结构化配置信息,常用于 Web 开发和 @DevOps 领域。
支持数据文件格式。例如:
CSV:用于存储表格数据,常用于数据分析和机器学习领域。
JSON:用于存储结构化数据,常用于 Web 开发和 API 交互。
XML:用于存储和传输数据,常用于 Web 服务和配置文件。
Jupyter Notebook:.ipynb 文件,包含代码、文本、图表等,用于交互式编程和教学。
腾讯云代码助手支持将文档与代码文件进行混合压缩后上传,支持常见压缩包格式(.zip、.tar、.tgz、.tar.gz、.gz、.gzip 格式,每个压缩包不超过300MB,压缩包内文件数量不限)。

如果当前知识库内容量较大可以进行主题拆分后上传为多个主题知识库,在进行知识库问答时分布调用不同主题知识库同时进行问答。
5. 自定义知识库配置
在腾讯云代码助手后台,进入知识库 > 自定义知识库 > 具体自定义知识库 > 设置路径下可以对自定义知识库的检索进行配置,配置页面及配置项解释如下:

1. Top K 值:
配置介绍:用于筛选与用户问题相似度最高的文本片段,建议设置区间为 3 到 5,较小的值返回更少但更精确的结果,较大的值返回更多的候选结果。
2. Score Threshold 值:
配置介绍:设置结果的相关性分数阈值,建议设置区间为 0 到 0.5,较低的值返回更多结果,较高的值只返回高度相关的结果。Threshold 的区间模型给的是-1到1,0是一个中间态。默认 Threshold 是0,用户可以根据自己实际业务适当设置高一些。