小白教程:零基础在Docker桌面版上用LangChain构建法律咨询机器人

云信安装大师
90
AI 质量分
27 4 月, 2025
2 分钟阅读
0 阅读

小白教程:零基础在Docker桌面版上用LangChain构建法律咨询机器人

引言

你是否想过自己开发一个智能法律咨询助手?本教程将带你从零开始,使用Docker和LangChain框架构建一个简单的法律问答机器人。无需担心复杂的配置,我们将使用Docker桌面版来简化环境搭建过程。

准备工作

在开始之前,请确保你的电脑上已经安装好以下软件:

  1. Docker Desktop(Windows/Mac均可)
  2. Python 3.8或更高版本
  3. 文本编辑器(如VS Code)

小贴士:Docker安装完成后,记得在设置中分配足够的资源(建议至少4GB内存)

第一步:设置Docker环境

首先,我们需要创建一个Python环境的Docker容器:

代码片段
# 拉取官方Python镜像
docker pull python:3.9-slim

# 创建并运行容器,映射端口8888用于后续访问
docker run -it --name langchain-bot -p 8888:8888 -v $(pwd):/app python:3.9-slim bash

进入容器后,安装必要的依赖:

代码片段
pip install langchain openai faiss-cpu tiktoken

注意faiss-cpu是用于向量搜索的库,tiktoken是OpenAI的token计数器

第二步:准备法律知识库

我们需要一些基础法律知识作为机器人的训练数据。创建一个legal_knowledge.txt文件:

代码片段
1. 《民法典》规定,合同成立需要要约和承诺两个要素。
2. 劳动合同试用期最长不得超过6个月。
3. 借款合同未约定利息的,视为无息借款。
4. 房屋租赁期限超过6个月的应当采用书面形式。
5. 消费者享有7天无理由退货的权利(特殊商品除外)。
...

第三步:编写LangChain应用代码

创建一个legal_bot.py文件:

代码片段
from langchain.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
import os

# 设置OpenAI API密钥(请替换成你自己的)
os.environ["OPENAI_API_KEY"] = "你的API密钥"

# 1. 加载法律知识文档
loader = TextLoader("legal_knowledge.txt")
documents = loader.load()

# 2. 分割文本为小块以便处理
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

# 3. 创建嵌入向量和向量存储
embeddings = OpenAIEmbeddings()
docsearch = FAISS.from_documents(texts, embeddings)

# 4. 创建检索式问答链
qa = RetrievalQA.from_chain_type(
    llm=OpenAI(),
    chain_type="stuff",
    retriever=docsearch.as_retriever()
)

# 5. 简单的交互循环
print("法律咨询机器人已启动!输入'退出'结束对话")
while True:
    query = input("\n你的法律问题: ")
    if query.lower() == '退出':
        break

    # 获取并显示回答
    result = qa.run(query)
    print(f"\n回答: {result}")

第四步:运行机器人

在Docker容器中执行:

代码片段
python legal_bot.py

现在你可以尝试问一些简单的问题了,比如:
– “劳动合同试用期最长多久?”
– “借款合同没写利息怎么办?”

原理讲解

  1. 文本加载与分割

    • TextLoader读取我们的法律知识文本文件
    • CharacterTextSplitter将大段文本分割成小块,便于后续处理
  2. 向量化与搜索

    • OpenAIEmbeddings将文本转换为数值向量(每个词/句子变成一组数字)
    • FAISS创建高效的向量数据库,实现快速相似度搜索
  3. 问答系统

    • RetrievalQA组合了检索和生成两个步骤:
      1) 从知识库中找到最相关的片段
      2) 让语言模型基于这些片段生成回答

进阶优化建议

  1. 增加更多法律知识

    • 可以添加更多法律法规条文到knowledge.txt中
  2. 改进检索效果

    代码片段
    # 使用更好的文本分割方式
    from langchain.text_splitter import RecursiveCharacterTextSplitter
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=1000,
        chunk_overlap=200,
        separators=["\n\n", "\n", "。", "!", "?"]
    )
    
  3. 添加对话历史

    代码片段
    from langchain.memory import ConversationBufferMemory
    
    memory = ConversationBufferMemory(memory_key="chat_history")
    qa = RetrievalQA.from_chain_type(
        llm=OpenAI(),
        chain_type="stuff",
        retriever=docsearch.as_retriever(),
        memory=memory
    )
    

Docker使用小技巧

  1. 保存容器状态
    如果你不想每次重启都重新安装依赖:

    代码片段
    docker commit langchain-bot my-langchain-image
    
  2. 后台运行
    使用-d参数让容器在后台运行:

    代码片段
    docker run -d --name my-bot -p 8888:8888 my-langchain-image python legal_bot.py 
    

FAQ常见问题解决

Q: OpenAI API密钥如何获取?
A: https://platform.openai.com/api-keys (需要注册OpenAI账号)

Q: Docker容器无法启动怎么办?
A:
1. docker ps -a查看所有容器状态
2. docker logs <container_id>查看错误日志

Q: API调用超限错误?
A:

代码片段
# legal_bot.py开头添加限流设置 
import openai 
openai.api_requestor.TIMEOUT_SECS =30 #延长超时时间 

总结

通过本教程,你已经学会了:
✅ Docker的基本使用方法
✅ LangChain的核心组件和工作原理
✅ 如何构建一个简单的检索式问答系统

这个基础版本还可以进一步扩展为Web应用或接入更多法律服务API。希望这个项目能成为你学习AI应用开发的起点!

完整代码已上传GitHub:[示例仓库链接](可以在这里放置你的实际仓库地址)

原创 高质量