手把手教你用Xinference:本地搭建AI模型平台,支持LangChain集成

📅 发布时间:2026/7/8 14:26:24 👁️ 浏览次数:
手把手教你用Xinference:本地搭建AI模型平台,支持LangChain集成
手把手教你用Xinference本地搭建AI模型平台支持LangChain集成你是否曾想过在自己的电脑上就能运行各种开源大模型并且能像调用OpenAI API一样简单当你想把AI能力集成到自己的应用里却发现要么API费用太高要么部署过程复杂得让人头疼。今天我要介绍的Xinference就是来解决这些问题的。Xinference不是一个普通的模型推理工具它是一个完整的AI模型服务平台。简单来说它让你能在自己的机器上笔记本、服务器、甚至树莓派一键启动各种开源模型然后通过统一的API来调用。最棒的是这个API和OpenAI的格式完全兼容——这意味着你现有的基于OpenAI的代码几乎不用修改就能跑在本地模型上。这篇文章我会带你从零开始一步步搭建起自己的Xinference平台。我会告诉你每一步具体怎么做遇到问题怎么解决最后还会演示如何把它集成到LangChain里。整个过程就像搭积木一样简单跟着做30分钟内你就能拥有自己的AI模型服务。1. 为什么你需要Xinference三个无法拒绝的理由在开始动手之前我们先搞清楚Xinference到底能帮你解决什么实际问题。我总结为三个核心价值点这些都是我们在实际项目中验证过的。1.1 真正的“一行代码换模型”文档里说“通过更改一行代码将GPT替换为任何LLM”这话一点不夸张。在Xinference里换模型真的就像换一个参数那么简单。比如你想从Qwen换成Llama只需要在启动命令里改个模型名字其他所有代码都不用动。这背后是Xinference的统一API设计。所有模型无论是文本生成、图片理解还是语音识别都通过同样的接口来调用。你不用为每个模型写不同的适配代码也不用担心提示词格式不兼容。1.2 从“能跑”到“好用”的完整方案很多开源工具只能解决“让模型跑起来”的问题但Xinference考虑的是“怎么让模型好用”。它提供了三套交互方式WebUI界面图形化操作点点鼠标就能加载模型、测试对话命令行工具适合自动化脚本和批量操作REST API和OpenAI API完全兼容现有代码无缝迁移更重要的是它原生支持LangChain、LlamaIndex这些主流AI开发框架。你不用再自己写中间层来桥接直接配置一下就能用。1.3 不挑硬件智能调度资源你的机器有没有GPU内存多大Xinference都能自适应。它通过ggml后端可以智能地在CPU和GPU之间分配计算任务。我们测试过几种典型场景在有RTX 4090的工作站上它能充分利用GPU加速在只有集成显卡的笔记本上它能自动切换到CPU模式在内存有限的开发机上它会推荐合适的量化版本这种灵活性意味着你可以在任何机器上开始AI开发不用为硬件配置发愁。2. 环境准备10分钟搞定基础配置我们先从最干净的环境开始。无论你用的是Windows、Mac还是Linux下面的步骤都能帮你快速搭建起运行环境。2.1 系统要求检查Xinference对系统的要求很低但为了最佳体验我建议操作系统Ubuntu 20.04 / macOS 12 / Windows 10WSL2内存至少8GB运行7B模型建议16GB以上磁盘空间至少20GB可用模型文件会缓存到本地Python版本3.8到3.11都可以如果你用的是Windows强烈建议安装WSL2Windows Subsystem for Linux。因为很多AI相关的工具在Linux环境下更稳定。安装WSL2很简单在PowerShell里运行wsl --install然后重启电脑就行了。2.2 创建独立的Python环境为了避免和系统里已有的Python包冲突我们创建一个专门的环境# 创建虚拟环境 python -m venv xinference-env # 激活环境Linux/macOS source xinference-env/bin/activate # 激活环境Windows xinference-env\Scripts\activate激活后你的命令行提示符前面会出现(xinference-env)表示现在在这个环境里操作。接着更新pip到最新版本pip install --upgrade pip3. 安装Xinference一条命令完成所有依赖Xinference的安装过程非常简单因为它把所有依赖都打包好了。3.1 基础安装直接使用pip安装指定版本pip install xinference1.17.1这个命令会安装Xinference核心包以及所有必要的依赖包括FastAPI和Uvicorn用于提供Web服务Pydantic数据验证GGML相关库模型推理后端其他工具库安装过程大概需要2-3分钟取决于你的网络速度。完成后验证一下是否安装成功xinference --version如果看到输出版本号xinference 1.17.1说明安装成功了。3.2 可选安装GPU支持如果你的机器有NVIDIA显卡可以安装CUDA版本以获得GPU加速pip install xinference[gpu]1.17.1不过即使不装这个Xinference也能在CPU上正常运行只是速度会慢一些。对于初学者我建议先用CPU版本确保一切正常后再考虑GPU优化。4. 启动服务让AI模型在本地跑起来安装完成后我们启动Xinference服务。这是最关键的一步也是整个平台的入口。4.1 启动命令详解在终端里运行xinference start --host 0.0.0.0 --port 9997让我解释一下这几个参数--host 0.0.0.0让服务监听所有网络接口这样你不仅能在本机访问还能在局域网的其他设备上访问--port 9997指定服务端口默认是9997你可以改成其他没被占用的端口启动成功后你会看到类似这样的输出INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:9997 (Press CTRLC to quit)4.2 访问Web管理界面打开浏览器输入http://localhost:9997你就能看到Xinference的Web界面了。第一次打开时界面很简洁主要分三个区域左侧导航栏有Models模型管理、Chat对话测试、Settings设置等选项中间主区域显示当前加载的模型列表现在是空的顶部状态栏显示服务地址和运行状态这个界面就是你的控制中心所有操作都可以在这里完成。4.3 服务管理小技巧如果你想让服务在后台运行关闭终端也不退出可以这样启动# Linux/macOS nohup xinference start --host 0.0.0.0 --port 9997 xinference.log 21 # 查看日志 tail -f xinference.log或者在Windows PowerShell里Start-Process -NoNewWindow -FilePath xinference -ArgumentList start, --host, 0.0.0.0, --port, 99975. 加载第一个模型从零到一的完整过程现在服务跑起来了但还没有模型。我们来加载第一个模型——我推荐从Qwen2-1.5B开始因为它体积小、速度快、中文支持好。5.1 通过Web界面加载最简单的方式在Web界面里点击左上角的Models然后点击右上角的Add Model按钮。在弹出的窗口里你需要填写几个信息Model Type选择LLM语言模型Model Format选择gguf这是Xinference推荐的格式兼容性好Model Size输入1.5表示1.5B参数Model Name输入qwen2-1.5b-instructQuantization保持默认首次使用建议不量化点击Submit后Xinference会自动从Hugging Face下载模型文件。第一次下载需要一些时间大概2-5分钟取决于你的网速。下载完成后模型状态会变成Running你就可以开始使用了。5.2 通过命令行加载适合自动化如果你更喜欢命令行或者需要写脚本自动部署可以用这个命令xinference launch --model-name qwen2-1.5b-instruct --model-type llm这个命令会返回模型的唯一ID和API地址比如Model uid: 01hxyzabc123 Endpoint: http://localhost:9997/v1/chat/completions记下这个Endpoint后面调用API时会用到。5.3 验证模型是否正常工作加载完成后我们做个简单的测试。在Web界面点击Chat在输入框里问个问题比如介绍一下你自己。如果模型正常响应说明一切就绪。你也可以用curl命令测试curl -X POST http://localhost:9997/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2-1.5b-instruct, messages: [ {role: user, content: 你好请用一句话介绍Xinference} ] }如果看到返回的JSON里有模型生成的回答恭喜你第一个本地AI模型已经成功运行了6. 核心功能实战不只是聊天机器人很多人以为Xinference只能做聊天其实它的能力远不止于此。让我带你看看几个实用的功能。6.1 多模型同时运行你可以在同一个Xinference服务里加载多个模型。比如同时加载一个中文模型Qwen处理中文任务一个代码模型CodeLlama处理编程问题一个小模型Phi-3快速响应简单查询加载方法很简单在Web界面多次点击Add Model或者用命令行多次执行xinference launch。每个模型都有独立的API端点你可以根据需求调用不同的模型。6.2 嵌入模型Embedding支持除了生成文本Xinference还支持嵌入模型。这在构建RAG检索增强生成应用时特别有用。加载一个嵌入模型xinference launch --model-name bge-small-zh --model-type embedding然后通过API获取文本的向量表示curl -X POST http://localhost:9997/v1/embeddings \ -H Content-Type: application/json \ -d { model: bge-small-zh, input: 今天天气真好 }返回的向量可以用于相似度计算、聚类分析、语义搜索等任务。6.3 图像理解模型Xinference v1.17.1开始支持多模态模型。虽然当前版本主要聚焦文本但架构已经为图像、语音等多模态能力做好了准备。你可以关注官方更新未来会有更多视觉模型加入。7. 与LangChain集成让现有代码无缝迁移这是Xinference最强大的功能之一——与LangChain的深度集成。如果你已经在用LangChain开发AI应用迁移到本地模型几乎不需要修改代码。7.1 基础集成示例假设你原来用OpenAI的代码是这样的from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate # 原来的OpenAI配置 llm ChatOpenAI( modelgpt-3.5-turbo, api_keyyour-openai-key ) prompt ChatPromptTemplate.from_template(请用中文回答{question}) chain prompt | llm result chain.invoke({question: 什么是机器学习}) print(result.content)要切换到Xinference只需要改两行代码from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate # 改为Xinference配置 llm ChatOpenAI( modelqwen2-1.5b-instruct, # 你加载的模型名 base_urlhttp://localhost:9997/v1, # Xinference的API地址 api_keynot-needed # 本地服务不需要API密钥 ) prompt ChatPromptTemplate.from_template(请用中文回答{question}) chain prompt | llm result chain.invoke({question: 什么是机器学习}) print(result.content)看到了吗除了base_url和model参数其他代码完全一样。这就是OpenAI兼容API的魅力。7.2 高级功能流式输出和函数调用Xinference也支持LangChain的高级特性。流式输出适合需要实时显示的场景from langchain_openai import ChatOpenAI llm ChatOpenAI( modelqwen2-1.5b-instruct, base_urlhttp://localhost:9997/v1, streamingTrue # 启用流式 ) for chunk in llm.stream(请写一首关于春天的诗): print(chunk.content, end, flushTrue)函数调用让模型能使用工具from langchain_openai import ChatOpenAI from langchain_core.tools import tool tool def get_weather(city: str) - str: 获取指定城市的天气 # 这里实现实际的天气查询逻辑 return f{city}的天气是晴天25度 llm ChatOpenAI( modelqwen2-1.5b-instruct, base_urlhttp://localhost:9997/v1, api_keynot-needed ) # 绑定工具到模型 llm_with_tools llm.bind_tools([get_weather]) # 现在模型可以决定何时调用工具 result llm_with_tools.invoke(北京今天天气怎么样) print(result)7.3 实际应用场景让我举几个实际的应用例子看看Xinference LangChain能做什么场景一本地知识库问答# 加载本地文档创建向量索引 from langchain_community.document_loaders import TextLoader from langchain_community.vectorstores import Chroma from langchain_openai import OpenAIEmbeddings # 使用Xinference的嵌入模型 embeddings OpenAIEmbeddings( modelbge-small-zh, base_urlhttp://localhost:9997/v1, api_keynot-needed ) # 加载文档并创建检索器 loader TextLoader(my_document.txt) docs loader.load() vectorstore Chroma.from_documents(docs, embeddings) retriever vectorstore.as_retriever() # 创建问答链 from langchain.chains import RetrievalQA from langchain_openai import ChatOpenAI llm ChatOpenAI( modelqwen2-1.5b-instruct, base_urlhttp://localhost:9997/v1, api_keynot-needed ) qa_chain RetrievalQA.from_chain_type( llmllm, retrieverretriever, chain_typestuff ) # 提问 answer qa_chain.invoke(文档中提到了哪些关键技术) print(answer[result])场景二多步骤推理任务from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser llm ChatOpenAI( modelqwen2-1.5b-instruct, base_urlhttp://localhost:9997/v1, api_keynot-needed ) # 创建多步处理链 analysis_prompt ChatPromptTemplate.from_template( 请分析以下文本的情感倾向 文本{text} 分析结果 ) summary_prompt ChatPromptTemplate.from_template( 根据情感分析结果生成一段总结 分析{analysis} 总结 ) chain ( {analysis: analysis_prompt | llm | StrOutputParser()} | summary_prompt | llm | StrOutputParser() ) result chain.invoke({ text: 这个产品非常好用界面简洁功能强大我非常喜欢 }) print(result)场景三批量处理文档import asyncio from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate llm ChatOpenAI( modelqwen2-1.5b-instruct, base_urlhttp://localhost:9997/v1, api_keynot-needed ) prompt ChatPromptTemplate.from_template(总结以下内容{content}) async def process_documents(documents): 异步处理多个文档 tasks [] for doc in documents: chain prompt | llm task chain.ainvoke({content: doc}) tasks.append(task) results await asyncio.gather(*tasks) return results # 使用示例 documents [文档1内容..., 文档2内容..., 文档3内容...] summaries asyncio.run(process_documents(documents)) for summary in summaries: print(summary.content)8. 生产环境部署建议如果你打算把Xinference用到实际项目中这里有一些建议。8.1 性能优化配置对于生产环境你可以在启动时调整一些参数xinference start \ --host 0.0.0.0 \ --port 9997 \ --log-level WARNING \ # 生产环境减少日志输出 --model-address 0.0.0.0 \ # 模型服务地址 --model-port 9998 \ # 模型服务端口 --workers 4 # 工作进程数根据CPU核心数调整8.2 使用系统服务管理在Linux服务器上建议用systemd管理Xinference服务创建服务文件/etc/systemd/system/xinference.service[Unit] DescriptionXinference AI Model Service Afternetwork.target [Service] Typesimple Useryour_username WorkingDirectory/home/your_username EnvironmentPATH/home/your_username/xinference-env/bin ExecStart/home/your_username/xinference-env/bin/xinference start --host 0.0.0.0 --port 9997 Restartalways RestartSec10 [Install] WantedBymulti-user.target然后启用服务sudo systemctl daemon-reload sudo systemctl enable xinference sudo systemctl start xinference sudo systemctl status xinference # 查看状态8.3 监控和日志Xinference提供了基本的监控接口# 查看服务状态 curl http://localhost:9997/status # 查看已加载模型 curl http://localhost:9997/v1/models # 查看模型详情 curl http://localhost:9997/v1/models/{model_uid}日志文件默认在~/.xinference/logs/目录下你可以定期检查这些日志来发现问题。8.4 安全考虑如果服务需要对外网开放建议使用Nginx做反向代理添加HTTPS设置API密钥认证Xinference支持限制访问IP定期更新到最新版本9. 常见问题与解决方案在实际使用中你可能会遇到一些问题。这里是我总结的常见问题及解决方法。9.1 模型下载太慢国内访问Hugging Face可能比较慢可以设置镜像源# 方法1设置环境变量 export HF_ENDPOINThttps://hf-mirror.com xinference start --host 0.0.0.0 --port 9997 # 方法2在配置文件中设置 # 编辑 ~/.xinference/config.json { huggingface_endpoint: https://hf-mirror.com }9.2 内存不足怎么办如果加载大模型时内存不够可以使用量化版本在模型名后加-q4_0、-q8_0等增加交换空间Linux使用CPU卸载部分计算放到CPU# 加载4位量化版本 xinference launch --model-name qwen2-7b-instruct-q4_0 --model-type llm9.3 服务启动失败检查步骤端口是否被占用netstat -tulpn | grep 9997Python环境是否正确which xinference依赖是否完整pip list | grep xinference查看详细日志xinference start --log-level DEBUG9.4 API调用返回错误常见错误及解决404 Not Found检查模型名是否正确是否已加载503 Service Unavailable模型可能正在加载稍等再试429 Too Many Requests降低请求频率500 Internal Server Error查看服务日志找具体原因10. 总结你的本地AI平台已经就绪走到这里你已经成功搭建了一个完整的本地AI模型平台。让我们回顾一下今天的成果你已经掌握了环境搭建在本地机器上安装和配置Xinference服务启动运行Xinference服务并访问Web管理界面模型管理加载、卸载、切换不同的AI模型API调用通过REST API与模型交互生态集成将Xinference无缝接入LangChain应用生产部署了解如何将系统用于实际项目Xinference带来的核心价值完全掌控数据不出本地模型自己管理成本为零除了电费没有其他费用灵活扩展随时添加新模型随时调整配置生态兼容现有代码几乎不用修改下一步可以做什么尝试更多模型除了Qwen还可以试试Llama、Phi、DeepSeek等构建实际应用用LangChain开发一个真正的AI应用优化性能根据你的硬件调整参数获得最佳性能学习进阶功能探索嵌入模型、多模态模型等高级特性最重要的是你现在有了一个可以随时实验、随时调整的AI开发环境。不用再担心API费用不用再等待网络响应所有的计算都在本地完成。AI开发不应该被云服务商绑定也不应该因为硬件限制而止步。Xinference给了我们一个折中的方案——在享受开源模型强大能力的同时保持完全的自主控制权。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。