当前位置: 首页 > article >正文

调用Kimi的API接口使用,对话,json化,产品化

背景

Kimi出来一年多了,其输出内容的质量和效果在早期的模型里面来说还是不错的,虽然现在有一些更好的效果的模型和它不分上下,但是kimi的搜索能力,长文本的总结能力,还有其产品化的丰富程度,我觉得是别的模型不能比较的,它的API接口生态也做的非常好,和open AI完美兼容。所以我们这一期来学一下怎么调用kimi API的接口去进行对话批量化,产品化。

有的同学说我不是可以直接在小程序或者电脑网页版跟他对话吗?我为什么要调用接口........我只能说没做过开发者的人是完全不知道调用API接口的意义,其能批量化对话,在很多特定的业务场景,能够把非结构化的数据转为结构化的数据进行输出。就比如你想对文章进行总结,100篇文章,你是不是得自己手工复制100次?用kimi网页版去进行总结,然后再复制出来,但是如果用API接口,你直接完全可以写个循环遍历,等着出结果就好了,人工成本不都省掉了么。

kimi的json化输出我觉得非常新奇,在别的家还没有看过这种产品,因为大模型有时候会嘴欠,就算你再怎么给他固定好输出的内容形式,它还是有时候会多一两个字或者多一两个标点符号,但是kimi的json的输出输出的绝对是json,所以说这个数据是能够直接在各种语言之间进行传递,不会出现报错读取不了的情况。

官网有接口代码的demo:开始使用 Kimi API - Moonshot AI 开放平台

kimi的官网我觉得已经写的很不错了,足够简洁和简单实用。哪像百度我得到去找演示代码.......但是毕竟他官网上的东西还是对新手小白不是那么的傻瓜化,所以说我这里也进行一个总结教学。


使用准备

 

首先我们要点击上面的官网链接,然后在右上角点击进入用户中心,自己注册登录一下,然后在左边的管理栏找到API key管理,新建一个就可以了。

 

非常简单,比openai的api要简单,也不用考虑代理梯子等问题。

有了keys之后,就可以在代码里面和kimi对话了。

每个人注册免费都有15块钱的额度,这15块钱可以用很久的。


基础认知

既然是API,肯定就不是免费使用,会有价格,kimi没有gpt那么多的模型版本,它只有上下文的长度不一样导致的模型价格不一样,其价格列表如下:

 

我算了一下,其实价格还是不便宜的,比起gpt4o最便宜的mini模型。还是稍微贵一些。但是胜不需要开代理吧,并且kimi的产品还是很丰富的。

并且充钱的额度,其并发数量和QPS请求数还是有限制的:

 

像咱们这种没有充钱,只是试用这15块钱的额度的用户,就只能并发一条,也就是说每次只能同时请求一条,并且rpm是3,也就是说每分钟最多只能跟他对话三次,不然的话就会报错。


代码使用

首先我们要安装openai的包,我这里已经安装了,展示一下版本

pip show openai #langchain-openai,

这个库的版本尽量装新一点的,因为老版本跟新版本的接口差异还是蛮大的,上图就是我的版本大家可以看一看。

直接调用

导入包

import os
import json
from openai import OpenAI

然后初始化,进行对话

client = OpenAI(
    api_key="*******************************", #自己的key
    base_url="https://api.moonshot.cn/v1",
)
 
completion = client.chat.completions.create(
    model = "moonshot-v1-8k",
    messages = [
        {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},
        {"role": "user", "content": "你好,你是谁,你有啥能力,今天几号?"}
    ],
    temperature = 0.3,
)
 
# 通过 API 我们获得了 Kimi 大模型给予我们的回复消息(role=assistant)
print(completion.choices[0].message.content)

这种直接对话的代码还是很简单,大家应该看得懂,我们的提问就在user的content里面,然后他就输出了对话。然后角色system里面是给他的前置系统提示词,我们可以修改这个提示词,让他扮演不同的角色和拥有不同的技能。

同时我们要测试一下kimi的json化输出的能力,所以我下面给他扮演了一个角色,相当于让他进行了一个产品化。给他一个邮箱,他就能够返回对这个邮箱的真实性的一个检测的分数。

system_prompt = """你是一个邮箱识别打分的专家,你看过海量的邮箱格式,所以你很清楚哪些邮箱可能是随便编造的哪些可能是真实的。 
        下面请你帮我对输入的邮箱进行打分,1-10分。分数越高说明该邮箱越可能是真实,越低越可能是假邮箱。
        你不仅需要考虑这个邮箱的格式和域名,还要综合考虑它前面的用户名称是不是过短和随意捏造的可能性。
请使用如下 JSON 格式输出你的回复:

{ "分数": "邮箱真实性分数", "真实性": "真或假" }
 
注意,请将你打的分数放置在 `分数` 字段中,你评定的邮箱是否真实放置在 `真实性` 字段中,
"""
 
completion = client.chat.completions.create(
    model="moonshot-v1-8k",
    messages=[
        {"role": "system",
         "content": "你是邮箱识别打分的专家"},
        {"role": "system", "content": system_prompt}, # <-- 将附带输出格式的 system prompt 提交给 Kimi
        {"role": "user", "content": "testaccount@qq.com"}
    ],
    temperature=0.3,
    response_format={"type": "json_object"}, # <-- 使用 response_format 参数指定输出格式为 json_object
)
 
# 由于我们设置了 JSON Mode,Kimi 大模型返回的 message.content 为序列化后的 JSON Object 字符串,
# 我们使用 json.loads 解析其内容,将其反序列化为 python 中的字典 dict。
content = json.loads(completion.choices[0].message.content)
content

可以看到他对这个测试的邮箱打出了一个假的分数。

我们把它写成函数:

def email_check(txt=''):
    completion = client.chat.completions.create(
        model="moonshot-v1-8k", temperature=0.3, response_format={"type": "json_object"},
        messages=[   {"role": "system","content": "你是邮箱识别打分的专家"},
                     {"role": "system", "content": system_prompt}, 
                     {"role": "user", "content": txt}   ],          
        )
    content = json.loads(completion.choices[0].message.content)
    return content

测试

%%time
email_check(txt="testaccount@qq.com")

可以看到我们只需要简单的输入一个邮箱的字符串,该函数就会对这个邮箱的真实性打一个分数,因为邮箱造假其实还是很容易的,随便改几个字母自己捏造几个,只要格式是对的很难检测出来,但是我们有了大模型去对它进行一道审核,就会多多少少能够检查出一些很假的邮箱。这就相当于做了一个产品,是不是很简单。

我们把这个函数随便放到自己的程序的哪一块儿,作为一个前置的筛选或者作为模型里面的一个特征,都是挺好用的。但是唯一的缺点就是它的响应时间很慢,可以看到它几乎2秒才输出一个邮箱的检测结果,这对于一些saas类的数据及时线上服务可能是响应时间不太够,会变成异步。

其实大部分人用API接口都是让他进行一个产品化,批量化,循环化,处理一些数据或者文本。看到这里其实就足够了。让他进行文本总结,还是做邮箱检测,或者是做一些知识图谱的关系抽取,都可以用上面的这种。输入指令,然后json化输出。

但是总有一些同学会觉得不够,因为大模型不是用来对话的吗?你代码里面只能这种指定一个文本,让它输出一个结果没有对话,没有交互,可不太行,于是下面我又进行了增加。

写一个函数,让我们可以实现在代码里面跟kim进行多轮对话。

对话循环

#client = client
def chat_with_kimiai(system_message=None):
    # 初始化对话历史记录
    if system_message:
        conversation_history = [system_message]
    else:
        conversation_history=[]
    while True:
        user_input = input("用户: ")
        if user_input.lower() in ["exit", "quit", "bye"]:
            print("再见!")
            break
        # 将用户的输入添加到对话历史中
        conversation_history.append({"role": "user", "content": user_input})
        chat_completion = client.chat.completions.create(
            messages=conversation_history,
            model="moonshot-v1-8k", temperature=0.3,)
        assistant_message = chat_completion.choices[0].message.content
        print(f"gpt: {assistant_message}")
        conversation_history.append({"role": "assistant", "content": assistant_message})
然后调用这个函数对话就行了:
chat_with_kimiai()   

可以看到这里可以进行多论对话了,并且我留了一些接口可以输入某些特殊的命令随时进行退出。

由于是在代码里面直接进行打印,所以说写出来的都是纯字符串,没有进行markdown或者是HTML的一些渲染,所以说看起来代码会比较简陋,没有网页端的代码框包裹着。


其他

kimi的接口有上下文缓存机制:上下文缓存接口 - Moonshot AI 开放平台

这样有时候我们重复的提示词就不需要再每次都重新输入,可以帮我们省一些钱。

官网的demo都非常简单,大家看着对着它用进行改一改就可以了。

kimi自己也有小工具:工具调用 - Moonshot AI 开放平台

大家可以看情况决定要不要给他开放这些工具的使用权限。这些都可以根据自己的业务和工作流进行集成。

kimi余额查询:其它接口 - Moonshot AI 开放平台

很有意思的接口,需要用curl命令,不会的同学可以参考我的做法:

按win+R键输入cmd,回车打开命令提示符,然后输入:

curl https://api.moonshot.cn/v1/users/me/balance -H "Authorization: Bearer $MOONSHOT_API_KEY"

$MOONSHOT_API_KEY改成自己的apikey就行了,就会返回你的账户余额。,如下图:

 

注意不需要$符号,这个是用来表示变量的。当然嫌麻烦就自己去官网查就好了。


总结

kimi 的API还有很多有意思的小玩法,大家可以自己去官网研究,我觉得最有用的就是json化的输出输入了,这样可以帮我快速的整理很多批量的,非结构化的,文本或者是数据,把它们变成我想要的标准的格式。然后再去做一些数据特征处理什么的会很方便。

 


http://www.kler.cn/a/503064.html

相关文章:

  • 金融项目实战 01|功能测试分析与设计
  • ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技
  • 用python编写一个放烟花的小程序
  • Linux第二课:LinuxC高级 学习记录day01
  • Springboot Rabbitmq + 线程池技术控制指定数量task执行
  • CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞
  • 3D扫描建模有哪些优势和劣势?
  • 开发指南090-使用python做微服务
  • centos systemd方式配置jar开机自启
  • 数据结构:栈(Stack)和队列(Queue)—面试题(二)
  • ssh2-sftp-client和ssh2配合使用js脚本快速部署项目到服务器
  • 力扣264. 丑数 II
  • 后端接口获取的对象包含图片,渲染后端图片,拼接地址渲染,循环列表,vue+uniapp
  • Visual Studio Code (VSCode)为当前项目设置保存时自动格式化
  • 禅道 ip 地址变换后的修改
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(11)横梁中点挠度仿真结果与计算结果对比
  • 罗德与施瓦茨ZN-Z135,26.5G经济型网络分析仪校准套件
  • CSS语言的语法
  • iOS - runtime总结
  • Github 2025-01-13 开源项目周报 Top15
  • 【图像去噪】论文精读:High-Quality Self-Supervised Deep Image Denoising(HQ-SSL)
  • MyBatis 性能优化
  • c++自定义String
  • 【Pytorch实用教程】PyTorch 中如何输出模型参数:全面指南
  • 战略与规划方法——深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具
  • Python----Python高级(函数基础,形参和实参,参数传递,全局变量和局部变量,匿名函数,递归函数,eval()函数,LEGB规则)