doomiaichat 2.4.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/azureai.d.ts +7 -1
- package/dist/azureai.js +36 -0
- package/dist/baiduai.d.ts +5 -0
- package/dist/baiduai.js +9 -0
- package/dist/declare.d.ts +7 -0
- package/dist/gptbase.d.ts +5 -0
- package/dist/openai.d.ts +5 -0
- package/dist/openai.js +13 -2
- package/package.json +1 -1
- package/src/azureai.ts +41 -1
- package/src/baiduai.ts +7 -0
- package/src/declare.ts +9 -1
- package/src/gptbase.ts +5 -0
- package/src/openai.ts +13 -3
package/dist/azureai.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AzureOpenAIPatameters, ChatReponse, OpenAIApiParameters } from "./declare";
|
|
1
|
+
import { AzureOpenAIPatameters, ChatReponse, EmbeddingResult, OpenAIApiParameters } from "./declare";
|
|
2
2
|
import OpenAIGpt from "./openai";
|
|
3
3
|
export default class AzureAI extends OpenAIGpt {
|
|
4
4
|
protected readonly azureSetting: AzureOpenAIPatameters;
|
|
@@ -7,6 +7,12 @@ export default class AzureAI extends OpenAIGpt {
|
|
|
7
7
|
* ZAure OpenAI 最新的URL地址
|
|
8
8
|
*/
|
|
9
9
|
get BaseUrl(): string;
|
|
10
|
+
get EmbeddingUrl(): string;
|
|
11
|
+
/**
|
|
12
|
+
* 获得文字的向量
|
|
13
|
+
* @param text
|
|
14
|
+
*/
|
|
15
|
+
getTextEmbedding(text: string, axiosOption?: any): Promise<EmbeddingResult>;
|
|
10
16
|
/**
|
|
11
17
|
* 请求GPT接口
|
|
12
18
|
*/
|
package/dist/azureai.js
CHANGED
|
@@ -29,6 +29,39 @@ class AzureAI extends openai_1.default {
|
|
|
29
29
|
get BaseUrl() {
|
|
30
30
|
return `${this.azureSetting.endpoint}/openai/deployments/${this.azureSetting.engine}/chat/completions?api-version=${this.azureSetting.version || '2023-03-15-preview'}`;
|
|
31
31
|
}
|
|
32
|
+
get EmbeddingUrl() {
|
|
33
|
+
return `${this.azureSetting.endpoint}/openai/deployments/${this.azureSetting.embedding || 'openai-embedding-ada-002'}/embeddings?api-version=2022-12-01`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* 获得文字的向量
|
|
37
|
+
* @param text
|
|
38
|
+
*/
|
|
39
|
+
getTextEmbedding(text, axiosOption = {}) {
|
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
41
|
+
if (!text)
|
|
42
|
+
return { successed: false, error: { errcode: 2, errmsg: 'content required' } };
|
|
43
|
+
if (!axiosOption.headers)
|
|
44
|
+
axiosOption.headers = { 'api-key': this.apiKey, 'Content-Type': 'application/json' };
|
|
45
|
+
else {
|
|
46
|
+
axiosOption.headers['api-key'] = this.apiKey;
|
|
47
|
+
axiosOption.headers['Content-Type'] = 'application/json';
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
let param = Object.assign(Object.assign({}, axiosOption), { method: "post", data: {
|
|
51
|
+
input: text
|
|
52
|
+
}, url: this.EmbeddingUrl });
|
|
53
|
+
console.log('param', param);
|
|
54
|
+
const response = yield (0, declare_1.request)(param);
|
|
55
|
+
if (response.data) {
|
|
56
|
+
return { successed: true, embedding: response.data.data[0].embedding };
|
|
57
|
+
}
|
|
58
|
+
return Object.assign({ successed: false }, response.data);
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return { successed: false, error };
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
32
65
|
/**
|
|
33
66
|
* 请求GPT接口
|
|
34
67
|
*/
|
|
@@ -96,6 +129,9 @@ class AzureAI extends openai_1.default {
|
|
|
96
129
|
///回答的内容非JSON格式,自己来提取算了
|
|
97
130
|
console.log('自己组装', value);
|
|
98
131
|
let sentences = value.split(/",|\n/g); ///用换行或",来割分文本内容
|
|
132
|
+
sentences = sentences.map((str) => {
|
|
133
|
+
return str.replace(/(\[|"|\]|\{|\})/g, '');
|
|
134
|
+
});
|
|
99
135
|
// let matched = value.match(/\d+分/g), score = 0;
|
|
100
136
|
// if (matched && matched.length) {
|
|
101
137
|
// score = Number(matched[0].replace('分', ''));
|
package/dist/baiduai.d.ts
CHANGED
|
@@ -14,6 +14,11 @@ export default class BaiduWenXinAI extends GptBase {
|
|
|
14
14
|
* 获取调用Api的Token
|
|
15
15
|
*/
|
|
16
16
|
getAccessToken(): Promise<AccessTokenResult>;
|
|
17
|
+
/**
|
|
18
|
+
* 获得文字的向量
|
|
19
|
+
* @param text
|
|
20
|
+
*/
|
|
21
|
+
getTextEmbedding(_text: string, _axiosOption: any): Promise<any>;
|
|
17
22
|
/**
|
|
18
23
|
* 请求GPT接口
|
|
19
24
|
*/
|
package/dist/baiduai.js
CHANGED
|
@@ -53,6 +53,15 @@ class BaiduWenXinAI extends gptbase_1.default {
|
|
|
53
53
|
return { successed: false, error: tokenData.data.msg };
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* 获得文字的向量
|
|
58
|
+
* @param text
|
|
59
|
+
*/
|
|
60
|
+
getTextEmbedding(_text, _axiosOption) {
|
|
61
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
62
|
+
return null;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
56
65
|
/**
|
|
57
66
|
* 请求GPT接口
|
|
58
67
|
*/
|
package/dist/declare.d.ts
CHANGED
|
@@ -57,6 +57,7 @@ export interface OpenAIApiParameters {
|
|
|
57
57
|
export interface AzureOpenAIPatameters {
|
|
58
58
|
'endpoint': string;
|
|
59
59
|
'engine': string;
|
|
60
|
+
'embedding'?: string;
|
|
60
61
|
'version'?: string;
|
|
61
62
|
}
|
|
62
63
|
/**
|
|
@@ -97,6 +98,12 @@ export interface CommentResult extends ApiResult {
|
|
|
97
98
|
'score'?: number;
|
|
98
99
|
'comment'?: string;
|
|
99
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* 调用OpenAI Api的向量约定
|
|
103
|
+
*/
|
|
104
|
+
export interface EmbeddingResult extends ApiResult {
|
|
105
|
+
'embedding'?: number[];
|
|
106
|
+
}
|
|
100
107
|
/**
|
|
101
108
|
* 调用OpenAI Api的参数约定
|
|
102
109
|
*/
|
package/dist/gptbase.d.ts
CHANGED
package/dist/openai.d.ts
CHANGED
|
@@ -17,6 +17,11 @@ export default class OpenAIGpt extends GptBase {
|
|
|
17
17
|
* 初始化OpenAI 的聊天对象Api
|
|
18
18
|
*/
|
|
19
19
|
createOpenAI(apiKey: string): OpenAIApi;
|
|
20
|
+
/**
|
|
21
|
+
* 获得文字的向量
|
|
22
|
+
* @param text
|
|
23
|
+
*/
|
|
24
|
+
getTextEmbedding(_text: string, _axiosOption: any): Promise<any>;
|
|
20
25
|
/**
|
|
21
26
|
* 向OpenAI发送一个聊天请求
|
|
22
27
|
* @param {*} chatText
|
package/dist/openai.js
CHANGED
|
@@ -44,6 +44,15 @@ class OpenAIGpt extends gptbase_1.default {
|
|
|
44
44
|
createOpenAI(apiKey) {
|
|
45
45
|
return new openai_1.OpenAIApi(new openai_1.Configuration({ apiKey }));
|
|
46
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* 获得文字的向量
|
|
49
|
+
* @param text
|
|
50
|
+
*/
|
|
51
|
+
getTextEmbedding(_text, _axiosOption) {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
+
return null;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
47
56
|
/**
|
|
48
57
|
* 向OpenAI发送一个聊天请求
|
|
49
58
|
* @param {*} chatText
|
|
@@ -86,10 +95,11 @@ class OpenAIGpt extends gptbase_1.default {
|
|
|
86
95
|
if (!question || !answer)
|
|
87
96
|
return { successed: false, error: { errcode: 2, errmsg: '缺失参数' } };
|
|
88
97
|
let message = [
|
|
89
|
-
{ role: 'system', content: '
|
|
98
|
+
{ role: 'system', content: '你是一名专业的知识点评师。' },
|
|
90
99
|
{ role: 'user', content: `问题题干:“${question}”` },
|
|
91
100
|
{ role: 'user', content: `回答内容:“${answer}”` },
|
|
92
|
-
{ role: 'user', content: `请根据以上的回答内容进行点评,给出一段不超过200
|
|
101
|
+
{ role: 'user', content: `请根据以上的回答内容进行点评,给出一段不超过200字的评语,并给出0-100的评分。` },
|
|
102
|
+
{ role: 'user', content: `结果完整按照{"comment":"点评内容","score":"评分"}的JSON结构输出` }
|
|
93
103
|
];
|
|
94
104
|
const result = yield this.chatRequest(message, {}, axiosOption);
|
|
95
105
|
if (result.successed && result.message) {
|
|
@@ -120,6 +130,7 @@ class OpenAIGpt extends gptbase_1.default {
|
|
|
120
130
|
return { successed: false, error: { errcode: 2, errmsg: '缺失参数' } };
|
|
121
131
|
const emotion = ['愤怒', '威胁', '讽刺', '愧疚', '兴奋', '友好', '消极', '生气', '正常'];
|
|
122
132
|
const messages = [
|
|
133
|
+
{ role: 'system', content: `你是一名专业的语言大师` },
|
|
123
134
|
{ role: 'user', content: s1 },
|
|
124
135
|
{ role: 'user', content: `请分析上述内容的语言情绪,请从"${emotion.join(',')}"这些情绪中对应一个输出` },
|
|
125
136
|
];
|
package/package.json
CHANGED
package/src/azureai.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AzureOpenAIPatameters, ChatReponse, OpenAIApiParameters, request } from "./declare";
|
|
1
|
+
import { AzureOpenAIPatameters, ChatReponse, EmbeddingResult, OpenAIApiParameters, request } from "./declare";
|
|
2
2
|
import OpenAIGpt from "./openai"
|
|
3
3
|
import { ChatCompletionRequestMessage } from "openai";
|
|
4
4
|
export default class AzureAI extends OpenAIGpt {
|
|
@@ -17,6 +17,43 @@ export default class AzureAI extends OpenAIGpt {
|
|
|
17
17
|
get BaseUrl():string{
|
|
18
18
|
return `${this.azureSetting.endpoint}/openai/deployments/${this.azureSetting.engine}/chat/completions?api-version=${this.azureSetting.version ||'2023-03-15-preview'}`
|
|
19
19
|
}
|
|
20
|
+
|
|
21
|
+
get EmbeddingUrl(): string {
|
|
22
|
+
return `${this.azureSetting.endpoint}/openai/deployments/${this.azureSetting.embedding ||'openai-embedding-ada-002'}/embeddings?api-version=2022-12-01`
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 获得文字的向量
|
|
27
|
+
* @param text
|
|
28
|
+
*/
|
|
29
|
+
override async getTextEmbedding(text: string,axiosOption: any = {}): Promise<EmbeddingResult> {
|
|
30
|
+
if (!text) return { successed: false, error: { errcode: 2, errmsg: 'content required' } };
|
|
31
|
+
if (!axiosOption.headers)
|
|
32
|
+
axiosOption.headers = { 'api-key': this.apiKey, 'Content-Type': 'application/json' };
|
|
33
|
+
else {
|
|
34
|
+
axiosOption.headers['api-key'] = this.apiKey;
|
|
35
|
+
axiosOption.headers['Content-Type'] = 'application/json';
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
try {
|
|
39
|
+
let param = {
|
|
40
|
+
...axiosOption,
|
|
41
|
+
method: "post",
|
|
42
|
+
data: {
|
|
43
|
+
input: text
|
|
44
|
+
},
|
|
45
|
+
url: this.EmbeddingUrl
|
|
46
|
+
};
|
|
47
|
+
console.log('param', param)
|
|
48
|
+
const response = await request(param)
|
|
49
|
+
if (response.data) {
|
|
50
|
+
return { successed: true, embedding: response.data.data[0].embedding };
|
|
51
|
+
}
|
|
52
|
+
return { successed: false, ...response.data };
|
|
53
|
+
} catch (error) {
|
|
54
|
+
return { successed: false, error };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
20
57
|
/**
|
|
21
58
|
* 请求GPT接口
|
|
22
59
|
*/
|
|
@@ -85,6 +122,9 @@ export default class AzureAI extends OpenAIGpt {
|
|
|
85
122
|
|
|
86
123
|
console.log('自己组装', value);
|
|
87
124
|
let sentences = value.split(/",|\n/g) ///用换行或",来割分文本内容
|
|
125
|
+
sentences = sentences.map((str: string)=>{
|
|
126
|
+
return str.replace(/(\[|"|\]|\{|\})/g, '')
|
|
127
|
+
})
|
|
88
128
|
// let matched = value.match(/\d+分/g), score = 0;
|
|
89
129
|
// if (matched && matched.length) {
|
|
90
130
|
// score = Number(matched[0].replace('分', ''));
|
package/src/baiduai.ts
CHANGED
|
@@ -38,6 +38,13 @@ export default class BaiduWenXinAI extends GptBase {
|
|
|
38
38
|
}
|
|
39
39
|
return { successed: false, error: tokenData.data.msg }
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* 获得文字的向量
|
|
43
|
+
* @param text
|
|
44
|
+
*/
|
|
45
|
+
async getTextEmbedding(_text: string, _axiosOption: any): Promise<any> {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
41
48
|
/**
|
|
42
49
|
* 请求GPT接口
|
|
43
50
|
*/
|
package/src/declare.ts
CHANGED
|
@@ -61,7 +61,8 @@ export interface OpenAIApiParameters {
|
|
|
61
61
|
*/
|
|
62
62
|
export interface AzureOpenAIPatameters{
|
|
63
63
|
'endpoint':string; ///端点
|
|
64
|
-
'engine':string;
|
|
64
|
+
'engine':string; ///GPT部署的项目名称
|
|
65
|
+
'embedding'?: string; ///向量引擎项目名称
|
|
65
66
|
'version'?:string; ///Api 版本
|
|
66
67
|
}
|
|
67
68
|
|
|
@@ -105,6 +106,13 @@ export interface CommentResult extends ApiResult {
|
|
|
105
106
|
'score'?:number,
|
|
106
107
|
'comment'?: string; ///评价内容
|
|
107
108
|
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* 调用OpenAI Api的向量约定
|
|
112
|
+
*/
|
|
113
|
+
export interface EmbeddingResult extends ApiResult {
|
|
114
|
+
'embedding'?: number[],
|
|
115
|
+
}
|
|
108
116
|
/**
|
|
109
117
|
* 调用OpenAI Api的参数约定
|
|
110
118
|
*/
|
package/src/gptbase.ts
CHANGED
package/src/openai.ts
CHANGED
|
@@ -38,6 +38,14 @@ export default class OpenAIGpt extends GptBase {
|
|
|
38
38
|
createOpenAI(apiKey: string): OpenAIApi {
|
|
39
39
|
return new OpenAIApi(new Configuration({ apiKey }))
|
|
40
40
|
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 获得文字的向量
|
|
44
|
+
* @param text
|
|
45
|
+
*/
|
|
46
|
+
async getTextEmbedding(_text: string, _axiosOption: any): Promise<any>{
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
41
49
|
/**
|
|
42
50
|
* 向OpenAI发送一个聊天请求
|
|
43
51
|
* @param {*} chatText
|
|
@@ -77,17 +85,18 @@ export default class OpenAIGpt extends GptBase {
|
|
|
77
85
|
async commentQuestionAnswer(question: string, answer: string, axiosOption: any = { timeout: 30000 }): Promise<CommentResult>{
|
|
78
86
|
if (!question || !answer) return { successed: false, error: { errcode: 2, errmsg: '缺失参数' } }
|
|
79
87
|
let message = [
|
|
80
|
-
{role:'system',content:'
|
|
88
|
+
{role:'system',content:'你是一名专业的知识点评师。'},
|
|
81
89
|
{ role: 'user', content: `问题题干:“${question}”`},
|
|
82
90
|
{ role: 'user', content: `回答内容:“${answer}”` },
|
|
83
|
-
{ role: 'user', content: `请根据以上的回答内容进行点评,给出一段不超过200
|
|
91
|
+
{ role: 'user', content: `请根据以上的回答内容进行点评,给出一段不超过200字的评语,并给出0-100的评分。`},
|
|
92
|
+
{ role: 'user', content: `结果完整按照{"comment":"点评内容","score":"评分"}的JSON结构输出` }
|
|
84
93
|
]
|
|
85
94
|
const result = await this.chatRequest(message, {}, axiosOption);
|
|
86
95
|
if (result.successed && result.message) {
|
|
87
96
|
let value = result.message[0].message.content.trim();
|
|
88
97
|
let replyJson = this.fixedJsonString(value);
|
|
89
98
|
///能够提取到内容
|
|
90
|
-
if (replyJson.length)return { successed: true,...replyJson[0] }
|
|
99
|
+
if (replyJson.length) return { successed: true,...replyJson[0] }
|
|
91
100
|
///回答的内容非JSON格式,自己来提取算了
|
|
92
101
|
console.log('自己组装')
|
|
93
102
|
let matched = value.match(/\d+分/g),score=0;
|
|
@@ -107,6 +116,7 @@ export default class OpenAIGpt extends GptBase {
|
|
|
107
116
|
if (!s1) return { successed: false, error: { errcode: 2, errmsg: '缺失参数' } }
|
|
108
117
|
const emotion = ['愤怒', '威胁', '讽刺', '愧疚', '兴奋', '友好', '消极', '生气', '正常'];
|
|
109
118
|
const messages = [
|
|
119
|
+
{ role: 'system', content: `你是一名专业的语言大师` },
|
|
110
120
|
{ role: 'user', content: s1 },
|
|
111
121
|
{ role: 'user', content: `请分析上述内容的语言情绪,请从"${emotion.join(',')}"这些情绪中对应一个输出` },
|
|
112
122
|
]
|