跳转到内容

提示词工程

刀刀
0字
0分钟
2026/8/17

前言

为减少 AI 幻觉、提升回答准确性而优化提问的过程,即为提示词工程。核心在于如何提问才能获得更优质的回答。

基本要素

  • 目标任务:要问的内容
  • 上下文:给出之前的记录或当前实际情况的上下文
  • 输入描述:告知 AI 提问内容或参考资料
  • 输出描述:期望 AI 回答的形式与格式要求

高级要素

  • 角色扮演:让 AI 模拟特定角色,如医生、律师、记者、程序员等
  • 举例:复杂问题给出具体示范
  • 分隔符:用分隔符隔开提示词各区域,避免混淆。常用 ###---
  • 思考步骤:要求 AI 按指定顺序思考,先做什么、后做什么

举例

alt text

思考

一个数组累加问题都需要写大量提示词,用户不可能每次提问都写完整提示词。

因此,开发 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')
})

贡献者

The avatar of contributor named as duyidao duyidao
The avatar of contributor named as 刀刀 刀刀
The avatar of contributor named as Copilot Copilot

页面历史

刀刀博客累计访客 人;文档累计访问量共