> 技术文档 > 基于GLM-4-Flash大模型+本地知识库部署高性能RAG

基于GLM-4-Flash大模型+本地知识库部署高性能RAG

在这里插入图片描述

基于GLM-4-Flash大模型+本地知识库部署高性能RAG

文章目录

  • 基于GLM-4-Flash大模型+本地知识库部署高性能RAG
  • 前言
  • 一、GLM-4-Flash功能特色
    • 1.API权限获取
  • 二、接口说明
    • 1. 导入必要库和初始化客户端
    • 2.大模型对话函数 - 流式输出
  • 二.本地知识库内容和用户提问
    • 1.初始化Embedding模型
    • 2.查询本地知识库
  • 三.提示词模版
  • 四.主程序交互循环
  • 总结

前言

消费级的计算机设备和显卡限制了大模型的生成理解能力,在不更换设备的情况下使用一款好的云模型不失为一个很好的选择。

智谱的GLM-4-Flash作为智谱AI 首个免费的大模型 API,它在实时网页检索、长上下文处理、多语言支持等方面表现出色,适用于智能问答、摘要生成和文本数据处理等多种应用场景。我们今天来使用它构建一个对设备性能几乎无要求的RAG项目。


一、GLM-4-Flash功能特色

  • 超长上下文:模型具备 128K 上下文,单次提示词可以处理的文本长度相当于 300 页书籍。这样的能力使得 GLM-4-Flash-250414 能够更好地理解和处理长文本内容,适用于需要深入分析上下文的场景。
  • 多语言支持:GLM-4-Flash-250414 拥有强大的多语言支持能力,能够支持多达 26
    种语言。这为全球用户提供了多语言交互服务,拓宽了模型的应用范围。
    网页检索:支持外部工具调用,通过网络搜索获取信息,以增强语言模型输出的质量和时效性。

1.API权限获取

访问智谱官方网站并登录
点击右上角的API Key
点击添加新的API Key

在这里插入图片描述
此时赋值添加的Key即可调用智谱的大模型API啦。

二、接口说明

官方API文档地址 https://www.bigmodel.cn/dev/api/normal-model/glm-4
可以不看,本文会详细介绍该模型的使用教程。

1. 导入必要库和初始化客户端

代码如下:

from zhipuai import ZhipuAIfrom vector_store import search_similar_docsfrom prompt_temp.prompt import get_prompt # 使用您自己的API Key替换此处client = ZhipuAI(api_key=\"\")

2.大模型对话函数 - 流式输出

这里的stream=True 为设置流式输出,所谓流式输出是指大模型将生成的文本分为一个个的独立chunk 返回给我们的项目。此技术使我们可以做到接收大模型生成的文本信息时不再需要等待大模型完全生成结束再整体返回,而是类似于实时响应的输出策略。

def talk_llm(messages): response = client.chat.completions.create( model=\"GLM-4-Flash-250414\", # 使用的高效模型 messages=messages, stream=True, # 启用流式输出 ) for chunk in response: print(chunk.choices[0].delta.content, end=\'\', flush=True)

二.本地知识库内容和用户提问

使用本地知识库可以大大增加RAG整体的流程速度。本操作预先将需要操作查询的文档生成为外挂知识库,在需要进行文档交互时直接调用外挂知识库即可。

1.初始化Embedding模型

VECTOR_DB_PATH = \"../data/vector_db\" # FAISS索引目录MODEL_PATH = \"../data/models/all-mpnet-base-v2\" # 嵌入模型路径def model_init(): embeddings = SentenceTransformerEmbeddings( model_name=MODEL_PATH, model_kwargs={\'device\': \'cpu\'}, encode_kwargs={\'normalize_embeddings\': False} ) return embeddingsembeddings=model_init()

2.查询本地知识库

def search_similar_docs(query, k=3): db = FAISS.load_local(VECTOR_DB_PATH, embeddings,allow_dangerous_deserialization=True) return db.similarity_search(query, k=k)

三.提示词模版

为了帮助大模型返回更有效,更精准的结果,我们需要构建一个好用的提示词模板,以下为一个基础模板,适用于传入上下文进行查询的普通场景。

def get_prompt(context, question): \"\"\"获取RAG系统的提示模板\"\"\" prompt_template = \"\"\"  system 你是一个专业的知识助手,使用以下上下文信息来回答问题。如果不知道答案就诚实地说不知道。 上下文: {context} 请根据上下文给出详细的答案。 \"\"\" # 格式化提示词(将context和question插入模板) formatted_prompt = prompt_template.format(context=context) return formatted_prompt

四.主程序交互循环

所有配置均已完成,接下来可以进行大模型的调用啦。

from zhipuai import ZhipuAIfrom vector_store import search_similar_docsfrom prompt_temp.prompt import get_prompt def talk_llm(messages): response = client.chat.completions.create( model=\"GLM-4-Flash-250414\", # 请填写您要调用的模型名称 messages=messages, stream=True, ) for chunk in response: print(chunk.choices[0].delta.content, end=\'\', flush=True) # 输出每个分块的内容def concat_messages(page_content,query): context = \"\" for content in page_content: context += content.page_content + \"\\n\" content = get_prompt(context, query) messages=[ {\"role\": \"system\", \"content\": content}, {\"role\": \"user\", \"content\": query} ] return messagesif __name__ == \"__main__\": while True: user_input = input(\"\\n请输入你的问题 (或输入 \'exit\' 退出): \") results = search_similar_docs(user_input, k=5) if user_input.lower() in [\"exit\", \"quit\"]: break talk_llm(concat_messages(results,user_input))

总结

这种架构结合了​​本地知识库​​的高效检索和大语言模型的​​自然语言理解能力​​,具有以下优势:

✅ 回答精准,基于实际数据
✅ 减少大模型幻觉
✅ 保护私有数据安全性
✅ 降低API调用成本

​​未来改进方向​​:

  • 增加聊天记忆功能
  • 添加多文件格式支持(PDF/DOCX)
  • 实现Web界面交互
  • 开发缓存机制减少重复计算

通过这个项目,您可以构建企业级知识问答系统,个人学习助手或技术文档查询系统,极大提升信息获取效率。