【大模型实战篇】基于大模型GLM的检索增强实践
前期我们在《大模型LLM在垂直领域的应用(RAG)》、《Agentic RAG(智能体RAG) 以及Multi-Source RAG(多数据源RAG)》、《搭建本地的隐私计算知识问答系统“密答”》中对检索增强生成做了一定的介绍。本文主要聚焦在基于大模型GLM来实践检索增强【1】。
1. 创建知识库
首先在bigmodel平台,点击创建知识库,会生成自定义命名(knowledge name)的知识库以及相应的知识库id(knowledge id)。
当然,也可以采用代码的方式来创建知识库,执行代码后,可以在平台看到对应的知识库。
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="") #替换成你的api_key
result = client.knowledge.create(
embedding_id=3, # 向量化算法选择
name="yzqkb1",
description="test knowledge database"
)
print(result.id)
2. 导入知识文档、切片、向量化处理
2.1 导入知识文件
同样可以采用可视化操作或者代码操作文件知识的导入。
支持将doc、docx、pdf、xlsx类型文件上传到知识库,支持自定义文件切片的大小和规则。文件大小不得超过50MB。
from zhipuai import ZhipuAI
client = ZhipuAI(api_key="")
resp = client.knowledge.document.create(
file=open("xxx.pdf", "rb"),
purpose="retrieval",
knowledge_id="xxx", # 你的知识库id
sentence_size=202,
custom_separator=["\n"]
)
print(resp)
2.2 文档切片处理
2.3 向量化处理
等待一会,执行向量化完成后,就可以开始请求
3. 通过工具调用知识库
之前创建知识库后获得一个知识库ID。调用模型服务时,传入该知识库ID,使大模型能获取相关内容以响应用户查询。
response = client.chat.completions.create(
model="glm-4",
messages=[
{"role": "user", "content": "text classification using large language model"},
],
tools=[
{
"type": "retrieval",
"retrieval": {
"knowledge_id": "1862815770157981696",
"prompt_template": "从文档\n\"\"\"\n{{knowledge}}\n\"\"\"\n中找问题\n\"\"\"\n{{question}}\n\"\"\"\n的答案,找到答案就仅使用文档语句回答问题,找不到答案就用自身知识回答并且告诉用户该信息不是来自文档。\n不要复述问题,直接开始回答。"
}
}
],
stream=False,
)
print(response.choices[0].message.content)
输出结果如下,不过测试了几组不同的问题,感觉在从知识库抽取的环节还是有一些不对劲,后续再继续研究一下。
扩展阅读:
《全方位解读大模型》
4. 参考材料
【1】bigmodel--增强检索