Files
server-configs/silicon.js

225 lines
5.7 KiB
JavaScript
Raw Normal View History

2026-02-13 22:24:27 +08:00
#!/usr/bin/env node
/**
* SiliconFlow API Client
* 支持 GLM-4 等模型
*/
const fs = require('fs');
const path = require('path');
const https = require('https');
// 配置
const CONFIG_PATH = process.env.SILICONFLOW_CONFIG_PATH ||
path.join(process.env.HOME || process.env.USERPROFILE, '.config', 'siliconflow', 'api_key');
const API_KEY = fs.readFileSync(CONFIG_PATH, 'utf8').trim();
const API_URL = 'https://api.siliconflow.cn/v1/chat/completions';
const MODEL = 'Pro/moonshotai/Kimi-K2.5';
class SiliconFlow {
constructor() {
this.apiKey = API_KEY;
this.model = MODEL;
}
async chat(messages, options = {}) {
const maxTokens = options.maxTokens || 4096;
const temperature = options.temperature || 0.7;
const data = JSON.stringify({
model: this.model,
messages: messages,
max_tokens: maxTokens,
temperature: temperature
});
return new Promise((resolve, reject) => {
const url = new URL(API_URL);
const options = {
hostname: url.hostname,
port: url.port || 443,
path: url.pathname,
method: 'POST',
headers: {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(data)
},
timeout: 60000
};
const req = https.request(options, (res) => {
let body = '';
res.on('data', chunk => body += chunk);
res.on('end', () => {
try {
const json = JSON.parse(body);
if (json.choices && json.choices[0]) {
resolve(json.choices[0].message.content);
} else {
reject(new Error(`API 错误: ${body}`));
}
} catch (e) {
reject(e);
}
});
});
req.on('error', reject);
req.write(data);
req.end();
});
}
async complete(prompt, language = 'javascript') {
const messages = [
{
role: 'system',
content: `你是专业程序员,擅长写高质量 ${language} 代码。只输出代码,不要解释。`
},
{
role: 'user',
content: `${language} 写代码:\n\n${prompt}`
}
];
return await this.chat(messages);
}
async fixBug(code, error) {
const messages = [
{
role: 'system',
content: `你是资深程序员,擅长调试和修复 bug。只输出修复后的完整代码。`
},
{
role: 'user',
content: `修复以下代码的 bug:\n\n错误: ${error}\n\n代码:\n${code}`
}
];
return await this.chat(messages);
}
async explain(code) {
const messages = [
{
role: 'system',
content: `你是专业程序员,善于解释代码。`
},
{
role: 'user',
content: `解释以下代码:\n\n${code}`
}
];
return await this.chat(messages);
}
async rewrite(code, instructions) {
const messages = [
{
role: 'system',
content: `你是专业程序员,擅长重构和优化代码。只输出优化后的完整代码。`
},
{
role: 'user',
content: `重写以下代码:\n\n要求: ${instructions}\n\n原代码:\n${code}`
}
];
return await this.chat(messages);
}
}
async function main() {
const args = process.argv.slice(2);
const command = args[0] || 'help';
const sf = new SiliconFlow();
try {
switch (command) {
case 'chat':
const msg = args.slice(1).join(' ');
console.log('\n🤖 SiliconFlow:\n');
const response = await sf.chat([{ role: 'user', content: msg }]);
console.log(response);
break;
case 'code':
const prompt = args.slice(1).join(' ');
console.log('\n💻 生成代码:\n');
const code = await sf.complete(prompt);
console.log(code);
break;
case 'fix':
const error = args[1] || '未知错误';
const buggyCode = args.slice(2).join(' ');
console.log('\n🔧 修复 bug:\n');
const fixed = await sf.fixBug(buggyCode, error);
console.log(fixed);
break;
case 'explain':
const codeToExplain = args.slice(1).join(' ');
console.log('\n📖 解释代码:\n');
const explained = await sf.explain(codeToExplain);
console.log(explained);
break;
case 'rewrite':
const instructions = args[1] || '优化代码';
const oldCode = args.slice(2).join(' ');
console.log('\n♻ 重写代码:\n');
const rewritten = await sf.rewrite(oldCode, instructions);
console.log(rewritten);
break;
case 'version':
console.log(`\n🤖 SiliconFlow API Client`);
console.log(`Model: ${sf.model}\n`);
break;
case 'help':
default:
console.log(`
🤖 SiliconFlow AI 编程助手
用法:
silicon chat "你好" # 对话
silicon code "写一个HTTP服务器" # 生成代码
silicon fix "错误信息" " buggy code" # 修复 bug
silicon explain "code" # 解释代码
silicon rewrite "优化" "code" # 重写代码
silicon version # 版本
silicon help # 帮助
示例:
silicon code "用 Node.js 写一个计算器"
silicon fix "Cannot read property" "const a = b.c"
配置:
API Key: ~/.config/siliconflow/api_key
模型: ${sf.model}
支持的模型:
- Pro/zai-org/GLM-4.7
- deepseek-ai/DeepSeek-V2
- Qwen/Qwen2.5-Coder-32B-Instruct
`);
break;
}
} catch (error) {
console.error('\n❌ 错误:', error.message);
}
}
module.exports = { SiliconFlow };
if (require.main === module) {
main();
}