当前位置: 首页 > news >正文

Function Calling的机制 (含示例)

原理图:
在这里插入图片描述
示例:

# === 标准库 ===
import json
import math# === 第三方库 ===
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv# === 环境变量初始化 ===
_ = load_dotenv(find_dotenv())# === OpenAI 客户端 ===
client = OpenAI()# === 工具函数:格式化打印 JSON ===
def print_json(data):"""打印参数。如果参数是结构化(如 dict 或 list),则格式化打印;否则直接输出。"""if hasattr(data, 'model_dump_json'):data = json.loads(data.model_dump_json())if isinstance(data, list):for item in data:print_json(item)elif isinstance(data, dict):print(json.dumps(data, indent=4, ensure_ascii=False))else:print(data)# === 核心功能函数:与大模型对话 ===
def get_completion(messages, model="gpt-4o-mini"):response = client.chat.completions.create(model=model,messages=messages,temperature=0.7,tools=[{"type": "function","function": {"name": "sum","description": "加法器,计算一组数的和","parameters": {"type": "object","properties": {"numbers": {"type": "array","items": {"type": "number"}}}}}}],)return response.choices[0].message# === 主逻辑 ===
prompt = "Tell me the sum of 1, 2, 3, 4, 5, 6, 7, 8, 9, 10."messages = [{"role": "system", "content": "你是一个数学家"},{"role": "user", "content": prompt}
]response = get_completion(messages)
messages.append(response)if response.tool_calls:tool_call = response.tool_calls[0]if tool_call.function.name == "sum":args = json.loads(tool_call.function.arguments)result = sum(args["numbers"])messages.append({"tool_call_id": tool_call.id,"role": "tool","name": "sum","content": str(result)})response = get_completion(messages)messages.append(response)print("=====最终 GPT 回复=====")print(response.content)print("=====对话历史=====")
print_json(messages)

相关文章:

  • SpringAI 学习笔记
  • 斐波那契数列计算:数据结构与算法视角
  • 【MySQL】初识数据库
  • HDFS入门】HDFS安全与权限管理解析:从认证到加密的完整指南
  • TypeScript 从入门到精通:完整教程与实战应用(一)
  • git 出现 port 443 Connection timed out
  • AIGC产品如何平衡用户体验与内容安全?
  • 通过 Zotero 的样式编辑器(Style Editor)自定义文献引用和参考文献列表的格式
  • pdfjs库使用记录1
  • 2026《数据结构》考研复习笔记三(C++高级教程)
  • 【“星瑞” O6 评测】—NPU 部署 face parser 模型
  • Windows .NET Core 应用程序部署到 IIS 解决首次访问加载慢的问题
  • 基于DeepSeek的考研暑假日志分析
  • Transformer 架构 - 解码器 (Transformer Architecture - Decoder)
  • 【前端HTML生成二维码——MQ】
  • Web3区块链网络中数据隐私安全性探讨
  • 重构未来智能:Anthropic 解码Agent设计哲学三重奏
  • 【Pandas】pandas DataFrame isin
  • 4.17-4.18学习总结 多线程
  • 从零开始物理引擎(六)- 重构完成与MVP理解
  • 龚正会见巴基斯坦卡拉奇市市长穆尔塔扎·瓦哈卜、巴西圣保罗市市长里卡多·努内斯
  • 美联储官员:货币政策不会立即改变,金融市场波动或致美国经济增长承压
  • 南方医科大学原副校长宁习洲主动投案,接受审查调查
  • 魏晓栋已任上海崇明区委常委、组织部部长
  • 杭州发布最新“独角兽企业”榜单,“六小龙”中5家已晋级
  • 第四届全民阅读大会在太原举办,李书磊出席并讲话