Files
server-configs/silicon.js
2026-02-13 22:24:27 +08:00

225 lines
5.7 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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();
}