LLM 应用开发技巧 (三):探究 LLM API 的输入和输出

220 阅读6分钟

cover-3d.w1200.jpg

魔法哥的新书 《AI 辅助编程入门》 已经上架了!前几期文章节选了书中的部分章节,分享 LLM 应用开发的实战经验,包括 如何选择模型如何打磨系统提示词 等话题。今天我们继续探讨 LLM API 的进阶用法!

配置 LLM API 的参数

在本书第九章的案例中,我们对于 OpenAI SDK 的使用是比较初级的。实际上在 OpenAI 的 “对话式文本补全” API 协议中,提供了相当丰富的参数,可以更加精细地控制模型的输出行为。这里介绍其中比较常用的几项:

  • temperature:温度参数,用于控制模型生成文本的随机性。温度越高,生成的文本越随机、越发散;温度越低,生成的文本越保守、越集中。比如在创意生成的场景下,可以尝试适当调高这个参数。不同模型对温度参数的范围设定和默认值设定各不相同,建议你查询模型的官方文档。

  • top_p:这个参数也可以在一定程度上影响生成文本的随机性,但不建议与温度参数同时使用。Top-p 参数的取值介于 0 和 1 之间,数值越大,生成的文本越随机。

  • stream:是否开启流式输出模式。对于第九章的案例来说,这个模式并不适用;但对于对话场景来说,流式输出能力就至关重要了。我们将在第十章的案例(网页版智能对话机器人)中详细探讨这个模式的运用。

  • n:当前请求几条生成结果。对于对话场景,这个参数通常就取默认值 1,因为我们只需要一条回复;但在创意生成等场景下,你可能希望一次得到多个结果。

  • response_format:如果把这个参数设置为 { "type": "json_object" },可以限制模型只能输出 JSON 格式的文本。当我们需要进一步处理模型输出的数据时,这个功能就十分有用了。为了达到理想的输出效果,建议在提示词中强调这个要求并提供示例。

  • max_tokens:最大 token 数,用于控制模型生成文本的长度。模型在输出内容的过程中,在达到这个数值时会被强制截断。有时可以用来避免模型的异常输出消耗不必要的成本。有些模型对这个参数设置的默认值较小,容易导致意外截断,因此建议你根据自己的业务需要设置一个合理的数值。

  • toolstool_choice:要求模型进入 “工具选择” 模式,这个功能的前身叫做 “Function Call”。在这种模式下,模型将从预设的工具列表中选择最合适的工具来处理用户的请求。在开发复杂的 AI Agent 时,这个功能往往可以发挥关键性的作用。不过需要注意的是,不是所有的大模型都完整兼容这个功能。

在实际应用中,我们可以根据业务需求来灵活配置这些参数,以获得更好的效果。同时也建议你有空的时候完整阅读 OpenAI 或你所用模型的 API 文档,这对于我们提升自己的 LLM 运用能力会有很大的帮助。

探究 API 的返回数据

我们在调用大模型的 “对话式文本补全” API 时,往往只提取了返回数据中的 choices[0].message.content 字段。其实完整数据中包含了很多有意义的信息,可以帮助我们进一步了解模型的工作机制。以下是一份典型的 GPT API 返回数据,我们来详细看一看:

{
    "id": "chatcmpl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "object": "chat.completion",
    "created": 1709163054,
    "model": "gpt-4o-2024-05-13",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "..."
            },
            "logprobs": null,
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 10,
        "completion_tokens": 61,
        "total_tokens": 71
    },
    "system_fingerprint": "fp_xxxxxxxxxx"
}

你需要了解的部分字段如下:

  • id:这是当前请求的唯一标识符,记录日志和排查故障的时候可能会用到它。

  • model:当前使用的具体模型名称。它和我们在调用 API 时传递的 model 参数可能是不一致的。比如当我们只是宽泛地指定 "gpt-4o" 时,API 会返回当前所用模型的精确版本 "gpt-4o-2024-05-13"

  • choices:这是一个列表,每个元素代表一条输出结果。输出条数是由我们在调用 API 时传递的 n 参数决定的。

  • finish_reason:如果当前输出内容是正常结束的,这个字段的值会是 "stop";如果因为上下文长度限制而结束,它的值会是 "length";如果当前输出处于 “工具选择” 模式,它的值会是 "tool_calls"

  • usage:这个字段包含了当前请求的 token 使用情况。prompt_tokens 表示所有我们在调用 API 时通过 messages 字段输入给模型的 token 总数;completion_tokens 表示模型输出的 token 数;total_tokens 表示前面两者的总和。你可以通过这些信息来计算本次调用的成本

顺便一提,大模型 API 在流式输出模式下,返回的数据结构会有所不同。我们将在第十章详细探讨这个话题。

小结

在本期文章里,我们探讨了 LLM API 的进阶用法,更深入地分析了 API 参数和返回数据。这些知识可以帮助我们更好地理解模型的工作机制、开发出更优质的 LLM 应用。相信会对你有所帮助!

魔法哥最近一年都在做 AI 领域的研发和探索,还有更多心得与你分享。各位新朋友请点关注,下次更新不迷路


cover-3d.w1200.jpg

如果你希望 借助 AI 编程工具,快速掌握 LLM 应用开发技能,在 AI 时代抢占先机,请务必拿下魔法哥的这本新书!目前正遇上双十一,正是入手的好时机。

【放不了二维码,大家自行到某东搜索吧】

如果你想收藏一本魔法哥亲笔签名的纸质书,长按识别下图的小程序码,即可下单。选择 “豪华版” 还可以定制赠言哦!【同样放不了二维码,有需要的同学请私信吧】

sign.jpg

祝阅读愉快!


🔥 往期推荐

AI 应用开发指南:

ChatGPT 高级技巧:

AI 资讯与评述:


© Creative Commons BY-NC-ND 4.0