Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
cssmagic opened this issue Nov 7, 2024 · 0 comments
Open

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

cssmagic opened this issue Nov 7, 2024 · 0 comments
Labels

Comments

@cssmagic
Copy link
Owner

cssmagic commented Nov 7, 2024

魔法哥的新书 《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 领域的研发和探索,还有更多心得与你分享。各位新朋友请关注公众号,下次更新不迷路

weixin-qrcode


cover-3d w1200

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

promo 2

如果你想收藏一本魔法哥亲笔签名的纸质书,长按识别下图的小程序码,即可下单。选择 “豪华版” 还可以定制赠言哦

sign

祝阅读愉快!


📣 AI 魔法群开放啦!

扫码加群,领取魔法哥整理的常用 AI 工具包:

qun-qr


🔥 往期推荐

AI 应用开发指南:

ChatGPT 高级技巧:

AI 资讯与评述:


© Creative Commons BY-NC-ND 4.0

@cssmagic cssmagic added the AI label Nov 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant