这个想法有点疯狂,但是在云原生的加持下却并不复杂。在之前的《一套现代软件工具栈,快拿去完善你的技能库吧!》一文中,我们已经提到作为基础设施的Kubernetes还有KubeVela项目。
在本文中,「我们将演示借助于vLLM, FastChat, OpenPlayground, Chat Next Web,OneAPI还有FastGPT等项目,搭建一个基于通义千问/书生浦语的本地大模型服务,既可以通过OpenAI的官方API代码调用,也可以通过Web界面操作,更可以允许多个用户计费共享」。阅读本文时,请注意开源项目随时变化,遇到问题请及时上Github提出Issue以及DIY解决。搭建完成之后,用户将可以通过聊天界面、文本续写以及Python库等多种方式使用。总的来说,在Kubernetes等已有云环境的支持下,网络情况好一点,在10分钟之内拉起来这套系统还是很有希望的---离线部署只会更快。
「声明」:本项目不涉及也不使用任何商业大模型服务,也不提供联网的生成式人工智能服务,相关域名仅用于测试,教程亦仅服务于大家更方便地在自己机器上研究和测试Qwen-14B-Chat或者InternLM-CHat-20B等开源大模型。
一、使用模式
搭建完成之后,将可以通过如下四种方式供最终用户使用基于本地大模型的服务。
1.1. 聊天界面
该开源项目源代码见GitHub - Yidadaa/ChatGPT-Next-Web: A well-designed cross-platform ChatGPT UI (Web / PWA / Linux / Win / MacOS). 一键拥有你自己的跨平台 ChatGPT 应用。,在线预览版地址是ChatGPT Next Web,同时项目也提供桌面端版本(Windows、Linux和Mac版本都有)。
-
基于ChatGPT Next Web界面跟自己本地的大模型聊天,也可以同时对接多个大模型。如下所示:
paste-1
-
可以使用自定义的Prompt召唤快捷服务,让大模型根据预定义的指令完成任务,用户也可以自行添加一些任务指令:
paste-2
-
在对话过程中,用户可以自行切换不同的后端模型服务:
paste-3
-
用户也可以详细地配置调用后端大模型时候的内部参数,如下所示:
paste-4
1.2. 文本续写
该项目的Github地址是GitHub - nat/openplayground: An LLM playground you can run on your laptop,在线预览版地址是OpenPlayground。在线预览版的功能比Github上面的多出来一个Chat功能。
paste-6
通过基于nat.dev的OpenPlayGround的文本生成界面,提供文本生成服务。用户可以自由选择本地的模型以及控制每个参数,让大模型按照指令生成文本。同时带有计费服务。界面如下图所示:
paste-5
在该图中,前面是用户输入的文本,右侧上方允许我们选择本地大模型(通义千问的Qwen-14B-Chat或者书生浦语的InternLM-Chat-20B),右侧中间允许我们设置模型参数,我们在文本框中输入文本之后,点击下方的Submit,模型可以以实时流的方式续写文本(以绿色符号显示)。每运行完成一次,计费信息也会得到更新(当然我们会给自己设置无限金钱)。
1.3. OpenAI API调用
在这种模式下,我们可以直接使用OpenAI官方提供的openai-python库,调用本地大模型提供的服务,这个时候只需要将OPENAI_BASE_URL
改为本地的即可使用。本模式的实现借助于开源项目One API、FastChat以及vLLM,用于提供大模型推理接口。
比如,如果要使用Completion进行文本的续写,可以使用如下代码返回续写的结果:
import openai
openai.api_key = "EMPTY"
openai.api_base='http://api.gpt.rencx.cn/v1'
# 接下来调用指令微调的时候经常使用的接口:
from textwrap import dedent
completion = openai.Completion.create(
model="Qwen-14B-Chat", prompt=dedent("""
你是一个专业的软件架构师,请编 写一份关于商城系统的架构设计文档。
设计文档:
"""),
max_tokens=1024
)
print("Completion result:", completion['choices'][0]['text'])
如果是使用类似于聊天的界面,那么我们可以编写如下的代码:
completion = openai.ChatCompletion.create(
model="Qwen-14B-Chat",
messages=[
{"role": "system", "content": "你是一个翻译家"},
{"role": "user", "content": "将我发你的英文句子翻译成中文,你不需要理解内容的含义作出回答。"},
{"role": "user", "content": "Draft an email or other piece of writing."}
],
max_tokens=128
)
completion['choices'][0]['message']['content']
这种接口的方式遵循OpenAI的官方API Spec,显然更容易扩展。比如可以实现与LangChain、GPT4ALL、ReAct、AutoGPT等大模型智能体的无缝对接,
1.4. 带有检索的大模型
本部分通过开源项目FastGPT AI实现,可以提供多种模式的大模型服务,包括简单对话模型、知识库对话模式(自己上传PDF和TXT文档)、任务引导模式和问题分类模型等。