AI接入IOS快捷方式实现语音对话记录
作者:微信文章最近Deepseek很火,本也想注册个API玩一玩,结果平台因负载过大,关闭了充值通道
。
那就用Kimi的api测试吧
,看了2个平台的文档都差不多,都是基于openai的消息框架。一、多轮对话测试官网文档地址:https://platform.moonshot.cn/docs/intro直接按照官方文档复制就行,主要有几点要注意:
上下文长度控制:随着 chat 调用次数的不断增多,messages 列表的长度也在不断增加,这意味着每次请求所消耗的 Tokens 数量也在不断增加,并且最终会在某个时间点,messages 中的消息所占用的 Tokens 超过了 Kimi 大模型支持的上下文窗口大小。平台推荐使用一定的策略来保持 messages 列表的消息数量在一个可控的范围内,例如,每次只保留最新的 20 条消息作为本次请求的上下文。
Model类型:moonshot-v1-8k,长度为 8k 的模型,适用于生成短文本。moonshot-v1-32k,长度为 32k 的模型,适用于生成长文本。moonshot-v1-128k,长度为 128k 的模型,适用于生成超长文本。
Temperature:这个参数可以告诉机器如何在质量和多样性之间进行权衡。较低的 temperature 意味着更高的内容质量,而较高的 temperature 意味着更高的内容多样性。
from openai import OpenAI
client = OpenAI( api_key="sk-HNiW**************************O9r9f",# 在这里将 MOONSHOT_API_KEY 替换为你从 Kimi 开放平台申请的 API Key base_url="https://api.moonshot.cn/v1",)
# 我们将 System Messages 单独放置在一个列表中,这是因为每次请求都应该携带 System Messagessystem_messages = [ {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},]
# 我们定义一个全局变量 messages,用于记录我们和 Kimi 大模型产生的历史对话消息# 在 messages 中,既包含我们向 Kimi 大模型提出的问题(role=user),也包括 Kimi 大模型给我们的回复(role=assistant)# messages 中的消息按时间顺序从小到大排列messages = []
def make_messages(input: str, n: int = 20) -> list: global messages """ 使用 make_messaegs 控制每次请求的消息数量,使其保持在一个合理的范围内,例如默认值是 20。在构建消息列表 的过程中,我们会先添加 System Prompt,这是因为无论如何对消息进行截断,System Prompt 都是必不可少 的内容,再获取 messages —— 即历史记录中,最新的 n 条消息作为请求使用的消息,在大部分场景中,这样 能保证请求的消息所占用的 Tokens 数量不超过模型上下文窗口。 """ # 首先,我们将用户最新的问题构造成一个 message(role=user),并添加到 messages 的尾部 messages.append({ "role": "user", "content": input, })
# new_messages 是我们下一次请求使用的消息列表,现在让我们来构建它 new_messages = []
# 每次请求都需要携带 System Messages,因此我们需要先把 system_messages 添加到消息列表中; # 注意,即使对消息进行截断,也应该注意保证 System Messages 仍然在 messages 列表中。 new_messages.extend(system_messages)
# 在这里,当历史消息超过 n 条时,我们仅保留最新的 n 条消息 if len(messages) > n: messages = messages[-n:]
new_messages.extend(messages) return new_messages
def chat(input: str) -> str: """ chat 函数支持多轮对话,每次调用 chat 函数与 Kimi 大模型对话时,Kimi 大模型都会”看到“此前已经 产生的历史对话消息,换句话说,Kimi 大模型拥有了记忆。 """
# 携带 messages 与 Kimi 大模型对话 completion = client.chat.completions.create( model="moonshot-v1-32k", messages=make_messages(input), temperature=0.3, )
# 通过 API 我们获得了 Kimi 大模型给予我们的回复消息(role=assistant)
assistant_message = completion.choices.message
# 为了让 Kimi 大模型拥有完整的记忆,我们必须将 Kimi 大模型返回给我们的消息也添加到 messages 中 messages.append(assistant_message)
return assistant_message.content测试多轮对话:
二、创建服务接口本地创建一个 user_list.json 的用户列表,用户接入验证。[{ "user": "张三", "key": "12a34"},{ "user": "李四", "key": "56a78"}]创建Flask调用接口。from flask import Flask, request, jsonifyimport jsonfrom main import chat
app = Flask(__name__)app.json.ensure_ascii = False # 设定不将内容转为Unicode
# 根据用户列表进行验证def check_userkey(): with open('user_list.json', 'r') as f: user_list = json.load(f) keys = for user in user_list] return keys
@app.route('/', methods=['POST'])def messages(): if request.method == 'POST': # 获取 JSON 数据 data = request.get_json() userkey = data.get('userkey') content = data.get('content') if userkey and content: print(userkey, content) if userkey in check_userkey(): response = chat(content) return jsonify({"message": response, "code": 200}) else: return jsonify({"message": '验证有误,请核对密钥', "code": 401})# 返回无效凭证的错误 else: return jsonify({"message": '输入内容为空,请重新输入', "code": 400}) # 返回无请求内容的错误
if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)
测试接口:curl -s -X POST http://192.168.40.100:8080 -H "Content-Type: application/json" -d '{"userkey": "12a34", "content": "你好"}'
三、注册systemctl服务,启动服务创建 /etc/systemd/system/kimi_chat.service 文件:Description=Kimi_chatAfter=network.target
User=rootGroup=rootWorkingDirectory=/path/to/your/flask/app# 项目路径ExecStart=/usr/bin/python3 /path/to/your/flask/app/app.py# 启动appRestart=alwaysEnvironment="PYTHONUNBUFFERED=1"
WantedBy=multi-user.targetsudo systemctl daemon-reload# 重新加载 systemd 配置sudo systemctl enable kimi_chat# 开机自动启动sudo systemctl start kimi_chat# 启动app服务四、创建IOS快捷方式,实现应用创建后的快捷方式应用,也可以方便的分享给其他人安装使用。如图所示:
演示效果:到此,全部测试结束。
页:
[1]