本文节选自九天老师的公开课内容,本期内容将从DeepSeek V3为例,对于Function calling的原理与运行过程进行详细解释!下面👇我们直接开始:


1.Function calling技术概念介绍

  我们都知道,能调用外部工具,是大模型进化为智能体Agent的关键,如果不能使用外部工具,大模型就只能是个简单的聊天机器人,甚至连查询天气都做不到。由于底层技术限制啊,大模型本身是无法和外部工具直接通信的,因此Function calling的思路,就是创建一个外部函数(function)作为中介,一边传递大模型的请求,另一边调用外部工具,最终让大模型能够间接的调用外部工具。

例如,当我们要查询当前天气时,让大模型调用外部工具的function calling的过程就如图所示:

而完整的一次Function calling执行流程如下:

【选学】2.外部工具OpenWeather注册及API key获取方法

2.1 OpenWeather API获取流程

  OpenWeather是一家提供全球范围内的气象数据服务的公司,该公司的服务包括实时天气信息、天气预报、历史天气数据以及各种气象相关的报告等,并且OpenWeather开放了一定使用限度内完全免费的API,即我们可以在代码环境中通过调用OpenWeather API来进行实时天气查询、天气预报等功能,这意味着开发者可以将OpenWeather的天气预报功能加入到他们自己的应用或网站中。

  为了能够调用OpenWeather服务,和OpenAI的API使用过程类似,我们首先需要先注册OpenWeather账号,并获取OpenWeather API Key。这里需要注意的是,对于大多数在线服务的API来说,都需要通过API key来进行身份验证,尽管OpenWeather相对更加Open,有非常多的免费使用的次数,但身份验证仍然是必要的防止API被滥用的有效手段。OpenWeather API key获取流程如下:

  • Step 1.登录OpenWeather官网并点击Sign—>create account完成注册。该网站无需魔法即可直接登录,可以使用国内邮箱或者QQ邮箱均可进行注册,官网地址为:https://openweathermap.org/

  • Step 2.获取API-key:注册完成后,即可在API keys页面查看当前账户的API key:

一般来说完成注册后,就会有一个已经激活的API-key。和OpenAI一样,OpenWeather的API key也创建多个。

  • Step 3.将其设置为环境变量:和OpenAI API key类似,为了方便后续调用,我们也可以直接将OpenWeather API key设置为环境变量,变量名为OPENWEATHER_API_KEY。具体设置环境变量的方法参考Ch.1中OpenAI APkey设置环境变量流程,此处不再赘述。

设置完了环境变量之后,接下来即可按照如下方式创建OpenWeather API key变量:

open_weather_key = "YOUR_KEY"

2.2 利用OpenWeather API获取实时天气信息

  接下来我们通过一个简单的示例,来介绍如何通过OpenWeather API获取实时天气信息:

import requestsimport json
# Step 1.构建请求url = "https://api.openweathermap.org/data/2.5/weather"# Step 2.设置查询参数params = {    "q": "Beijing",               # 查询北京实时天气    "appid": open_weather_key,    # 输入API key    "units": "metric",            # 使用摄氏度而不是华氏度    "lang":"zh_cn"                # 输出语言为简体中文}# Step 3.发送GET请求response = requests.get(url, params=params)# Step 4.解析响应data = response.json()

这里需要注意的是,城市名必须输入英文名,否则无法正确识别。接下来查看返回结果。首先我们先查看response结果:

response
<Response [200]>
type(response)
requests.models.Response

在未解析之前,我们只能查看到基本请求结果状态,这里的200代表成功相应,即本次发送请求获得了对应的响应,且响应内容包含在response中。考虑到默认情况下返回结果是JSON格式,因此后续代码使用了response.json()对其进行解析。

解析内容如下:

data
{'coord': {'lon': 116.3972, 'lat': 39.9075},'weather': [{'id': 804,   'main': 'Clouds',   'description': '阴,多云',   'icon': '04d'}],'base': 'stations','main': {'temp': 4.94,'feels_like': 1.77,'temp_min': 4.94,'temp_max': 4.94,'pressure': 1020,'humidity': 25,'sea_level': 1020,'grnd_level': 1014},'visibility': 10000,'wind': {'speed': 4.03, 'deg': 300, 'gust': 9.43},'clouds': {'all': 85},'dt': 1736239434,'sys': {'type': 1,'id': 9609,'country': 'CN','sunrise': 1736206561,'sunset': 1736240684},'timezone': 28800,'id': 1816670,'name': 'Beijing','cod': 200}
def get_weather(loc):    """    查询即时天气函数    :param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\    注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';    :return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather\    返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息    """    # Step 1.构建请求    url = "https://api.openweathermap.org/data/2.5/weather"    # Step 2.设置查询参数    params = {        "q": loc,                       "appid": open_weather_key,    # 输入API key        "units": "metric",            # 使用摄氏度而不是华氏度        "lang":"zh_cn"                # 输出语言为简体中文    }    # Step 3.发送GET请求    response = requests.get(url, params=params)        # Step 4.解析响应    data = response.json()    return json.dumps(data)

3.Function calling完整执行流程

  在准备好外部函数及函数库之后,接下来非常重要的一步就是需要将外部函数的信息以某种形式传输给Chat模型。此时就需要使用到ChatCompletion.create函数的functions参数,类似于messages参数是用于向模型传输消息,functions参数专门用于向模型传递当前可以调用的外部函数信息。并且,从参数的具体形式来看,functions参数和messages参数也是非常类似的——都是包含多个字典的list。对于messages来说,每个字典都是一条信息,而对于functions参数来说,每个字典都是一个函数。在大语言模型实际进行问答时,会根据functions参数提供的信息对各函数进行检索。

  很明显,functions参数对于Chat模型的Function calling功能的实现至关重要。接下来我们详细解释functions中每个用于描述函数的字典编写方法。总的来说,每个字典都有三个参数(三组键值对),各参数(Key)名称及解释如下:

  • name:代表函数函数名称字的符串,必选参数,按照要求函数名称必须是 a-z、A-Z、0-9,或包含下划线和破折号,最大长度为 64。需要注意的是,name必须输入函数名称,而后续模型将根据函数名称在外部函数库中进行函数筛选;
  • description:用于描述函数功能的字符串,虽然是可选参数,但该参数传递的信息实际上是Chat模型对函数功能识别的核心依据。即Chat函数实际上是通过每个函数的description来判断当前函数的实际功能的,若要实现多个备选函数的智能挑选,则需要严谨详细的描述函数功能;(需要注意的是,在某些情况下,我们会通过其他函数标注本次对话特指的函数,此时模型就不会执行这个根据描述信息进行函数挑选的过程,此时是可以不设置description的。)
  • parameters:函数参数,必选参数,要求遵照JSON Schema格式进行输入,JSON Schema是一种特殊的JSON对象,专门用于验证JSON数据格式是否满足要求。

  例如,对于get_weather函数,我们需要创建如下字典来对其进行完整描述:

tools = [    {        "type": "function",        "function":{            'name': 'get_weather',            'description': '查询即时天气函数,根据输入的城市名称,查询对应城市的实时天气,一次只能输入一个城市名称',            'parameters': {                'type': 'object',                'properties': {                    'loc': {                        'description': "城市名称,注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing'",                        'type': 'string'                    }                },                'required': ['loc']            }        }    }]

同时还需要封装外部函数库,用于关联外部函数名称和外部函数对象

available_functions = {            "get_weather": get_weather,        }

3.1 First response

  在进行了一系列基础准备工作之后,接下来我们尝试在Chat模型对话执行Function calling功能。这里我们创建如下messages:

# 实例化客户端client = OpenAI(api_key=ds_api_key,                 base_url="https://api.deepseek.com")
messages=[    {"role": "user", "content": "请帮我查询北京地区今日天气情况"}]

首先我们测试如果只输入这个信息而不输入外部函数库的时候,模型能否知道如何查询天气:

response = client.chat.completions.create(        model="deepseek-chat",        messages=messages     )
response
ChatCompletion(id='ef8b7383-354c-468e-bf6f-982a2336865c', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='你可以通过以下方式查询北京地区今日天气:\n\n1. **天气预报网站/APP**  \n   - 中国天气网([www.weather.com.cn](http://www.weather.com.cn))  \n   - 第三方应用(如墨迹天气、彩云天气等),搜索“北京”即可获取实时天气和预警信息。\n\n2. **搜索引擎**  \n   在百度、谷歌等搜索“北京今日天气”,结果页会直接显示温度、风力、空气质量等数据。\n\n3. **手机自带天气工具**  \n   大多数智能手机的天气应用已支持自动定位或手动输入城市查询。\n\n**提示**:天气数据实时更新,建议以最新预报为准。如需更详细的信息(如小时级降水概率),可参考专业气象平台。', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None))], created=1743071231, model='deepseek-chat', object='chat.completion', service_tier=None, system_fingerprint='fp_3d5141a69a_prod0225', usage=CompletionUsage(completion_tokens=159, prompt_tokens=11, total_tokens=170, completion_tokens_details=None, prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=0), prompt_cache_hit_tokens=0, prompt_cache_miss_tokens=11))
response.choices[0].message.content
'你可以通过以下方式查询北京地区今日天气:\n\n1. **天气预报网站/APP**  \n   - 中国天气网([www.weather.com.cn](http://www.weather.com.cn))  \n   - 第三方应用(如墨迹天气、彩云天气等),搜索“北京”即可获取实时天气和预警信息。\n\n2. **搜索引擎**  \n   在百度、谷歌等搜索“北京今日天气”,结果页会直接显示温度、风力、空气质量等数据。\n\n3. **手机自带天气工具**  \n   大多数智能手机的天气应用已支持自动定位或手动输入城市查询。\n\n**提示**:天气数据实时更新,建议以最新预报为准。如需更详细的信息(如小时级降水概率),可参考专业气象平台。'
response.choices[0].finish_reason
'stop'

很明显,模型无法进行回答。接下来开启Function calling功能:

response = client.chat.completions.create(    model="deepseek-chat",      messages=[        {"role": "user", "content": "请帮我查询北京地区今日天气情况"}    ],    tools=tools,)

观察此时response结果:

response
ChatCompletion(id='1fcfa1fe-05b6-4ce5-b25b-81bc09be05d6', choices=[Choice(finish_reason='tool_calls', index=0, logprobs=None, message=ChatCompletionMessage(content='', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355', function=Function(arguments='{"loc":"Beijing"}', name='get_weather'), type='function', index=0)]))], created=1743071276, model='deepseek-chat', object='chat.completion', service_tier=None, system_fingerprint='fp_3d5141a69a_prod0225', usage=CompletionUsage(completion_tokens=23, prompt_tokens=160, total_tokens=183, completion_tokens_details=None, prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=128), prompt_cache_hit_tokens=128, prompt_cache_miss_tokens=32))

此时模型回复结果为空:

response.choices[0].message.content
''

而模型停止输出的原因是发起了tool_calls

response.choices[0].finish_reason
'tool_calls'

而此时模型tool_calls的全部信息都保存在message.tool_calls中:

response.choices[0].message.tool_calls
[ChatCompletionMessageToolCall(id='call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355', function=Function(arguments='{"loc":"Beijing"}', name='get_weather'), type='function', index=0)]

该对象是一个列表,如果此时只有一次工具调用,则只会有一个ChatCompletionMessageToolCall对象。

response_message = response.choices[0].messageresponse_message
ChatCompletionMessage(content='', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=[ChatCompletionMessageToolCall(id='call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355', function=Function(arguments='{"loc":"Beijing"}', name='get_weather'), type='function', index=0)])

能够发现,此时返回的message中content为空,而增了一个"tool_calls"的list,该list就包含了当前调用外部函数的全部信息:

response_message.tool_calls
[ChatCompletionMessageToolCall(id='call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355', function=Function(arguments='{"loc":"Beijing"}', name='get_weather'), type='function', index=0)]
response_message.tool_calls[0]
ChatCompletionMessageToolCall(id='call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355', function=Function(arguments='{"loc":"Beijing"}', name='get_weather'), type='function', index=0)

对于当前CompletionMessageToolCall对象,id为外部函数调用发起请求id,function则表示调用外部函数基本信息,而type则代表了当前当前调用外部函数类型,function代表调用自定义的外部函数。

response_message.tool_calls[0].id
'call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355'
response_message.tool_calls[0].function
Function(arguments='{"loc":"Beijing"}', name='get_weather')

我们可以在此基础上分别提取调用外部函数名称信息和参数信息,分别保存为function_name和function_args对象:

# 完成对话需要调用的函数名称function_name = response_message.tool_calls[0].function.namefunction_name
'get_weather'
# 具体的函数对象fuction_to_call = available_functions[function_name]fuction_to_call
<function __main__.get_weather(loc)>
response_message.tool_calls[0].function.arguments
'{"loc":"Beijing"}'
# 执行该函数所需要的参数function_args = json.loads(response_message.tool_calls[0].function.arguments)function_args
{'loc': 'Beijing'}

需要注意的是,外部函数的计算过程仍然是在本地执行,即Chat模型并不会将代码读取到服务器上再进行在线计算,因此接下来我们需要根据模型返回的函数和函数参数,在本地完成函数计算,然后再将计算过程和结果保存为message并追加到messages后面,并第二次调用Chat模型分析函数的计算结果,并最终根据函数计算结果输出用户问题的答案。

3.2 Second response

  这里我们只需要借助**方法,直接将function_args对象传入fuction_to_call中,即可一次性传输全部参数,**方法的功能可以参考如下示例:

def function_to_call_test(a, b, c):    return a + b + cfunction_args_test = {'a': 1, 'b': 2, 'c': 3}result = function_to_call_test(**function_args_test)print(result)
6

**方法其实是一种较为特殊、但同时也非常便捷的参数传递方法吗,该方法会将字典中的每个key对应的value传输到同名参数位中。接下来我们将function_args对象传入fuction_to_call中并完成计算:

function_response = fuction_to_call(**function_args)
function_response
'{"coord": {"lon": 116.3972, "lat": 39.9075}, "weather": [{"id": 804, "main": "Clouds", "description": "\\u9634\\uff0c\\u591a\\u4e91", "icon": "04d"}], "base": "stations", "main": {"temp": 11.11, "feels_like": 8.82, "temp_min": 11.11, "temp_max": 11.11, "pressure": 1015, "humidity": 21, "sea_level": 1015, "grnd_level": 1010}, "visibility": 10000, "wind": {"speed": 2.08, "deg": 27, "gust": 4.08}, "clouds": {"all": 97}, "dt": 1743071071, "sys": {"type": 1, "id": 9609, "country": "CN", "sunrise": 1743026814, "sunset": 1743071556}, "timezone": 28800, "id": 1816670, "name": "Beijing", "cod": 200}'

能够发现,模型已经顺利完成计算。接下来我们在messages对象中追加两条消息,第一条消息是第一次模型返回的结果(即调用模型的assistant message),第二条消息则是外部函数计算结果,该条消息的role为function,且name为函数名称。这也是我们首次接触function message,和user、system、assistant message不同,function message必须要输入关键词name,且function message的内容源于外部函数执行的计算结果,并且需要手动进行输入。具体添加过程如下:

messages
[{'role': 'user', 'content': '请帮我查询北京地区今日天气情况'}]

然后使用如下方法,将第一轮响应结果转化为message格式:

response_message.model_dump()
{'content': '', 'refusal': None, 'role': 'assistant', 'annotations': None, 'audio': None, 'function_call': None, 'tool_calls': [{'id': 'call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355',   'function': {'arguments': '{"loc":"Beijing"}', 'name': 'get_weather'},   'type': 'function',   'index': 0}]}
# 追加第一次模型返回结果消息messages.append(response_message.model_dump())
messages
[{'role': 'user', 'content': '请帮我查询北京地区今日天气情况'}, {'content': '','refusal': None,'role': 'assistant','annotations': None,'audio': None,'function_call': None,'tool_calls': [{'id': 'call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355',    'function': {'arguments': '{"loc":"Beijing"}', 'name': 'get_weather'},    'type': 'function',    'index': 0}]}]
function_response
'{"coord": {"lon": 116.3972, "lat": 39.9075}, "weather": [{"id": 804, "main": "Clouds", "description": "\\u9634\\uff0c\\u591a\\u4e91", "icon": "04d"}], "base": "stations", "main": {"temp": 11.11, "feels_like": 8.82, "temp_min": 11.11, "temp_max": 11.11, "pressure": 1015, "humidity": 21, "sea_level": 1015, "grnd_level": 1010}, "visibility": 10000, "wind": {"speed": 2.08, "deg": 27, "gust": 4.08}, "clouds": {"all": 97}, "dt": 1743071071, "sys": {"type": 1, "id": 9609, "country": "CN", "sunrise": 1743026814, "sunset": 1743071556}, "timezone": 28800, "id": 1816670, "name": "Beijing", "cod": 200}'
# 追加function返回消息messages.append({            "role": "tool",            "content": function_response,            "tool_call_id":response_message.tool_calls[0].id        })
messages
[{'role': 'user', 'content': '请帮我查询北京地区今日天气情况'}, {'content': '',  'refusal': None,  'role': 'assistant',  'annotations': None,  'audio': None,  'function_call': None,  'tool_calls': [{'id': 'call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355',    'function': {'arguments': '{"loc":"Beijing"}', 'name': 'get_weather'},    'type': 'function',    'index': 0}]}, {'role': 'tool',  'content': '{"coord": {"lon": 116.3972, "lat": 39.9075}, "weather": [{"id": 804, "main": "Clouds", "description": "\\u9634\\uff0c\\u591a\\u4e91", "icon": "04d"}], "base": "stations", "main": {"temp": 11.11, "feels_like": 8.82, "temp_min": 11.11, "temp_max": 11.11, "pressure": 1015, "humidity": 21, "sea_level": 1015, "grnd_level": 1010}, "visibility": 10000, "wind": {"speed": 2.08, "deg": 27, "gust": 4.08}, "clouds": {"all": 97}, "dt": 1743071071, "sys": {"type": 1, "id": 9609, "country": "CN", "sunrise": 1743026814, "sunset": 1743071556}, "timezone": 28800, "id": 1816670, "name": "Beijing", "cod": 200}',  'tool_call_id': 'call_0_16269d11-fcae-4d42-aa7a-d75fd4cb5355'}]

接下来,再次调用Chat模型来围绕messages进行回答。需要注意的是,此时我们不再需要向模型重复提问,只需要简单的将我们已经准备好的messages传入Chat模型即可:

second_response = client.chat.completions.create(    model="deepseek-chat",    messages=messages,    tools=tools)
second_response.choices[0].message
ChatCompletionMessage(content='北京今日天气情况如下:\n\n- 天气状况:阴,多云\n- 当前温度:11.11°C\n- 体感温度:8.82°C\n- 湿度:21%\n- 气压:1015 hPa\n- 风速:2.08 m/s,风向:东北偏北(27°)\n- 能见度:10公里\n\n建议根据体感温度适当增添衣物,注意保暖。', refusal=None, role='assistant', annotations=None, audio=None, function_call=None, tool_calls=None)

能够发现,模型最终做出了准确回答。并且此时finish_reason为stop

second_response.choices[0].finish_reason
'stop'

3.3 完整函数封装

def run_conv(messages,              api_key,             tools=None,              functions_list=None,             model="deepseek-chat"):    """    能够自动执行外部函数调用的Chat对话模型    :param messages: 必要参数,输入到Chat模型的messages参数对象    :param api_key: 必要参数,调用模型的API-KEY    :param tools: 可选参数,默认为None,可以设置为包含全部外部函数的列表对象    :param model: Chat模型,可选参数,默认模型为deepseek-chat    :return:Chat模型输出结果    """    user_messages = messages        client = OpenAI(api_key=api_key,                 base_url="https://api.deepseek.com")        # 如果没有外部函数库,则执行普通的对话任务    if tools == None:        response = client.chat.completions.create(            model=model,              messages=user_messages        )        final_response = response.choices[0].message.content            # 若存在外部函数库,则需要灵活选取外部函数并进行回答    else:        # 创建外部函数库字典        available_functions = {func.__name__: func for func in functions_list}        # 创建包含用户问题的message        messages = user_messages                # first response        response = client.chat.completions.create(            model=model,              messages=user_messages,            tools=tools,        )        response_message = response.choices[0].message        # 获取函数名        function_name = response_message.tool_calls[0].function.name        # 获取函数对象        fuction_to_call = available_functions[function_name]        # 获取函数参数        function_args = json.loads(response_message.tool_calls[0].function.arguments)                # 将函数参数输入到函数中,获取函数计算结果        function_response = fuction_to_call(**function_args)        # messages中拼接first response消息        user_messages.append(response_message.model_dump())                  # messages中拼接外部函数输出结果        user_messages.append(            {                "role": "tool",                "content": function_response,                "tool_call_id":response_message.tool_calls[0].id            }        )                # 第二次调用模型        second_response = client.chat.completions.create(            model=model,            messages=user_messages)                    # 获取最终结果        final_response = second_response.choices[0].message.content    return display(Markdown(f"Assistant: {final_response}"))
messages = [{"role": "user", "content": "请问什么是机器学习?"}]
run_conv(messages=messages,          api_key = ds_api_key)

Assistant: 机器学习(Machine Learning, ML)是人工智能(AI)的一个核心分支,其核心目标是让计算机系统能够通过数据自动学习和改进,而无需显式编程。简单来说,机器学习通过分析大量数据,自动发现规律或模式,并基于这些规律做出预测或决策。


关键概念解析

  • 核心思想
  • 传统编程:人类编写明确的规则,计算机执行。

  • 机器学习:计算机从数据中自行总结规则(模型),并不断优化。

  • 基本流程
  • 输入数据 → 特征提取 → 模型训练 → 预测/决策 → 反馈优化。

  • 三要素
  • 数据:训练的基础(如文本、图像、传感器数据等)。

  • 模型:算法(如神经网络、决策树)从数据中学习规律。

  • 优化:通过调整参数,最小化预测误差(如梯度下降法)。


主要类型

  • 监督学习(Supervised Learning)
  • 任务:用带标签的数据训练模型(如分类、回归)。

  • 例子:垃圾邮件识别(输入邮件,输出“垃圾”或“正常”)。

  • 无监督学习(Unsupervised Learning)
  • 任务:发现无标签数据的隐藏结构(如聚类、降维)。

  • 例子:客户分群(根据购买行为自动分组)。

  • 强化学习(Reinforcement Learning)
  • 任务:通过试错和奖励机制优化行为(如游戏AI、自动驾驶)。

  • 例子:AlphaGo通过胜负反馈学习下棋策略。

  • 其他类型
  • 半监督学习(少量标签+大量无标签数据)、迁移学习(复用已有模型)等。


典型应用场景

  • 自然语言处理(NLP):机器翻译、聊天机器人。
  • 计算机视觉:人脸识别、医学影像分析。
  • 推荐系统:电商商品推荐、短视频内容推送。
  • 预测分析:股票趋势预测、天气建模。

为什么重要?

  • 自动化:替代重复性决策任务(如信用评分)。
  • 大数据处理:从海量数据中提取人类难以发现的模式。
  • 适应性:模型可随新数据动态更新(如疫情传播预测)。

与相关领域的区别

  • AI:广义的智能系统,包含机器学习。
  • 深度学习:机器学习的一个子集,使用多层神经网络处理复杂数据(如图像、语音)。
  • 数据挖掘:更侧重从数据中发现知识,常与机器学习技术结合。

简单例子

  • 假设你想预测房价:
  1. 数据:收集历史房价(面积、地段、价格)。

  2. 训练:用线性回归模型学习“面积-价格”关系。

  3. 预测:输入新房屋面积,模型输出预估价格。


机器学习正在重塑各行各业,但其效果高度依赖数据质量和算法选择。如果想深入,可以从Python的Scikit-learn库或经典教材(如《机器学习实战》)开始实践!

messages = [{"role": "user", "content": "请问北京今天天气如何?"}]run_conv(messages=messages,          api_key = ds_api_key,         tools=tools,          functions_list=[get_weather])

Assistant: 北京今天天气阴,多云,当前气温为11.11°C,体感温度8.82°C。湿度21%,能见度良好(10公里),风速2.08米/秒,阵风可达4.08米/秒。空气质量等其他信息未提供,建议出门时注意保暖。


完整内容⬇️加入社区即可获取

🍻现开设了大模型学习交流群,扫描下👇码,来遇见更多志同道合的小伙伴~

为每个人提供最有价值的技术赋能!【公益】大模型技术社区已经上线!

内容完全免费,涵盖20多套工业级方案 + 10多个企业实战项目 + 400万开发者筛选的实战精华~不定期开展大模型硬核技术直播公开课,对标市面千元价值品质,社区成员限时免费听喔!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐