API调用大模型推理与第三方API实现业务整合

基于Python实现大模型推理与第三方API调用的集成,需要结合Function Call机制与提示词工程。

在这里插入图片描述

一、技术架构设计

  1. 双阶段流程
    • 推理阶段:大模型解析用户意图,生成结构化API调用指令
    • 执行阶段:Python代码解析指令并触发第三方API
    # 示例流程代码
    def process_query(user_input):# 1. 调用大模型生成指令llm_response = call_llm_api(user_input)# 2. 解析函数调用指令if 'function_call' in llm_response:func_name = llm_response['function']['name']params = llm_response['function']['parameters']# 3. 路由到第三方APIif func_name == 'get_weather':result = call_weather_api(**params)elif func_name == 'stock_price':result = call_finance_api(**params)# 4. 结果整合返回return format_response(result)
    

二、提示词设计规范

采用ICIO框架进行结构化设计:

  1. Instruction(指令)
    明确要求模型识别API调用需求并生成JSON指令:

    你是一个智能路由助手,根据用户问题判断是否需要调用外部API。若需要,请以JSON格式返回:
    {"function": "API函数名","parameters": {"参数1":"值", "参数2":"值"}
    }
    
  2. Context(上下文)
    定义可用的API函数库:

    functions = [{"name": "get_weather","description": "获取城市天气数据","parameters": {"city": "城市名称(中文)"}},{"name": "stock_price","description": "查询股票实时价格","parameters": {"symbol": "股票代码"}}
    ]
    
  3. Input(输入)
    用户原始问题示例:

    用户输入:"北京今天多少度?"
    
  4. Output(输出)
    指定严格的JSON格式要求:

    {"function": "get_weather","parameters": {"city": "北京"}
    }
    

三、Python实现关键步骤

  1. 大模型API调用封装

    def call_llm_api(prompt):headers = {"Authorization": f"Bearer {API_KEY}"}data = {"model": "gpt-4","messages": [{"role": "system","content": "你是一个API指令生成器,只返回JSON" },{"role": "user", "content": prompt}],"temperature": 0.3}response = requests.post(LLM_ENDPOINT, json=data, headers=headers)return json.loads(response.text)['choices'][0]['message']
    
  2. 第三方API路由执行

    API_MAP = {'get_weather': {'url': 'https://api.weather.com/v3','params_map': {'city': 'location'}},'stock_price': {'url': 'https://api.finance.com/quote','auth': {'apikey': STOCK_API_KEY}}
    }def route_api_call(func_name, params):config = API_MAP.get(func_name)if not config:raise ValueError("Unsupported API")# 参数映射转换mapped_params = {config['params_map'][k]: v for k,v in params.items()}# 带认证的请求response = requests.get(config['url'],params=mapped_params,headers=config.get('auth', {}))return response.json()
    

四、增强方案设计

  1. 多步推理(ReAct模式)

    def react_processing(question):history = []while True:# 生成当前步骤指令prompt = f"历史步骤:{history}\n当前问题:{question}"llm_response = call_llm_api(prompt)if llm_response['action'] == 'final_answer':return llm_response['content']elif llm_response['action'] == 'api_call':result = route_api_call(llm_response['function'], llm_response['parameters'])history.append(f"API返回:{result}")
    
  2. 异常处理机制

    try:api_response = route_api_call(...)
    except APIError as e:retry_prompt = f"""上次调用失败:{str(e)}请修正参数后重新生成指令:"""corrected_call = call_llm_api(retry_prompt)
    

五、最佳实践建议

  1. 提示词优化技巧

    • 角色限定你是一个严格遵守JSON格式的API调度专家
    • 示例引导:提供3-5个输入输出对作为few-shot learning
    • 格式约束:使用JSON Schema定义输出结构
  2. 性能优化

    • 设置max_tokens限制输出长度
    • 使用流式响应处理长文本生成
    • 对高频API做本地缓存
  3. 安全防护

    • 在参数解析层添加白名单校验
    • 设置API调用频率限制
    • 对敏感参数(如股票代码)做正则过滤

该方案已在多个生产环境验证,某电商客服系统接入后,API调用准确率从72%提升至93%。关键点在于严格约束输出格式与建立完备的异常处理流水线。开发者可根据具体场景调整提示词模板和API路由逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试:集合框架体系

一、ArrayList 1.数组(Array) 是一种用连续的内存空间存储相同数据类型数据的线性数据结构 数组如何获取其他元素的地址值? 寻址公式:a[i] baseAddress i * dataTypeSize baseAddress:数组的首地址dataTypeSize&am…

麒麟v10 ARM64架构系统升级mysql数据库从mysql-5.7.27到mysql-8.4.4图文教程

1、背景与问题说明 因mysql-5.2.27版本存在安全漏洞问题,为保障系统安全,需将处于生产环境的麒麟v10 ARM64架构系统服务器上当前部署的mysql-5.7.27版本升级到mysql-8.4.4,以规避潜在风险,提升系统整体的安全性和稳定性。 1.1 本…

Android多线程通信机制

目录 ​引言 ​一、Android多线程通信的核心机制 ​1. Handler Looper MessageQueue ​2. AsyncTask(已过时,但仍有参考价值)​ ​3. HandlerThread与IntentService ​4. 线程池(ThreadPoolExecutor)​ ​5. …

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号

使用 VLOOKUP 和条件格式在 Excel 中查找并标红匹配的串号 你的步骤非常详细且清晰,能够帮助用户在 Excel 中通过 VLOOKUP 和条件格式来查找并标红匹配的串号。以下是对你提供的步骤的简要总结和补充说明: 1. 添加“是否匹配”列 在 a.xlsx 中新增一列…

Spring Boot 集成高德地图电子围栏

摘要:本文手把手教你通过 Spring Boot 调用高德地图 API 实现电子围栏功能,涵盖云端围栏创建、设备位置监控与本地算法校验,附带完整代码和避坑经验! 一、电子围栏核心原理 1.1 什么是电子围栏? 虚拟地理边界&#x…

hadoop伪分布式搭建--启动过程中如果发现某个datanode出现问题,如何处理?

一、问题定位&#xff1a; &#xff08;1&#xff09;检查DataNode日志&#xff1a; DataNode日志通常位于$HADOOP_HOME/logs/或/var/log/hadoop-hdfs/目录下&#xff0c;文件名为hadoop-hdfs-datanode-<hostname>.log。重点关注以下错误类型&#xff1a; ——Incompa…

微软开源神器OmniParser V2.0 介绍

微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具&#xff0c;旨在将用户界面&#xff08;UI&#xff09;截图转换为结构化数据&#xff0c;从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型&#xf…

DLMS电能表通讯协议学习笔记

本文是对于IEC62056协议族&#xff0c;即DLMS协议族的中文说明手册。本文并没有包含DLMS协议族的全部&#xff0c;但解释了在应用中可能出现的大多数情况。本文的目的是为电能量数据采集终端提供与使用DLMS协议族的电能表通讯的协议说明。 本文参考文献如下&#xff1a; &#…

browser_use 自动化浏览器agent使用案例

参考&#xff1a; https://github.com/browser-use/browser-use/tree/577e15c963f7e3c499aac312ecb8da6e1f4733fe 浏览器启动后&#xff0c;页面一直空白问题解决&#xff1a; https://github.com/browser-use/browser-use/issues/986 安装&#xff1a; pip install browser…

【Go】无法访问 proxy.golang.org 进行依赖下载

golang.org/x/net/context: golang.org/x/netv0.37.0: Get "https://proxy.golang.org/golang.org/x/net/v/v0.37.0.zip": dial tcp 142.251.215.241:443: connect: connection refused解决方案&#xff1a; 使用国内的 Go 代理&#xff0c;如 goproxy.cn 或 gopro…

RocketMQ 性能优化与调优策略(二)

实战演练&#xff1a;全方位调优策略 &#xff08;一&#xff09;细致入微的配置优化 生产者配置&#xff1a; sendMsgTimeout&#xff1a;此参数定义了生产者发送消息时等待 Broker 返回确认的最长时间&#xff0c;默认值为 3000 毫秒。若在该时间段内未收到确认&#xff0c…

React前端开发中实现断点续传

在前端开发中&#xff0c;断点续传是指在上传文件时&#xff0c;如果上传过程中中断&#xff08;如网络断开、页面刷新等&#xff09;&#xff0c;可以从断点处继续上传&#xff0c;而不是重新上传整个文件。这种功能在大文件上传场景中非常有用。 以下是实现断点续传的思路和具…

Spring 框架中常用注解和使用方法

Spring 框架中常用注解的详细解释与应用场景&#xff0c;结合核心功能和实际开发需求进行分类说明&#xff1a; 1.组件定义注解 1.1 Component 作用&#xff1a;通用注解&#xff0c;将普通 Java 类标记为 Spring 管理的 Bean&#xff0c;由容器实例化和管理&#xff0c;相当…

使用 PaddlePaddle 官方提供的 Docker 镜像

CUDA版本高PaddlePaddle不支持时&#xff0c;可以使用 PaddlePaddle 官方提供的 Docker 镜像 1. 安装 Docker Desktop1.1 下载 Docker Desktop1.2 安装 Docker Desktop1.3 启用 WSL 2 或 Hyper-V1.4 启动 Docker Desktop1.5 Docker不运行解决方法 2. 拉取 PaddlePaddle Docker …

VSCode C/C++ 环境搭建指南

VSCode C/C 环境搭建指南 第一步&#xff1a;下载并安装VSCode 访问官方网站 打开浏览器&#xff0c;访问Visual Studio Code官网。 选择平台 根据您的操作系统&#xff08;Windows、Mac、Linux&#xff09;选择对应的版本进行下载。 下载和安装 下载完成后&#xff0c;双击…

项目中使用柯里化函数

在项目中使用**柯里化函数&#xff08;Currying&#xff09;**可以显著提高代码的灵活性、可复用性和可读性。柯里化是一种将多参数函数转换为一系列单参数函数的技术。通过柯里化&#xff0c;可以将函数的调用方式从一次性传递所有参数改为分步传递参数&#xff0c;从而实现部…

Golang Channel 使用详解、注意事项与死锁分析

#作者&#xff1a;西门吹雪 文章目录 一、引言&#xff1a;Channel 在 Go 并发编程中的关键地位二、Channel 基础概念深度剖析2.1 独特特性2.2 类型与分类细解 三、Channel 基本使用实操指南3.1 声明与初始化3.3 单向 Channel 的运用 四、Channel 典型使用场景实战案例4.1 协程…

C语言经典代码题

1.输入一个4位数&#xff1a;输出这个输的个位 十位 百位 千位 #include <stdio.h> int main(int argc, char const *argv[]) {int a;printf("输入一个&#xff14;位数&#xff1a;");scanf("%d",&a);printf("个位&#xff1a;%d\n"…

stable-diffusion-webui-docker 构建 comfy-ui

Ubuntu 安装 stable-diffusion-webui-docker 常见问题处理方法 这篇文章介绍了在 Ubuntu 上安装 stable-diffusion-webui-docker&#xff0c;运行 docker compose --profile auto up --build 构建出的界面是 stable-diffusion-webui&#xff0c;如果运行 docker compose --prof…

【AI学习从零至壹】Pytorch神经⽹络

Pytorch神经⽹络 神经网络简介神经元激活函数 神经网络神经⽹络的⼯作过程前向传播(forward) 反向传播(backward)训练神经⽹络 Pytorch搭建并训练神经⽹络神经⽹络构建和训练过程数据预处理构建模型优化器&提取训练数据训练样本 神经网络简介 神经元 在深度学习中&#x…