基于蓝耘MaaS平台进行api调用创建本地智能ai
关于MaaS平台
MaaS 平台即 “模型即服务”(Model as a Service)平台,是一种依托云计算的人工智能服务模式。
模型即服务(MaaS)平台面向企业开发者、创业者及非技术背景用户,提供开箱即用的热门AI模型服务,支持零代码体验、API快速集成与灵活计费,降低AI应用开发门槛,加速业务创新。允许用户通过API接口或其他方式访问和使用预先训练好的机器学习模型,无需自己从头开始训练模型,使得即使没有深厚机器学习背景的用户也能享受到高水平的AI技术支持。
关于具体介绍,可以看看这里蓝耘元生代AIDC OS 文档中心,介绍的还是蛮详细的
那么这个时候就有人想问,我们能通过该平台做什么呢?
对于我来说,调用api来进行本地的兴趣开发操作,下面我就教大家如果使用这个平台进行api的调用操作
调用蓝耘内api进行本地机器人的搭建操作
调用之前我们先进行平台的注册操作,输入你的正确信息就能登录到平台,开启的数据漫游了
https://cloud.lanyun.net//#/registerPage?promoterCode=0131
调用api,我们需要正确的调用代码,在文档中有详细的介绍
这里我们直接使用Python进行调用操作
from openai import OpenAI# 构造 clientclient = OpenAI( api_key=\"sk-xxxxxxxxxxx\", # APIKey base_url=\"https://maas-api.lanyun.net/v1\",)# 流式stream = True# 请求chat_completion = client.chat.completions.create( model=\"/maas/deepseek-ai/DeepSeek-R1\", messages=[ { \"role\": \"user\", \"content\": \"你是谁\", } ], stream=stream,)if stream: for chunk in chat_completion: # 打印思维链内容 if hasattr(chunk.choices[0].delta, \'reasoning_content\'): print(f\"{chunk.choices[0].delta.reasoning_content}\", end=\"\") # 打印模型最终返回的content if hasattr(chunk.choices[0].delta, \'content\'): if chunk.choices[0].delta.content != None and len(chunk.choices[0].delta.content) != 0: print(chunk.choices[0].delta.content, end=\"\")else: result = chat_completion.choices[0].message.content
这里我们不难发现,调用api的话我们需要改变两个变量,一个是api_key,一个是model
点击模型广场,我们进行API_KEY的创建操作
创建好了之后就是这个样子,我们是可以进行点击复制操作的
然后将这个API KEY填写到上面调用代码的api_key里面就行了
model的话就直接选择你想带调用的模型,这里我们可以发现模型广场可以带哦用的类型还是蛮多的
model的话我们选择模型下方的名字就行了
假如说我们要选择DeepSeek-R1模型的话,我们就定义model=\"/maas/deepseek-ai/DeepSeek-R1\"就行了
并且每个模型里面还有具体的模型介绍,tokens扣费啥的
这个时候我就得夸夸蓝耘平台了,我们在免费资源包这里发现QwQ-32B、DeepSeek-V3、DeepSeek-R1这三种模型都有大量的tokens额度,根本用不完,而且模型都是比较新的,随便调用
知道了这两个参数如何填写了,那么我们就可以开始调用了,但是在调用之前我们先在平台上使用下,感受下效果
在左侧的文本模型这里,选择最新的v3模型
看起来效果还是蛮不错的
我们这里还是可以进行用量统计的,以线性图展示在我们面前
做一个ai对话可视化界面,和chatbox差不多的效果,能进行基本的对话就行了
我们这里直接和trae
进行对话,让他帮我生成效果
还是挺智能的
经过一系列的调用,最后确实能在本地进行一个ai对话机器人,这个程序的可改进点有很多,比如可以让用户和ai的对话隔开一点,并且图形化UI界面再好看点儿,加点机器人切换的功能(切换不同厂家的api)
实例代码如下:
import sysfrom PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QTextEdit, QPushButton, QHBoxLayout, QLabel, QFrame, QProgressBarfrom PyQt6.QtCore import Qt, QThread, pyqtSignal, QSize, QTimerfrom PyQt6.QtGui import QClipboard, QMoviefrom openai import OpenAI class ChatWorker(QThread): response_received = pyqtSignal(str) reasoning_received = pyqtSignal(str) error_occurred = pyqtSignal(str) def __init__(self, api_key, base_url, messages): super().__init__() self.api_key = api_key self.base_url = base_url self.messages = messages def run(self): try: client = OpenAI( api_key=self.api_key, base_url=self.base_url ) chat_completion = client.chat.completions.create( model=\"/maas/deepseek-ai/DeepSeek-V3\", messages=self.messages, stream=True ) for chunk in chat_completion: if hasattr(chunk.choices[0].delta, \'reasoning_content\'): self.reasoning_received.emit(chunk.choices[0].delta.reasoning_content) if hasattr(chunk.choices[0].delta, \'content\'): if chunk.choices[0].delta.content: self.response_received.emit(chunk.choices[0].delta.content) except Exception as e: self.error_occurred.emit(str(e)) class ChatWindow(QMainWindow): def __init__(self): super().__init__() self.is_sending = False self.initUI() def initUI(self): self.setWindowTitle(\'AI对话界面\') self.setGeometry(100, 100, 800, 600) # 设置主窗口样式 self.setStyleSheet(\"\"\" QMainWindow { background-color: #2b2b2b; } \"\"\") # 创建主窗口部件和布局 central_widget = QWidget() self.setCentralWidget(central_widget) main_layout = QVBoxLayout(central_widget) main_layout.setSpacing(15) main_layout.setContentsMargins(20, 20, 20, 20) # 创建滚动区域用于显示对话历史 self.chat_history = QTextEdit() self.chat_history.setReadOnly(True) self.chat_history.setStyleSheet(\"\"\" QTextEdit { background-color: #363636; border: 1px solid #404040; border-radius: 10px; padding: 15px; color: #ffffff; } \"\"\") main_layout.addWidget(self.chat_history, stretch=2) # 思维链显示区域 self.reasoning_display = QTextEdit() self.reasoning_display.setReadOnly(True) self.reasoning_display.setStyleSheet(\"\"\" QTextEdit { background-color: #323232; border: 1px solid #404040; border-radius: 10px; padding: 15px; color: #b4b4b4; font-size: 13px; } \"\"\") main_layout.addWidget(self.reasoning_display, stretch=1) # 输入区域 input_layout = QHBoxLayout() input_layout.setSpacing(10) self.input_field = QTextEdit() self.input_field.setMaximumHeight(100) self.input_field.setStyleSheet(\"\"\" QTextEdit { background-color: #363636; border: 1px solid #404040; border-radius: 8px; padding: 8px; color: #ffffff; } \"\"\") input_layout.addWidget(self.input_field) # 发送按钮和状态指示器布局 send_status_layout = QHBoxLayout() send_status_layout.setSpacing(5) # 发送按钮 self.send_button = QPushButton(\'发送\') self.send_button.setStyleSheet(\"\"\" QPushButton { background-color: #4a9eff; border: none; border-radius: 8px; padding: 8px 20px; color: white; font-weight: bold; } QPushButton:hover { background-color: #3b8be6; } QPushButton:pressed { background-color: #3178cc; } QPushButton:disabled { background-color: #666666; } \"\"\") self.send_button.clicked.connect(self.send_message) send_status_layout.addWidget(self.send_button) # 加载动画 self.loading_label = QLabel() self.loading_movie = QMovie(\"loading.gif\") self.loading_movie.setScaledSize(QSize(20, 20)) self.loading_label.setMovie(self.loading_movie) self.loading_label.hide() send_status_layout.addWidget(self.loading_label) input_layout.addLayout(send_status_layout) main_layout.addLayout(input_layout) # OpenAI API配置 self.api_key = \"sk-3bjomhlbnrnx2utxzi7yw26i62cvnlx6bnecxv3gchq75o2y\" self.base_url = \"https://maas-api.lanyun.net/v1\" def send_message(self): if self.is_sending: return user_message = self.input_field.toPlainText().strip() if not user_message: return # 设置发送状态 self.is_sending = True self.send_button.setEnabled(False) self.loading_label.show() self.loading_movie.start() # 清空输入框和思维链显示 self.input_field.clear() self.reasoning_display.clear() # 显示用户消息 message_html = self.create_message_bubble(user_message, is_user=True) cursor = self.chat_history.textCursor() cursor.movePosition(cursor.MoveOperation.End) cursor.insertHtml(message_html) # 准备消息 messages = [ { \"role\": \"user\", \"content\": user_message } ] # 创建并启动工作线程 self.worker = ChatWorker(self.api_key, self.base_url, messages) self.worker.response_received.connect(self.handle_response) self.worker.reasoning_received.connect(self.handle_reasoning) self.worker.error_occurred.connect(self.handle_error) self.worker.start() def create_message_bubble(self, text, is_user=True): # 创建消息容器的HTML background_color = \'#404040\' if is_user else \'#1a5fb4\' alignment = \'right\' if is_user else \'left\' # 构建消息HTML html = f\'\'\' {text} \'\'\' # 为AI消息添加复制按钮 if not is_user: html += f\'\'\' \'\'\' html += \'\' return html def handle_response(self, response): # 如果是第一次收到响应,初始化累积变量和计时器 if not hasattr(self, \'accumulated_response\'): self.accumulated_response = \'\' self.response_timer = QTimer() self.response_timer.setSingleShot(True) self.response_timer.timeout.connect(self.display_accumulated_response) # 累积响应内容 self.accumulated_response += response # 重置计时器(每收到新内容就重置等待时间) self.response_timer.start(1000) # 1秒后如果没有新内容,则显示累积的内容 def display_accumulated_response(self): if not self.accumulated_response.strip(): return # 创建并插入AI回复气泡 message_html = self.create_message_bubble(self.accumulated_response, is_user=False) cursor = self.chat_history.textCursor() cursor.movePosition(cursor.MoveOperation.End) cursor.insertHtml(message_html) # 滚动到底部 self.chat_history.verticalScrollBar().setValue( self.chat_history.verticalScrollBar().maximum() ) # 重置累积变量和发送状态 self.accumulated_response = \'\' self.is_sending = False self.send_button.setEnabled(True) self.loading_label.hide() self.loading_movie.stop() def handle_reasoning(self, reasoning): self.reasoning_display.insertPlainText(reasoning) def handle_error(self, error_message): error_html = f\'错误: {error_message}\' self.chat_history.append(error_html) # 重置发送状态 self.is_sending = False self.send_button.setEnabled(True) self.loading_label.hide() self.loading_movie.stop() def main(): app = QApplication(sys.argv) window = ChatWindow() window.show() sys.exit(app.exec()) if __name__ == \'__main__\': main()
总结
针对蓝耘的api调用操作,确实很方便,因为我们只需要改变两个变量就可以实现本地的调用操作,相较于之前使用其他平台的api,没有那么复杂的流程和文档,一眼就能看明白怎么回事,这个相应的速度也是相当的快的
用户无需深入钻研复杂的底层算法和模型细节,仅需按照 API 文档说明,进行简单的接口调用操作,就能利用平台强大的 AI 技术。
并且蓝耘平台的 API 支持多平台使用,无论是常见的 Windows、Linux、macOS 操作系统,还是移动端的 iOS 和 Android 系统,开发者都能顺利集成平台的 AI 服务
是否有我说的这么厉害呢?感兴趣的同学赶紧来试试吧
https://cloud.lanyun.net//#/registerPage?promoterCode=0131