AiOnly大模型服务实测:从零开始Python调用ChatGPT/Claude API,打造专属AI智能体

AiOnly大模型服务实测:从零开始Python调用ChatGPT/Claude API,打造专属AI智能体

在这里插入图片描述

AiOnly大模型服务实测:从零开始Python调用ChatGPT/Claude API,打造专属AI智能体

本文围绕 AiOnly 一站式 Mass 模型服务平台展开,先介绍其基础概念与服务,平台聚焦降低模型应用门槛,整合全球前沿模型,提供企业级 API 服务,降低成本且支持高并发,可调用多种顶尖大模型。接着详细说明平台注册、免费额度领取及 API 密钥获取步骤,还介绍热门模型功能。随后重点讲解 Python 调用 API 的实战,包括环境准备、基础与进阶调用,以及专属 Python 学习智能体的封装与功能扩展,提及对话和图片理解、入参参数。最后列出常见问题与解决方案,并总结平台优势及进一步开发方向,让你更方便上手。
在这里插入图片描述

一、关于AiOnly

AiOnly大模型

1.1 AiOnly的基础概念

AiOnly是一站式Mass模型服务平台,聚焦降低模型应用门槛,加速场景智能化进程,以一键调用、敏捷开发为核心,整合全球前沿模型,通过标准化API接口与模块化组件,将复杂模型技术转化为可快速集成的“智能积木”。

1.2 AiOnly的模型服务

AiOnly提供企业级API服务,极大降低了海外访问成本,以及模型Token使用成本,同时,平台调用支持高并发,多账号轮询超越原厂水平,并提供了高速专线,可畅享全球顶尖大模型,包括GPT、Claude、Gemini等最新模型,也可在线体验文本/图片/视频大模型的强大性能。

二、AiOnly平台注册与API密钥获取

要调用 AiOnly 的 API,首先需要完成平台注册并获取 API 密钥,这是所有操作的基础,步骤简单无门槛。

2.1 平台注册流程

AiOnly大模型服务
  1. 打开AiOnly官方网站(https://www.aiionly.com/login?inviteCode=0001143),点击右上角“注册”按钮;
  2. 支持手机号或微信、支付宝三种注册方式,输入对应信息后完成验证码验证;
  3. 验证通过后直接登录,自动跳转至平台“控制台”首页。

2.2 领取免费额度与创建API密钥

在这里插入图片描述
  1. 完成注册后即可获得token免费体验额度,可在控制台卡券中心确认,足够完成前期开发测试;
  2. 开通自己想应用的大模型,我这里选择的是GPT-5-Chat ,大家可以根据自己的需求选择对应的模型,然后开通服务。
  3. 点击“新建密钥”,输入密钥名称(如“Python智能体开发”),无需额外配置,直接点击“确认”;

点击左侧菜单栏“API Key”,进入密钥创建页面;

在这里插入图片描述

⚠️ 注意: API密钥是调用接口的核心凭证,请勿分享给他人,避免被恶意使用导致额度消耗或额外费用。

2.3 热门模型免费体验

在 AiOnly 平台,无需复杂配置即可通过国内直连专线免费体验全球顶尖大模型,所有模型共享统一 API 接口,仅需修改model参数即可切换调用。以下为各热门模型的功能介绍与使用说明:

2.3.1 ChatGPT5

作为 OpenAI 旗舰级模型,ChatGPT5 在自然语言理解、逻辑推理与多模态交互能力上实现全面突破。擅长万字级长文本创作与逻辑保持,多轮对话记忆达 15 轮,推理正确率提升至 92%,支持多模态分析与文化适配的精准翻译,适合报告撰写、学术研究等场景。

在线体验:

在这里插入图片描述

AI给的代码效果演示:

在这里插入图片描述
2.3.2 Claude Sonnet 4.5

Anthropic 发布的 Claude Sonnet 4.5 以 “编程与智能体构建标杆” 为定位,多项能力实现行业突破。编码能力突出,SWE-bench 得分达 82%,支持多文件重构与安全敏感场景开发,长文档处理与数学推理能力强,新增工具调用与上下文编辑功能。

在线体验:

在这里插入图片描述

AI给的代码效果演示:

在这里插入图片描述
2.3.3 GPT-5-Codex

GPT-5-Codex 是 OpenAI 专为代码开发场景打造的细分模型系列,按性能梯度分为三个版本,精准适配不同开发需求。分 High/Medium/Low 三版本,覆盖深度学习开发、API 编写到轻量脚本任务,代码生成准确率最高 92%,支持仓库级理解与动态推理,适配不同复杂度开发需求。

在线体验:

在这里插入图片描述

AI给的代码效果演示:

在这里插入图片描述
2.3.4 Grok-4

Grok-4 作为侧重实时信息与个性化交互的模型,以 “敏捷响应与场景适配” 为核心优势。文本模态专用,13 万 token 上下文窗口,推理性能强劲,HLE 得分 44.4% 超同类模型,支持函数调用与结构化输出,擅长实时信息分析与个性化交互。

在线体验:

在这里插入图片描述

AI给的代码效果演示:

在这里插入图片描述
2.3.5 Gemini-2.5 Pro

Google DeepMind 推出的 Gemini-2.5 Pro 以 “多模态融合与高效推理” 为特色,百万级 token 上下文,支持文本、图像等多模态融合处理,推理速度提升 40%,具备结构化输出与 “思考” 功能,适配跨境业务与轻量化部署。

在线体验:

在这里插入图片描述

AI给的代码效果演示:

在这里插入图片描述
2.3.6 更多模型

AiOnly 模型广场持续更新主流模型,免费体验覆盖文本、图像、语音等全场景,国内外主流大模型都有!

在这里插入图片描述

随心切换开通模型,一键应用所有国内外热门模型 ,这点非常nice!

在这里插入图片描述

三、Python调用AiOnly API核心实战(支持ChatGPT/Claude)

AiOnly 的优势在于 “统一接口”—— 无论是调用 ChatGPT 还是 Claude,只需修改 “model” 参数,无需学习不同模型的接口规范。下面先从基础调用开始,再逐步升级到智能体开发。

3.1 环境准备:安装依赖库

首先安装 Python 调用 API 所需的库,官方推荐使用requests(通用 HTTP 请求库),也可使用 AiOnly 官方 SDK,这里以更通用的requests为例:

# 安装 Flask 框架(用于搭建 Web 服务)和 requests(调用 AiOnly API) pip install flask requests 

3.2 chatgpt基础调用:单轮对话(以ChatGPT为例)

单轮对话适用于简单的 “一问一答” 场景,比如查询某个知识点、生成一段文本。代码如下,每一行都附带详细注释:

import requests # -------------------------- 1. 配置核心参数 --------------------------# 替换为你在AiOnly平台获取的API密钥 API_KEY ="你的AiOnly API密钥"# AiOnly API的基础地址(固定不变) BASE_URL ="https://api.aionly.com/v1/chat/completions"# 选择要调用的模型:ChatGPT-3.5可填"gpt-3.5-turbo",Claude-3可填"claude-3-sonnet-20240229" TARGET_MODEL ="gpt-5-chat"# -------------------------- 2. 构造请求数据 --------------------------# messages参数:存储对话内容,每个元素包含"role"(角色)和"content"(内容)# role可选值:user(用户)、assistant(AI助手)、system(系统,用于定义AI角色) request_data ={"model": TARGET_MODEL,"messages":[# 系统提示:定义AI的身份和回答规则(这是打造智能体的关键第一步){"role":"system","content":"你是一个专业的Python编程助手,回答需包含完整代码和详细注释,语言简洁易懂"},# 用户问题:实际需要AI处理的需求{"role":"user","content":"请写一个Python函数,实现列表去重功能"}],"temperature":0.6# 随机性控制:0-1之间,值越小回答越稳定,值越大创造力越强}# -------------------------- 3. 构造请求头 --------------------------# 必须包含Authorization(身份验证)和Content-Type(数据格式) request_headers ={"Authorization":f"Bearer {API_KEY}","Content-Type":"application/json"}# -------------------------- 4. 发送请求并解析结果 --------------------------try:# 发送POST请求(AiOnly API仅支持POST方式) response = requests.post( url=BASE_URL, json=request_data,# 自动将Python字典转为JSON格式 headers=request_headers, timeout=30# 超时时间:避免请求卡住,根据需求调整)# 检查请求是否成功(状态码200表示成功)if response.status_code ==200:# 解析返回的JSON数据 result = response.json()# 提取AI的回复内容(固定从choices[0].message.content获取) ai_reply = result["choices"][0]["message"]["content"]print("Python编程助手回复:")print(ai_reply)else:# 请求失败时,打印错误信息 error_info = response.json()print(f"API调用失败!错误原因:{error_info['error']['message']}")except Exception as e:# 捕获网络异常等其他错误print(f"程序运行出错:{str(e)}")

运行效果:

在这里插入图片描述

3.3 chatgpt进阶调用:多轮对话(实现上下文记忆)

智能体需要具备 “上下文记忆” 能力,比如用户先问 “如何读取 Excel”,再问 “如何筛选其中的数据”,AI 能关联上一轮对话。核心逻辑是保存历史对话记录,每次请求时将完整历史传入 API,代码如下:

import requests # 基础配置(与单轮对话一致) API_KEY ="你的AiOnly API密钥" BASE_URL ="https://api.aionly.com/v1/chat/completions" TARGET_MODEL ="gpt-5-chat"# 切换为Claude模型# -------------------------- 关键:初始化对话历史 --------------------------# 存储所有轮次的对话,包括system提示、用户输入、AI回复 conversation_history =[{"role":"system","content":"你是Python编程助手,需基于上一轮对话内容回答,避免重复,代码需可运行"}]defget_ai_response(user_question):""" 调用AiOnly API获取AI回复,并更新对话历史 :param user_question: 用户当前的问题 :return: AI的回复内容 """# 1. 将用户当前问题添加到对话历史 conversation_history.append({"role":"user","content": user_question})# 2. 构造请求数据(messages传入完整对话历史) request_data ={"model": TARGET_MODEL,"messages": conversation_history,"temperature":0.5}# 3. 发送请求 request_headers ={"Authorization":f"Bearer {API_KEY}","Content-Type":"application/json"}try: response = requests.post(BASE_URL, json=request_data, headers=request_headers, timeout=30)if response.status_code ==200: ai_reply = response.json()["choices"][0]["message"]["content"]# 4. 将AI回复添加到对话历史(用于下一轮上下文关联) conversation_history.append({"role":"assistant","content": ai_reply})return ai_reply else:returnf"调用失败:{response.json()['error']['message']}"except Exception as e:returnf"运行出错:{str(e)}"# -------------------------- 测试多轮对话 --------------------------if __name__ =="__main__":print("Python编程助手(输入'退出'结束对话):你好!有什么Python问题可以帮你?")whileTrue: user_input =input("你:")if user_input.lower()in["退出","exit"]:print("Python编程助手:再见!")break# 调用函数获取AI回复并打印 ai_answer = get_ai_response(user_input)print(f"Python编程助手:{ai_answer}")

可以持续提问,并回答。

在这里插入图片描述

四、打造专属Python学习智能体:功能封装与场景扩展

前面的代码已经实现了基础对话能力,接下来我们将其封装成一个可复用的 “智能体类”,并扩展功能(如支持模型切换、对话记录保存),让智能体更贴近实际使用场景。

4.1 智能体类封装(可直接复用)

智能体类是整个系统的核心,我们将所有与 AI 交互相关的功能封装在PythonLearningAgent类中,使其具备高内聚、低耦合的特性,方便后续维护和扩展。里面包含各种热门国外大模型,也可以根据自己的需求自定义添加 。

"gpt-5-chat": "GPT-5 Chat", "claude-sonnet-4.5": "Claude Sonnet 4.5", "gpt-5-codex": "GPT-5 Codex", "grok-4": "Grok-4", "gemini-2.5-flash": "Gemini 2.5 Flash" 

完整代码(安装上面依赖,可以直接使用)

from flask import Flask, request, jsonify, render_template_string, session from flask_cors import CORS from flask_session import Session import requests import json from datetime import datetime import uuid import os from functools import wraps # 配置文件加载classConfig: SECRET_KEY = os.environ.get('SECRET_KEY', 'dev-secret-key-123456') SESSION_TYPE = 'filesystem' SESSION_FILE_DIR = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'sessions') AI_API_KEY = os.environ.get('AI_API_KEY', '填写 自己的 APK') AI_BASE_URL ="https://api.aionly.com/v1/chat/completions" MAX_RETRIES =2 TIMEOUT =30# 初始化Flask服务 app =Flask(__name__) app.config.from_object(Config)CORS(app, supports_credentials=True)Session(app)# 会话管理装饰器defrequire_session(f): @wraps(f)defdecorated_function(*args,**kwargs):if 'user_id' notin session: session['user_id']=str(uuid.uuid4()) session['agents']={}returnf(*args,**kwargs)return decorated_function # 智能体核心类封装classAiOnlyWebAgent:def__init__(self, api_key, base_url): self.api_key = api_key self.base_url = base_url self.supported_models ={"gpt-5-chat":"GPT-5 Chat","claude-sonnet-4.5":"Claude Sonnet 4.5","gpt-5-codex":"GPT-5 Codex","grok-4":"Grok-4","gemini-2.5-flash":"Gemini 2.5 Flash"} self.default_model ="gpt-5-chat" self.conversation_history =[{"role":"system","content":"你是专业智能助手,回答精准简洁,代码需带注释"}] self.max_history_length =20 # 限制历史记录长度 defget_response(self, user_question, temperature=0.6, max_retries=2):# 限制对话历史长度,防止请求过大iflen(self.conversation_history)> self.max_history_length: self.conversation_history =[self.conversation_history[0]]+ self.conversation_history[-self.max_history_length +1:] self.conversation_history.append({"role":"user","content": user_question}) request_data ={"model": self.default_model,"messages": self.conversation_history,"temperature": temperature } headers ={"Authorization": f"Bearer {self.api_key}","Content-Type":"application/json"}for attempt inrange(max_retries +1):try: resp = requests.post( self.base_url, json=request_data, headers=headers, timeout=app.config['TIMEOUT'])if resp.status_code ==200: ai_reply = resp.json()["choices"][0]["message"]["content"] self.conversation_history.append({"role":"assistant","content": ai_reply})return{"status":"success","reply": ai_reply,"model": self.supported_models[self.default_model]}else: error_msg = f"AiOnly API错误:{resp.json().get('error', {}).get('message', '未知错误')}"if attempt < max_retries:continue # 重试 return{"status":"fail","error": error_msg} except requests.exceptions.Timeout: error_msg = f"请求超时(第{attempt + 1}次尝试)" except requests.exceptions.ConnectionError: error_msg = f"连接错误(第{attempt + 1}次尝试)" except Exception ase: error_msg = f"系统错误:{str(e)}"if attempt < max_retries:continuereturn{"status":"fail","error": error_msg}defswitch_model(self, model_key):if model_key in self.supported_models: self.default_model = model_key return{"status":"success","current_model": self.supported_models[model_key]}else:return{"status":"fail","error":"不支持该模型,请选择下拉框中的选项"}defclear_history(self): self.conversation_history =[{"role":"system","content":"你是专业智能助手,回答精准简洁,代码需带注释"}]return{"status":"success","msg":"对话历史已清空"}# 获取当前用户的智能体实例defget_current_agent(): user_id = session['user_id']ifuser_idnotin session['agents']: session['agents'][user_id]=AiOnlyWebAgent( api_key=app.config['AI_API_KEY'], base_url=app.config['AI_BASE_URL'])return session['agents'][user_id]# 接口1:获取前端页面 @app.route("/")defindex():# 使用原始字符串(在字符串前加r)避免转义序列警告 html_content = r''' <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Python智能体对话</title><script src="https://cdn.tailwindcss.com"></script><link href="https://cdn.jsdelivr.net/npm/[email protected]/css/font-awesome.min.css" rel="stylesheet"><style>.chat-scrollbar::-webkit-scrollbar { width: 6px;}.chat-scrollbar::-webkit-scrollbar-thumb { background: #d1d5db; border-radius: 3px;}.chat-scrollbar::-webkit-scrollbar-thumb:hover { background: #9ca3af;}.code-block { background-color: #f7f7f7; border-radius: 6px; padding: 1em; overflow-x: auto; font-family: monospace; margin: 1em 0;}</style></head><body class="bg-gray-100 min-h-screen flex flex-col"><!-- 顶部导航栏 --><header class="bg-white shadow-md py-4 px-6 flex justify-between items-center"><h1 class="text-2xl font-bold text-blue-600 flex items-center"><i class="fa fa-robot mr-3"></i> Python学习智能体对话 </h1><div class="flex items-center gap-4"><!-- 模型切换下拉框 --><div class="relative"><select id="model-select"class="appearance-none bg-gray-50 border border-gray-300 rounded-lg py-2 px-4 pr-8 focus:outline-none focus:ring-2 focus:ring-blue-500"><optionvalue="gpt-5-chat">GPT-5 Chat</option><optionvalue="claude-sonnet-4.5">Claude Sonnet 4.5</option><optionvalue="gpt-5-codex">GPT-5 Codex</option><optionvalue="grok-4">Grok-4</option><optionvalue="gemini-2.5-flash">Gemini 2.5 Flash</option></select><div class="pointer-events-none absolute inset-y-0 right-0 flex items-center px-2 text-gray-700"><i class="fa fa-chevron-down text-xs"></i></div></div><!-- 清空对话按钮 --><button id="clear-btn"class="bg-red-50 text-red-600 border border-red-200 rounded-lg py-2 px-4 hover:bg-red-100 transition-colors flex items-center"><i class="fa fa-trash-o mr-2"></i>清空对话 </button></div></header><!-- 中间对话区域 --><main class="flex-1 container mx-auto px-4 py-6 max-w-4xl"><div id="chat-container"class="bg-white rounded-xl shadow-md h-[70vh] flex flex-col overflow-hidden"><!-- 对话历史区域 --><div id="chat-history"class="flex-1 p-6 overflow-y-auto chat-scrollbar space-y-6"><!-- 初始欢迎消息 --><div class="flex items-start gap-3"><div class="w-10 h-10 rounded-full bg-blue-100 flex items-center justify-center flex-shrink-0"><i class="fa fa-robot text-blue-600"></i></div><div class="bg-gray-50 rounded-lg px-4 py-3 max-w-[80%]"><p class="text-gray-800">你好!我是Python智能体,相关python问题我都能帮你解决,有什么可以帮你的?</p><p class="text-xs text-gray-500 mt-1">当前模型:GPT-5 Chat</p></div></div></div><!-- 输入区域 --><div class="border-t border-gray-100 p-4 bg-gray-50"><form id="chat-form"class="flex gap-3"><textarea id="user-input" placeholder="请输入你的问题...(支持代码、文案、推理等需求)"class="flex-1 border border-gray-300 rounded-lg px-4 py-3 focus:outline-none focus:ring-2 focus:ring-blue-500 resize-none min-h-[60px] max-h-[120px]"></textarea><button type="submit" id="send-btn"class="bg-blue-600 text-white rounded-lg px-6 py-3 hover:bg-blue-700 transition-colors flex items-center justify-center"><i class="fa fa-paper-plane mr-2"></i>发送 </button></form><p id="status-text"class="text-xs text-gray-500 mt-2 text-right">支持Enter键发送,Shift+Enter换行</p></div></div></main><!-- 底部版权信息 --><footer class="bg-white py-3 px-6 text-center text-gray-500 text-sm"><p>Powered by AiOnly | 国内直连全球大模型</p></footer><script>// 后端接口基础地址const BASE_URL ="";// DOM元素const chatForm = document.getElementById("chat-form");const userInput = document.getElementById("user-input");const chatHistory = document.getElementById("chat-history");const modelSelect = document.getElementById("model-select");const clearBtn = document.getElementById("clear-btn");const sendBtn = document.getElementById("send-btn");const statusText = document.getElementById("status-text");// 格式化消息内容,特别是代码块functionformatMessage(content){// 处理代码块,使用原始字符串避免转义问题let formatted = content.replace(/```([\s\S]*?)```/g,(match, code)=>{// 提取语言类型const langMatch = code.match(/^(\w+)\n/);let lang = '';let codeContent = code;if(langMatch){ lang = langMatch[1]; codeContent = code.slice(langMatch[0].length);}return `<div class="code-block"><pre><code${lang ? ` class="language-${lang}"` : ''}>${escapeHtml(codeContent)}</code></pre></div>`;});// 处理换行 formatted = formatted.replace(/\n/g, '<br>');return formatted;}// HTML转义functionescapeHtml(unsafe){returnunsafe.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g, "&quot;").replace(/'/g,"&#039;");}// 发送消息函数asyncfunctionsendMessage(){const content = userInput.value.trim();if(!content)return;// 1. 清空输入框并禁用按钮(防止重复发送) userInput.value=""; sendBtn.disabled =true; sendBtn.innerHTML = '<i class="fa fa-spinner fa-spin mr-2"></i>发送中'; statusText.textContent ="AI正在思考...";// 2. 添加用户消息到对话区const userMsgHtml = ` <div class="flex items-start gap-3 justify-end"><div class="bg-blue-500 text-white rounded-lg px-4 py-3 max-w-[80%]"><p>${formatMessage(content)}</p></div><div class="w-10 h-10 rounded-full bg-gray-200 flex items-center justify-center flex-shrink-0"><i class="fa fa-user text-gray-600"></i></div></div> `; chatHistory.insertAdjacentHTML("beforeend", userMsgHtml); chatHistory.scrollTop = chatHistory.scrollHeight;// 3. 调用后端接口获取AI回复try{const resp =awaitfetch(`${BASE_URL}/api/chat`,{ method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",// 支持跨域会话 body: JSON.stringify({ content: content })});const data =await resp.json();// 4. 添加AI回复到对话区let aiMsgHtml ="";if(data.status ==="success"){ aiMsgHtml = ` <div class="flex items-start gap-3"><div class="w-10 h-10 rounded-full bg-blue-100 flex items-center justify-center flex-shrink-0"><i class="fa fa-robot text-blue-600"></i></div><div class="bg-gray-50 rounded-lg px-4 py-3 max-w-[80%]"><p>${formatMessage(data.reply)}</p><p class="text-xs text-gray-500 mt-1">当前模型:${data.model}</p></div></div> `; statusText.textContent ="回复完成,可继续提问";}else{ aiMsgHtml = ` <div class="flex items-start gap-3"><div class="w-10 h-10 rounded-full bg-red-100 flex items-center justify-center flex-shrink-0"><i class="fa fa-exclamation-circle text-red-600"></i></div><div class="bg-red-50 rounded-lg px-4 py-3 max-w-[80%]"><p class="text-red-600">${data.error}</p></div></div> `; statusText.textContent ="请求失败,请重试";} chatHistory.insertAdjacentHTML("beforeend", aiMsgHtml); chatHistory.scrollTop = chatHistory.scrollHeight;}catch(err){// 5. 处理网络错误const errorHtml = ` <div class="flex items-start gap-3"><div class="w-10 h-10 rounded-full bg-red-100 flex items-center justify-center flex-shrink-0"><i class="fa fa-exclamation-circle text-red-600"></i></div><div class="bg-red-50 rounded-lg px-4 py-3 max-w-[80%]"><p class="text-red-600">网络错误,请检查连接后重试</p></div></div> `; chatHistory.insertAdjacentHTML("beforeend", errorHtml); chatHistory.scrollTop = chatHistory.scrollHeight; statusText.textContent ="网络错误,请重试";}finally{// 6. 恢复按钮状态 sendBtn.disabled =false; sendBtn.innerHTML = '<i class="fa fa-paper-plane mr-2"></i>发送';}}// 切换模型函数asyncfunctionswitchModel(modelKey){try{const resp =awaitfetch(`${BASE_URL}/api/switch-model`,{ method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body: JSON.stringify({ model_key: modelKey })});const data =await resp.json();if(data.status ==="success"){ statusText.textContent = `已切换至${data.current_model},可继续提问`;// 添加模型切换提示到对话区const tipHtml = ` <div class="flex justify-center my-2"><span class="bg-gray-100 text-gray-600 text-xs px-3 py-1 rounded-full"> 已切换模型:${data.current_model}</span></div> `; chatHistory.insertAdjacentHTML("beforeend", tipHtml); chatHistory.scrollTop = chatHistory.scrollHeight;}else{ statusText.textContent = data.error;}}catch(err){ statusText.textContent ="模型切换失败,请重试";}}// 清空对话历史函数asyncfunctionclearChat(){if(chatHistory.children.length <=1){ statusText.textContent ="对话历史已为空";return;}if(!confirm("确定要清空所有对话历史吗?"))return;try{const resp =awaitfetch(`${BASE_URL}/api/clear-history`,{ method:"POST",credentials:"include"});const data =await resp.json();if(data.status ==="success"){// 保留初始欢迎消息,清空其他const welcomeMsg = chatHistory.firstElementChild; chatHistory.innerHTML =""; chatHistory.appendChild(welcomeMsg); statusText.textContent ="对话历史已清空";}}catch(err){ statusText.textContent ="清空失败,请重试";}}// 绑定事件 chatForm.addEventListener("submit",(e)=>{ e.preventDefault();sendMessage();}); modelSelect.addEventListener("change",(e)=>{switchModel(e.target.value);}); clearBtn.addEventListener("click", clearChat); userInput.addEventListener("keydown",(e)=>{if(e.key ==="Enter"&&!e.shiftKey){ e.preventDefault();sendMessage();}});</script></body></html> ''' returnrender_template_string(html_content)# 接口2:处理聊天请求 @app.route("/api/chat", methods=["POST"]) @require_session defchat():try: data = request.get_json() user_content = data.get("content")ifnot user_content:returnjsonify({"status":"fail","error":"请输入消息内容"}) agent =get_current_agent() result = agent.get_response( user_content, max_retries=app.config['MAX_RETRIES'])returnjsonify(result) except Exception ase:returnjsonify({"status":"fail","error": f"服务器内部错误:{str(e)}"})# 接口3:切换模型 @app.route("/api/switch-model", methods=["POST"]) @require_session defswitch_model():try: data = request.get_json() model_key = data.get("model_key")ifnot model_key:returnjsonify({"status":"fail","error":"请选择模型"}) agent =get_current_agent() result = agent.switch_model(model_key)returnjsonify(result) except Exception ase:returnjsonify({"status":"fail","error": f"服务器内部错误:{str(e)}"})# 接口4:清空对话历史 @app.route("/api/clear-history", methods=["POST"]) @require_session defclear_history():try: agent =get_current_agent() result = agent.clear_history()returnjsonify(result) except Exception ase:returnjsonify({"status":"fail","error": f"服务器内部错误:{str(e)}"})# 启动服务if __name__ =="__main__":# 确保会话目录存在ifnot os.path.exists(app.config['SESSION_FILE_DIR']): os.makedirs(app.config['SESSION_FILE_DIR'], exist_ok=True)# 开发环境配置 app.run(host="0.0.0.0", port=5000, debug=True)

4.2 实现功能(热门模型在线使用)

基于上述智能体类,我们可以快速构建一个完整的 Python 学习辅助系统,包含以下核心功能:

在这里插入图片描述
  1. 场景化对话能力针对 Python 学习场景优化了系统提示,使智能体能够:
  • 结合示例解释语法
  • 提供带注释的代码
  • 分步骤讲解复杂概念
  • 根据用户水平调整讲解深度
  1. 模型切换机制提供 4 种针对性模型,满足不同学习需求:
  • 通用对话模型:适合 Python 基础概念学习
  • 代码专项模型:适合编程实践和调试
  • 文档理解模型:适合解读官方文档和技术文章
  • 快速响应模型:适合语法查询和快捷问答
  1. 对话管理功能
  • 自动截断过长对话历史,保证响应速度
  • 支持手动清空对话,重新开始学习
  • 可将重要对话保存为 JSON 文件,方便复习
  1. 错误处理机制完善的异常捕获和错误提示,包括:
  • API 请求失败处理
  • 网络连接错误提示
  • 无效操作的友好提示

4.3 对话/图片理解

描述图像中的内容或者对其进行分类打标,如识别人物、地点、花鸟鱼虫等。

文本生成所需的输入(提示或Prompt)可以是简单的关键词、一句话概述或是更复杂的指令和上下文信息。文本生成模型通过分析大量现有数据,学习语言模式,广泛应用于以下领域:

内容创作:自动生成新闻报道、商品介绍、短视频脚本等。
客户服务:在聊天机器人中应用,提供24小时客服支持,解答常见问题。
文本翻译:快速准确地将文本从一种语言翻译成另一种语言。
摘要生成:为长篇文章、报告、客户邮件自动生成摘要。
法律文档编写:自动化生成合同模板、法律意见书的基础框架

4.4 入参参数说明

参数名称参数解释必填参数类型
model模型IDString
messages“聊天上下文信息(详细参数请参照下列Messages参数说明)
提供的array类型的消息列表,包含从头到尾的对话历史”
数组
max_tokens本次请求返回的最大 Token 数integer
temperature“说明:
1.影响模型输出多样性,模型已有默认参数,不传值时使用各模型推荐值,不推荐用户修改。
2.取值区间为[0.0,2.0]。较高的数值会使输出更加多样化和不可预测,而较低的数值会使其更加集中和确定。”
float
top_p“说明:
1.影响输出文本的多样性。模型已有默认参数,不传值时使用各模型推荐值,不推荐用户修改。
2.取值区间为[0.0,1.0]。取值越大,生成文本的多样性越强。”
float
stream“是否流式接口(boolean类型)
true流式接口
false非流式接口
若不传值默认false”
boolean
thinking“是否开启思考(boolean类型)
true开启
false不开启
不同模型针对思考模型会自动开启或关闭,如需手动控制,请手动设置”
boolean

五、常见问题与解决方案

在调用API和开发智能体过程中,可能会遇到一些问题,这里整理了高频问题及解决方案:

常见问题可能原因解决方案
API调用返回“Invalid API key”1. API密钥填写错误;2. 密钥已过期1. 重新核对密钥,确保无多余空格;2. 登录AiOnly控制台检查密钥状态,过期则重新创建
回复内容与智能体角色不符system提示不够明确,未清晰定义AI职责优化system提示,例如补充“禁止回答与Python无关的问题”“代码必须包含异常处理”
多轮对话上下文丢失未将历史对话完整传入messages参数确保每次请求时,messages包含从初始化到当前轮次的所有对话记录(参考2.3节代码)
调用超时(timeout错误)网络波动或模型处理复杂请求耗时较长1. 延长timeout参数(如设为60秒);2. 将复杂需求拆分为多个简单问题,分轮次提问
免费额度快速耗尽1. 频繁调用大模型(如GPT-4);2. 单次请求输入/输出文本过长1. 开发测试阶段优先使用GPT-3.5或Claude-Haiku(消耗token更少);2. 精简输入内容,避免冗余描述

六、总结

通过本文教程,你已经掌握了AiOnly模型服务的核心使用流程:从平台注册获取密钥,到用Python实现基础API调用,再到封装专属智能体。AiOnly的高速专线解决了海外模型的网络问题,统一API降低了多模型切换的学习成本,非常适合国内开发者快速落地AI应用。

如果你想进一步提升智能体能力,可尝试集成前端页面(如用Flask+HTML打造可视化界面)、对接数据库实现对话持久化,或接入企业内部系统实现定制化需求。快去AiOnly平台注册体验(https://www.aiionly.com/login?inviteCode=0001143),开启你的智能体开发之旅吧!

💎现在可以免费体验,联系博主 ,还能额外领取大量体验!让ChatGPT、Claude等更多热门大模型,随时可用。

如果在开发过程中遇到任何问题,欢迎在评论区留言交流,也可以分享你的智能体应用场景,一起探讨更多可能性~

联系博主

    xcLeigh 博主,全栈领域优质创作者,博客专家,目前,活跃在ZEEKLOG、微信公众号、小红书、知乎、掘金、快手、思否、微博、51CTO、B站、腾讯云开发者社区、阿里云开发者社区等平台,全网拥有几十万的粉丝,全网统一IP为 xcLeigh。希望通过我的分享,让大家能在喜悦的情况下收获到有用的知识。主要分享编程、开发工具、算法、技术学习心得等内容。很多读者评价他的文章简洁易懂,尤其对于一些复杂的技术话题,他能通过通俗的语言来解释,帮助初学者更好地理解。博客通常也会涉及一些实践经验,项目分享以及解决实际开发中遇到的问题。如果你是开发领域的初学者,或者在学习一些新的编程语言或框架,关注他的文章对你有很大帮助。

    亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。

     愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。

    至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。


     💞 关注博主 🌀 带你实现畅游前后端!

     🥇 从零到一学习Python 🌀 带你玩转Python技术流!

     🏆 人工智能学习合集 🌀 搭配实例教程与实战案例,帮你构建完整 AI 知识体系

     💦 :本文撰写于ZEEKLOG平台,作者:xcLeigh所有权归作者所有)https://xcleigh.blog.ZEEKLOG.net/,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。


在这里插入图片描述

     📣 亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(或者关注下方公众号,看见后第一时间回复,还有海量编程资料等你来领!),博主看见后一定及时给您答复 💌💌💌

Read more

《算法题讲解指南:优选算法-位运算》--33.判断字符是否唯一,34.丢失的数字

《算法题讲解指南:优选算法-位运算》--33.判断字符是否唯一,34.丢失的数字

🔥小叶-duck:个人主页 ❄️个人专栏:《Data-Structure-Learning》 《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心 ✨未择之路,不须回头 已择之路,纵是荆棘遍野,亦作花海遨游 目录 位运算基础前置知识: 位1的个数 比特位计数 汉明距离 只出现一次的数字 只出现一次的数字||| 34. 判断字符是否唯一 题目链接: 题目描述: 题目示例: 解法(位图的思想): 算法思路: C++算法代码: 算法总结及流程解析: 35. 丢失的数字 题目链接: 题目描述: 题目示例: 解法(位运算): 算法思路: C++算法代码: 算法总结及流程解析: 结束语 位运算基础前置知识:       回顾了上面位运算基础前置的知识这里有五道非常简单的题可以试试手,都是考察位运算的题目: 位1的个数 191.

By Ne0inhk
《并查集:算法中的高效集合操作利器》:一文带你掌握并查集数据结构

《并查集:算法中的高效集合操作利器》:一文带你掌握并查集数据结构

系列文章目录 文章目录 * 系列文章目录 * 一、认识并查集 * 1.并查集的定义 * 2.基本概念 * 2.1.集合的表示 * 2.2.合并操作 * 2.3.查询操作 * 3.基本操作 * 3.1初始化 * 3.2.查找 * 3.3.合并 * 4.优化技巧 * 4.1.路径压缩 * 4.2.按秩合并 * 5.代码完整实例 * 6.应用场景 * 6.1.图的连通性 * 6.2.社交网络分析 * 6.3.动态连通性问题 * 7.

By Ne0inhk
使用 Python + Bright Data MCP 实时抓取 Google 搜索结果:完整实战教程(含自动化与集成)

使用 Python + Bright Data MCP 实时抓取 Google 搜索结果:完整实战教程(含自动化与集成)

免责声明:此篇文章所有内容皆是本人实验,并非广告推广,并非抄袭。如果有人运用此技术犯罪,本人及平台不承担任何刑事责任。如有侵权,请联系。 引言:为什么 AI 应用需要实时网页数据? 在 AI 应用和智能代理(Agent)的开发中,实时性数据往往是决定效果的关键。以 LLM 智能体为例,它们的推理能力高度依赖实时上下文——比如用户问“2025 年最新 AI 趋势是什么”,静态的训练数据无法提供最新答案,必须接入实时网页数据才能给出准确回应。 但传统的网页数据获取方式存在明显痛点:自建爬虫不仅要处理复杂的反爬机制(如 IP 封禁、验证码),还要维护代理池和动态网页渲染逻辑,长期维护成本极高,且很难做到实时响应。 而 Bright Data 的 Web MCP Server(Model Context Protocol Server)正好可以解决这些问题:

By Ne0inhk
【动态规划篇】专题(六):子序列问题——不连续的艺术

【动态规划篇】专题(六):子序列问题——不连续的艺术

文章目录 * LIS 模型及其衍生:回头看,全是风景 * 一、 前言:从 O(N) 到 O(N²) * 二、 最长递增子序列 (Medium) * 2.1 题目描述 * 2.2 核心思路:LIS 模型 * 2.3 代码实现 * 三、 摆动序列 (Medium) * 3.1 题目描述 * 3.2 状态定义:波峰与波谷 * 3.3 代码实现 * 四、 最长递增子序列的个数 (Medium) * 4.1 题目描述 * 4.2 双重状态 * 4.

By Ne0inhk