@aey/复制
复制@aeye (AI TypeScript) 框架的提供者 。 这个软件包为在云中运行AI模型提供了与Repect的平台的集成.
特征
- 千人模式: 访问庞大的开源AI模型库
- 模型适配器: 处理模型特定计划的灵活性适配器系统
- 多重能力: 支持聊天、图像生成、复制等
- 流线: 支持模型的实时流线
- 自定义模型: 部署和使用自己的模型
- 版本控制: 用于复制的特定模型版本
安装
npm install @aeye/replicate @aeye/ai @aeye/core replicate zod
重要说明
复制没有一致的 API - 每个模型都有自己的输入/输出计划。 这意味着您需要为您想要使用的每个模型注册模型适配器. @aeye框架提供了一个灵活的适配器系统来处理这个问题.
快速启动
import { ReplicateProvider } from '@aeye/replicate';
import { AI } from '@aeye/ai';
import { createLlama3Adapter } from '@aeye/replicate';
// Create provider with adapters
const replicate = new ReplicateProvider({
apiKey: process.env.REPLICATE_API_KEY!,
transformers: {
'meta/meta-llama-3-70b-instruct': createLlama3Adapter(),
},
});
// Use with AI instance
const ai = AI.with()
.providers({ replicate })
.create();
// Make a request
const response = await ai.chat.get([
{ role: 'user', content: 'Explain neural networks' }
], {
metadata: { model: 'meta/meta-llama-3-70b-instruct' }
});
console.log(response.content);
配置
基本配置
import { ReplicateProvider, ReplicateConfig } from '@aeye/replicate';
const config: ReplicateConfig = {
apiKey: process.env.REPLICATE_API_KEY!,
transformers: {
// Register adapters for models you want to use
'meta/meta-llama-3-70b-instruct': createLlama3Adapter(),
'stability-ai/sdxl': createSDXLAdapter(),
},
};
const provider = new ReplicateProvider(config);
自定义基础 URL
const provider = new ReplicateProvider({
apiKey: process.env.REPLICATE_API_KEY!,
baseUrl: 'https://custom.replicate.com', // Optional custom endpoint
transformers: {
// ... your adapters
},
});
模型适配器
模型适配器在@aeye标准接口和每个模型的具体输入/输出格式之间翻译.
使用内建适应器
import {
createLlama3Adapter,
createSDXLAdapter,
createWhisperAdapter,
} from '@aeye/replicate';
const provider = new ReplicateProvider({
apiKey: process.env.REPLICATE_API_KEY!,
transformers: {
// Chat model
'meta/meta-llama-3-70b-instruct': createLlama3Adapter(),
// Image generation
'stability-ai/sdxl': createSDXLAdapter(),
// Audio transcription
'openai/whisper': createWhisperAdapter(),
},
});
创建自定义适配器
TODO: 正确的例子
用法实例
聊天补全
import { AI } from '@aeye/ai';
import { ReplicateProvider, createLlama3Adapter } from '@aeye/replicate';
const replicate = new ReplicateProvider({
apiKey: process.env.REPLICATE_API_KEY!,
transformers: {
'meta/meta-llama-3-70b-instruct': createLlama3Adapter(),
},
});
const ai = AI.with()
.providers({ replicate })
.create();
const response = await ai.chat.get([
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'What is machine learning?' }
], {
metadata: { model: 'meta/meta-llama-3-70b-instruct' }
});
console.log(response.content);
流出聊天
for await (const chunk of ai.chat.stream([
{ role: 'user', content: 'Write a story about a robot' }
], {
metadata: { model: 'meta/meta-llama-3-70b-instruct' }
})) {
if (chunk.content) {
process.stdout.write(chunk.content);
}
}
图像生成
import { createSDXLAdapter } from '@aeye/replicate';
const replicate = new ReplicateProvider({
apiKey: process.env.REPLICATE_API_KEY!,
transformers: {
'stability-ai/sdxl': createSDXLAdapter(),
},
});
const ai = AI.with()
.providers({ replicate })
.create();
const imageResponse = await ai.image.generate.get({
prompt: 'A serene mountain landscape at sunset',
size: '1024x1024',
}, {
metadata: { model: 'stability-ai/sdxl' }
});
console.log('Generated image URL:', imageResponse.images[0].url);
音频译名
import { createWhisperAdapter } from '@aeye/replicate';
import fs from 'fs';
const replicate = new ReplicateProvider({
apiKey: process.env.REPLICATE_API_KEY!,
transformers: {
'openai/whisper': createWhisperAdapter(),
},
});
const ai = AI.with()
.providers({ replicate })
.create();
const audioBuffer = fs.readFileSync('audio.mp3');
const transcription = await ai.transcribe.get({
audio: audioBuffer,
}, {
metadata: { model: 'openai/whisper' }
});
console.log('Transcription:', transcription.text);
使用特定的模型版本
// Pin to a specific version for reproducibility
const response = await ai.chat.get(messages, {
metadata: {
model: 'meta/meta-llama-3-70b-instruct',
version: 'fbfb20b472b2f3bdd101412a9f70a0ed4fc0ced78a77ff00970ee7a2383c575d',
}
});
直接 API 用法
const executor = replicate.createExecutor();
const response = await executor(
{
messages: [
{ role: 'user', content: 'Hello!' }
],
temperature: 0.7,
maxTokens: 500,
},
{},
{ model: 'meta/meta-llama-3-70b-instruct' }
);
列出可用的模型
const models = await replicate.listModels();
models.forEach(model => {
console.log(`${model.id}`);
console.log(` Description: ${model.metadata.description}`);
console.log(` Runs: ${model.metadata.runCount}`);
console.log(` Capabilities: ${Array.from(model.capabilities).join(', ')}`);
});
搜索模式
您可以搜索具有特定能力的模型 :
// Using the Replicate client directly
const client = new Replicate({ auth: process.env.REPLICATE_API_KEY! });
const results = await client.models.search({
query: 'text generation',
});
for await (const model of results) {
console.log(model.owner + '/' + model.name);
}
配置选项
复制配置
| 财产 | 类型 | 需求 | 说明 |
|---|---|---|---|
apiKey | string | 对 | 复制 API 密钥从 https://retravel.com/count/api-tokens 页面存档备份,存于互联网档案馆 |
baseUrl | string | 没有 | API 端点自定义基础 URL |
transformers | Record<string, ModelTransformer> | 没有 | 用于请求/答复转换的模型适配器 |
模型转换接口
interface ModelTransformer {
// Convert @aeye request to model input
transformRequest: (request: Request) => Record<string, unknown>;
// Convert model output to @aeye response
transformResponse: (output: unknown) => Response;
// Optional: convert stream chunks
transformStreamChunk?: (chunk: unknown) => Chunk;
// Optional: convert image request
transformImageRequest?: (request: ImageGenerationRequest) => Record<string, unknown>;
// Optional: convert image response
transformImageResponse?: (output: unknown) => ImageGenerationResponse;
// Optional: convert transcription request
transformTranscriptionRequest?: (request: TranscriptionRequest) => Record<string, unknown>;
// Optional: convert transcription response
transformTranscriptionResponse?: (output: unknown) => TranscriptionResponse;
}
内建适应器
该套件包括了流行型号的适配器:
聊天模式
createLlama3Adapter(): Meta Llama 3 型号meta/meta-llama-3-8b-instructmeta/meta-llama-3-70b-instruct
图像生成
-
createSDXLAdapter(): 稳定扩散XLstability-ai/sdxl
-
createFluxAdapter(): 豪华型black-forest-labs/flux-schnellblack-forest-labs/flux-dev
音频
createWhisperAdapter(): OpenAI 低语openai/whisper
嵌入层
createBGEAdapter(): BGE 嵌入replicate/bge-large-en-v1.5
定期增加更多的适配器。 检查套件导出的最新列表 .
处理错误
try {
const response = await ai.chat.get(messages, {
metadata: { model: 'meta/meta-llama-3-70b-instruct' }
});
} catch (error) {
if (error.message.includes('No transformer registered')) {
console.error('Missing model adapter - register a transformer for this model');
} else if (error.message.includes('Rate limit')) {
console.error('Rate limit exceeded');
} else {
console.error('Error:', error);
}
}
模型格式
复制模型使用格式 owner/model-name数字 :
meta/meta-llama-3-70b-instructstability-ai/sdxlopenai/whispermistralai/mixtral-8x7b-instruct-v0.1
要使用特定版本,请附加版本ID:
meta/meta-llama-3-70b-instruct:fbfb20b472b2f3bdd101412a9f70a0ed4fc0ced78a77ff00970ee7a2383c575d
最佳做法
-
注册适配器: 总是为您使用的模型注册适配器
transformers: { 'owner/model': createAdapter(), } -
Pin 版本: 在生产中使用特定版本
model: 'owner/model:version-id' -
处理缺失的适配器: 提供有用的错误
if (!transformer) { throw new Error('No adapter registered for ' + model); } -
缓存模式列表: 复制的模型列表很大
const models = await replicate.listModels(); // Cache the results -
监视器使用: 每项预测的复制费
console.log('Tokens used:', response.usage.totalTokens); -
测试适配器: 用测试数据验证适配器行为
const testRequest = { messages: [{ role: 'user', content: 'test' }] }; const input = adapter.transformRequest(testRequest); console.log('Model input:', input);
创建模型适配器
以下是创建适配器的完整例子:
import { ModelTransformer } from '@aeye/ai';
import type { Request, Response, Chunk } from '@aeye/core';
export function createMyModelAdapter(): ModelTransformer {
return {
transformRequest: (request: Request) => {
// Extract the last user message as the prompt
const lastMessage = request.messages[request.messages.length - 1];
const prompt = typeof lastMessage.content === 'string'
? lastMessage.content
: lastMessage.content.map(c => c.content).join(' ');
// Build model-specific input
return {
prompt,
temperature: request.temperature ?? 0.7,
max_length: request.maxTokens ?? 500,
top_p: request.topP,
stop_sequences: Array.isArray(request.stop)
? request.stop
: request.stop
? [request.stop]
: undefined,
};
},
transformResponse: (output: unknown): Response => {
const result = output as {
output: string[];
metrics?: { predict_time?: number };
};
// Combine output array into single string
const content = result.output.join('');
return {
content,
finishReason: 'stop',
usage: {
text: { input: 0, output: 0 },
},
};
},
transformStreamChunk: (chunk: unknown) => {
const data = chunk as { output?: string };
return {
content: data.output,
};
},
};
}
API 参考
复制
构造器数字 : new ReplicateProvider(config: ReplicateConfig)
方法数字 :
createExecutor<TContext, TMetadata>(config?)- 用适配器创建执行器createStreamer<TContext, TMetadata>(config?)- 用适配器创建流体listModels(config?)- 列出可复制的模型generateImage<TContext>(request, ctx, config?)- 生成图像transcribe<TContext>(request, ctx, config?)- 录音embed<TContext>(request, ctx, config?)- 生成嵌入
支持的特性
- QQ 聊天补全( 有适配器)
- ++ 流 (依赖模型)
- QQ 图像生成( 有适配器)
- * 音频复制(带有适配器)
- * 嵌入(带有适配器)
- 自定义模型
- QQ 版本针入
- 函数调用( 依赖模型)
- * 结构化产出(依赖模型)
特性可用性取决于具体的模型和适配器.
查找模式
浏览可用的模型 :
流行模式类别:
- 语言模型:Llama,米斯特拉尔,米斯特拉尔等.
- 图像生成: SDXL,Flux,ControlNet等.
- 音频:华声,MusicGen等.
- 视频:稳定视频传播等.
- 图像增强:升起,面相还原等.
获取 API 密钥
- 访问 https://repe.com (中文(简体) )
- 创建账户或签名于
- 导航到 https://retravel.com/count/api-tokens 页面存档备份,存于互联网档案馆
- 生成新的 API 令牌
- 在环境变量中安全存储
相关软件包
- @ aeye/ 核心: 核心@aeye框架类型和接口
- @aeye/ai (韩语):AI抽象和公用事业
- @aeye/ openai (韩语): OpenAI 供应商
- @aye/人类: Anthropic Claude供应商
- @ aeye/开路器: 多供应商网关
链接
许可证
GPL-3.0 (英语)
捐款
欢迎贡献,特别是新的模型适配器! 请看主线 @ aeye 仓库 捐款准则.
贡献适应器
提供一个新的模型适配器:
- 在
src/adapters.ts - 导出它从
src/index.ts - 为适配器添加测试
- 用用法示例更新此 README
- 提交拉动请求
支助
关于议题和问题清单: