如何构建大模型聊天服务:深度剖析aliendao的aiitchat.py源码(ChatGLM-6b+Qwen-7b双模型路由) 📅 发布时间:2026/8/22 13:30:46 👁 浏览次数: 如何构建大模型聊天服务深度剖析aliendao的aiitchat.py源码ChatGLM-6bQwen-7b双模型路由【免费下载链接】aliendaohuggingface mirror download项目地址: https://gitcode.com/gh_mirrors/al/aliendaoaliendao 是一个开源的大模型聊天服务与 Hugging Face 模型镜像下载工具。本文带你从零理解如何用 Python 搭建自己的大模型聊天服务并深度剖析 aiitchat.py 中ChatGLM-6b 与 Qwen-7b 双模型路由的核心实现新手也能看懂。 项目概览aliendao 能做什么aliendao 由两部分组成正好覆盖「模型获取 模型服务」两大环节模块作用关键文件模型下载从镜像下载 Hugging Face 模型/数据集支持断点续传model_download.py聊天服务调用国产大模型提供 Web 聊天界面aiitchat/aiitchat.py先下载模型再部署服务这是构建大模型聊天服务最典型的流程# 带 --mirror 参数优先从镜像下载解决下载慢的问题 python model_download.py --repo_id Qwen/Qwen-7B 模型下载的详细用法见项目说明README.md 快速上手3 步跑起大模型聊天服务第 1 步创建 Python 虚拟环境并安装依赖conda create -n aliendao python3.10 -y conda activate aliendao pip install -r requirements.txt依赖清单很轻量核心就是 requirements.txt 里的 aiohttp 与 requests 等。第 2 步启动聊天服务后端nohup python -u aiitchat.py aiitchat.log 21 tail -f aiitchat.log第 3 步启动 React 聊天前台cd aiitchat/chat npm start三步完成你就拥有了一个支持 ChatGLM-6b 和通义千问 Qwen-7b 双模型切换的 Web 聊天服务。 源码剖析aiitchat.py 如何处理一次请求打开 aiitchat/aiitchat.py整个后端不到 100 行结构非常清晰敏感词过滤 → 模型路由 → 结果包装 → 返回 JSON。1️⃣ 请求入口一个 API 搞定所有对话服务基于 aiohttp 框架只注册了一个 POST 路由/api/stream/v2app.router.add_post(/api/stream/v2, stream_v2)前端每次提问都会带上token、context包含 prompt 和历史对话与modelname三个参数服务统一在 stream_v2 函数 中处理。2️⃣ 敏感词过滤对话前的第一道关卡模型回答之前会先经过filter_context函数检查。敏感词从本地的filter.txt文件按行加载并缓存到内存只读一次文件命中任一敏感词就直接返回 403 提示不再消耗宝贵的 GPU 算力if filter_context(prompt): return web.Response( content_typeapplication/json, textjson.dumps({response: 请更换问题重新输入, status: 403, stop: True}), )这是一个很实用的工程技巧把校验放在昂贵操作之前。3️⃣ 核心路由一行 if 切换两大国产大模型这是整个文件的灵魂所在aiitchat.py 第 64-67 行if modelname Qwen-7b: result getAnswerFromQwen7b_v2(context) else: result getAnswerFromChatGLM6b_v2(context, validtoken)路由规则一目了然Qwen-7b通义千问→ 调用 Qwen_7b.py 中的getAnswerFromQwen7b_v2固定转发到千问推理服务其他默认 ChatGLM-6b→ 调用 ChatGLM_6b.py 中的getAnswerFromChatGLM6b_v2根据 token 是否有效二次分流到不同的推理节点这种「一个入口 按模型名分发」的路由设计就是多模型服务最简实现范式你完全可以照搬。4️⃣ Token 验证与算力不足兜底checkToken 函数 负责校验用户 token验证结果会传给 ChatGLM 模块用于选择不同算力的推理地址两个模型模块都有统一的错误兜底当推理服务返回非 200 时不会让服务崩溃而是返回友好提示return {response: 算力不足请稍候再试[stop], history: [], status: 200, time: now}响应末尾的[stop]标记用于告知前端「回答已生成完毕」前端据此停止轮询无效 token 的回答会追加[无效token]标记这套「兜底 结束标记」机制让聊天服务在高负载下依然稳定。 前端配合React 聊天页如何轮询前台是基于 ChatUI 的 React 应用源码在 aiitchat/chat/src/App.js。它的设计很值得学习双模型一键切换快捷回复按钮「ChatGLM2 / 通义千问」只需改变全局变量modelname的取值请求就自动路由到对应模型轮询式生成onGenCode函数通过递归轮询后端接口直到stop标记返回并用进度条展示生成状态多轮对话只保留最近 5 条历史对话随请求携带兼顾上下文记忆与请求体积体验细节回答支持 Markdown 渲染、生成中禁止重复提问、提供历史记录面板 核心文件清单文件说明aiitchat/aiitchat.py聊天服务后端入口路由、过滤、鉴权aiitchat/ChatGLM_6b.pyChatGLM-6b 模型调用模块aiitchat/Qwen_7b.py通义千问 Qwen-7b 模型调用模块aiitchat/chat/src/App.jsReact 聊天前台含模型切换与轮询逻辑aiitchat/chat/README.md前台部署说明model_download.py模型镜像下载脚本requirements.txtPython 依赖清单✅ 总结大模型聊天服务的最小构建范式通读 aiitchat.py 源码构建一个可用的大模型聊天服务其实只需要 4 个关键要素轻量 API 网关一个 aiohttp POST 接口承接所有对话请求模型路由层按modelname将请求分发到不同大模型的推理服务防护机制敏感词过滤 token 鉴权 算力不足兜底前端轮询渲染React 页面轮询结果直到收到[stop]结束标记配合 aliendao 自带的模型镜像下载能力你甚至不需要复杂的基础设施就能快速拥有自己的国产大模型聊天服务。动手试试吧【免费下载链接】aliendaohuggingface mirror download项目地址: https://gitcode.com/gh_mirrors/al/aliendao创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考