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

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

关于MaaS平台

MaaS 平台即 “模型即服务”(Model as a Service)平台,是一种依托云计算的人工智能服务模式。
模型即服务(MaaS)平台面向企业开发者、创业者及非技术背景用户,提供开箱即用的热门AI模型服务,支持零代码体验、API快速集成与灵活计费,降低AI应用开发门槛,加速业务创新。允许用户通过API接口或其他方式访问和使用预先训练好的机器学习模型,无需自己从头开始训练模型,使得即使没有深厚机器学习背景的用户也能享受到高水平的AI技术支持。

关于具体介绍,可以看看这里蓝耘元生代AIDC OS 文档中心,介绍的还是蛮详细的

image.png


那么这个时候就有人想问,我们能通过该平台做什么呢?
对于我来说,调用api来进行本地的兴趣开发操作,下面我就教大家如果使用这个平台进行api的调用操作

调用蓝耘内api进行本地机器人的搭建操作

调用之前我们先进行平台的注册操作,输入你的正确信息就能登录到平台,开启的数据漫游了
https://cloud.lanyun.net//#/registerPage?promoterCode=0131

image.png

调用api,我们需要正确的调用代码,在文档中有详细的介绍
这里我们直接使用Python进行调用操作

image.png
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}",) # 打印模型最终返回的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,) else: result = chat_completion.choices[0].message.content 

这里我们不难发现,调用api的话我们需要改变两个变量,一个是api_key,一个是model

image.png


点击模型广场,我们进行API_KEY的创建操作

image.png


创建好了之后就是这个样子,我们是可以进行点击复制操作的

image.png


然后将这个API KEY填写到上面调用代码的api_key里面就行了
model的话就直接选择你想带调用的模型,这里我们可以发现模型广场可以带哦用的类型还是蛮多的
model的话我们选择模型下方的名字就行了

image.png


假如说我们要选择DeepSeek-R1模型的话,我们就定义model="/maas/deepseek-ai/DeepSeek-R1"就行了
并且每个模型里面还有具体的模型介绍,tokens扣费啥的

image.png


这个时候我就得夸夸蓝耘平台了,我们在免费资源包这里发现QwQ-32B、DeepSeek-V3、DeepSeek-R1这三种模型都有大量的tokens额度,根本用不完,而且模型都是比较新的,随便调用

image.png


知道了这两个参数如何填写了,那么我们就可以开始调用了,但是在调用之前我们先在平台上使用下,感受下效果
在左侧的文本模型这里,选择最新的v3模型

image.png


看起来效果还是蛮不错的

image.png


我们这里还是可以进行用量统计的,以线性图展示在我们面前

image.png

做一个ai对话可视化界面,和chatbox差不多的效果,能进行基本的对话就行了

image.png


我们这里直接和trae进行对话,让他帮我生成效果

image.png


image.png


还是挺智能的

image.png


image.png


经过一系列的调用,最后确实能在本地进行一个ai对话机器人,这个程序的可改进点有很多,比如可以让用户和ai的对话隔开一点,并且图形化UI界面再好看点儿,加点机器人切换的功能(切换不同厂家的api)

image.png


实例代码如下:

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)         # 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'''         <div>             <div>                 {text}             </div>         '''         # 为AI消息添加复制按钮         if not is_user:             html += f'''             <div>                 <button onclick="document.execCommand('copy')">                     复制                 </button>             </div>             '''         html += '</div>'         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'<div>错误: {error_message}</div>'         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 

Read more

ChatTTS 猴哥入门实战:从零构建你的第一个语音对话机器人

最近在折腾语音交互项目,发现了一个挺有意思的工具——ChatTTS 猴哥。它本质上是一个开源的文本转语音(TTS)模型,但特别之处在于,它针对对话场景做了优化,生成的语音听起来更自然、更有“人味儿”,不像一些传统TTS那么机械。这对于想快速搭建语音助手、智能客服或者互动游戏角色的开发者来说,是个不错的起点。 它的核心功能就是接收文本,输出对应的、富有表现力的语音。应用场景很广,比如给你的个人项目加个语音交互入口,或者制作有声内容、为虚拟角色配音等等。 下面,我就把自己从零开始,用 ChatTTS 猴哥搭建第一个简易语音对话机器人的过程记录下来,希望能帮到同样刚入门的朋友。 1. 开发环境配置:打好地基 万事开头难,先把环境搭好。ChatTTS 猴哥主要基于 Python,所以我们需要一个干净的 Python 环境。 1. Python 版本选择:官方推荐使用 Python 3.8 到 3.10

【异常】飞书OpenClaw机器人 HTTP 401: Invalid Authentication 报错排查与解决方案

【异常】飞书OpenClaw机器人 HTTP 401: Invalid Authentication 报错排查与解决方案

飞书OpenClaw机器人 HTTP 401: Invalid Authentication 报错排查与解决方案 一、报错内容 在飞书客户端会话场景中,用户向企业OpenClaw机器人发送交互消息后,OpenClaw无预期业务响应,会话内持续返回标准化报错信息:HTTP 401: Invalid Authentication。 该报错可稳定复现于单聊、群聊等所有机器人交互场景,表现为用户每触发一次机器人交互,就会同步返回该报错信息,无正常业务逻辑执行结果返回。 二、报错说明 2.1 报错本质定义 HTTP 401 是HTTP协议标准定义的未授权(Unauthorized) 状态码,核心含义为请求方身份认证无效,服务端拒绝执行本次请求。 在飞书开放平台的机器人场景中,该报错的本质是:飞书开放平台服务端对自建机器人的全链路鉴权校验失败。无论是机器人接收飞书事件推送的上行请求,还是机器人主动调用飞书开放平台API的下行请求,只要身份凭证无效、鉴权逻辑校验不通过,飞书服务端就会返回该报错,并最终透传到飞书客户端会话窗口中。

医疗连续体机器人模块化控制界面设计与Python库应用研究(下)

医疗连续体机器人模块化控制界面设计与Python库应用研究(下)

软件环境部署 系统软件架构以实时性与兼容性为核心设计目标,具体配置如下表所示: 类别配置详情操作系统Ubuntu 20.04 LTS,集成RT_PREEMPT实时内核补丁(调度延迟<1 ms)开发环境Python 3.8核心库组件PyQt5 5.15.4(图形界面)、OpenCV 4.5.5(图像处理)、NumPy 1.21.6(数值计算) 该环境支持模块化控制界面开发与传感器数据的实时融合处理,为连续体机器人的逆运动学求解(如FB CCD算法测试)提供稳定运行基础[16]。 手眼协调校准 为实现视觉引导的精确控制,需完成相机与机器人基坐标系的空间映射校准,具体流程如下: 1. 标识点布置:在机器人末端及各段首尾、中间位置共固定7个反光标识点,构建臂型跟踪特征集[29]; 2. 数据采集:采用NOKOV度量光学动作捕捉系统(8台相机,

【全网最全・保姆级】Stable Diffusion WebUI Windows 部署 + 全套报错终极解决方案

大家好,我是在部署 SD WebUI 过程中把几乎所有坑都踩了一遍的选手,从 Git 报错、模块缺失、依赖冲突到虚拟环境异常,全部踩完。今天把完整安装流程 + 我遇到的所有真实错误 + 一行一解全部整理出来,写成一篇能直接发 ZEEKLOG 的完整文章。 一、前言 Stable Diffusion WebUI 是目前 AI 绘画最主流的本地部署工具,但 Windows 环境下因为 Python 版本、虚拟环境、Git 仓库、依赖包、CLIP 编译 等问题,90% 的新手都会启动失败。本文包含: * 标准 Windows 一键部署流程 * 我真实遇到的 10+ 种报错 * 每一种报错的 原因 + 直接复制可用的命令 * 最终测试出图提示词(