#!/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(); }