🤖✨ ChatGPT API深度体验:让AI看懂图片、听懂语音、调用你的代码

前言

当你让AI看懂医疗报告、实时翻译会议录音、甚至自动查询航班------ 这不再是科幻电影,而是ChatGPT API的日常操作!作为开发者2025年必备利器,它能:

  • 🌐 128K超长上下文:直接分析整本《三体》

  • 🖼️ 多模态交互:图文理解+语音转写

  • 🔌 函数调用:3行代码教会AI调用你的服务

  • .....

本文将手把手带你玩转这些「超能力」!

代码仓库: github.com/SuYxh/chatg...

如何使用 ChatGPT API

什么是 ChatGPT API 🌐

ChatGPT API 是 OpenAI 提供的一个接口,允许开发者将 ChatGPT 模型(如 GPT-3.5、GPT-4)集成到自己的应用中,比如网站、App、小程序、机器人等。它提供了强大的自然语言理解与生成能力,能够实现自然语言理解与生成、多轮对话、内容创作等多种功能。

简单理解:ChatGPT API = 让你的程序可以"直接调用 ChatGPT 智能大脑"!

ChatGPT API 的主要特点 📋

特点类别 描述 优势/用途
🤖 对话式结构 使用 messages 实现多轮对话,支持 systemuserassistant角色 上下文记忆强,模拟真实对话,非常适合聊天机器人、问答系统
🔧 模型选择 支持 gpt-3.5-turbogpt-4gpt-4-turbo 根据预算和性能灵活选择,GPT-4-Turbo 高性价比
🎛 参数可调节 temperaturetop_pmax_tokens 控制输出风格、创意度、回复长度,自定义对话风格
💬 流式响应 支持 stream: true 实时输出结果 类似打字机效果,提升用户体验,适合聊天界面或写作应用
🌍 多语言支持 能处理中文、英文、日语、韩语、德语等几十种语言 可用于国际化产品、多语言客服、全球化智能助手
🧠 上下文长度支持 GPT-4-Turbo 最多支持 128K tokens 可用于大文档问答、长文章摘要、代码分析等场景
🛠 函数调用 支持 Function Calling、工具插件调用功能 AI 可调用你的 API,具备实际执行能力,适合复杂业务场景

Token ✨

什么是 Token

Token 语言模型处理文本的基本单位。你可以理解为"比字小,比词粗"的单位。

  • 对于英文,一个 token 通常是 4 个字符左右 ,例如:
    • ChatGPT 是一个 token
    • is, a, great, tool 是 4 个 token
  • 对于中文,一个字一般就是 1 个 token(比如:"你好"是 2 个 token)

举个例子:

文本内容 Token 数量估算
"Hello, how are you?" 5 个 token
"今天天气真不错。" 7 个 token(每个字或符号算一个)
Markdown/HTML 文本 通常比字符数少 25~30%
英文论文一页(500词) 约 700~800 token
中文一页(500字) 约 500~600 token

Token计费规则

OpenAI 采用 输入****Token + 输出Token 的总量计费(包括输入+输出),不同模型价格不同。

👉 截至 2024 年的 GPT 模型定价(单位:USD 美元/ 1M tokens):platform.openai.com/docs/pricin...

如何查看Token消耗

  1. 使用 API 返回的 usage 字段(最直接)

每次你调用 ChatCompletion,返回结果里就会带有这个字段:

JavaScript 复制代码
const { OpenAI } = require("openai");

const openai = new OpenAI({ apiKey: 'YOUR_KEY' });

async function getTokenUsage() {
  const response = await openai.chat.completions.create({
    model: "gpt-3.5-turbo",
    messages: [{ role: "user", content: "Hello" }]
  });

  console.log(`输入 token: ${response.usage.prompt_tokens}`);
  console.log(`输出 token: ${response.usage.completion_tokens}`);
  console.log(`总消耗: ${response.usage.total_tokens}`);
}


"usage": {
  "prompt_tokens": 600,
  "completion_tokens": 400,
  "total_tokens": 1000
}
  • prompt_tokens:输入消耗
  • completion_tokens:输出消耗
  • total_tokens:总 token,用来计费
  1. 使用官方工具手动估算

OpenAI 提供了一个可视化工具: 👉 Tokenizer 工具地址(OpenAI 官方)

你可以在这里粘贴任意文本,查看它将被分成多少个 token。

🔍 为什么不同模型下 token 数不同?

原因是:**不同模型使用的 Tokenizer(分词器)不同。**OpenAI 每个模型在训练时,都会选择一个特定的分词方式(Tokenizer)。虽然这些 Tokenizer 都是基于 Byte Pair Encoding(BPE)方法,但它们的细节是有差异的:

模型 使用的 Tokenizer 名称 特点描述
GPT-3 p50k_base 原始 GPT-3 使用的 tokenizer,分词较细
Codex (代码模型) p50k_edit 专为代码编辑优化的 tokenizer
GPT-3.5-Turbo cl100k_base 更高效、token 更少,适配新模型
GPT-4 cl100k_base 与 GPT-3.5-Turbo 一样,更统一,token 压缩更好

不同模型 = 不同的 tokenizer → 相同文本会分成不同数量的 token,这会影响成本、性能、估算结果

  1. 使用 tiktoken 工具

OpenAI 提供了一个 Python 库来计算 token:

python 复制代码
import tiktoken

encoding = tiktoken.encoding_for_model("gpt-4")
text = "你好,世界"
tokens = encoding.encode(text)
print(f"Token 数量: {len(tokens)}")  # 输出 5

上下文窗口(Context Window)🔍

理解"上下文窗口 "(context window)是核心关键之一。它直接影响你能发送多长的 prompt、多轮对话记忆、处理多大文档,以及......你要花多少钱 💸

什么是"上下文窗口"

上下文窗口(Context Window)就是:

模型一次"看得见"的 token 数量总上限(包括你的输入 + 它的输出)。

  • 它不是字符数,也不是字节数,而是 token
  • 超出这个窗口,模型就 "看不见"之前的内容了,相当于"忘掉"了

不同模型的上下文窗口大小

模型名称 上下文窗口****大小(tokens) 估算最大可处理字符数 主要特点与说明
GPT-4.1 1,000,000 ~750,000 字符 OpenAI 于 2025 年 4 月发布的最新旗舰模型,支持高达 100 万 tokens 的上下文窗口,适用于处理超长文本和复杂任务。
GPT-4 Turbo 128,000 ~96,000 字符 GPT-4 的高效版本,具有更大的上下文窗口和更低的成本,适用于需要处理长文本的应用场景。
GPT-4 8,192 / 32,768 ~6,000 / ~24,000 字符 标准版本的 GPT-4,提供两个上下文窗口选项,适用于一般的文本生成和理解任务。
GPT-4o 128,000 ~12,000 字符 成本效益高的模型,适用于对上下文窗口要求不高的应用,如实时聊天和简单的文本处理。
GPT-3.5 Turbo 16,385 ~96,000 字符 多模态模型,支持文本、图像和语音输入,适用于多语言和多模态任务。

💡 记住:上下文 = 你的提问 + 系统提示 + 模型回答,总 token 不可超过此限制!

📦 举个例子:

你使用 GPT-4-turbo:

JavaScript 复制代码
System prompt:1000 tokens  
用户对话历史(多轮):8000 tokens  
你当前提问:500 tokens  
模型生成的回复:只能用 128000 - 已用的 token

一旦你发送的内容 + 模型回复长度 > 128K,API 会报错或者自动截断前面的内容(可能丢失关键信息)。

成本也和上下文窗口密切相关

上下文越大 → token 越多 → 成本越高

发送内容长度 回复长度 使用 GPT-4-Turbo Token 总数 费用估算
1000 tokens 1000 tokens 2000 $0.31 + $0.03 = $0.34
30,000 tokens 1000 tokens 31,000 $0.31 + $0.03 = $0.34

建议的最佳实践:

场景 做法建议
多轮对话 控制历史轮数 / 精选上下文摘要 / 截断旧内容
长文处理(PDF、小说) 切段处理,或使用 GPT-4-turbo 一次输入全文
自动摘要 / 归纳 用 summary 替换旧对话,压缩 token 数量
成本优化 用 GPT-3.5 处理简单内容,GPT-4 用在高价值场景

常用参数详解

在上述案例中只用了很基础的参数,比如 modelmessagestemperature。但实际上 ChatGPT API (尤其是 chat.completions 接口)支持更多参数,可以细致控制模型行为和生成效果 。下面我将系统、详细、以开发者视角地总结一下每个常用参数。

参数概览

参数名 类型 作用 建议与示例
model string 指定使用哪个模型,比如 gpt-4, gpt-4o, gpt-3.5-turbo 必填。根据需求选模型,比如长文本用 gpt-4o。 示例:model: 'gpt-4o'
messages array 传递对话历史,控制上下文(每条消息包括 rolecontent 必填。标准结构,系统、用户、助手角色示例:见下面细节
temperature number 控制生成内容的随机性。值越大,回答越随机越有创意 通常设 0.2-1 正式场景稳定输出建议 0.2,创意内容建议 0.8 示例:temperature: 0.7
top_p number 另一个随机性控制参数(Nucleus Sampling)。一般和 temperature 二选一 通常不同时用。一般保留 temperature
n integer 一次生成多少个回答(选项) 默认为 1。设为 2 或以上可以生成多版本回答供选择 示例:n: 3
stream boolean 是否开启流式输出(边生成边返回) 建议聊天产品使用,体验更好 示例:stream: true
stop string[]string 设定遇到特定文本就停止生成 用于控制回答结构,比如遇到 "\\n\\n" 停止
max_tokens integer 限制单次输出最大 token 数量 防止回答太长耗费过多 token 示例:max_tokens: 300
presence_penalty number 惩罚模型重复提及新主题,提高内容多样性 设为正数让回答更爱提新点子;设为负数更守旧 示例:presence_penalty: 0.6
frequency_penalty number 惩罚模型在回答中重复同样的词句 设为正数减少啰嗦;适合对内容要求紧凑的场景
logit_bias object 调整某些 token 出现概率(token -> -100~100 权重) 高级用法,比如强制避免说某些话
user string 填用户唯一标识 ID,有助于模型行为分析和滥用检测 可选。但建议加。示例:user: 'user-12345'
tools array 定义可以让模型调用的外部函数(Function Calling) 高级场景,如调用天气 API、数据库查询等

重点参数示范

messages
json 复制代码
[
  { "role": "system", "content": "你是一个友善的写作助手。" },
  { "role": "user", "content": "帮我写一首关于春天的诗。" }
]
role 说明
system 设定 AI 的身份、语气、风格(非常重要)
user 用户输入内容
assistant AI 回复内容(可选,构建多轮历史)
temperature vs top_p
  • temperature 高:更疯狂、有创意,比如写小说
  • temperature 低:更稳定、严肃,比如写法律文档
  • top_p 也控制"随机性",但更温和,一般不与 temperature 同时调。

常规建议:只设 temperature 就够了,严肃文档设 0.2;创意文案设 0.7。

stream(流式返回)

适合做实时打字效果

JavaScript 复制代码
stream: true
  • 服务器会一段一段发回来
  • 你需要监听 data 事件不断渲染内容
  • 用在聊天机器人体验非常自然
stop(停止词)

比如你想让回答到"END"就立刻停止:

JavaScript 复制代码
stop: ["END"]

当生成到 END 时模型会停止继续输出。

stop 可以配置特定的词语就停止嘛?

max_tokens(控制输出长度)

假设你只想要一小段回答,怕模型废话太多:

JavaScript 复制代码
max_tokens: 200

最大只生成 200 tokens 左右的文本(注意不是字符!)。

presence_penalty / frequency_penalty
  • presence_penalty 正数:鼓励引入新话题
  • frequency_penalty 正数:减少重复词

适合写作、聊天防止啰嗦时用。比如:

JavaScript 复制代码
presence_penalty: 0.5,
frequency_penalty: 0.5

可以让回复更简洁、丰富。

tools(调用外部函数)

如果定义一个获取天气的函数:

yaml 复制代码
tool: [
  {
    name: "get_weather",
    description: "获取指定城市天气",
    parameters: {
      type: "object",
      properties: {
        location: {
          type: "string",
          description: "城市名称"
        }
      },
      required: ["location"]
    }
  }
]

这样模型就能在需要时主动提出调用这个函数!

不同应用场景推荐参数表

应用场景 推荐模型 temperature presence_penalty frequency_penalty max_tokens 说明
文案创作(短文、广告语、标题) gpt-4o / gpt-4-turbo 0.8~1.2 0.6~1.0 0.2~0.5 500~1000 高创意,强调新颖表达,不怕轻微偏离
技术文档撰写(标准化文档、说明书) gpt-4 / gpt-4-turbo 0.2~0.4 0.0~0.2 0.0~0.2 1000~2000 低温度,输出规范、严谨、连贯
智能客服对话 gpt-3.5-turbo 0.3~0.5 0.0~0.3 0.0~0.5 500~1000 要求稳定,且尽量避免废话、重复
长文档摘要 / 归纳总结 gpt-4-turbo / gpt-4o 0.2~0.4 0.0~0.2 0.0~0.2 1500~3000 尽量客观总结,结构清晰
创意写作(小说、剧本、故事大纲) gpt-4o 0.9~1.3 0.7~1.2 0.0~0.3 2000~5000 鼓励想象力暴走,允许自由发挥
法律、合同、政策文案 gpt-4 0.1~0.3 0.0 0.0 1000~3000 要求准确、正式、逻辑清晰
代码生成 / 代码解释 gpt-4o / gpt-4-turbo 0.1~0.3 0.0~0.1 0.0~0.2 500~2000 低创意,强调正确、清晰、简洁
多轮聊天机器人 gpt-3.5-turbo / gpt-4o 0.6~0.8 0.5~0.7 0.2~0.4 500~1500 保持活泼又不过度偏题,适合对话系统
思维导图生成 / 头脑风暴 gpt-4o 1.0~1.5 0.8~1.5 0.0~0.2 1000~3000 高自由度,输出尽可能多的想法

实操技巧与开发示例

代码仓库: github.com/SuYxh/chatg...

公共代码 utils/openai-client.js :

javascript 复制代码
import OpenAI from 'openai';
import dotenv from 'dotenv';

dotenv.config();

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

export { openai };

ChatGPT 核心能力实操 ⚙️

自然语言理解(NLU)

ChatGPT 能够准确理解人类自然语言表达的内容,包括:

  • 语义理解:能读懂各种句式、短语和隐含含义
  • 意图识别:理解用户真正想要做什么,比如提问、命令、建议
  • 上下文理解:根据对话历史推断出当前语境和逻辑关联
  • 歧义处理:遇到模棱两可的表达时,能给出合理推测或主动澄清

✅ 应用场景:

  • 聊天机器人
  • 智能客服
  • 对话式搜索

📄 Demo 案例

javascript 复制代码
import { openai } from '../utils/openai-client.js';

// 预定义意图列表,供模型参考
const INTENT_CATEGORIES = [
  "订票",
  "取消订单",
  "查询航班",
  "酒店预订",
  "天气查询",
  "投诉反馈",
  "闲聊",
  "其他"
];

export async function understandIntent(userInput) {
  const response = await openai.chat.completions.create({
    model: 'gpt-4.1-mini',
    messages: [
      { role: 'system', content: `你是一个意图识别引擎,需要根据用户的输入,从以下意图中选择最匹配的一项返回:

${INTENT_CATEGORIES.map((c, i) => `${i + 1}. ${c}`).join('\n')}

只返回最匹配的意图名称,其他任何内容都不要输出。` },
      { role: 'user', content: userInput },
    ],
  });

  console.log('识别结果:', response.choices[0].message.content.trim());
}


// 调用
understandIntent('我想预定五一飞往杭州的航班')

自然语言生成(NLG)

ChatGPT 擅长流畅地生成符合人类习惯的自然语言文本,包括:

  • 回答问题:准确、逻辑清晰地给出回答
  • 内容创作:撰写故事、诗歌、广告文案、社交媒体帖子
  • 多样风格切换:可以根据指令改变语气(正式、幽默、感性)
  • 多语言输出:支持中、英、日、韩、德等多种语言写作

✅ 应用场景:

  • 内容营销
  • 自动写作
  • 知识问答平台

📄 Demo 案例

javascript 复制代码
import { openai } from '../utils/openai-client.js';

export async function generateShortStory(prompt) {
  const response = await openai.chat.completions.create({
    model: 'gpt-4.1-mini',
    messages: [
      { role: 'system', content: '你是一个优秀的短篇故事作者,写的内容不超过 100 字' },
      { role: 'user', content: prompt },
    ],
  });

  console.log('生成的故事:', response.choices[0].message.content.trim());
}

// 调用
generateShortStory('写一个关于勇敢小狗的温暖故事')

多轮对话管理(Contextual Dialogue)

ChatGPT 可以在多轮对话中保持上下文一致性和逻辑连贯性:

  • 记住历史对话:在当前对话窗口内,追溯上下文,记得前几轮对话
  • 动态调整回答:根据最新输入和历史内容,自适应调整回复
  • 情绪跟踪(部分场景):模拟理解用户的情绪变化,调整回应

✅ 应用场景:

  • 智能助理
  • 聊天 App
  • 游戏 NPC 互动

📄 Demo 案例

javascript 复制代码
import { openai } from '../utils/openai-client.js';

export async function continueConversation(history, userInput) {
  const messages = [
    ...history,
    { role: 'user', content: userInput },
  ];

  const response = await openai.chat.completions.create({
    model: 'gpt-4.1-mini',
    messages: messages,
  });

  console.log('AI 回答:', response.choices[0].message.content.trim());
  return messages.concat({ role: 'assistant', content: response.choices[0].message.content.trim() });
}

// 调用
let history = [];
await withLoading(async () => {
  history = await continueConversation(history, '你好');
  history = await continueConversation(history, '你喜欢什么食物?');
  history = await continueConversation(history, '我之前的问题是什么?');
});

信息检索与总结(Summarization & Extraction)

虽然 ChatGPT 不实时联网(除非用专门插件或接 API 调用搜索引擎),但它可以基于训练数据:

  • 总结长文档:提取重点,写摘要
  • 列出要点:将复杂内容组织成清单或结构化信息
  • 比较分析:对比不同事物、观点、产品特点

✅ 应用场景:

  • 报告生成
  • 新闻摘要
  • 法律、学术辅助

📄 Demo 案例

javascript 复制代码
import { openai } from '../utils/openai-client.js';

export async function summarizeText(text) {
  const response = await openai.chat.completions.create({
    model: 'gpt-4.1-mini',
    messages: [
      { role: 'system', content: '你是一个专业的文档摘要助手' },
      { role: 'user', content: `请帮我总结以下内容:\n${text}` },
    ],
  });

  console.log('摘要内容:', response.choices[0].message.content.trim());
}

// 调用
 summarizeText('ChatGPT 是由美国人工智能研究公司OpenAI开发的一款基于大规模语言模型的对话生成系统,属于 GPT系列的重要应用之一。自 2022 年 11 月正式发布以来,它凭借强大的自然语言处理能力和交互性,迅速成为全球关注的焦点。ChatGPT基于 Transformer 架构构建,一种擅长处理序列数据(如文本)的深度学习模型,通过 "自注意力机制" 捕捉文本中的长距离依赖关系,能高效处理上下文语义。其训练数据涵盖互联网级别的海量文本(书籍、网页、对话等),早期版本(如 GPT-3)参数量达数百亿级,后续版本(如 GPT-4)进一步提升至万亿级,显著增强了逻辑推理、多模态理解等能力。')

代码理解与生成(Code Understanding & Generation)

ChatGPT 在编程辅助方面也非常强大(特别是 GPT-4.0 之后):

  • 写代码:支持 Python、JavaScript、C++、HTML、SQL 等主流语言
  • 代码解释:帮你理解已有代码的功能和逻辑
  • 代码调试建议:发现常见错误并提出修正方案
  • 算法设计辅助:根据需求快速草拟解决方案

✅ 应用场景:

  • AI 编程助手(如 Copilot 类工具)
  • 技术支持
  • 教学和学习辅导

📄 Demo 案例

javascript 复制代码
import { openai } from '../utils/openai-client.js';

export async function generateCode(taskDescription) {
  const response = await openai.chat.completions.create({
    model: 'gpt-4.1-mini',
    messages: [
      { role: 'system', content: '你是一个资深前端工程师' },
      { role: 'user', content: `请帮我用 JavaScript 实现以下功能:\n${taskDescription}` },
    ],
  });

  console.log('生成的代码:\n', response.choices[0].message.content.trim());
}

// 调用
generateCode('使用 js 写一个快排函数')

多模态能力示例 🌟

GPT-4o 支持多模态输入与输出:

  • 文本图片语音 输入
  • 文本语音 输出
  • 视觉理解:可以识别图片中的物体、读图表、分析截图
  • 语音对话:超自然、低延迟的语音交流

✅ 应用场景:

  • 视觉问答(VQA)
  • 智能语音助手
  • 图文搜索

图像理解

javascript 复制代码
// services/vision-image-understanding.js
import { openai } from '../utils/openai-client.js';
import fs from 'fs';

export async function analyzeImage(imagePath, question) {
  const imageBase64 = fs.readFileSync(imagePath, { encoding: 'base64' });
  const dataUrl = `data:image/jpeg;base64,${imageBase64}`;

  const response = await openai.chat.completions.create({
    model: 'gpt-4.1-mini',
    messages: [
      { role: 'system', content: '你是一个专业图像分析助手' },
      {
        role: 'user',
        content: [
          { type: 'text', text: question },
          { type: 'image_url', image_url: { url: dataUrl } }
        ],
      },
    ],
  });

  console.log('图片分析结果:', response.choices[0].message.content.trim());
}

// 调用
analyzeImage('./pic.jpg', '图片中有什么?')

需要理解的图片

图片理解结果

音频转文字

暂时无法在飞书文档外展示此内容

javascript 复制代码
import { openai } from '../utils/openai-client.js';
import fs from 'fs';

export async function transcribeAudio(audioPath) {
  const response = await openai.audio.transcriptions.create({
    file: fs.createReadStream(audioPath),
    model: 'whisper-1'
  });

  console.log('音频转文字结果:', response.text);
}

// 调用
transcribeAudio('./54321.mp3')

Function Calling 🔌

从 GPT-4 开始,ChatGPT 可以调用外部定义的函数:

  • 结构化数据生成:输出符合特定 schema 的 JSON
  • 插件调用:调用搜索引擎、数据库、天气预报、购物网站等服务
  • 动作执行:如发起支付、查询库存、自动化操作

✅ 应用场景:

  • 智能客服(自动查询订单)
  • 企业内部知识库搜索
  • 多任务自动化工作流

📄 Demo 案例

javascript 复制代码
import fetch from 'node-fetch';
import dotenv from 'dotenv';
import { openai } from '../utils/openai-client.js';

dotenv.config();

const QWEATHER_API_KEY = process.env.QWEATHER_API_KEY; // 和风天气 API Key

async function get_weather({ location }) {
  try {
    // 使用 GeoAPI 获取城市的 Location ID
    // 对应开发文档 https://dev.qweather.com/docs/api/geoapi/
    const geoUrl = `https://n336x6y9yf.re.qweatherapi.com/geo/v2/city/lookup?location=${encodeURIComponent(location)}&key=${QWEATHER_API_KEY}`;
    const geoRes = await fetch(geoUrl, { timeout: 5000 });
    if (!geoRes.ok) {
      throw new Error(`GeoAPI请求失败: ${geoRes.status} ${geoRes.statusText}`);
    }

    const geoData = await geoRes.json();
    if (geoData.code !== '200' || !geoData.location || geoData.location.length === 0) {
      return `抱歉,找不到 ${location} 的天气信息`;
    }

    const locationId = geoData.location[0].id;
    console.log('locationId ->', locationId);

    // 使用 Location ID 获取实时天气数据
    // 对应开发文档: https://dev.qweather.com/docs/api/weather/weather-daily-forecast/
    const weatherUrl = `https://n336x6y9yf.re.qweatherapi.com/v7/weather/3d?location=${locationId}&key=${QWEATHER_API_KEY}`;
    const weatherRes = await fetch(weatherUrl, { timeout: 5000 });
    if (!weatherRes.ok) {
      throw new Error(`天气API请求失败: ${weatherRes.status} ${weatherRes.statusText}`);
    }

    const weatherData = await weatherRes.json();
    console.log('weatherData ->', weatherData); // 打印 weatherData 以进行调试,确保正确获取了天气数据

    if (weatherData.code !== '200') {
      return `获取 ${location} 的天气信息失败,错误码:${weatherData.code}`;
    }

    return weatherData.daily[1];
  } catch (error) {
    console.error('天气查询出错:', error);
    return `获取 ${location} 的天气信息时发生错误:${error.message}`;
  }
}

export async function functionCallingExample() {
  const response = await openai.chat.completions.create({
    model: 'gpt-4.1-mini',
    messages: [
      { role: 'system', content: '你可以调用用户定义的函数。' },
      { role: 'user', content: '明天北京天气怎么样?' },
    ],
    tools: [
      {
        type: "function",
        function: {
          name: "get_weather",
          description: "获取城市天气",
          parameters: {
            type: "object",
            properties: {
              location: {
                type: "string",
                description: "城市名称,比如:北京"
              }
            },
            required: ["location"]
          }
        }
      }
    ],
    tool_choice: "auto" // 让模型自动决定是否调用函数
  });

  const message = response.choices[0].message;

  if (message.tool_calls && message.tool_calls.length > 0) {
    const toolCall = message.tool_calls[0];
    console.log('检测到需要函数调用:', JSON.stringify(toolCall, null, 2));

    if (toolCall.function && toolCall.function.name === 'get_weather') {
      const args = JSON.parse(toolCall.function.arguments);
      const result = await get_weather(args);

      // console.log(`\n函数 get_weather 执行结果:`, result);

      // 这里增加一段新的逻辑:把 result 交给模型总结
      const finalResponse = await openai.chat.completions.create({
        model: 'gpt-4.1-mini',
        messages: [
          { role: 'system', content: '你是一个天气播报员,负责把天气信息转成自然流畅的人类语言。' },
          { role: 'user', content: `帮我根据以下天气数据,总结成一段话:${JSON.stringify(result)}` }
        ],
      });

      const finalMessage = finalResponse.choices[0].message.content;
      console.log('\n最终模型回复:', finalMessage);

    } else {
      console.log(`未识别的函数调用:${toolCall.function?.name}`);
    }
  } else {
    console.log('没有触发函数调用。模型回复内容:', message.content);
  }
}

小结

🔮 未来已来:当API能「看」能「听」能「行动」,我们开发的早已不是工具,而是智能伙伴

相关推荐
西陵7 分钟前
前端框架渲染DOM的的方式你知道多少?
前端·javascript·架构
小九九的爸爸8 分钟前
我是如何让AI帮我还原设计稿的
前端·人工智能·ai编程
海的诗篇_27 分钟前
前端开发面试题总结-JavaScript篇(一)
开发语言·前端·javascript·学习·面试
江城开朗的豌豆37 分钟前
eval:JavaScript里的双刃剑,用好了封神,用不好封号!
前端·javascript·面试
Forever Nore44 分钟前
前端技能包
前端
江城开朗的豌豆1 小时前
JavaScript篇:前端定时器黑科技:不用setInterval照样玩转循环任务
前端·javascript·面试
书中自有妍如玉1 小时前
.net 使用MQTT订阅消息
java·前端·.net
江城开朗的豌豆1 小时前
JavaScript篇:自定义事件:让你的代码学会'打小报告'
前端·javascript·面试
ai产品老杨2 小时前
减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。
前端·vue.js·算法·ecmascript·音视频
lexiangqicheng2 小时前
JS-- for...in和for...of
开发语言·前端·javascript