首页 > 教程攻略 > ai教程 >基于蓝耘MaaS平台进行api调用创建本地智能ai

基于蓝耘MaaS平台进行api调用创建本地智能ai

来源:互联网 时间:2026-06-12 07:24:44

模型即服务(MaaS),这名字听起来可能有点抽象,但说白了就是一种依托云计算的人工智能服务模式。它面向企业开发者、创业者乃至非技术背景的用户,提供开箱即用的热门AI模型服务。核心价值在于:零代码体验、API快速集成、灵活计费——把AI应用开发的门槛降下来,让业务创新反赌一点。用户不需要自己从零训练模型,通过API接口就能调用预训练好的模型,哪怕没有深厚的机器学习背景,也能享受到高水平的AI技术支持。

那么,具体能用这平台做点啥?对于开发者来说,最直接的玩法就是调用API,在本地搞点个人项目或兴趣开发。下面就以实际操作演示一下,如何通过蓝耘MaaS平台完成API调用,搭建一个本地对话机器人。

调用蓝耘API,搭建本地机器人

开始之前,先要注册平台账号。填写正确的信息登录后,就可以开启数据漫游了。

API调用需要正确的代码指引。蓝耘文档里介绍得很详细,这里直接使用Python进行调用。

from openai import OpenAI

# 构造 client
client = 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 字段即可。模型选择也很简单,模型广场里可调用的模型种类相当丰富,直接选择模型下方的名字就行。

例如,要调用DeepSeek-R1模型,就定义 model="/maas/deepseek-ai/DeepSeek-R1"。每个模型页面内都提供了详细说明,包括tokens扣费标准等。

值得一提的是,蓝耘在免费资源包里提供了QwQ-32B、DeepSeek-V3、DeepSeek-R1三种模型的大量tokens额度——对个人开发者来说,基本用不完,而且模型版本都比较新,随便调用。

知道了两个参数怎么填,就可以开始调用了。但在正式编写代码前,不妨先在平台上直接体验一下效果。在左侧的「文本模型」中选择最新的V3模型试试。

效果相当不错。平台还提供了用量统计功能,以线性图形式直观展示。

接下来要做的是:构建一个AI对话可视化界面,效果类似ChatBox,能够进行基本的对话就行。

直接用Trae进行对话,让它帮忙生成界面代码。

智能程度值得肯定。

经过一系列调用,最终确实能在本地跑起来一个AI对话机器人。当然,这个程序还有不少可改进点,比如让用户和AI的对话气泡隔开一些、把图形化UI做得更好看点、再加上机器人切换功能(切换不同厂家的API)。

实例代码如下(基于PyQt6实现):

import sys
from PyQt6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QTextEdit, QPushButton, QHBoxLayout, QLabel, QFrame, QProgressBar
from PyQt6.QtCore import Qt, QThread, pyqtSignal, QSize, QTimer
from PyQt6.QtGui import QClipboard, QMovie
from 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)
        
        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):
        background_color = '#404040' if is_user else '#1a5fb4'
        alignment = 'right' if is_user else 'left'
        html = f'''
            
{text} ''' 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) def display_accumulated_response(self): if not self.accumulated_response.strip(): return 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_key

model

两个变量,就能实现本地调用。相比其他平台,流程和文档都简洁得多,一目了然,响应速度也相当快。

用户不需要深究底层算法和模型细节,照着API文档说明做简单的接口调用,就能利用平台的AI能力。而且蓝耘的API支持多平台使用——无论是Windows、Linux、macOS,还是移动端的iOS、Android,开发者都能顺利集成AI服务。