9 Commits

Author SHA1 Message Date
Vinlic科技
38d59e20fc Merge pull request #141 from Yanyutin753/优化web搜索输出
🦄 优化web搜索输出
2024-10-27 21:12:00 +08:00
Clivia
bc37f56d1f 🦄 优化web搜索输出
🦄 优化web搜索输出
2024-10-27 20:13:20 +08:00
Vinlic
b2ae0554ee Release 0.0.34 2024-07-12 11:02:43 +08:00
Vinlic
399de41b61 补充请求新增项 2024-07-12 11:02:36 +08:00
Vinlic科技
44316372a5 Update README.md 2024-05-15 13:35:10 +08:00
Vinlic科技
fcc2c9f795 Update README.md 2024-05-10 15:52:03 +08:00
Vinlic科技
a626a78553 Update README.md 2024-05-10 15:51:38 +08:00
Vinlic科技
5f2eb803aa Update README.md 2024-05-04 17:06:02 +08:00
Vinlic科技
684aedae1c Update README.md 2024-05-04 17:05:50 +08:00
3 changed files with 35 additions and 12 deletions

View File

@@ -11,11 +11,11 @@
![](https://img.shields.io/github/forks/llm-red-team/kimi-free-api.svg)
![](https://img.shields.io/docker/pulls/vinlic/kimi-free-api.svg)
支持高速流式输出、支持多轮对话、支持联网搜索、支持智能体对话、支持长文档解读、支持图像解析零配置部署多路token支持自动清理会话痕迹。
支持高速流式输出、支持多轮对话、支持联网搜索、支持智能体对话、支持长文档解读、支持图像OCR零配置部署多路token支持自动清理会话痕迹。
与ChatGPT接口完全兼容。
还有以下个free-api欢迎关注
还有以下个free-api欢迎关注
阶跃星辰 (跃问StepChat) 接口转API [step-free-api](https://github.com/LLM-Red-Team/step-free-api)
@@ -27,6 +27,10 @@
讯飞星火Spark接口转API [spark-free-api](https://github.com/LLM-Red-Team/spark-free-api)
MiniMax海螺AI接口转API [hailuo-free-api](https://github.com/LLM-Red-Team/hailuo-free-api)
深度求索DeepSeek接口转API [deepseek-free-api](https://github.com/LLM-Red-Team/deepseek-free-api)
聆心智能 (Emohaa) 接口转API [emohaa-free-api](https://github.com/LLM-Red-Team/emohaa-free-api)
## 目录
@@ -95,7 +99,7 @@ https://udify.app/chat/Po0F6BMJ15q5vu2P
![长文档解读](./doc/example-5.png)
### 图像解析Demo
### 图像OCR Demo
![图像解析](./doc/example-3.png)
@@ -384,7 +388,7 @@ Authorization: Bearer [refresh_token]
}
```
### 图像解析
### 图像OCR
提供一个可访问的图像URL或者BASE64_URL进行解析。

View File

@@ -1,6 +1,6 @@
{
"name": "kimi-free-api",
"version": "0.0.33",
"version": "0.0.34",
"description": "Kimi Free API Server",
"type": "module",
"main": "dist/index.js",

View File

@@ -137,6 +137,7 @@ async function getUserInfo(accessToken: string, refreshToken: string) {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: 'https://kimi.moonshot.cn/',
'X-Msh-Platform': 'web',
'X-Traffic-Id': `7${util.generateRandomString({ length: 18, charset: 'numeric' })}`,
...FAKE_HEADERS
},
@@ -153,18 +154,21 @@ async function getUserInfo(accessToken: string, refreshToken: string) {
*
* @param refreshToken 用于刷新access_token的refresh_token
*/
async function createConversation(name: string, refreshToken: string) {
async function createConversation(model: string, name: string, refreshToken: string) {
const {
accessToken,
userId
} = await acquireToken(refreshToken);
const result = await axios.post('https://kimi.moonshot.cn/api/chat', {
born_from: '',
is_example: false,
kimiplus_id: /^[0-9a-z]{20}$/.test(model) ? model : 'kimi',
name
}, {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: 'https://kimi.moonshot.cn/',
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
},
@@ -193,6 +197,7 @@ async function removeConversation(convId: string, refreshToken: string) {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: `https://kimi.moonshot.cn/chat/${convId}`,
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
},
@@ -221,6 +226,7 @@ async function promptSnippetSubmit(query: string, refreshToken: string) {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: 'https://kimi.moonshot.cn/',
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
},
@@ -253,7 +259,7 @@ async function createCompletion(model = MODEL_NAME, messages: any[], refreshToke
.catch(err => logger.error(err));
// 创建会话
const convId = /[0-9a-zA-Z]{20}/.test(refConvId) ? refConvId : await createConversation("未命名会话", refreshToken);
const convId = /[0-9a-zA-Z]{20}/.test(refConvId) ? refConvId : await createConversation(model, "未命名会话", refreshToken);
// 请求流
const {
@@ -262,15 +268,17 @@ async function createCompletion(model = MODEL_NAME, messages: any[], refreshToke
} = await acquireToken(refreshToken);
const sendMessages = messagesPrepare(messages, !!refConvId);
const result = await axios.post(`https://kimi.moonshot.cn/api/chat/${convId}/completion/stream`, {
kimiplus_id: /^[0-9a-z]{20}$/.test(model) ? model : undefined,
kimiplus_id: /^[0-9a-z]{20}$/.test(model) ? model : 'kimi',
messages: sendMessages,
refs,
is_pro_search: false,
use_search: useSearch
}, {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: `https://kimi.moonshot.cn/chat/${convId}`,
'Priority': 'u=1, i',
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
},
@@ -330,7 +338,7 @@ async function createCompletionStream(model = MODEL_NAME, messages: any[], refre
.catch(err => logger.error(err));
// 创建会话
const convId = /[0-9a-zA-Z]{20}/.test(refConvId) ? refConvId : await createConversation("未命名会话", refreshToken);
const convId = /[0-9a-zA-Z]{20}/.test(refConvId) ? refConvId : await createConversation(model, "未命名会话", refreshToken);
// 请求流
const {
@@ -350,6 +358,7 @@ async function createCompletionStream(model = MODEL_NAME, messages: any[], refre
Authorization: `Bearer ${accessToken}`,
Referer: `https://kimi.moonshot.cn/chat/${convId}`,
'Priority': 'u=1, i',
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
},
@@ -397,6 +406,7 @@ async function fakeRequest(refreshToken: string) {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: `https://kimi.moonshot.cn/`,
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
}
@@ -539,6 +549,7 @@ async function preSignUrl(filename: string, refreshToken: string) {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: `https://kimi.moonshot.cn/`,
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
},
@@ -624,6 +635,7 @@ async function uploadFile(fileUrl: string, refreshToken: string) {
'Content-Type': mimeType,
Authorization: `Bearer ${accessToken}`,
Referer: `https://kimi.moonshot.cn/`,
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
},
@@ -645,6 +657,7 @@ async function uploadFile(fileUrl: string, refreshToken: string) {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: `https://kimi.moonshot.cn/`,
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
}
@@ -666,6 +679,7 @@ async function uploadFile(fileUrl: string, refreshToken: string) {
headers: {
Authorization: `Bearer ${accessToken}`,
Referer: `https://kimi.moonshot.cn/`,
'X-Msh-Platform': 'web',
'X-Traffic-Id': userId,
...FAKE_HEADERS
}
@@ -709,6 +723,7 @@ function checkResult(result: AxiosResponse, refreshToken: string) {
* @param stream 消息流
*/
async function receiveStream(model: string, convId: string, stream: any) {
let webSearchCount = 0;
return new Promise((resolve, reject) => {
// 消息初始化
const data = {
@@ -742,8 +757,10 @@ async function receiveStream(model: string, convId: string, stream: any) {
resolve(data);
}
// 处理联网搜索
else if (!silentSearch && result.event == 'search_plus' && result.msg && result.msg.type == 'get_res')
refContent += `${result.msg.title} - ${result.msg.url}\n`;
else if (!silentSearch && result.event == 'search_plus' && result.msg && result.msg.type == 'get_res'){
webSearchCount += 1;
refContent += `【检索 ${webSearchCount}】 [${result.msg.title}](${result.msg.url})\n\n`;
}
// else
// logger.warn(result.event, result);
}
@@ -774,6 +791,7 @@ function createTransStream(model: string, convId: string, stream: any, endCallba
const created = util.unixTimestamp();
// 创建转换流
const transStream = new PassThrough();
let webSearchCount = 0;
let searchFlag = false;
const silentSearch = model.indexOf('silent_search') != -1;
!transStream.closed && transStream.write(`data: ${JSON.stringify({
@@ -833,6 +851,7 @@ function createTransStream(model: string, convId: string, stream: any, endCallba
else if (!silentSearch && result.event == 'search_plus' && result.msg && result.msg.type == 'get_res') {
if (!searchFlag)
searchFlag = true;
webSearchCount += 1;
const data = `data: ${JSON.stringify({
id: convId,
model,
@@ -840,7 +859,7 @@ function createTransStream(model: string, convId: string, stream: any, endCallba
choices: [
{
index: 0, delta: {
content: `检索 ${result.msg.title} - ${result.msg.url} ...\n`
content: `检索 ${webSearchCount}】 [${result.msg.title}](${result.msg.url})\n`
}, finish_reason: null
}
],