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

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

前言

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

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

接口说明

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

分享一个大模型在请求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 需要在网站申请

请求示例:

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

大模型提取信息发送请求

接口的信息如上,正常开发过程是构造好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请求,解析返回结果。

小结

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

发表评论

相关文章