一、MiMo 简介:为什么用它来搭建问答服务?

MiMo 是小米公司自研的大语言模型系列,其中 MiMo-MoE-Chat 是一个专门为对话场景优化的模型。选择它来搭建我们的智能问答服务,主要有两个原因:首先,它针对中文和对话进行了深度优化,在理解用户意图和生成流畅回答方面表现优秀;其次,它提供了稳定且易于使用的 API 接口,让我们能快速将强大的 AI 能力集成到自己的应用中,而无需从头训练模型。

与直接使用开源模型本地部署相比,调用 API 的方式更轻量、免去了复杂的环境配置和算力成本,非常适合个人开发者或小型项目快速验证想法。我们的目标就是利用这个 API,构建一个能接收用户问题、并返回智能回答的 Web 服务。

二、准备工作:获取钥匙与搭建环境

在开始编写代码之前,我们需要完成两项关键准备:获取 API 密钥和安装必要的开发库。

  1. 获取 API 密钥:访问小米开放平台或 MiMo 官方文档指定的开发者门户,注册账号并创建应用,以申请 API Key。这个密钥相当于你调用 API 的“身份证”和“密码”,请务必妥善保管,不要泄露在公开的代码或文档中。
  2. 安装 Python 库:我们将使用 Python 的 requests 库来发送 HTTP 请求。在你的项目环境中,运行以下命令进行安装:
pip install requests
提示:建议在虚拟环境中进行开发,以避免包版本冲突。同时,将 API Key 存储在环境变量或单独的配置文件中,而不是直接硬编码在代码里,这是一个重要的安全实践。

三、核心实现:发送第一个问题

准备工作就绪,我们来编写第一个能调用 MiMo API 的 Python 脚本。核心逻辑是向模型的 API 端点发送一个 HTTP POST 请求,请求体中包含你的问题(即 prompt)。

下面是一个最简单的示例代码,它向 MiMo-MoE-Chat 模型询问“什么是API?”,并打印出模型的回答。

import requests
import json
from config import API_KEY  # 假设你从单独的配置文件导入了密钥

# API 端点 (请以官方文档为准)
API_URL = "https://api.mimo.xiaomi.com/v1/chat/completions"

# 构造请求头
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}"
}

# 构造请求体,这是最关键的部分
data = {
    "model": "MiMo-MoE-Chat",  # 指定使用的模型
    "messages": [
        {
            "role": "user",  # 发送消息的角色是用户
            "content": "请用简单易懂的语言解释一下,什么是API?"  # 用户的具体问题
        }
    ],
    "temperature": 0.7,  # 控制回答的创造性,值越高越随机
    "max_tokens": 500    # 控制回答的最大长度
}

# 发送请求并获取响应
response = requests.post(API_URL, headers=headers, json=data)
response_json = response.json()

# 解析并打印回答
if response.status_code == 200:
    answer = response_json['choices'][0]['message']['content']
    print("MiMo 的回答是:", answer)
else:
    print("请求出错,状态码:", response.status_code, "错误信息:", response_json)

四、解码请求与响应:消息格式详解

从上面的代码可以看到,请求体中的 messages 是一个列表,这是与模型进行多轮对话的关键。它记录了对话的历史上下文。每个消息对象包含两个字段:

当你第一次调用时,只需放入一个 user 消息。如果想进行连续对话,你需要将完整的对话历史(包括 userassistant 的消息交替放入列表)一起发送给 API,这样模型才能理解上下文。响应 response_json['choices'] 是一个列表,因为我们通常只请求一个回答(通过参数控制),所以取第一个元素 [0] 即可。

五、进阶优化:构建一个简单的交互式问答循环

为了让服务更实用,我们可以将它包装成一个简单的命令行交互程序,让用户可以不断提问,直到主动退出。

def chat_with_mimo():
    """一个简单的交互式问答函数"""
    conversation_history = []
    print("欢迎使用 MiMo 智能问答服务!输入 ‘退出’ 结束对话。")

    while True:
        user_input = input("\n你: ")
        if user_input.lower() in ['退出', 'exit', 'quit']:
            print("感谢使用,再见!")
            break

        # 将用户问题加入历史
        conversation_history.append({"role": "user", "content": user_input})

        # 发送包含完整历史记录的请求
        data["messages"] = conversation_history
        response = requests.post(API_URL, headers=headers, json=data)

        if response.status_code == 200:
            assistant_reply = response.json()['choices'][0]['message']['content']
            print("MiMo:", assistant_reply)
            # 将助手的回答也加入历史,为下一轮对话做准备
            conversation_history.append({"role": "assistant", "content": assistant_reply})
        else:
            print("发生错误,请重试。")
            # 发生错误时,移除最后一条用户消息,保持历史干净
            conversation_history.pop()

if __name__ == "__main__":
    chat_with_mimo()
提示:在实际的 Web 服务中,对话历史(conversation_history)需要存储在服务器端的会话(Session)或数据库中,并与每个用户的会话ID关联,以实现多个用户同时独立地进行多轮对话。

六、部署上线:从脚本到服务

一个命令行程序已经成型,但要把它变成一个真正的“服务”,让其他人也能通过网页或客户端使用,我们需要将其包装成一个 Web API。

七、总结与展望

我们已经走完了用 MiMo API 搭建智能问答服务的完整流程:从了解模型、获取密钥,到编写核心调用代码、实现交互循环,最后规划了将其部署为正式服务的思路。

关键要点回顾

  1. API 密钥安全是第一要务。
  2. 0 列表是管理上下文、实现多轮对话的核心。
  3. 从脚本到服务,会话管理是必须考虑的关键问题。

这个基础服务还可以有很多有趣的扩展方向,比如:

动手实践是学习 API 最快的方式,快打开编辑器,开始构建你自己的第一个 AI 应用吧!