搬瓦工 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.cpp 或 vLLM 推理服务,可以通过 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。