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

196 lines
4.9 KiB
JavaScript

#!/usr/bin/env node
/**
* DeepSeek API Client
* 让 DeepSeek 帮你写代码!
*/
const fs = require('fs');
const path = require('path');
const https = require('https');
// 配置
const CONFIG_PATH = process.env.DEEPSEEK_CONFIG_PATH ||
path.join(process.env.HOME || process.env.USERPROFILE, '.config', 'deepseek', 'api_key');
const API_KEY = fs.readFileSync(CONFIG_PATH, 'utf8').trim();
const API_URL = 'https://api.deepseek.com/chat/completions';
const MODEL = 'deepseek-coder';
class DeepSeek {
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: `你是专业程序员,擅长写高质量代码。只输出代码,不要解释。`
},
{
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}\n\n只输出修复后的完整代码。`
}
];
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 function main() {
const args = process.argv.slice(2);
const command = args[0] || 'help';
const ds = new DeepSeek();
try {
switch (command) {
case 'chat':
const msg = args.slice(1).join(' ');
console.log('\n🤖 DeepSeek:\n');
const response = await ds.chat([{ role: 'user', content: msg }]);
console.log(response);
break;
case 'code':
const prompt = args.slice(1).join(' ');
console.log('\n💻 生成代码:\n');
const code = await ds.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 ds.fixBug(buggyCode, error);
console.log(fixed);
break;
case 'explain':
const codeToExplain = args.slice(1).join(' ');
console.log('\n📖 解释代码:\n');
const explained = await ds.explain(codeToExplain);
console.log(explained);
break;
case 'version':
console.log(`\n🤖 DeepSeek API Client`);
console.log(`Model: ${ds.model}\n`);
break;
case 'help':
default:
console.log(`
🤖 DeepSeek AI 编程助手
用法:
deepseek chat "你是一个python专家" # 对话
deepseek code "写一个快速排序" # 生成代码
deepseek fix "错误信息" " buggy code" # 修复 bug
deepseek explain "code" # 解释代码
deepseek version # 版本
deepseek help # 帮助
示例:
deepseek code "用 Node.js 写一个 HTTP 服务器"
deepseek fix "Cannot read property" "const a = b.c"
配置:
API Key: ~/.config/deepseek/api_key
模型: deepseek-coder
`);
break;
}
} catch (error) {
console.error('\n❌ 错误:', error.message);
}
}
module.exports = { DeepSeek };
if (require.main === module) {
main();
}