首页 > 其他分享 >分享一个大模型在请求api接口上的巧用

分享一个大模型在请求api接口上的巧用

时间:2024-10-21 17:33:50浏览次数:1  
标签:10 模型 接口 api key query 巧用

前言

自从Chatgpt横空出世以来,各种智能工具层出不穷,聊天、绘画、视频等各种工具帮助很多人高效的工作。作为一个开发者,目前常用应用包括代码自动填充,聊天助手等。

这些是工具层面的使用,有没有将大模型和日常编码的前后端流程相结合使用的切入点呢?今天分享一个使用大模型自动调用api接口的示例,可以作为大模型在开发中的另一种使用场景。

接口说明

示例接口如下,一个八字测算的接口(仅做示例,非封建迷信)

请求接口:[https://api.yuanfenju.com/index.php/v1/Bazi/paipan](https://api.yuanfenju.com/index.php/v1/Bazi/paipan)

请求方法:POST

请求body:

{
    "api_key": "xxxx",
    "name": "张三",
    "sex": 0,
    "type": 1,
    "year": 2000,
    "month": 10,
    "day": 10,
    "hours": 22,
    "minute": 0
}

api_key 需要在网站申请

请求示例:

大模型提取信息发送请求

接口的信息如上,正常开发过程是构造好url, body,然后发送请求。使用大模型首先将文字的信息提取变成请求的body体,使用的langchain框架来完成。

原理非常简单,就是创建合适的提示词,让大模型提取传入内容中的关键字段,并以json格式返回。

示例如下

import os
import requests
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from langchain_openai import ChatOpenAI

os.environ["OPENAI_API_KEY"] = "sk-eCWGtrwU14E60A45E8a2T3BlbKFJ18b59d41Fdb748828B0f"
os.environ["OPENAI_API_BASE"] = "https://aigptx.top/v1"


def fun(query):
    url = f"https://api.yuanfenju.com/index.php/v1/Bazi/cesuan"

    # 创建大模型提示词,提取文字的内容
    prompt = ChatPromptTemplate.from_template(
        """你是一个参数查询助手,根据用户输入内容找出相关的参数并按json格式返回。
        JSON字段如下: 
        - "api_key": "K0I5WCmce7jlMZzTw7vi1xsn0", 
        - "name": "姓名", 
        - "sex": "性别,0表示男,1表示女,根据姓名判断", 
        - "type": "日历类型,0农历,1公里,默认1",
        - "year": "出生年份 例:1998", 
        - "month": "出生月份 例 8", 
        - "day": "出生日期,例:8", 
        - "hours": "出生小时 例 14", 
        - "minute": "0",
        如果没有找到相关参数,则需要提醒用户告诉你这些内容,只返回数据结构,不要有其他的评论,
        用户输入:{query}""")

    chain = prompt | ChatOpenAI(temperature=0) | JsonOutputParser()
    data = chain.invoke({"query": query})
    print(f"接口body格式化结果: {data}")

    result = requests.post(url, data)
    if result.status_code == 200:
        print(f"接口关键信息:{result.json()['data']['bazi_info']}")
        try:
            content = result.json()
            res = f"八字为:{content['data']['bazi_info']['bazi']}"
            print(res)
        except Exception as e:
            print(f"八字查询失败,返回数据异常: {e}")
    else:
        print("接口请求状态异常")


if __name__ == "__main__":
    query = "2000年10月10日22时"
    fun(query)

结果:

接口body格式化结果: {'year': '2000', 'month': '10', 'day': '10', 'hours': '22', 'api_key': 'K0I5WCmce7jlMZzTw7vi1xsn0', 'name': '姓名', 'sex': '性别,0表示男,1表示女,根据姓名判断', 'type': '日历类型,0农历,1公历,默认1', 'minute': '0'}
接口关键信息:{'kw': '戌亥', 'tg_cg_god': ['正财', '劫财', '日元', '偏财'], 'bazi': '庚辰 丙戌 丁卯 辛亥', 'na_yin': '白蜡金'}
八字为:庚辰 丙戌 丁卯 辛亥

复现必要准备:

  1. 安装langchain
  2. 国内openai代理
  3. 网站api_key

分析

首先构造提示词,这是整个流程的灵魂。通常提示词常见使用CRISPE框架,它可以为模型提供详细的背景,任务目标和输出格式要求。

CR:capacity and role 能力与角色 希望模型扮演怎样的角色以及角色具有的能力 你是一个参数查询助手
I:insight 洞察力 完成任务依赖的背景信息
S:statement 指令 希望模型做什么,任务的核心关键词和目标 根据用户输入内容找出相关的参数
P:personality 个性 希望模型以什么样的风格或方式输出 并按json格式返回
E:experiment 尝试 要求模型提供多个答案,任务输出结果数量

本示例中提示词:

# 创建大模型提示词,提取文字的内容
prompt = ChatPromptTemplate.from_template(
    """你是一个参数查询助手,根据用户输入内容找出相关的参数并按json格式返回。
    JSON字段如下: 
    - "api_key": "K0I5WCmce7jlMZzTw7vi1xsn0", 
    - "name": "姓名", 
    - "sex": "性别,0表示男,1表示女,根据姓名判断", 
    - "type": "日历类型,0农历,1公里,默认1",
    - "year": "出生年份 例:1998", 
    - "month": "出生月份 例 8", 
    - "day": "出生日期,例:8", 
    - "hours": "出生小时 例 14", 
    - "minute": "0",
    如果没有找到相关参数,则需要提醒用户告诉你这些内容,只返回数据结构,不要有其他的评论,
    用户输入:{query}""")

调用过程:

chain = prompt | ChatOpenAI(temperature=0) | JsonOutputParser()
data = chain.invoke({"query": query})
print(f"接口body格式化结果: {data}")

通过合适的提示词,将传入的信息 2000年10月10日22时提取出来,组装成一个结果。其中ChatOpenAI(temperature=0)是让大模型不要发散思维,严格按照提示词来生成内容,避免结果不准确。JsonOutputParser()返回的结果json格式化。

 {'year': '2000', 'month': '10', 'day': '10', 'hours': '22', 'api_key': 'K0I5WCmce7jlMZzTw7vi1xsn0', 'name': '姓名', 'sex': '性别,0表示男,1表示女,根据姓名判断', 'type': '日历类型,0农历,1公历,默认1', 'minute': '0'}

然后使用requests发送post请求,解析返回结果。

小结

这是一个很简单的大模型应用,主要看点在于使用大模型组织接口调用的参数,包括字段和格式,替换手动编码的实现方式。个人认为在复杂或者变化频繁的场景下能稍微提升效率。

标签:10,模型,接口,api,key,query,巧用
From: https://www.cnblogs.com/goldsunshine/p/18489899

相关文章

  • API自动化测试平台:企业API管理的得力助手
    随着微服务架构和分布式系统的广泛应用,软件系统的复杂性不断增加,传统的手动测试方法已经无法满足快速迭代和高质量交付的需求。API作为系统间通信的核心,其稳定性和可靠性对于整个软件系统至关重要。因此,API自动化测试平台应运而生,它们提供了一种高效、可重复且可靠的测试手段,能够......
  • 【OpenAI】第一节(OpenAI API)获取OpenAI API KEY的两种方式,开发者必看全方面教程!
    在当今人工智能迅猛发展的时代,OpenAI的大模型为开发者提供了强大的文本生成能力。无论你是想创建聊天机器人、内容生成工具,还是其他创新应用,掌握如何获取和使用OpenAIAPIKey是你迈向成功的第一步!本文将详细介绍获取APIKey的步骤、充值方法以及如何在项目中调用API......
  • 活体检测API对接php语言方式-人脸静态/动态活体检测免费
    活体检测API是一种用于判断用户是否为真实存在且活跃的技术接口,翔云活体检测分为静默活体与动态视频活体,广泛应用于金融、身份验证、安防等领域。它通过分析用户提供的图像、视频、或者特定动作,确保所提供的生物信息(如面部或指纹)来自于活体,而非静态照片、视频录播或模型。该技......
  • 翔云 OCR:强大的文字识别工具,车牌识别 API 更是亮点
    在当今数字化的时代,高效准确地识别文字变得越来越重要。翔云OCR就是一款能够满足各种文字识别需求的强大工具,而其中的车牌识别API更是其突出的亮点之一。一、翔云OCR简介翔云OCR提供了一系列的文字识别服务,包括但不限于文档识别、票据识别、银行卡识别等。它利用......
  • 如何使用Python调用API数据
    为什么使用Python调用API数据?简洁的语法:Python的简洁性使得编写API调用代码变得直观易懂。强大的库支持:Python拥有如requests这样的库,极大地简化了HTTP请求的发送和响应的处理。数据处理能力:Python的数据处理库,如Pandas,使得数据的分析和处理变得简单。社区支持:Python社区庞大,......
  • .net core web api授权、鉴权、API保护
    前言本文整理asp.netcorewebAPI的授权、鉴权以及注册验证、API保护一系列常用技术手段。本文所有的实现代码可以参考:https://gitee.com/xiaoqingyao/web-app-identity.git用户管理授权和鉴权的前提是要有一个用户管理模块,.net提供一个现有的Identity组件,帮我们完成了大部......
  • webAPI中的键盘事件以及线程
    一、常用键盘事件1.键盘事件键盘事件触发条件onkeyup某个键盘按键松开时触发onkeydown某个键盘按键按下时触发onkeypress某个键盘按键按下时触发,但是不识别功能键,比如ctrl、shift和箭头等注意:如果使用document.addEventListener,则不用带ononkeypress和前面2个的区别的......
  • 金蝶云星空——关于Webapi保存接口同时自动审核
    问题期望在调用金蝶Webapi接口的新增单据的时候,同时完成提交、审核操作解决方案webapi保存接口有个参数IsAutoSubmitAndAudit,用来在保存时自动提交和审核,传入保存JSON数据时传入此参数设置为true即可实现自动提交审核。说明:为了减少接口调用,简化接口使用,但在实践中很多单......
  • 抽象类和接口
    1.为什么要有抽象类?目录1.为什么要有抽象类?对于一些类它只是对其子类的抽取,自己并不能表示一个对象,比如Animal类只是对动物行为和属性的提取,自己并不能表示一个对象,此时我们就可以用abstract关键字修饰这个类,那么这个类就只能被继承,自己不能创建出一个对象。我们把被abstra......
  • wlanapi.dll错误提示:全面解析修复方法与快速解决策略
    在使用Windows操作系统时,用户可能会遇到各种系统文件错误,其中wlanapi.dll错误便是较为常见的一种。wlanapi.dll是Windows操作系统中负责无线网络连接相关操作的重要动态链接库文件。当此文件出现缺失、损坏或版本不兼容等问题时,系统通常会弹出错误提示,影响无线网络功能的正常使......