Function Calling(函数调用)是现代 AI 应用开发的核心能力,它让大语言模型能够与外部系统交互、执行特定任务、获取实时数据。本文将深入探讨 Function Calling 的完整生命周期,结合 HolySheep AI 提供的高性能 API,助你构建生产级 AI 应用。

一、Function Calling 架构设计

在开始编码前,需要理解 Function Calling 的完整架构流程:

二、工具定义(Function Definitions)

工具定义是 Function Calling 的核心,需要遵循严格的 JSON Schema 规范:

import openai

client = openai.OpenAI(
    api_key="YOUR_HOLYSHEEP_API_KEY",
    base_url="https://api.holysheep.ai/v1"
)

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的实时天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {
                        "type": "string",
                        "description": "城市名称,需使用中文,如:北京、上海"
                    },
                    "unit": {
                        "type": "string",
                        "enum": ["celsius", "fahrenheit"],
                        "description": "温度单位,默认摄氏度"
                    }
                },
                "required": ["city"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "search_database",
            "description": "在知识库中搜索相关信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "搜索关键词"
                    },
                    "limit": {
                        "type": "integer",
                        "description": "返回结果数量,默认5条",
                        "default": 5
                    }
                },
                "required": ["query"]
            }
        }
    }
]

response = client.chat.completions.create(
    model="gpt-4.1",
    messages=[
        {"role": "user", "content": "北京今天天气怎么样?"}
    ],
    tools=tools,
    tool_choice="auto"
)

print(response.choices[0].message.tool_calls)

三、结果解析与工具执行

解析 LLM 返回的工具调用请求,并执行对应的函数:

import json

def execute_tool_calls(tool_calls, messages):
    """执行工具调用并收集结果"""
    results = []
    
    for tool_call in tool_calls:
        function_name = tool_call.function.name
        arguments = json.loads(tool_call.function.arguments)
        
        # 根据函数名分发执行
        if function_name == "get_weather":
            result = get_weather_impl(arguments["city"], arguments.get("unit", "celsius"))
        elif function_name == "search_database":
            result = search_database_impl(arguments["query"], arguments.get("limit", 5))
        else:
            result = {"error": f"Unknown function: {function_name}"}
        
        results.append({
            "tool_call_id": tool_call.id,
            "role": "tool",
            "content": json.dumps(result, ensure_ascii=False)
        })
    
    return results

def get_weather_impl(city, unit):
    """天气查询实现"""
    # 生产环境应调用真实天气 API
    return {
        "city": city,
        "temperature": 25 if unit == "celsius" else 77,
        "condition": "晴",
        "humidity": 45,
        "timestamp": "2026-01-15 10:30:00"
    }

def search_database_impl(query, limit):
    """知识库搜索实现"""
    # 生产环境应连接真实知识库
    return {
        "query": query,
        "results": [
            {"title": f"相关文档{i}", "score": 0.95 - i * 0.1}
            for i in range(min(limit, 3))
        ]
    }

四、流式输出与并发控制

对于高并发场景,需要结合流式输出和连接池优化:

from openai import OpenAI
from concurrent.futures import ThreadPoolExecutor
import threading

class FunctionCallingPool:
    """支持并发控制的 Function Calling 客户端池"""
    
    def __init__(self, api_key, max_workers=10):
        self.client = OpenAI(
            api_key=api_key,
            base_url="https://api.holysheep.ai/v1",
            timeout=30.0,
            max_retries=3
        )
        self.executor = ThreadPoolExecutor(max_workers=max_workers)
        self._semaphore = threading.Semaphore(max_workers)
    
    def chat_with_tools(self, messages, tools, model="gpt-4.1"):
        """带并发控制的聊天请求"""
        with self._semaphore:
            return self.client.chat.completions.create(
                model=model,
                messages=messages,
                tools=tools,
                stream=False
            )
    
    def chat_stream_with_tools(self, messages, tools, model="gpt-4.1"):
        """流式响应处理"""
        stream = self.client.chat.completions.create(
            model=model,
            messages=messages,
            tools=tools,
            stream=True
        )
        
        accumulated = ""
        for chunk in stream:
            delta = chunk.choices[0].delta
            if delta.content:
                accumulated += delta.content
                yield delta.content
            
            # 检测工具调用
            if delta.tool_calls:
                for tc in delta.tool_calls:
                    yield f"\n[Tool Call: {tc.function.name}]\n"

性能 Benchmark

测试环境: 10并发, 1000次请求

HolySheep API 延迟: 平均 45ms (国内直连)

吞吐量: ~200 req/s

五、成本优化策略

使用 HolySheep AI 的优势在于汇率无损(¥1=$1),相比官方 ¥7.3=$1 可节省超过 85% 成本。以下是优化建议:

六、生产级完整示例

import openai
import json
from typing import List, Dict, Any, Optional

class FunctionCallingAgent:
    """生产级 Function Calling Agent"""
    
    def __init__(self, api_key: str, model: str = "gpt-4.1"):
        self.client = openai.OpenAI(
            api_key=api_key,
            base_url="https://api.holysheep.ai/v1"
        )
        self.model = model
        self.tools = self._define_tools()
    
    def _define_tools(self) -> List[Dict]:
        return [
            {
                "type": "function",
                "function": {
                    "name": "query_order",
                    "description": "查询订单状态和物流信息",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "order_id": {"type": "string"},
                            "include_logistics": {"type": "boolean", "default": True}
                        },
                        "required": ["order_id"]
                    }
                }
            },
            {
                "type": "function", 
                "function": {
                    "name": "calculate_price",
                    "description": "计算商品总价和优惠",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "items": {
                                "type": "array",
                                "items": {
                                    "type": "object",
                                    "properties": {
                                        "product_id": {"type": "string"},
                                        "quantity": {"type": "integer"},
                                        "unit_price": {"type": "number"}
                                    }
                                }
                            },
                            "coupon_code": {"type": "string"}
                        },
                        "required": ["items"]
                    }
                }
            }
        ]
    
    def chat(self, user_message: str, conversation: Optional[List] = None) -> Dict[str, Any]:
        """主对话循环"""
        messages = conversation or [{"role": "user", "content": user_message}]
        
        # 第一次调用
        response = self.client.chat.completions.create(
            model=self.model,
            messages=messages,
            tools=self.tools,
            tool_choice="auto"
        )
        
        assistant_msg = response.choices[0].message
        messages.append({
            "role": "assistant",
            "content": assistant_msg.content,
            "tool_calls": assistant_msg.tool_calls
        })
        
        # 处理工具调用
        if assistant_msg.tool_calls:
            tool_results = self._execute_tools(assistant_msg.tool_calls)
            messages.extend(tool_results)
            
            # 第二次调用,整合结果
            final_response = self.client.chat.completions.create(
                model=self.model,
                messages=messages,
                tools=self.tools
            )
            return {
                "content": final_response.choices[0].message.content,
                "messages": messages,
                "usage": final_response.usage.total_tokens
            }
        
        return {
            "content": assistant_msg.content,
            "messages": messages,
            "usage": response.usage.total_tokens if response.usage else 0
        }
    
    def _execute_tools(self, tool_calls) -> List[Dict]:
        """执行工具调用"""
        results = []
        for call in tool_calls:
            func_name = call.function.name
            args = json.loads(call.function.arguments)
            
            # 模拟执行
            result = {"executed": func_name, "input": args, "status": "success"}
            
            results.append({
                "role": "tool",
                "tool_call_id": call.id,
                "content": json.dumps(result, ensure_ascii=False)
            })
        return results

使用示例

agent = FunctionCallingAgent( api_key="YOUR_HOLYSHEEP_API_KEY", model="gpt-4.1" ) result = agent.chat("帮我查询订单 ORD-2026-001 的物流状态,并计算包含优惠码 SAVE10 的总价") print(result["content"]) print(f"消耗 Token: {result['usage']}")

常见报错排查

总结

Function Calling 是构建智能助手、自动化工作流、数据查询系统的关键技术。通过本文的架构设计和代码示例,你已掌握从工具定义到结果解析的完整流程。结合 HolySheep AI 的高性能 API(国内直连<50ms、无损汇率、大幅成本节省),可以快速构建生产级 AI 应用。

建议从简单场景开始,逐步增加工具复杂度,同时关注 token 消耗和响应延迟,持续优化用户体验和成本效率。

👉

相关资源

相关文章