什么是天工大模型
需要了解的同学直接点击下面链接
天工开放平台
对接重点说明
调用大模型后,返回中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)