一、MiMo API 是什么,为什么选它?

简单来说,MiMo API 是小米自研大模型对外开放的一个程序接口。你可以把它理解为一个无比聪明的“外脑”,通过网络向它提问,它就能返回答案。选择它来搭建服务,主要基于两个考虑:一是接入门槛相对友好,对于个人开发者和学习者,官方通常提供了免费或低成本的测试额度;二是它背后的模型对中文语境的理解和生成能力经过了专门优化,做中文问答服务再合适不过。我们无需关心模型训练、服务器运维这些底层复杂事务,只需要专注于“提问-应答”这个核心逻辑的实现。

二、动手前的关键准备

在敲代码之前,有几项准备工作必须完成,否则服务无法运行。

提示:强烈建议使用环境变量(如 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就会以“小智”的身份和预设的风格来回答,体验会好很多。

六、部署上线与注意事项

本地服务只能在自己的电脑或局域网内使用。要让它能被互联网访问,你需要将其部署到云服务器(如阿里云、腾讯云的轻量应用服务器)上。部署时需注意:

提示:在开发调试阶段,你可以使用 ngrok 这样的内网穿透工具,快速将本地服务临时映射到一个公网地址上,方便测试,无需立刻购买服务器。

七、总结与展望

通过这几步,我们完成了一个从“想法”到“可运行服务”的全过程。核心路径非常清晰:获取凭证 -> 编写调用逻辑 -> 封装成Web接口 -> 优化交互 -> 部署上线。这只是一个起点,你可以基于这个骨架做更多有趣的事情,比如:

动手实践是学习的最佳方式,不妨从运行第一行代码开始,逐步构建属于你自己的智能应用。