function calling实现调用理杏仁api获取数据

LLM是不存在真正逻辑的且并不是知晓万事万物的(至少目前是这样)在很多更垂直的环境下LLM并不能很好的赋能。
function calling的实现使LLM可以对接真正的世界以及真正有逻辑的系统,这将很大程度上改变LLM的可用范围(当然安全问题依旧是不容忽视的事)。

环境简述

model: gpt-3.5-turbo
api: 理杏仁开放平台

tools

首先我们需要分析需求涉及到什么逻辑功能(函数),并且将该功能的用途,参数及参数的用途进行格式化整理(json/yaml格式)。
针对理杏仁的使用,以下为一个简单的需求:

  • 可以获取到某天某指数的PE-TTM的当前分位点

针对上述需求可以拆分出如下几点:

  1. 针对需求有两个api是我们将会调用的:基础信息(获取所有指数),基本面数据(获取日期的指数数据)
  2. 我们需要保证user指定的指数是存在的,基础信息api,从中拿到指数代码,当无法找到时结束当前对话【get_code】
  3. 我们需要指定日期,user可能会使用类似今天昨天等词汇,我们需要自构建函数可以处理日期【date】
  4. 当我们有了指数代码和日期后便可以调用基本面数据api获得对应的数据【get_cvpos】

step1: 构建函数

针对上述分析,我们需要三个函数,其中两个函数主要工作是调用api(get_codeget_cvpos)另外一个是获取当前日期的函数(date
具体函数内容如下:

def get_code(self, name: str):
	print(f"name: {name}")
    response = requests.post(f"{self.url}", json=self.base_json).json()
    for item in response["data"]:
    	if item["name"] == name:
        	return {"stockcode": item["stockCode"]}
    return {"stockcode": f"未找到{name}, 请检查输入!"}
            
def get_cvpos(self, stockcode: str, date: str):
	print(f"stockcode: {stockcode}, date: {date}")
    data = self.base_json
   	data.update(
    	{
        	"date": date,
            "stockCodes": [stockcode],
            "metricsList": ["pe_ttm.
### Function Calling调用机制 Function Calling 是一种允许大型语言模型在生成过程中调用外部函数或服务的机制。这种机制的核心在于,模型能够根据用户的输入和上下文,智能地决定是否调用预定义的函数,并生成相应的参数。通过这种方式,模型可以与外部系统进行交互,从而获取额外的信息或执行特定的操作。 在调用机制中,模型通常会生成一个包含函数名称和参数的结构化数据(如 JSON 格式),表示需要调用的函数及其参数。这种结构化数据随后会被传递给外部系统,由该系统负责执行实际的函数调用并返回结果。模型本身并不直接执行这些函数,而是通过与外部系统的协作来完成任务 [^1]。 ### 实现 Function Calling实现主要包括以下几个方面: 1. **函数定义**:开发者需要预先定义一组可供调用的函数,并为每个函数指定其参数和返回值格式。这些函数可以是本地的,也可以是远程的服务接口。 2. **上下文解**:模型在生成响应时,会分析用户的输入和当前的上下文,以判断是否需要调用某个函数。这一过程依赖于模型对自然语言的解能力和对上下文的推能力。 3. **参数生成**:如果模型决定调用某个函数,它会根据用户的输入生成相应的参数。这些参数通常是结构化的,以便于外部系统解析和处。 4. **结果整合**:外部系统执行完函数调用后,会将结果返回给模型。模型再将这些结果整合到最终的响应中,提供给用户。 ### 实现方法 在实际应用中,Function Calling实现方法可以分为以下几种: 1. **基于模板的实现**:开发者可以为每个函数定义一个模板,模型在生成响应时,根据模板生成结构化的函数调用请求。这种方法简单易行,但灵活性较差。 2. **基于规则的实现**:通过设定一系列规则,模型可以根据用户的输入自动选择合适的函数并生成参数。这种方法在一定程度上提高了灵活性,但规则的维护成本较高。 3. **基于机器学习的实现**:利用机器学习技术,模型可以自动学习如何根据用户的输入选择合适的函数并生成参数。这种方法具有较高的灵活性和准确性,但需要大量的训练数据和计算资源。 4. **混合实现**:结合上述多种方法,利用模板和规则提供基础支持,同时引入机器学习技术优化模型的决策过程。这种方法可以在保证灵活性的同时,降低维护成本。 ### 示例代码 以下是一个简单的示例,展示了如何在 Python 中实现 Function Calling 的基本逻辑: ```python def function_calling(user_input): # 预定义的函数 functions = { "get_weather": lambda city: f"当前 {city} 的天气是晴天。", "get_time": lambda: "当前时间是 2023-10-01 12:00:00。" } # 模拟模型生成的函数调用请求 if "天气" in user_input: function_name = "get_weather" parameters = {"city": "北京"} elif "时间" in user_input: function_name = "get_time" parameters = {} else: return "无法解您的请求。" # 调用函数并返回结果 if function_name in functions: result = functions[function_name](**parameters) return result else: return "调用的函数不存在。" # 测试函数 user_input = "北京的天气怎么样?" response = function_calling(user_input) print(response) ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值