Open cssmagic opened 2 weeks ago
魔法哥的新书 《AI 辅助编程入门》 已经上架了!前几期文章节选了书中的部分章节,分享 LLM 应用开发的实战经验,包括 如何选择模型、如何打磨系统提示词 等话题。今天我们继续探讨 LLM API 的进阶用法!
在本书第九章的案例中,我们对于 OpenAI SDK 的使用是比较初级的。实际上在 OpenAI 的 “对话式文本补全” API 协议中,提供了相当丰富的参数,可以更加精细地控制模型的输出行为。这里介绍其中比较常用的几项:
temperature:温度参数,用于控制模型生成文本的随机性。温度越高,生成的文本越随机、越发散;温度越低,生成的文本越保守、越集中。比如在创意生成的场景下,可以尝试适当调高这个参数。不同模型对温度参数的范围设定和默认值设定各不相同,建议你查询模型的官方文档。
temperature
top_p:这个参数也可以在一定程度上影响生成文本的随机性,但不建议与温度参数同时使用。Top-p 参数的取值介于 0 和 1 之间,数值越大,生成的文本越随机。
top_p
stream:是否开启流式输出模式。对于第九章的案例来说,这个模式并不适用;但对于对话场景来说,流式输出能力就至关重要了。我们将在第十章的案例(网页版智能对话机器人)中详细探讨这个模式的运用。
stream
n:当前请求几条生成结果。对于对话场景,这个参数通常就取默认值 1,因为我们只需要一条回复;但在创意生成等场景下,你可能希望一次得到多个结果。
n
response_format:如果把这个参数设置为 { "type": "json_object" },可以限制模型只能输出 JSON 格式的文本。当我们需要进一步处理模型输出的数据时,这个功能就十分有用了。为了达到理想的输出效果,建议在提示词中强调这个要求并提供示例。
response_format
{ "type": "json_object" }
max_tokens:最大 token 数,用于控制模型生成文本的长度。模型在输出内容的过程中,在达到这个数值时会被强制截断。有时可以用来避免模型的异常输出消耗不必要的成本。有些模型对这个参数设置的默认值较小,容易导致意外截断,因此建议你根据自己的业务需要设置一个合理的数值。
max_tokens
tools 和 tool_choice:要求模型进入 “工具选择” 模式,这个功能的前身叫做 “Function Call”。在这种模式下,模型将从预设的工具列表中选择最合适的工具来处理用户的请求。在开发复杂的 AI Agent 时,这个功能往往可以发挥关键性的作用。不过需要注意的是,不是所有的大模型都完整兼容这个功能。
tools
tool_choice
在实际应用中,我们可以根据业务需求来灵活配置这些参数,以获得更好的效果。同时也建议你有空的时候完整阅读 OpenAI 或你所用模型的 API 文档,这对于我们提升自己的 LLM 运用能力会有很大的帮助。
我们在调用大模型的 “对话式文本补全” API 时,往往只提取了返回数据中的 choices[0].message.content 字段。其实完整数据中包含了很多有意义的信息,可以帮助我们进一步了解模型的工作机制。以下是一份典型的 GPT API 返回数据,我们来详细看一看:
choices[0].message.content
{ "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:这是当前请求的唯一标识符,记录日志和排查故障的时候可能会用到它。
id
model:当前使用的具体模型名称。它和我们在调用 API 时传递的 model 参数可能是不一致的。比如当我们只是宽泛地指定 "gpt-4o" 时,API 会返回当前所用模型的精确版本 "gpt-4o-2024-05-13"。
model
"gpt-4o"
"gpt-4o-2024-05-13"
choices:这是一个列表,每个元素代表一条输出结果。输出条数是由我们在调用 API 时传递的 n 参数决定的。
choices
finish_reason:如果当前输出内容是正常结束的,这个字段的值会是 "stop";如果因为上下文长度限制而结束,它的值会是 "length";如果当前输出处于 “工具选择” 模式,它的值会是 "tool_calls"。
finish_reason
"stop"
"length"
"tool_calls"
usage:这个字段包含了当前请求的 token 使用情况。prompt_tokens 表示所有我们在调用 API 时通过 messages 字段输入给模型的 token 总数;completion_tokens 表示模型输出的 token 数;total_tokens 表示前面两者的总和。你可以通过这些信息来计算本次调用的成本。
usage
prompt_tokens
messages
completion_tokens
total_tokens
顺便一提,大模型 API 在流式输出模式下,返回的数据结构会有所不同。我们将在第十章详细探讨这个话题。
在本期文章里,我们探讨了 LLM API 的进阶用法,更深入地分析了 API 参数和返回数据。这些知识可以帮助我们更好地理解模型的工作机制、开发出更优质的 LLM 应用。相信会对你有所帮助!
魔法哥最近一年都在做 AI 领域的研发和探索,还有更多心得与你分享。各位新朋友请关注公众号,下次更新不迷路:
如果你希望 借助 AI 编程工具,快速掌握 LLM 应用开发技能,在 AI 时代抢占先机,请务必拿下魔法哥的这本新书!目前正遇上双十一,京东自营全网底价,正是入手的好时机。
如果你想收藏一本魔法哥亲笔签名的纸质书,长按识别下图的小程序码,即可下单。选择 “豪华版” 还可以定制赠言哦!
祝阅读愉快!
📣 AI 魔法群开放啦! 扫码加群,领取魔法哥整理的常用 AI 工具包:
扫码加群,领取魔法哥整理的常用 AI 工具包:
© Creative Commons BY-NC-ND 4.0
魔法哥的新书 《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 数,用于控制模型生成文本的长度。模型在输出内容的过程中,在达到这个数值时会被强制截断。有时可以用来避免模型的异常输出消耗不必要的成本。有些模型对这个参数设置的默认值较小,容易导致意外截断,因此建议你根据自己的业务需要设置一个合理的数值。tools
和tool_choice
:要求模型进入 “工具选择” 模式,这个功能的前身叫做 “Function Call”。在这种模式下,模型将从预设的工具列表中选择最合适的工具来处理用户的请求。在开发复杂的 AI Agent 时,这个功能往往可以发挥关键性的作用。不过需要注意的是,不是所有的大模型都完整兼容这个功能。在实际应用中,我们可以根据业务需求来灵活配置这些参数,以获得更好的效果。同时也建议你有空的时候完整阅读 OpenAI 或你所用模型的 API 文档,这对于我们提升自己的 LLM 运用能力会有很大的帮助。
探究 API 的返回数据
我们在调用大模型的 “对话式文本补全” API 时,往往只提取了返回数据中的
choices[0].message.content
字段。其实完整数据中包含了很多有意义的信息,可以帮助我们进一步了解模型的工作机制。以下是一份典型的 GPT API 返回数据,我们来详细看一看:你需要了解的部分字段如下:
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 领域的研发和探索,还有更多心得与你分享。各位新朋友请关注公众号,下次更新不迷路:
如果你希望 借助 AI 编程工具,快速掌握 LLM 应用开发技能,在 AI 时代抢占先机,请务必拿下魔法哥的这本新书!目前正遇上双十一,京东自营全网底价,正是入手的好时机。
如果你想收藏一本魔法哥亲笔签名的纸质书,长按识别下图的小程序码,即可下单。选择 “豪华版” 还可以定制赠言哦!
祝阅读愉快!
🔥 往期推荐
AI 应用开发指南:
ChatGPT 高级技巧:
AI 资讯与评述:
© Creative Commons BY-NC-ND 4.0