针对多个文件的问答
中文已实测✓exp-2477
针对多个文件的问答
如果你想针对多个文件内容进行提问,实现方式也非常简单,将每个文件单独放置在一个系统提示词 system prompt 中即可,用代码演示如下:
python
node.js
from typing import *
import os
import json
from pathlib import Path
from openai import OpenAI
client = OpenAI(
api_key=os.environ["MOONSHOT_API_KEY"], # 运行前请设置 MOONSHOT_API_KEY 环境变量
base_url="https://api.moonshot.cn/v1",
)
def upload_files(files: List[str]) -> List[Dict[str, Any]]:
"""
upload_files 会将传入的文件(路径)全部通过文件上传接口 '/v1/files' 上传,并获取上传后的
文件内容生成文件 messages。每个文件会是一个独立的 message,这些 message 的 role 均为
system,Kimi 大模型会正确识别这些 system messages 中的文件内容。
:param files: 一个包含要上传文件的路径的列表,路径可以是绝对路径也可以是相对路径,请使用字符串
的形式传递文件路径。
:return: 一个包含了文件内容的 messages 列表,请将这些 messages 加入到 Context 中,
即请求 `/v1/chat/completions` 接口时的 messages 参数中。
"""
messages = []
# 对每个文件路径,我们都会上传文件并抽取文件内容,最后生成一个 role 为 system 的 message,并加入
# 到最终返回的 messages 列表中。
for file in files:
file_object = client.files.create(file=Path(file), purpose="file-extract")
file_content = client.files.content(file_id=file_object.id).text
messages.append({
"role": "system",
"content": file_content,
})
return messages
def main():
file_messages = upload_files(files=["upload_files.py"])
messages = [
# 我们使用 * 语法,来解构 file_messages 消息,使其成为 messages 列表的前 N 条 messages。
*file_messages,
{
"role": "system",
"content": "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,"
"准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不"
"可翻译成其他语言。",
},
{
"role": "user",
"content": "总结一下这些文件的内容。",
},
]
print(json.dumps(messages, indent=2, ensure_ascii=False))
completion = client.chat.completions.create(
model="kimi-k3",
messages=messages,
)
print(completion.choices[0].message.content)
if __name__ == '__main__':
main()
const fs = require('fs');
const path = require('path');
const axios = require('axios');
const OpenAI = require('openai');
const client = new OpenAI({
baseURL: "https://api.moonshot.cn/v1",
// 运行前请设置 MOONSHOT_API_KEY 环境变量
apiKey: process.env.MOONSHOT_API_KEY,
})
async function upload_files(files){
/*
upload_files 会将传入的文件(路径)全部通过文件上传接口 '/v1/files' 上传,并获取上传后的
文件内容生成文件 messages。每个文件会是一个独立的 message,这些 message 的 role 均为
system,Kimi 大模型会正确识别这些 system messages 中的文件内容。
我们推荐将 upload_files 返回的 messages 放置在 messages 列表的头部。
*/
let messages = []
// 对每个文件路径,我们都会上传文件并抽取文件内容,最后生成一个 role 为 system 的 message,并加入
// 到最终返回的 messages 列表中。
for (const file of files) {
const file_object = await client.files.create({file: fs.createReadStream(path.resolve(file)), purpose: "file-extract"})
let file_content = await (await client.files.content(file_object.id)).text()
messages.push({
role: "system",
content: file_content,
})
}
return messages
}
async function main() {
const fileMessages = await upload_files(
["upload_files.py"]
)
const messages = [
// 我们使用 ... 语法,来解构 file_messages 消息,使其成为 messages 列表的前 N 条 messages。
...fileMessages,
{
role: "system",
content: "你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助," +
"准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不" +
"可翻译成其他语言。",
},
{
role: "user",
content: "总结一下这些文件的内容。",
}
]
console.log(JSON.stringify(messages, null, 2))
const completion = await client.chat.completions.create({
model: "kimi-k3",
messages: messages,
})
console.log(completion.choices[0].message.content)
}
main()
复制后粘贴到 AI 对话框发送,本次对话全程生效
出处:Kimi/Moonshot 官方提示词指南 · platform.moonshot.cn/docs/guide/use-kimi-api-for-file-based-qa · 可信度 S · 标签:中文 / 提示词工程 / 防幻觉 / Kimi / 文件问答 怎么用(对话型)复制后粘贴到对话框发送,本次对话全程生效。想长期用:支持自定义指令的产品(设置→个性化)可设为默认。