@aalis/plugin-embedding-openai 0.1.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/README.md +21 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/package.json +34 -0
package/README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# @aalis/plugin-embedding-openai
|
|
2
|
+
|
|
3
|
+
运行时插件
|
|
4
|
+
|
|
5
|
+
## 角色
|
|
6
|
+
|
|
7
|
+
运行时插件
|
|
8
|
+
|
|
9
|
+
## 安装
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm add @aalis/plugin-embedding-openai
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## 文档
|
|
16
|
+
|
|
17
|
+
详见 [docs/plugins/plugin-embedding-openai.md](../../docs/plugins/plugin-embedding-openai.md)。
|
|
18
|
+
|
|
19
|
+
## 许可
|
|
20
|
+
|
|
21
|
+
见仓库根目录 LICENSE。
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ConfigSchema, Context } from '@aalis/core';
|
|
2
|
+
export declare const name = "@aalis/plugin-embedding-openai";
|
|
3
|
+
export declare const displayName = "OpenAI Embedding";
|
|
4
|
+
export declare const subsystem = "embedding";
|
|
5
|
+
export declare const provides: string[];
|
|
6
|
+
export declare const reusable = true;
|
|
7
|
+
export declare const configSchema: ConfigSchema;
|
|
8
|
+
export declare const defaultConfig: {
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
model: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function apply(ctx: Context, config: Record<string, unknown>): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAMzD,eAAO,MAAM,IAAI,mCAAmC,CAAC;AACrD,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,eAAO,MAAM,SAAS,cAAc,CAAC;AACrC,eAAO,MAAM,QAAQ,UAAgB,CAAC;AACtC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B,eAAO,MAAM,YAAY,EAAE,YAU1B,CAAC;AAEF,eAAO,MAAM,aAAa;;;CAGzB,CAAC;AA+CF,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBxF"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// ===== 插件元数据 =====
|
|
2
|
+
export const name = '@aalis/plugin-embedding-openai';
|
|
3
|
+
export const displayName = 'OpenAI Embedding';
|
|
4
|
+
export const subsystem = 'embedding';
|
|
5
|
+
export const provides = ['embedding'];
|
|
6
|
+
export const reusable = true;
|
|
7
|
+
export const configSchema = {
|
|
8
|
+
apiKey: { type: 'string', label: 'API Key', required: true, secret: true, description: 'OpenAI API 密钥' },
|
|
9
|
+
baseUrl: { type: 'string', label: 'API 地址', default: 'https://api.openai.com', description: 'API 端点地址' },
|
|
10
|
+
model: {
|
|
11
|
+
type: 'select',
|
|
12
|
+
label: 'Embedding 模型',
|
|
13
|
+
default: 'text-embedding-3-small',
|
|
14
|
+
dynamicOptions: 'embedding',
|
|
15
|
+
description: '用于生成文本向量的模型',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
export const defaultConfig = {
|
|
19
|
+
baseUrl: 'https://api.openai.com',
|
|
20
|
+
model: 'text-embedding-3-small',
|
|
21
|
+
};
|
|
22
|
+
// ===== 服务实现 =====
|
|
23
|
+
class OpenAIEmbeddingService {
|
|
24
|
+
baseUrl;
|
|
25
|
+
model;
|
|
26
|
+
apiKey;
|
|
27
|
+
constructor(baseUrl, model, apiKey) {
|
|
28
|
+
this.baseUrl = baseUrl.replace(/\/$/, '');
|
|
29
|
+
this.model = model;
|
|
30
|
+
this.apiKey = apiKey;
|
|
31
|
+
}
|
|
32
|
+
async embed(text) {
|
|
33
|
+
const res = await fetch(`${this.baseUrl}/v1/embeddings`, {
|
|
34
|
+
method: 'POST',
|
|
35
|
+
headers: {
|
|
36
|
+
'Content-Type': 'application/json',
|
|
37
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
38
|
+
},
|
|
39
|
+
body: JSON.stringify({ model: this.model, input: text }),
|
|
40
|
+
});
|
|
41
|
+
if (!res.ok) {
|
|
42
|
+
throw new Error(`OpenAI embedding 请求失败: ${res.status} ${res.statusText}`);
|
|
43
|
+
}
|
|
44
|
+
const data = (await res.json());
|
|
45
|
+
return data.data[0].embedding;
|
|
46
|
+
}
|
|
47
|
+
async listModels() {
|
|
48
|
+
try {
|
|
49
|
+
const res = await fetch(`${this.baseUrl}/v1/models`, {
|
|
50
|
+
headers: { Authorization: `Bearer ${this.apiKey}` },
|
|
51
|
+
});
|
|
52
|
+
if (!res.ok)
|
|
53
|
+
return [];
|
|
54
|
+
const data = (await res.json());
|
|
55
|
+
return data.data.map(m => m.id);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// ===== 插件入口 =====
|
|
63
|
+
export async function apply(ctx, config) {
|
|
64
|
+
const apiKey = config.apiKey;
|
|
65
|
+
if (!apiKey) {
|
|
66
|
+
throw new Error('OpenAI Embedding 插件需要配置 apiKey');
|
|
67
|
+
}
|
|
68
|
+
const baseUrl = config.baseUrl ?? 'https://api.openai.com';
|
|
69
|
+
const model = config.model ?? 'text-embedding-3-small';
|
|
70
|
+
const service = new OpenAIEmbeddingService(baseUrl, model, apiKey);
|
|
71
|
+
// 启动时检查连通性(失败不阻塞,只警告)
|
|
72
|
+
try {
|
|
73
|
+
await service.embed('ping');
|
|
74
|
+
ctx.logger.info(`OpenAI Embedding 已就绪: ${model} @ ${baseUrl}`);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
78
|
+
ctx.logger.warn(`OpenAI Embedding 连通性检查失败 (${baseUrl}, model=${model}): ${msg},服务仍将注册`);
|
|
79
|
+
}
|
|
80
|
+
ctx.provide('embedding', service, { label: `OpenAI / ${model}` });
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aalis/plugin-embedding-openai",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"aalis-plugin"
|
|
7
|
+
],
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"devDependencies": {
|
|
14
|
+
"@types/node": "^22.0.0",
|
|
15
|
+
"typescript": "^5.7.0",
|
|
16
|
+
"@aalis/core": "0.1.0",
|
|
17
|
+
"@aalis/plugin-embedding-api": "0.1.0",
|
|
18
|
+
"@aalis/plugin-webui-api": "0.1.0"
|
|
19
|
+
},
|
|
20
|
+
"peerDependencies": {
|
|
21
|
+
"@aalis/core": "^0.1.0"
|
|
22
|
+
},
|
|
23
|
+
"aalis": {
|
|
24
|
+
"service": {
|
|
25
|
+
"provides": [
|
|
26
|
+
"embedding"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc",
|
|
32
|
+
"dev": "tsc --watch"
|
|
33
|
+
}
|
|
34
|
+
}
|