深入解析大语言模型的 Function Call 实现—— 以 Qwen2.5为例
🔍 微信搜索公众号AI在学获取最新 AI 技术文章与实战教程GitHub代码仓库引言在现代大语言模型(LLM)中,Function Call(函数调用)能力极大地提升了模型的实用性,使其能够调用外部 API、执行复杂计算或获取实时数据。例如,在 OpenAI API 和 Qwen2.5-7B-Instruct 这样的模型中,用户可以向模型提供工具(Tools),并允许模型在适当的时候调用它们。本文以 Qwen2.5-7B-Instruct 为例,探讨其 Function Call 机制的底层实现。1. Function Call 机制概述通常,大语言模型的输入输出都是字符串,但 Function Call 允许模型在对话过程中识别特定的函数调用需求,并以结构化数据格式返回调用参数。在 Qwen2.5-7B-Instruct 中,Function Call 由以下几部分组成:messages:对话历史,包括用户、系统、助手的消息。tools:可供调用的函数信息,描述了函数名称、参数格式等。2. Function Call 的 Prompt 生成在 Qwen2.5-7B-Instruct 后端,所有 messages 和 tools 会被应用到一个固定的模板上,以便模型正确解析和执行 Function Call。2.1 获取模板fromtransformersimportQwen2ForCausalLM,Qwen2TokenizerFast model_name_or_path="Qwen/Qwen2.5-7B-Instruct"tokenizer=Qwen2TokenizerFast.from_pretrained(model_name_or_path)print(tokenizer.get_chat_template())此代码返回一个 Prompt 生成模板,该模板会根据 messages 和 tools 生成最终的输入格式。2.2 模板内容解析模板的核心部分如下:{%- if tools %} { {- '|im_start|system\n' }} {%- if messages[0]['role'] == 'system' %} { {- messages[0]['content'] }} {%- else %} { {- 'You are Qwen, created by Alibaba Cloud. You are a helpful assistant.' }} {%- endif %} { {- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures withintools/toolsXML tags:\ntools" }} {%- for tool in tools %} { {- "\n" }} { {- tool | tojson }} {%- endfor %} { {- "\n/tools\n\nFor each function call, return a json object with function name and arguments withintool_call/tool_callXML tags:\ntool_call\n{\"name\":function-name, \"arguments\":args-json-object}\n/tool_call|im_end|\n" }} {%- else %} {%- if messages[0]['role'] == 'system' %} { {- '|im_start|
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2415999.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!