ChatGPT 和 TypeScript 如何成为最佳拍档
想象一下:您正在用 TypeScript 编写代码,突然间您的服务获得了一种超能力——理解和生成人类文本的能力。ChatGPT API 让这成为现实。在本文中,我们不仅仅是连接 API——我们将构建一个完整的模块来与神经网络通信,该模块稳定、类型安全且可用于生产环境。
如果您认为 AI 集成是科幻小说中的东西,或者是 Google 这样巨头的专利,那么我很高兴地告诉您:OpenAI 提供了一个简单的 REST API,而 TypeScript 凭借其严格的类型检查,使得与之交互变得安全且可预测。让我们在实践中学习。
环境准备:需要安装什么
在编写代码之前,请确保您拥有所有必需的工具。要使用 TypeScript 与 ChatGPT API 交互,您需要:
- Node.js 18 或更高版本(推荐 20 LTS)
- npm 或 yarn 用于包管理
- OpenAI API 密钥——从 platform.openai.com 获取
- 代码编辑器(VS Code、WebStorm——任何您喜欢的)
创建一个新项目并安装依赖项:
mkdir chatgpt-typescriptcd chatgpt-typescriptnpm init -ynpm install openai dotenvnpm install -D typescript @types/node ts-node请注意:我们使用的是 OpenAI 的官方 SDK,它与 TypeScript 配合得很好。dotenv 包将用于安全地存储 API 密钥。
配置 TypeScript 和环境变量
创建一个包含基本设置的 tsconfig.json 文件:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "lib": ["ES2020"], "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"]}现在在项目根目录创建一个 .env 文件:
OPENAI_API_KEY=您的超级秘密密钥重要提示: 将 .env 添加到 .gitignore 中,以防止意外将密钥提交到仓库!
用 TypeScript 编写第一个 ChatGPT 请求
创建一个 src 文件夹和一个 index.ts 文件。让我们从简单的开始:发送一条消息并获取回复。
import OpenAI from 'openai';import dotenv from 'dotenv';
dotenv.config();
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY,});
async function chatWithGPT(prompt: string): Promise<string> { try { const response = await openai.chat.completions.create({ model: 'gpt-4', messages: [ { role: 'system', content: '你是一个有用的助手。' }, { role: 'user', content: prompt }, ], temperature: 0.7, max_tokens: 500, });
return response.choices[0]?.message?.content || '没有回复'; } catch (error) { console.error('请求 ChatGPT 时出错:', error); throw error; }}
// 使用(async () => { const answer = await chatWithGPT('讲一个关于程序员的笑话'); console.log('ChatGPT 说:', answer);})();使用命令 npx ts-node src/index.ts 运行代码。如果一切配置正确,您将看到来自神经网络的回复。请注意类型检查:TypeScript 会自动提示 response 对象的结构,这使得开发更加舒适。
关键参数解析
- model:
gpt-4— 目前最智能的模型。为了节省成本,可以使用gpt-3.5-turbo。 - messages: 消息数组,包含系统消息和用户消息。系统消息设置助手的行为。
- temperature: 控制输出的随机性。值越低,输出越确定;值越高,输出越有创意。
- max_tokens: 回复的最大令牌数。这有助于控制响应长度和成本。