本内容用于创建一个简单的大模型助手,可以从模型官网调用api,并进行简单的角色设定。这里我调用的是通义千问的api。本内容仅为个人笔记记录。

API及密钥获取

进入阿里云官网,在大模型部分点击体验,登录,如果是第一次使用的话目前通义的模型送有免费额度。

登陆后左边框部分会出现密钥管理选项,进入该选项,并创建密钥。新用户可以领取年费额度,如果需要在免费额度用完后立即停止使用模型,可以在左上角红框部分点击更多信息的链接,进入后可以看到免费额度用完即停设置方式的提示,可以根据提示进行设置。

在左上角红框附近点击API参考,即可进入API相关内容的界面,由此可以进一步了解有关设置。

智能助手构建

为了方便使用,只是单纯的调用难以满足灵活性和可用性,所以在这里将代码进行抽象,为智能助手构建一个专门的类。

导入所需模块

import os
from openai import OpenAI
import json

构建类

class Miya:
    """
    这是 Miya 智能助手的类。
    """
    def __init__(self, key_path: str, model: str = 'qwen-plus', sys_content: str = "You are a helpful assistant."):
        self.key_path = key_path
        self.model = model
        self.sys_content = sys_content

    def get_key(self) -> str:
        """
        从文件中读取 API 密钥
        """
        if not os.path.exists(self.key_path):
            raise FileNotFoundError(f"API key file not found: {self.key_path}")
        with open(self.key_path, 'r', encoding='utf-8') as file:
            key = file.read().strip()
        return key

    def build_client(self) -> OpenAI:
        """
        构建 OpenAI 客户端
        """
        return OpenAI(
            api_key=self.get_key(),
            base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 替换为正确端点
        )

    def response(self, content: str):
        """
        发送请求并获取响应
        """
        try:
            client = self.build_client()
            completion = client.chat.completions.create(
                model=self.model,
                messages=[
                    {"role": "system", "content": self.sys_content},
                    {"role": "user", "content": content},
                ],
                # extra_body={"enable_thinking": False},
            )
            return completion
        except Exception as e:
            raise RuntimeError(f"API 请求失败: {str(e)}")

    def chatbox(self, content: str) -> str:
        """
        处理用户输入并返回结果
        """
        try:
            completion = self.response(content)
            if completion.choices:
                return completion.choices[0].message.content
            else:
                return "API 返回无结果。"
        except FileNotFoundError as e:
            return f"密钥文件未找到:{str(e)}"
        except Exception as e:
            return f"请求失败:{str(e)}"

编写调用类的主函数

from alice import Miya
path = r"你的密钥存储路径/密钥.txt"

miya = Miya(path,sys_content="你需要扮演一个可爱的喵娘,和你对话的是你的主人哦!")

while True:
    message = input("【停止请输入quit】我:")
    if message == 'quit':
        break
    else:
        responce = alice.chatbox(message)
    print(responce)

代码中的 base_url请参考官网上的API参考部分的示例代码,将密钥保存在一个较为隐秘的地方,通过路径来调用可以避免密钥直接显示。密钥需要保存为txt格式,在主函数中的 path部分输入密钥的完整路径。另外,使用from导入Miya类的时候,注意python模块导入的一些细节(具体可以问AI)。

结果演示

可以导航到所在代码的路径,然后打开终端,使用python 程序.py 运行主程序,就可以和及其助手聊天了。如果想让Miya扮演不同的角色,可以构建Miya实例是时候写入想要的sys_content的值。

如果需要停止,可以输入quit停止。

【注意:每次对话都是独立进行的,助手无法保留上下文记忆。如需实现记忆功能,请参考我博客中的补充说明。】

更多推荐