ITPub博客

首页 > 人工智能 > 人工智能 > 智能体(AI Agent)开发实战之【LangChain】(三)基于RAG实现本地知识库问答优化

智能体(AI Agent)开发实战之【LangChain】(三)基于RAG实现本地知识库问答优化

原创 人工智能 作者:accps115202 时间:2025-06-23 16:11:03 0 删除 编辑

    

   上一篇介绍了基于RAG实现简单的知识库问答功能,使用了两个向量数据库Chroma和FAISS,测试了功能情况。这篇文章继续优化,引入开源嵌入大模型all-MiniLM-L6-v2,并改造为先用大模型回答,再根据问题关键词从内部 知识库查询问答结果。

一、 嵌入大模型all-MiniLM-L6-v2介绍 

all - MiniLM - L6 - v2 是一个轻量级的语言模型,在自然语言处理领域应用广泛。 基于 Transformer 架构,有 6 层 Transformer 编码器,具有 38M 参数,模型文件大小约 70MB。 该系列模型旨在通过知识蒸馏等技术,在保持较高性能的同时,减小模型规模,提高模型的运行效率和可部署性。 以下是这个模型的特点
1. 轻量级
  参数量少,模型文件小,运行时资源消耗少,在 CPU 上推理速度可达 780 字 / 秒,GPU 显存需求仅 2GB,适合在边缘设备、集成显卡或资源受限的环境中运行。
2.性能出色
  通过对比学习和知识蒸馏技术,在句子相似度、信息检索等任务中表现优异,在相关的 MTEB 榜单准确率接近大型模型,尤其擅长处理短文本。并且对多语言有较好的兼容性,支持 30 多种语言场景。
3.开发友好
  借助 sentence - transformers 库,仅需几行代码即可加载模型并生成句子嵌入,开发成本低,便于集成到各种应用中。同时,它还支持与 Faiss 、Chroma等向量数据库结合,实现高效的文本聚类与检索。
    
二、具体的功能实现

1.创建 HuggingFaceEmbeddings实例

model_path = r"E:\models\all-MiniLM-L6-v2"
model_kwargs = {'device': 'cpu'}
encode_kwargs = {'normalize_embeddings': True}
embeddings = HuggingFaceEmbeddings(
    model_name=model_path,
    model_kwargs=model_kwargs,
    encode_kwargs=encode_kwargs
)
# 使用 Chroma 创建向量数据库并存储文档向量vectorstore = Chroma.from_documents(docs, embeddings)

2.问答优化

# 获取用户输入的问题
question = input("请输入你的问题(输入 'q' 退出):")
   if question.lower() == 'q':
      break
   else:
      if "知识库" not in question:
          response = chat_model.invoke(question)
          print("答案是:", response.content)
      else:
           answer = qa.run(question)
           print("答案是:", answer)
3. 运行代码测试功能

增加了几个文档,从不同纬度描述了相关内容,如下图所示:


运行效果如下图所示:


三、总结

all-MiniLM-L6-v2是低版本的模型,我只是为了本地测试。如需要可以使用更大参数的 all-MiniLM-L12-v2等。不同的预训练模型在不同的任务和领域中可能表现不同,要根据具体需求选择合适的模型。后续可基于这个功能进行扩展和优化,敬请关注。



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046654/viewspace-3088665/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
15+年程序员,轻创业中,财富自由记录者。酷爱副业探索和理财。欢迎一起交流一起成长~

注册时间:2025-06-05

  • 博文量
    7
  • 访问量
    8384