src/modules/lesson/page-mine/class-chat-completion.ts
constructor(messageList: TestChatMessage[])
|
createCompletionByStream |
createCompletionByStream()
|
Returns:
void
|
messageList |
messageList: |
export interface TestChatMessage {
role: string
content: string
}
// 导出类TestChatCompletion,用于创建聊天完成
export class TestChatCompletion {
// 定义一个消息列表
messageList: Array<TestChatMessage>
// 构造函数,传入消息列表
constructor(messageList: Array<TestChatMessage>) {
this.messageList = messageList
}
// 异步创建完成,使用流模式
async createCompletionByStream() {
// 从本地存储中获取token
let token = localStorage.getItem("token");
// 定义请求体
let bodyJson = {
"token": `Bearer ${token}`,
"messages": this.messageList,
"model": "gpt-3.5-turbo",
"temperature": 0.5,
"presence_penalty": 0,
"frequency_penalty": 0,
"top_p": 1,
"stream": true
};
// 发起请求
let response = await fetch("https://test.fmode.cn/api/apig/aigc/gpt/v1/chat/completions", {
"headers": {
"accept": "text/event-stream",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site"
},
"referrer": "https://ai.fmode.cn/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": JSON.stringify(bodyJson),
"method": "POST",
"mode": "cors",
"credentials": "omit"
});
// 定义消息回复
let messageAiReply = ""
// 定义消息索引
let messageIndex = this.messageList.length
// 获取响应体读取器
let reader = response.body?.getReader();
if (!reader) {
throw new Error("Failed to get the response reader.");
}
// 定义文本解码器
let decoder = new TextDecoder();
let buffer = "";
// 循环读取响应体
while (true) {
let { done, value } = await reader.read();
if (done) {
break;
}
// 将响应体添加到缓冲区
buffer += decoder.decode(value);
// Split the buffer by newlines to get individual messages
// 将缓冲区按换行符分割,获取每条消息
let messages = buffer.split("\n");
// Process each message
// 循环处理每条消息
for (let i = 0; i < messages.length - 1; i++) {
let message = messages[i];
// Process the message as needed
// 处理消息,需要的操作
/**
* data: {"id":"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv","object":"chat.completion.chunk","created":1696770162,"model":"gpt-3.5-turbo-0613","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
* data: {"id":"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv","object":"chat.completion.chunk","created":1696770162,"model":"gpt-3.5-turbo-0613","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
* data: [DONE]
*/
let dataText = message.replace("data:\ ", "")
if (dataText.startsWith("{")) {
try {
let dataJson = JSON.parse(dataText)
console.log(dataJson)
messageAiReply += dataJson?.choices?.[0]?.delta?.content || ""
this.messageList[messageIndex] = {
role: "assistant",
content: messageAiReply
}
} catch (err) { }
}
if (dataText.startsWith("[")) {
console.log(message)
console.log("完成")
this.messageList[messageIndex] = {
role: "assistant",
content: messageAiReply
}
messageAiReply = ""
}
// Parse the message as JSON
// 解析消息,获取每条消息的JSON
// let data = JSON.parse(message);
// Clear the processed message from the buffer
// 清理已处理的响应消息
buffer = buffer.slice(message.length + 1);
}
}
}
}