创建工程
pnpx sv create demo
cd demo
pnpm i openai
安装openai
cd demo
pnpm i openai
设置.env
OPENAI_API_KEY="sk-xxxx"
OPENAI_BASE_URL="https://api.fe8.cn/v1"
编辑src/api/chat/+server.js
import { OpenAI } from 'openai';
import { OPENAI_API_KEY, OPENAI_BASE_URL } from '$env/static/private';
const openai = new OpenAI({
apiKey: OPENAI_API_KEY,
baseURL: OPENAI_BASE_URL
});
export async function POST({ request }) {
try {
const { prompt } = await request.json();
const completion = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: prompt }]
});
return new Response(JSON.stringify({
result: completion.choices[0].message.content
}), {
status: 200,
headers: { 'Content-Type': 'application/json' }
});
} catch (error) {
return new Response(JSON.stringify({
error: error.message
}), {
status: 500,
headers: { 'Content-Type': 'application/json' }
});
}
}
编辑+page.svelte
<script>
let prompt = "";
let result = "";
let isLoading = false;
let error = "";
async function handleSubmit() {
isLoading = true;
error = "";
try {
const response = await fetch("/api/chat", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ prompt }),
});
if (!response.ok) throw new Error("请求失败");
const data = await response.json();
if (data.error) throw new Error(data.error);
result = data.result;
} catch (err) {
error = err.message;
} finally {
isLoading = false;
}
}
</script>
<main>
<form on:submit|preventDefault={handleSubmit}>
<textarea bind:value={prompt} placeholder="输入提示词..."></textarea>
<button type="submit" disabled={isLoading}>
{isLoading ? "生成中..." : "生成"}
</button>
</form>
{#if error}
<div class="error">{error}</div>
{/if}
{#if result}
<div class="result">{result}</div>
{/if}
</main>
<style>
textarea {
width: 100%;
height: 100px;
margin: 1rem 0;
}
.error {
color: red;
}
.result {
white-space: pre-wrap;
}
</style>
编辑运行
pnpm build
pnpm preview
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?