【AI实战】天工大模型对接及接口处理代码

天工大模型对接及接口处理代码

  • 什么是天工大模型
  • 对接重点说明
  • 完整示例代码

什么是天工大模型

需要了解的同学直接点击下面链接
天工开放平台

对接重点说明

调用大模型后,返回中card_type主要有三类,分别对应:

  • card_type = search_result: 传统搜索引擎模式的搜索结果
  • card_type = markdown: 天工大模型生成的答案内容
  • card_type = suggestion: 推荐搜索内容

在处理对应返回时注意区别。
由于大模型是生成式的,对每个字进行预测并返回,所以,在card_type = markdown时,要处理拼接返回的“字”。target = update是生成中,target=finish是传送完成,2个状态要注意处理。详细的主要处理过程的代码如下:

SEARCH_RESULT_TIPS  = '\n************************ 传统搜索引擎模式的搜索结果 ************************'
MARKDOWN_TIPS       = '\n************************* 天工大模型生成的答案内容 *************************'
SUGGESTION_TIPS     = '\n******************************* 推荐搜索内容 ******************************'

match o_data.get('card_type'):
	case 'search_result' :
		# 保存传统搜索引擎回复结果,后续用于打印到控制台
		sourceAttributions = (((o_data.get('arguments'))[0]).get('messages'))[0].get('sourceAttributions')
	case 'markdown' :
		# 天工大模型生成的生成内容打印到控制台
		print( ((((o_data.get('arguments'))[0]).get('messages'))[0]).get('text'), end='' )
		if o_data.get('target') == 'finish' :
			# 处理完AI大模型完成回复的后处理。
			# 下节的示例代码中在此处进行了回复时间统计。
			pass
	case 'suggestion' :
		# 保存推荐搜索内容的结果,后续用于打印到控制台
		suggestedResponses = (((o_data.get('arguments'))[0]).get('messages'))[0].get('suggestedResponses'

完整示例代码

代码主要功能:

  • 打开一个控制台,提示用户输入要提出的问题
  • 返回大模型交互应答的内容(根据不同的处理方式,进行Json返回值处理)
  • 询问用户是否继续显示传统搜索引擎的结果和建议的搜索问题
import requests
import time
import hashlib
import json

def work(msg):
    url = 'https://api.singularity-ai.com/sky-saas-search/api/v1/search'
    app_key = '{your_key}'       # 这里需要替换你的APIKey
    app_secret = '{your_secret}'       # 这里需要替换你的APISecret
    timestamp = str(int(time.time()))
    sign_content = app_key + app_secret + timestamp
    sign_result = hashlib.md5(sign_content.encode('utf-8')).hexdigest()
    # print('sing_result is ' + sign_result)

    SEARCH_RESULT_TIPS  = '\n************************ 传统搜索引擎模式的搜索结果 ************************'
    MARKDOWN_TIPS       = '\n************************* 天工大模型生成的答案内容 *************************'
    SUGGESTION_TIPS     = '\n******************************* 推荐搜索内容 ******************************'

    markdown_update_flag = False
    answers = ''
    t1 = 0.0
    t2 = 0.0

    sourceAttributions = {}
    suggestedResponses = {}

    # 设置请求头,请求的数据格式为json
    headers={
        "app_key": app_key,
        "timestamp": timestamp,
        "sign": sign_result,
        "Content-Type": "application/json",
        "stream": "true"                       # or change to "false" 不处理流式返回内容
    }

    # 设置请求URL和参数
    data = {
        "content": msg, # "提问内容,如:给我一个赚取10w的方法",
        "stream_resp_type": "delta" # 增量 delta,全量 all【default】
    }

    # 发起请求并获取响应
    response = requests.post(url, headers=headers, json=data, stream=True)
    # 处理响应流
    for line in response.iter_lines():
        if line:
            # 处理接收到的数据
            data = str(line.decode('utf-8'))
            data =str.replace(data, "data: ", "")
            if data.endswith('[DONE]') :
                pass
            else :
                o_data = json.loads(data)
                match o_data.get('card_type'):
                    case 'search_result' :
                        sourceAttributions = (((o_data.get('arguments'))[0]).get('messages'))[0].get('sourceAttributions')
                    case 'markdown' :
                        if not markdown_update_flag :
                            t1 = time.time()
                            print(MARKDOWN_TIPS)
                            markdown_update_flag = True
                        print( ((((o_data.get('arguments'))[0]).get('messages'))[0]).get('text'), end='' )
                        if o_data.get('target') == 'finish' :
                            t2 = time.time()
                            print('\n\n============== Answer time elapse: '+str(t2-t1) + ' second(s) ==============')
                    case 'suggestion' :
                        suggestedResponses = (((o_data.get('arguments'))[0]).get('messages'))[0].get('suggestedResponses')
    confirm = input('\n是否需要继续查看传统搜索结果和推荐查询建议?[y/N]')
    if confirm == 'Y' or confirm == 'y':
        print(SEARCH_RESULT_TIPS)
        count1 = len(sourceAttributions)
        for i in range(count1) :
            result = sourceAttributions[i]
            try :
                a = str.split(result['title'], '-')[1]
                b = str.split(result['title'], '-')[0]
            except :
                a = ' ' + result['showName']
                b = ''
            print('[' + str(i+1) +']' + a + ' <<' + b +'>> (摘要:' + result['snippet']+')')
            print('> 链接: ' + result['seeMoreUrl'])
            print('')
        
        print(SUGGESTION_TIPS)
        count1 = len( suggestedResponses )
        for i in range(count1) :
            result = suggestedResponses[i]
            print('[' + str(i+1) +'] ' + result['text'])


CONSOLE_WELCOME_MSG = '''
************ Welcome to AI CLI. ************
  Please ask me any question, but legal. 
  If you want to quit, please type \"886\"
********************************************
\n(^-^) > '''

while True :
    input_msg = input(CONSOLE_WELCOME_MSG)
    if input_msg == '886':
        print('Hope you have a nice day. Bye bye ...\n')
        break
    work(input_msg)

你可能感兴趣的:(Python,python,人工智能,大模型对接)