【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)
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
随着人工智能技术的不断发展,AI模型的应用开发成为了当前最热门的趋势之一。AI模型具有强大的计算能力和深度学习算法,能够处理复杂的任务和大规模的数据。在实际的应用开发中,我们需要掌握一些实战指南来更好地利用AI模型。 首先,我们需要明确自己的应用需求和目标。AI模型功能强大,但并不是对所有的应用都适用。因此,我们需要针对具体的应用场景来选择合适的AI模型,确保其能够满足我们的需求。 其次,我们需要具备一定的技术能力和知识。AI模型的应用开发涉及到深度学习、神经网络等高级技术,因此需要有一定的编程能力和算法知识。同时,我们还需要了解AI模型的特点和使用方法,对其进行深入的学习和研究。 另外,我们还需要关注数据的质量和数量。AI模型的训练需要大量的数据支持,因此我们需要具备数据收集、清洗和标注的能力,以及对数据进行合理的管理和利用。 最后,我们需要进行系统的测试和优化。在应用开发的过程中,我们需要不断地进行测试,发现问题并进行调整和优化,以确保AI模型的稳定性和性能。 总的来说,AI模型应用开发需要我们具备综合的技术能力和知识,同时需要结合具体的应用需求和场景,进行系统的规划和实施,从而更好地利用AI模型的优势。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

招财猫_Martin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值