利用博客文章,使用Langchain搭建大模型知识问答系统

注:如有需要开发大模型应用,网站等,后台私信我。
1、简介

        平时我们会记录一些技术笔记或者分享一些技术博客,如何在我们积累的记录中快速查找相关解决方法,下面我将利用Langchain搭建一个基于博客文章的问答系统。

使用技术:Python、Langchain、Ollama、HuggingFaceEmbeddings、Chroma 等。

2、创建知识库

        本系统是基于网页内容作为知识进行分割的,有以下几个步骤:

1)、首先使用 langchain_community.document_loaders 中的 WebBaseLoader 获取 documents;

2)、然后使用 langchain.text_splitter 中的RecursiveCharacterTextSplitter 对获取的文档进行切割,具体切割方式如下:

# 初始化文本分割器
self.text_splitter = RecursiveCharacterTextSplitter(
       chunk_size=200,   # 指定每个文本块切割长度
       chunk_overlap=20, # 文本块切割重复长度
       separators=["\n\n", "\n", ".", "!", "?", ",", " ", ""]
)

3)、将切割的文本块进行 embedding,使用 langchain_huggingface.embeddings 中的 HuggingFaceEmbeddings:

# 使用BAAI/bge-small-zh模型
 model_name = "BAAI/bge-small-zh"
 snapshot_download(
             repo_id=model_name,
             cache_dir=cache_dir,
             local_files_only=False
 )              
# 初始化嵌入模型
 self.embeddings = HuggingFaceEmbeddings(
      model_name=model_name,
      model_kwargs={
              'device': 'cpu',
              'trust_remote_code': True
             },
            cache_folder=cache_dir,
            encode_kwargs={'normalize_embeddings': True}
         )

4)、将 embedding 后的文本块向量存储到向量库 Chroma中:

self.vectorstore = Chroma.from_documents(
     documents=all_splits,
     embedding=self.embeddings,
     persist_directory=self.persist_directory  # 向量持久化路径,如果设定了,后面加载就可以从这个路径中获取
)
3、使用Ollama平台运行大模型

        Ollama是通过docker搭建的,可以参考 五分钟使用ollama部署本地大模型_ollama 运行本地模型-优快云博客 文章进行搭建。搭建完成之后,需要在Ollama中拉取使用的大模型,本文使用llama3.2为例:

# 1、启动 Ollama 容器,进入
docker exec -it ollama bash
# 2、拉取大模型
ollama pull llama3.2
4、指定使用 Ollama 平台和大模型
from langchain_ollama.llms import OllamaLLM
# 初始化OllamaLLM模型
llm = OllamaLLM(
	model="llama3.2",    # Ollama中的大模型
	base_url="http://192.168.0.66:11434",  # Ollama服务地址
	temperature=0.7,  # 控制输出的随机性
	num_ctx=4096,     # 上下文窗口大小
	num_thread=4,     # 使用的线程数
	timeout=120,      # 请求超时时间(秒)
	streaming=True    # 启用流式输出
)
5、运行效果

1)、构建知识库

        支持两种方式构建:1)、使用输入url链接进行构建;2)、使用txt/md文件进行构建(文件中每行一个url,批量构建)

构建结果:

2)、检索结果

 检索结果中会找出相关联的文章,并且支持链接跳转到指定的文章,这样就可以快速实现个人知识检索。

6、总结

        本文使用Langchain搭建一个简易的问答系统,后续会逐渐完善,添加记忆、提示词等,逐渐优化系统,让系统提供更加精确的回答。

        有感兴趣的朋友,可以关注 it自学社团 后台可以私信获取相关学习资料,一起交流学习;也希望和大家一起合作。

<think>好的,我现在要帮用户找适合知识库管理的本地部署机器学习或NLP模型,还有相关的下载部署教程。首先,我得先理解用户的需求。他们想要在本地部署,可能是出于数据安全隐私的考虑,对吧?比如企业内部的敏感数据不能上传到云端,所以需要本地化的解决方案。 接下来,我需要回忆一下常见的本地部署模型。比如BERT,这是一个经典的NLP模型,适合文本理解任务,比如问答、分类。然后RoBERTa,是BERT的改进版,可能效果更好。ALBERT在参数效率上做了优化,适合资源有限的情况。还有ELECTRA,训练方式不同,可能更高效。这些模型都是开源的,可以在Hugging Face上找到,对吧? 然后,知识库管理可能涉及检索生成,所以RAG(检索增强生成)技术可能相关。RAG结合了检索模型生成模型,比如用BERT做检索,用GPT-2或BART生成答案。不过用户提到要本地部署,所以生成模型可能需要较小的版本,比如GPT-2 Medium或者DistilGPT-2,这些模型参数量相对小一些,适合本地资源。 另外,部署框架方面,Hugging Face的Transformers库是必须的,还有ONNX Runtime可以加速推理。如果需要服务化,可以用FastAPI或者Flask来构建API。Docker容器化部署也是个好主意,方便环境管理扩展。 教程方面,Hugging Face的官方文档应该是最权威的,里面有很多示例代码。然后,像Colab或者Jupyter的实战教程可能对用户有帮助,特别是步骤详细的指南。社区资源比如GitHub项目、博客文章,特别是那些手把手教部署RAG统的,可能非常实用。 用户提供的引用里提到了RAG本地部署,比如引用[1][3]都讨论了私有知识库本地部署的重要性,还有引用[2][4]提到了一些学习资料实战案例。所以需要结合这些信息,确保推荐的模型教程符合企业的实际需求,比如数据隐私定制化。 可能还需要考虑模型的大小硬件要求。比如,BERT-base虽然效果不错,但如果在资源有限的服务器上运行,可能需要更轻量级的模型,比如DistilBERT或者ALBERT。同时,微调这些模型可能需要一定的计算资源,用户是否有GPU支持?如果只有CPU,可能需要推荐更高效的模型或者量化版本。 另外,部署步骤可能会涉及环境配置、依赖安装、模型下载、编写推理代码、测试API等。需要确保教程详细,避免用户遇到常见的坑,比如版本兼容性问题,或者缺少某些依赖库。 最后,用户可能需要评估不同模型的性能,比如准确率、推理速度、内存占用等,根据他们的具体场景选择合适的模型。例如,如果知识库需要处理大量实时查询,推理速度就很重要;如果是离线处理,可能更关注准确性。 总结一下,我需要列出几个适合的模型,每个模型的简介、适用场景,然后给出下载部署的步骤,参考相关的教程文档,并附上相关的问题供用户进一步探索。</think>### 适用于知识库管理的本地化模型与部署教程 #### 一、适用模型及特点 1. **BERT列** - **简介**: BERT(Bidirectional Encoder Representations from Transformers)是最经典的预训练语言模型,适用于文本理解、问答、分类等任务。 - **适用场景**: 知识库的语义搜索、实体识别、问答统[^1]。 - **推荐版本**: `bert-base-uncased`、`bert-large-uncased`(Hugging Face平台提供)。 2. **RoBERTa/ALBERT/ELECTRA** - **改进点**: RoBERTa优化了训练策略,ALBERT通过参数共享降低资源占用,ELECTRA通过生成器-判别器架构提升效率[^3]。 - **适用场景**: 需要轻量化或高效推理的场景。 3. **GPT-2/GPT-Neo** - **简介**: 生成式预训练模型,适合文本生成任务。 - **适用场景**: 知识库的自动摘要、问答生成(需配合检索增强技术RAG)[^1]。 - **推荐版本**: `gpt2-medium`、`EleutherAI/gpt-neo-1.3B`。 4. **Sentence-Transformers** - **简介**: 基于BERT的句子嵌入模型,用于文本相似度计算。 - **适用场景**: 知识库的语义检索、聚类分析。 - **推荐模型**: `all-MiniLM-L6-v2`(轻量级,适合本地部署)。 --- #### 二、部署流程与工具 ##### 1. 环境准备 - **框架依赖**: ```bash pip install transformers torch sentence-transformers flask ``` - **硬件要求**: - CPU/GPU均可运行(BERT-base需约1.5GB内存,GPT-2需约2GB)。 ##### 2. 模型下载与加载(以BERT为例) ```python from transformers import BertTokenizer, BertModel tokenizer = BertTokenizer.from_pretrained("bert-base-uncased") model = BertModel.from_pretrained("bert-base-uncased") ``` ##### 3. 本地API部署(使用Flask) ```python from flask import Flask, request, jsonify app = Flask(__name__) @app.route("/encode", methods=["POST"]) def encode_text(): text = request.json["text"] inputs = tokenizer(text, return_tensors="pt") outputs = model(**inputs) return jsonify({"embedding": outputs.last_hidden_state.tolist()}) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) ``` ##### 4. 结合RAG构建知识库[^1] 1. 使用`langchain`框架加载本地文档。 2. 通过Sentence-Transformers生成向量索引。 3. 将检索结果输入生成模型(如GPT-2)生成答案。 --- #### 三、推荐教程与资源 1. **Hugging Face官方文档** - 模型下载与微调: [https://huggingface.co/docs](https://huggingface.co/docs) - 实战示例: [Text Classification with BERT](https://huggingface.co/docs/transformers/tasks/sequence_classification) 2. **本地RAG搭建** - 参考GitHub项目: [llama-index](https://github.com/run-llama/llama_index) - 步骤详解: 数据预处理→向量化→检索→生成(参考引用[3])。 3. **性能优化** - 使用ONNX加速推理: ```python from transformers.convert_graph_to_onnx import convert convert(framework="pt", model="bert-base-uncased", output="bert.onnx") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其_所以然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值