一、MiMo API 是什么,为什么选它?
简单来说,MiMo API 是小米自研大模型对外开放的一个程序接口。你可以把它理解为一个无比聪明的“外脑”,通过网络向它提问,它就能返回答案。选择它来搭建服务,主要基于两个考虑:一是接入门槛相对友好,对于个人开发者和学习者,官方通常提供了免费或低成本的测试额度;二是它背后的模型对中文语境的理解和生成能力经过了专门优化,做中文问答服务再合适不过。我们无需关心模型训练、服务器运维这些底层复杂事务,只需要专注于“提问-应答”这个核心逻辑的实现。
二、动手前的关键准备
在敲代码之前,有几项准备工作必须完成,否则服务无法运行。
- 获取API密钥:访问MiMo的开发者平台,注册账号并创建一个应用。成功后,你会得到一个独一无二的
API Key(有时也称为Secret)。这是你调用服务的凭证,必须像保护密码一样保护它,切勿公开到GitHub等代码仓库。 - 确定开发环境:我们将使用Python,因为它简单且库资源丰富。确保你的电脑上安装了Python 3.8或更高版本。
- 安装必要的库:我们将使用
requests库来发送网络请求。在终端或命令行中,运行pip install requests来安装。
提示:强烈建议使用环境变量(如 os.getenv())或专门的配置文件来管理你的API Key,而不是直接硬编码在代码里。这样更安全,也便于在不同环境(开发、测试、生产)中切换。
三、核心代码:发送请求与获取回答
一切就绪,让我们来编写第一个能调用MiMo API的Python脚本。这个脚本的目标是:我们输入一个“问题”,程序把它发给MiMo,然后打印出“回答”。
import requests
import json
import os
# 从环境变量获取API密钥,更安全!
API_KEY = os.getenv('MIMO_API_KEY')
# MiMo API的对话接口地址(具体地址请参考官方最新文档)
API_URL = "https://open.mi.com/api/v1/chat/completions"
def ask_mimo(question):
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_KEY}"
}
# 构建请求体,包含模型选择和对话历史(这里我们只用单轮对话)
data = {
"model": "MiMo-8B-Chat", # 指定模型版本,根据文档选择
"messages": [
{"role": "user", "content": question} # 用户的问题
]
}
try:
response = requests.post(API_URL, headers=headers, json=data, timeout=30)
response.raise_for_status() # 如果响应状态码不是200,会抛出异常
result = response.json()
# 从返回结果中提取AI的回答
answer = result['choices'][0]['message']['content']
return answer.strip()
except requests.exceptions.RequestException as e:
return f"请求出错: {e}"
except (KeyError, IndexError) as e:
return f"解析回答出错,请检查返回格式。错误: {e}"
# 主程序循环
if __name__ == "__main__":
print("智能问答服务已启动,输入‘退出’结束对话。")
while True:
user_input = input("我:")
if user_input.lower() in ['退出', 'quit', 'exit']:
print("服务已停止。")
break
if not user_input.strip():
continue
response = ask_mimo(user_input)
print(f"AI:{response}\n")
四、将脚本变成“服务”的关键一步
上述脚本是一个本地命令行程序。要让它成为一个可被其他应用或网页调用的“服务”,我们需要给它加一个Web接口。这里我们使用轻量级的Flask框架来快速实现。首先,pip install flask。
然后,在原有代码基础上进行改造:
from flask import Flask, request, jsonify
app = Flask(__name__)
# 复用之前定义的ask_mimo函数
@app.route('/ask', methods=['POST'])
def api_ask():
data = request.get_json()
if not data or 'question' not in data:
return jsonify({"error": "缺少‘question’字段"}), 400
question = data['question']
answer = ask_mimo(question)
return jsonify({"answer": answer})
if __name__ == '__main__':
# host='0.0.0.0' 允许局域网访问,port可自定义
app.run(host='0.0.0.0', port=5000, debug=True)
运行这个Flask应用后,你的智能问答服务就以一个Web API的形式在本地 http://你的IP:5000 上跑起来了。任何程序都可以通过向 /ask 端点发送一个包含 {"question": "你好"} 的JSON请求来获取答案。
五、让回答更聪明:优化Prompt的艺术
直接把用户问题丢给模型,得到的答案可能比较呆板。我们可以通过构建一个精心设计的 Prompt(提示词) 来引导模型生成更符合预期的回答。在构建请求的 data 时,可以加入一条“系统消息”来设定AI的角色。
例如,修改 ask_mimo 函数中的 data 部分:
data = {
"model": "MiMo-8B-Chat",
"messages": [
{
"role": "system",
"content": "你是一个知识渊博且耐心的技术助手,名叫‘小智’。请用清晰、简洁的中文回答用户的技术问题,并在必要时举例说明。"
},
{"role": "user", "content": question}
]
}
这样,AI就会以“小智”的身份和预设的风格来回答,体验会好很多。
六、部署上线与注意事项
本地服务只能在自己的电脑或局域网内使用。要让它能被互联网访问,你需要将其部署到云服务器(如阿里云、腾讯云的轻量应用服务器)上。部署时需注意:
- 安全性:务必使用HTTPS来保护通信,并妥善保管你的API Key。
- 并发与成本:如果做成公开服务,需考虑多人同时请求的并发处理,以及API调用可能产生的费用。
- 错误处理:在生产环境中,需要更健壮的错误处理和日志记录机制,方便排查问题。
提示:在开发调试阶段,你可以使用 ngrok 这样的内网穿透工具,快速将本地服务临时映射到一个公网地址上,方便测试,无需立刻购买服务器。
七、总结与展望
通过这几步,我们完成了一个从“想法”到“可运行服务”的全过程。核心路径非常清晰:获取凭证 -> 编写调用逻辑 -> 封装成Web接口 -> 优化交互 -> 部署上线。这只是一个起点,你可以基于这个骨架做更多有趣的事情,比如:
- 接入微信公众号,打造一个聊天机器人。
- 制作一个网页,为前端用户提供友好的问答界面。
- 存储对话历史,实现多轮连续对话,让AI能记住上下文。
动手实践是学习的最佳方式,不妨从运行第一行代码开始,逐步构建属于你自己的智能应用。