本文通过实战演示如何使用LangChain构建一个具备记忆、知识库问答和多轮对话优化能力的聊天机器人。文章详细介绍了项目结构、环境准备、代码实现等关键步骤,涵盖了基于记忆的对话系统、知识库问答系统(RAG)以及多轮对话优化(上下文+检索融合)等核心功能。通过学习本文,读者可以掌握如何将LangChain应用于实际项目中,从而创建一个更加智能和高效的聊天机器人。

整体目标

本篇我们实现三个核心能力:

  1. 基于记忆的对话系统(Memory Chat)
  2. 知识库问答系统(RAG)
  3. 多轮对话优化(上下文 + 检索融合)

最终结构如下:

记忆决定“你是谁”,知识库决定“你知道什么”。


项目结构

建议直接按这个结构搭建:

langchain-chatbot/
│
├── app.py                # 主入口
├── config.py             # 配置
├── requirements.txt
│
├── llm/
│   └── model.py          # 模型加载
│
├── memory/
│   └── memory.py         # 对话记忆
│
├── rag/
│   ├── loader.py         # 文档加载
│   ├── splitter.py       # 文本切分
│   ├── vectorstore.py    # 向量库
│   └── chain.py          # RAG链
│
├── chains/
│   └── chat_chain.py     # 对话链
│
└── data/
    └── docs/             # 知识库文件

环境准备

pip install langchain langchain-community langchain-openai faiss-cpu tiktoken

(如使用本地模型,可替换为 Ollama / vLLM)


构建“有记忆”的聊天机器人

Memory 模块

# memory/memory.py

from langchain.memory import ConversationBufferMemory

def get_memory():
    """
    创建对话记忆
    """
    return ConversationBufferMemory(
        memory_key="chat_history",   # 记忆变量名
        return_messages=True         # 返回消息对象
    )

说明:

  • chat_history 会自动拼接进 prompt
  • • 这是最基础记忆(完整保留)

LLM 加载

# llm/model.py

from langchain_openai import ChatOpenAI

def get_llm():
    return ChatOpenAI(
        temperature=0.7,
        model="gpt-4o-mini"
    )

构建对话链

# chains/chat_chain.py

from langchain.chains import ConversationChain
from llm.model import get_llm
from memory.memory import get_memory

defbuild_chat_chain():
    """
    构建带记忆的对话链
    """
    llm = get_llm()
    memory = get_memory()

    chain = ConversationChain(
        llm=llm,
        memory=memory,
        verbose=True
    )

    return chain

主程序

# app.py

from chains.chat_chain import build_chat_chain

defmain():
    chat = build_chat_chain()

    print("🤖 ChatBot 已启动(输入 exit 退出)")

    whileTrue:
        user_input = input("你:")

        if user_input.lower() == "exit":
            break

        response = chat.predict(input=user_input)

        print("AI:", response)


if __name__ == "__main__":
    main()

此时能力:

✔ 记住上下文
✔ 多轮对话
❌ 不具备外部知识


第二步:加入知识库

现在,让机器人不只是“聊天”,而是“有知识”。


文档加载

# rag/loader.py

from langchain.document_loaders import TextLoader

def load_docs(path):
    loader = TextLoader(path, encoding="utf-8")
    return loader.load()

文本切分

# rag/splitter.py

from langchain.text_splitter import RecursiveCharacterTextSplitter

def split_docs(docs):
    splitter = RecursiveCharacterTextSplitter(
        chunk_size=500,
        chunk_overlap=50
    )
    return splitter.split_documents(docs)

向量数据库

# rag/vectorstore.py

from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings

def build_vectorstore(docs):
    embeddings = OpenAIEmbeddings()
    return FAISS.from_documents(docs, embeddings)

构建 RAG Chain

# rag/chain.py

from langchain.chains import RetrievalQA
from llm.model import get_llm

def build_rag_chain(vectorstore):
    retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

    chain = RetrievalQA.from_chain_type(
        llm=get_llm(),
        retriever=retriever,
        return_source_documents=True
    )

    return chain

第三步:融合 Memory + RAG

这是最关键的一步:

让“记忆”和“知识库”同时存在


Router 思路

def is_knowledge_question(query):
    """
    简单判断是否需要知识库
    """
    keywords = ["什么是", "介绍", "原理", "如何"]
    return any(k in query for k in keywords)

主程序升级

# app.py

from chains.chat_chain import build_chat_chain
from rag.loader import load_docs
from rag.splitter import split_docs
from rag.vectorstore import build_vectorstore
from rag.chain import build_rag_chain

defmain():
    chat_chain = build_chat_chain()

    # 构建知识库
    docs = load_docs("data/docs/knowledge.txt")
    split = split_docs(docs)
    vectorstore = build_vectorstore(split)
    rag_chain = build_rag_chain(vectorstore)

    print("🤖 ChatBot(带知识库)已启动")

    whileTrue:
        query = input("你:")

        if query == "exit":
            break

        if is_knowledge_question(query):
            result = rag_chain(query)
            print("📚 知识库:", result["result"])
        else:
            result = chat_chain.predict(input=query)
            print("💬 对话:", result)


defis_knowledge_question(query):
    keywords = ["什么是", "介绍", "原理", "如何"]
    returnany(k in query for k in keywords)


if __name__ == "__main__":
    main()

多轮对话优化

这里是很多人卡住的地方。


常见问题

  • • RAG 不记上下文
  • • Memory 不懂知识库
  • • 回答割裂

解决方案:Conversational RAG

from langchain.chains import ConversationalRetrievalChain

def build_conversational_rag(vectorstore, memory):
    return ConversationalRetrievalChain.from_llm(
        llm=get_llm(),
        retriever=vectorstore.as_retriever(),
        memory=memory
    )

核心能力:

  • • 记住历史问题
  • • 基于上下文检索
  • • 连续对话

效果对比

普通 RAG

Q1: 什么是LangChainQ2: 它的Memory呢?→ 不知道“它”是谁

Conversational RAG

→ 能理解“它=LangChain”→ 回答连续自然

GitHub 模板

我已经帮你整理好一个开源级模板结构

https://github.com/wujianyouhun/demo-for-blog/tree/master/python/LangChain/agent-assistant-project

GIS + ChatBot 的未来

你不是普通开发者,你是 GIS 人。

所以真正的终点,不是聊天机器人,而是:

空间智能体(Geo-Agent)

未来可以这样进化:

用户:帮我分析这个区域风能潜力 ↓Agent 调用 ↓GIS工具(栅格分析 / 插值 / 叠加) ↓LLM解释结果

当代码开始记住人,当模型开始理解语境,已经不只是程序。那更像是一种“有记忆的存在”。它会遗忘,但也会成长。它不会真正理解你,但会越来越像理解你。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2026 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐