提示词工程
刀刀
0字
0分钟
2026/8/17
前言
为减少 AI 幻觉、提升回答准确性而优化提问的过程,即为提示词工程。核心在于如何提问才能获得更优质的回答。
基本要素
- 目标任务:要问的内容
- 上下文:给出之前的记录或当前实际情况的上下文
- 输入描述:告知 AI 提问内容或参考资料
- 输出描述:期望 AI 回答的形式与格式要求
高级要素
- 角色扮演:让 AI 模拟特定角色,如医生、律师、记者、程序员等
- 举例:复杂问题给出具体示范
- 分隔符:用分隔符隔开提示词各区域,避免混淆。常用
###、---等 - 思考步骤:要求 AI 按指定顺序思考,先做什么、后做什么
举例

思考
一个数组累加问题都需要写大量提示词,用户不可能每次提问都写完整提示词。
因此,开发 AI 应用的任务之一是在应用内根据其作用内置好提示词。作为 AI 应用开发者,50% 的工作量在思考如何准备高质量的上下文。
提示词文档
上下文和提示词通常记录为 Markdown 格式,主流大模型均支持 Markdown 格式输入,回复也多为 Markdown 格式。
md
# 角色
你是一个优秀的前端工程师,你的代码都是高质量代码,追求代码性能
# 技术背景
你所用的技术栈是vue3+elementui,使用html+less+ts开发,你写的项目都是ts代码
# 输入描述
你会接收到一些前端问题,以及一些前端的技术文档
# 输出描述
你要针对问题和要求,给出具体的前端代码,不需要过多的技术描述,直接给代码
# 思考步骤
1. 思考需求的技术方案
2. 选择最合适的技术方案
3. 给出基本的实现代码
4. 按可维护性、可扩展性给出代码js
const express = require('express')
const cors = require('cors')
const OpenAI = require('openai') // 专门用来按标准请求大模型接口的一个sdk库
const app = express()
const fs = require('fs')
app.use(cors())
// 同步读取
const systemContext = fs.readFileSync('./context.md')
// 转文本,否则是buffer
const systemString = systemContext.toString()
// 重写 fetch,让整个项目通过 fetch 发请求时会打印一些东西
const originalFetch = global.fetch
global.fecth = async function (...args) {
const [url, options = {}] = args
console.log('fetching', url, options)
try {
const response = await originalFetch.apply(this, args) // 调用原始 fetch
const clonedResponse = response.clone() // 克隆响应以便读取body而不影响原始响应
for (const [key, value] of Object.entries(options.headers)) {
console.log(`${key}: ${value}`)
}
const result = await clonedResponse.json() // 尝试读取响应体
return response
} catch (error) {
console.error(`Error: ${error}`)
}
}
// 存储历史消息
const messageList = [
{
role: 'system',
content: systemString,
},
]
const openai = new OpenAI({
apiKey: 'sk-xxxxxx',
baseURL: 'xxx',
})
app.get('/llm', async (req, res) => {
const keyword = req.query.keyword
const queryObj = {
role: 'user',
content: keyword,
}
messageList.push(queryObj) // 每次提问保存上下文
const aiRes = await openai.chat.completions.create({
model: '',
messages: messageList,
})
messageList.push(aiRes.choices[0].message) // 每次回答保存上下文
res.json(aiRes.choices[0].message.content)
})
app.listen(3000, () => {
console.log('Server is running on port 3000')
})