
开发者在使用openai的text-davinci-003模型构建gpt克隆应用时,可能会遇到模型在正常对话中突然插入与上下文无关的代码片段(例如java代码)的情况。这通常发生在模型被用于生成代码、调试或作为通用聊天机器人时。尽管text-davinci-003是一个功能强大的通用文本补全模型,但它并非专门为严格遵循指令或复杂的代码生成任务而优化,尤其是在与更现代的指令遵循模型(如gpt-3.5-turbo和gpt-4)相比时。
text-davinci-003是一个基础模型,它通过预测下一个最可能的词来完成文本。当输入提示不够清晰或模型内部权重在训练数据中遇到大量代码示例时,它可能会“误解”意图,并生成它认为最符合“完成”任务的文本,即使那是一段不相关的代码。此外,它缺乏像新一代模型那样对角色和对话历史的内在理解。
解决此问题的首要且最有效的方法是选择更适合任务的模型。text-davinci-003是OpenAI的旧版Completion API模型,而目前推荐用于聊天和大部分通用任务的是Chat Completion API,它使用gpt-3.5-turbo或gpt-4等模型。这些模型经过指令微调,更擅长理解和遵循用户指令,并能更好地维护对话上下文。
为何选择gpt-3.5-turbo或gpt-4?
将代码从text-davinci-003迁移到gpt-3.5-turbo
以下是如何修改您的server.js以使用gpt-3.5-turbo模型:
import express from "express";
import * as dotenv from "dotenv";
import cors from 'cors';
import { Configuration, OpenAIApi } from "openai"; // 注意:对于Chat Completion API,推荐使用'openai'库的最新版本,它提供了更直观的Chat API客户端
dotenv.config();
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration); // 尽管这里仍然使用OpenAIApi,但我们将调用其Chat Completion方法
const app = express();
app.use(cors());
app.use(express.json());
app.get("/", (req, res) => {
res.status(200).send({
message: "Welcome to OpenAI API",
});
});
app.post('/', async (req, res) => {
try {
const prompt = req.body.prompt;
// 使用Chat Completion API
const response = await openai.createChatCompletion({
model: "gpt-3.5-turbo", // 更改为更适合聊天的模型
messages: [
{ role: "system", content: "你是一个乐于助人的AI助手。" }, // 可以定义AI的角色和行为
{ role: "user", content: prompt } // 用户的输入
],
temperature: 0.7, // 适当调整温度,0为更确定性,1为更随机
max_tokens: 1000, // 调整最大生成token数,以适应预期响应长度
// top_p, frequency_penalty, presence_penalty 也可以应用于Chat Completion,但通常默认值已经很不错
});
res.status(200).send({
bot: response.data.choices[0].message.content // Chat Completion的响应结构不同
});
}
catch (error) {
console.error("OpenAI API Error:", error.response ? error.response.data : error.message); // 更详细的错误日志
res.status(500).send({ error: error.response ? error.response.data : { message: error.message } });
}
});
app.listen(5000, () => console.log("Server is running on port :- http://localhost:5000"));代码修改要点:
即使使用了最先进的模型,清晰、明确的提示工程仍然至关重要。一个模糊或开放的提示可能会导致模型生成不预期的内容。
提示工程的关键原则:
示例:改进的提示结构
在您的server.js中,可以这样构造messages:
// ... 其他代码 ...
app.post('/', async (req, res) => {
try {
const userPrompt = req.body.prompt;
const response = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [
{
role: "system",
content: "你是一个专业的Web开发助手,专注于提供JavaScript相关的代码和建议。请严格遵循用户的请求,不要生成任何与JavaScript无关的语言代码(如Java、Python等)。如果请求与Web开发无关,请礼貌地拒绝。"
},
{
role: "user",
content: userPrompt
}
// 如果是多轮对话,这里还需要加入之前的assistant和user消息
],
temperature: 0.5, // 适当降低温度,减少随机性
max_tokens: 1500,
});
res.status(200).send({
bot: response.data.choices[0].message.content
});
}
catch (error) {
// ... 错误处理 ...
}
});在这个例子中,system消息明确地指示了AI的角色、专业领域、禁止行为以及对无关请求的处理方式。这大大降低了模型生成不相关Java代码的可能性。
通过从text-davinci-003迁移到更强大的Chat Completion模型(如gpt-3.5-turbo或gpt-4),并结合精细的提示工程,您可以显著提高AI生成内容的准确性、相关性,并有效避免生成无关代码的问题,从而构建出更稳定、更智能的GPT克隆应用。
以上就是解决GPT-3.5 API生成无关代码的问题:优化模型选择与提示工程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号