官方库
Python库
对于使用 Python
的开发者,我们提供了一个 Python库。
该库的设计目标是提供一种简单、灵活、强大的方式,让您可以直接从 Python
应用程序中使用我们的服务。
一、如何安装
您可以使用 pip
来安装它,并将其导入到您的项目中开始调用API。安装命令如下:
$ pip install sensenova
二、确认鉴权
python库,对HTTP接口里需要用户用JWT生成TOKEN的方法实现了内嵌,用户可以直接填写获取到的
Access Key ID
和Access Key Sercret
。
您可以通过设置环境变量(设置完成后,sensenova会自动提取):
export SENSENOVA_ACCESS_KEY_ID=
export SENSENOVA_SECRET_ACCESS_KEY=
或者在代码里直接给 sensenova.access_key_id
和 sensenova.secret_access_key
赋值:
# -*- coding: utf-8 -*-
import sensenova
sensenova.access_key_id = "..."
sensenova.secret_access_key = "..."
三、在代码里集成调用接口
【获取headers】
# -*- coding: utf-8 -*-
import sensenova
resp = sensenova.Model.list()
#获取http headers
print(resp.headers())
【捕获错误】
# -*- coding: utf-8 -*-
import sensenova
try:
resp = sensenova.Model.list()
#获取http headers
print(resp.headers())
except sensenova.AuthenticationError as e:
#自定义处理逻辑
print(e.json_body)
except sensenova.InvalidRequestError as e:
#自定义处理逻辑
print(e.headers)
print(e.http_body)
print(e.code)
except sensenova.APIError as e:
#自定义处理逻辑
print(e.headers)
except sensenova.TryAgain as e:
#自定义处理逻辑
print(e.headers)
except sensenova.PermissionError as e:
#自定义处理逻辑
print(e.headers)
except sensenova.SensenovaError as e:
#自定义处理逻辑
print(e.headers)
【模型管理】
- 查询模型列表
# -*- coding: utf-8 -*-
import sensenova
resp = sensenova.Model.list()
- 查询模型详情
# -*- coding: utf-8 -*-
import sensenova
resp = sensenova.Model.retrieve(id=model_id)
【对话生成-无会话历史】
# -*- coding: utf-8 -*-
import sensenova
import sys
stream = True # 流式输出或非流式输出
model_id = "" # 填写真实的模型ID
resp = sensenova.ChatCompletion.create(
messages=[{"role": "user", "content": "Say this is a test!"}],
model=model_id,
stream=stream,
max_new_tokens=1024,
n=1,
repetition_penalty=1.05,
temperature=0.8,
top_p=0.7,
know_ids=[],
user="sensenova-python-test-user",
knowledge_config={
"control_level": "normal",
"knowledge_base_result": True,
"knowledge_base_configs":[]
},
plugins={
"associated_knowledge": {
"content": "需要注入给模型的知识",
"mode": "concatenate"
},
"web_search": {
"search_enable": True,
"result_enable": True
},
}
)
if not stream:
resp = [resp]
for part in resp:
choices = part['data']["choices"]
for c_idx, c in enumerate(choices):
if len(choices) > 1:
sys.stdout.write("===== Chat Completion {} =====\n".format(c_idx))
if stream:
delta = c.get("delta")
if delta:
sys.stdout.write(delta)
else:
sys.stdout.write(c["message"])
if len(choices) > 1:
sys.stdout.write("\n")
sys.stdout.flush()
【对话生成-有会话历史】
# -*- coding: utf-8 -*-
import sensenova
import sys
# 创建会话
resp = sensenova.ChatSession.create(
system_prompt = [
{
"role": "system",
"content": "You are a translation expert."
}
]
)
session_id = resp["session_id"]
# 有状态对话生成
stream = True # 流式输出或非流式输出
model_id = "" # 填写真实的模型ID
resp = sensenova.ChatConversation.create(
action="next",
content="地球的直径是多少米?",
model=model_id,
session_id=session_id,
stream=stream,
know_ids=[],
knowledge_config={
"control_level": "normal",
"knowledge_base_result": True,
"knowledge_base_configs":[]
},
plugins={
"associated_knowledge": {
"content": "需要注入给模型的知识",
"mode": "concatenate"
},
"web_search": {
"search_enable": True,
"result_enable": True
},
}
)
if not stream:
resp = [resp]
for part in resp:
if stream:
delta = part["data"]["delta"]
if delta:
sys.stdout.write(delta)
else:
sys.stdout.write(part["data"]["message"])
sys.stdout.flush()
【文本补全】
# -*- coding: utf-8 -*-
import sensenova
import sys
stream = True # 流式输出或非流式输出
model_id = "" # 填写真实的模型ID
resp = sensenova.Completion.create(
prompt="床前明月光下一句是什么",
model=model_id,
stream=stream,
n=1,
max_new_tokens=1024,
repetition_penalty=1.05,
stop=None,
temperature=0.8,
top_p=0.7
)
if not stream:
resp = [resp]
for part in resp:
choices = part['data']["choices"]
for c_idx, c in enumerate(choices):
if len(choices) > 1:
sys.stdout.write("===== Chat Completion {} =====\n".format(c_idx))
if stream:
delta = c.get("delta")
if delta:
sys.stdout.write(delta)
else:
sys.stdout.write(c["text"])
if len(choices) > 1:
sys.stdout.write("\n")
sys.stdout.flush()
【拟人对话生成】
# -*- coding: utf-8 -*-
import sensenova
import sys
model_id = "" # 填写真实的模型ID
resp = sensenova.CharacterChatCompletion.create(
model=model_id,
n=1,
max_new_tokens=300,
character_settings=[
{
"name": "角色1",
"gender": "男",
"nickname": "",
"other_setting": "",
"identity": "",
"feeling_toward": [],
"detail_setting": "",
},
{
"name": "角色2",
"gender": "女",
"nickname": "",
"other_setting": "",
"identity": "",
"feeling_toward": [],
"detail_setting": "",
},
],
role_setting={
"user_name": "角色1",
"primary_bot_name": "角色2"
},
messages=[
{
"name": "角色1",
"content": "举头望明月下一句是什么"
}
]
)
choices = resp['data']["choices"]
for c_idx, c in enumerate(choices):
if len(choices) > 1:
sys.stdout.write("===== Character Chat Completion {} =====\n".format(c_idx))
sys.stdout.write(c["message"])
if len(choices) > 1: # not in streams
sys.stdout.write("\n")
sys.stdout.flush()
【文本转向量】
# -*- coding: utf-8 -*-
import sensenova
import sys
model_id = "" # 填写真实的模型ID
resp = sensenova.Embedding.create(
model=model_id,
input=["今天天气怎么样"]
)
print(resp)
【知识库构建】
# -*- coding: utf-8 -*-
import sensenova
description="" #知识库描述
file_id="" #通过【文件管理】模块创建的文件id,只能是schemd="KNOWLEDGE_BASE_1"的文件
files=[file_id] #可以为空
## 创建知识库
resp = sensenova.KnowledgeBase.create(description=description,files=files)
knowledge_base_id=resp["knowledge_base"]["id"] #知识库id
## 更新知识库
resp = sensenova.KnowledgeBase.update(description=description,files=files,sid=knowledge_base_id)
## 查询知识库列表
resp = sensenova.KnowledgeBase.list()
## 查询知识库详情
resp = sensenova.KnowledgeBase.retrieve(id=knowledge_base_id)
## 删除知识库
resp = sensenova.KnowledgeBase.delete(sid=knowledge_base_id)
【文件管理】
# -*- coding: utf-8 -*-
import sensenova
import io
import json
# 创建文件
payload = {
"text_lst": [
"xxx"
]
}
file = io.StringIO(json.dumps(payload, ensure_ascii=False)) #构造一个file对象即可
scheme="KNOWLEDGE_BASE_1" #枚举值,请参考文件管理API文档
resp = sensenova.File.create(file=file,scheme=scheme,description="file desc")
file_id = resp["id"]
# 查询文件
resp = sensenova.File.retrieve(id=file_id)
# 下载文件
resp = sensenova.File.download(id=file_id) #resp为文件的原始内容,只有文件status="VALID"的才可以下文件内容
# 删除文件
resp = sensenova.File.delete(id=file_id)
#文件列表
resp = sensenova.File.list()
四、直接通过 Python Cli
调用接口
# 【模型管理】
## 查询模型列表
sensenova api models.list
## 查询模型详情
sensenova api models.get -i $model_id
# 【对话生成】
## 【对话生成-无会话历史】
sensenova api chat_completions.create -m $model_id -g "user" "Say this is a test! " --n 1 --stream
## 【对话生成-有对话历史】
### 【创建会话】
sensenova api chat_sessions.create --prompts $role $prompt --prompts $role,$prompt
###【对话生成-有会话历史】
sensenova api chat_conversations.create -m $model_id -s $session_id -a $action -c $content --stream
### 【文本补全】
sensenova api completions.create -m $model_id --stream -n 2 --max_new_tokens 1024 --repetition_penalty 1.05 --temperature 0.8 --top_p 0.7 --stop "" --prompt 今天天气怎么样
### 【拟人对话】
sensenova api character_chat_completions.create --model $model_id --message $message_role1 $content2 --n 1 --role_setting $user_name $primary_bot_name --character_settings='[{"name":"role1","gender":"男","nickname":"老师","other_setting":""},{"name":"role2","gender":"男","nickname":"主播"}]' --extra "本输入纯属虚构"
### 【文本转向量】
sensenova api embeddings.create --model $model_id --input "今天天气怎么样" "明天天气怎么样" --input "明天天气怎么样?"
# 【知识库构建】
## 创建知识库
sensenova api knowledge-bases.create -d "description" -f $file_id
## 更新知识库
sensenova api knowledge-bases.update -d "description" -i $knowledge_base_id -f $update_file_id
## 删除知识库文件
sensenova api knowledge-bases.delete_file -i $knowledge_base_id -f $file_id
## 查询知识库列表
sensenova api knowledge-bases.list
## 查询知识库详情详情
sensenova api knowledge-bases.get -i $knowledge_base_id
## 删除知识库
sensenova api knowledge-bases.delete -i $knowledge_base_id
# 【文件管理】
## 创建文件
sensenova api files.create -s $scheme -f $file_path -d $description
## 查询文件
sensenova api files.get -i $file_id
## 下载文件
sensenova api files.download -i $file_id
## 删除文件
sensenova api files.delete -i $file_id
## 文件列表
sensenova api files.list