搬瓦工 VPS 使用 LangChain 开发 LLM 应用教程

LangChain 是目前最流行的大语言模型应用开发框架,它为构建基于 LLM 的应用提供了一套完整的抽象和工具。通过 LangChain,开发者可以轻松实现链式提示、检索增强生成(RAG)、AI Agent 等复杂应用。在搬瓦工 VPS 上搭配本地模型或远程 API,可以快速开发和部署 AI 应用。

一、环境准备

  • 操作系统:Ubuntu 20.04 或更高版本。
  • 内存:至少 2GB(仅开发框架),配合本地模型需要更多。
  • Python:Python 3.9 或更高版本。
apt update && apt upgrade -y
apt install python3 python3-pip python3-venv git -y

mkdir -p /opt/langchain-app && cd /opt/langchain-app
python3 -m venv venv
source venv/bin/activate

二、安装 LangChain

# 安装 LangChain 核心包
pip install langchain langchain-core langchain-community

# 安装常用集成
pip install langchain-openai  # OpenAI 兼容接口
pip install langchain-huggingface  # HuggingFace 集成
pip install langserve fastapi uvicorn  # 部署为 API 服务

三、对接本地模型

如果你已经在 VPS 上部署了 Llama.cppvLLM 推理服务,可以通过 OpenAI 兼容接口直接对接:

cat > /opt/langchain-app/local_model.py <<'EOF'
from langchain_openai import ChatOpenAI

# 对接本地 Llama.cpp 或 vLLM 服务
llm = ChatOpenAI(
    base_url="http://localhost:8080/v1",
    api_key="not-needed",
    model="local-model",
    temperature=0.7,
    max_tokens=500
)

# 简单调用
response = llm.invoke("用简单的语言解释什么是向量数据库")
print(response.content)
EOF

python3 local_model.py

四、Prompt 模板与链

LangChain 的核心概念之一是提示模板和链式调用:

cat > /opt/langchain-app/chain_demo.py <<'EOF'
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

llm = ChatOpenAI(
    base_url="http://localhost:8080/v1",
    api_key="not-needed",
    model="local-model"
)

# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一位专业的{role},请用清晰简洁的语言回答问题。"),
    ("user", "{question}")
])

# 使用 LCEL 构建链
chain = prompt | llm | StrOutputParser()

# 调用链
result = chain.invoke({
    "role": "技术顾问",
    "question": "部署 Docker 需要注意哪些安全事项?"
})
print(result)
EOF

五、构建 RAG 应用

检索增强生成(RAG)是 LangChain 最常见的应用场景,它可以让模型基于你的私有文档回答问题:

pip install chromadb sentence-transformers pypdf
cat > /opt/langchain-app/rag_demo.py <<'EOF'
from langchain_openai import ChatOpenAI
from langchain_community.document_loaders import DirectoryLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# 1. 加载文档
loader = DirectoryLoader("/opt/langchain-app/docs", glob="**/*.txt", loader_cls=TextLoader)
documents = loader.load()

# 2. 文档分割
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.split_documents(documents)

# 3. 创建向量存储
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = Chroma.from_documents(splits, embeddings, persist_directory="/opt/langchain-app/chroma_db")
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})

# 4. 构建 RAG 链
llm = ChatOpenAI(base_url="http://localhost:8080/v1", api_key="not-needed", model="local-model")

prompt = ChatPromptTemplate.from_template("""
基于以下上下文回答问题。如果上下文中没有相关信息,请说明无法回答。

上下文:{context}

问题:{question}

回答:""")

rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

result = rag_chain.invoke("如何配置 VPS 的防火墙?")
print(result)
EOF

六、构建 AI Agent

LangChain 支持创建具有工具调用能力的 AI Agent:

cat > /opt/langchain-app/agent_demo.py <<'EOF'
from langchain_openai import ChatOpenAI
from langchain.agents import tool, AgentExecutor, create_react_agent
from langchain_core.prompts import PromptTemplate
import subprocess

@tool
def run_shell_command(command: str) -> str:
    """执行 shell 命令并返回输出结果。仅用于安全的查询命令。"""
    safe_commands = ["uptime", "free", "df", "uname", "hostname"]
    cmd = command.split()[0]
    if cmd not in safe_commands:
        return "不允许执行此命令"
    result = subprocess.run(command.split(), capture_output=True, text=True, timeout=10)
    return result.stdout or result.stderr

@tool
def get_system_info(query: str) -> str:
    """获取服务器系统信息,如内存、磁盘、负载等。"""
    info = {}
    info["uptime"] = subprocess.getoutput("uptime")
    info["memory"] = subprocess.getoutput("free -h")
    info["disk"] = subprocess.getoutput("df -h /")
    return str(info)

tools = [run_shell_command, get_system_info]
llm = ChatOpenAI(base_url="http://localhost:8080/v1", api_key="not-needed", model="local-model")

print("Agent 工具已定义,可集成到应用中")
EOF

七、使用 LangServe 部署 API

LangServe 可以快速将 LangChain 链部署为 REST API:

cat > /opt/langchain-app/serve.py <<'EOF'
from fastapi import FastAPI
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langserve import add_routes

app = FastAPI(title="LangChain API Server")

llm = ChatOpenAI(base_url="http://localhost:8080/v1", api_key="not-needed", model="local-model")

prompt = ChatPromptTemplate.from_template("你是一位AI助手。请回答:{input}")
chain = prompt | llm | StrOutputParser()

add_routes(app, chain, path="/chat")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8100)
EOF

# 启动服务
python3 serve.py

八、配置 Systemd 服务

cat > /etc/systemd/system/langchain-api.service <<EOF
[Unit]
Description=LangChain API Service
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/langchain-app
ExecStart=/opt/langchain-app/venv/bin/python serve.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable langchain-api
systemctl start langchain-api

九、与其他组件集成

LangChain 可以与多种向量数据库和工具集成:

  • Milvus:高性能向量数据库,适合大规模数据。
  • Weaviate:支持混合搜索的向量引擎。
  • ChromaDB:轻量级嵌入式向量存储。
  • LlamaIndex:专注于 RAG 的另一个框架。

十、常见问题

模型响应超时

本地模型推理可能较慢,增加超时时间:

llm = ChatOpenAI(
    base_url="http://localhost:8080/v1",
    api_key="not-needed",
    model="local-model",
    timeout=120  # 增加到 120 秒
)

总结

LangChain 为大模型应用开发提供了完善的框架和工具链。在搬瓦工 VPS 上配合本地推理服务,可以构建功能完整的 AI 应用。如果你更关注文档检索场景,也可以参考 LlamaIndex RAG 教程。选购搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的折扣,购买链接:bwh81.net

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。