实时工作流支持您按照规定的标准协议来接入自研大语言模型(LLM)。
自研LLM标准接口(OpenAI规范)
如果您的LLM接口符合OpenAI标准规范,您可以通过OpenAI标准的配置将您的自研LLM服务整合到工作流中。目前只支持以流式方式请求符合OpenAI规范的服务。
首先您需要LLM大语言模型节点中,选择自研接入(OpenAI规范),并配置以下参数:
名称 | 类型 | 必填 | 描述 | 示例值 |
ModelId | String | 是 | OpenAI标准model字段,表示模型名称 | abc |
API-KEY | String | 是 | OpenAI标准api_key字段,表示API鉴权信息 | AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI |
目标模型HTTPS地址 | String | 是 | OpenAI标准base_url字段,表示目标服务请求地址 | http://www.abc.com |
在实时工作流运行期间,将按照以下格式,组装OpenAI标准数据,通过POST请求访问您配置的自研模型HTTPS地址,获取相应结果,输入参数如下:
名称 | 类型 | 必填 | 描述 | 示例值 |
messages | Array | 是 | 历史对话上下文,最多保留20条上下文记录,在数组中越靠前的位置,表示越早地提问或者回答。 | [{'role': 'user', 'content': '今天天气怎么样?'},{'role': 'assistant', 'content': '今天天气晴朗。'},{'role': 'user', 'content': '明天天气晴怎么样?'}] |
model | String | 是 | 模型名称信息 | abc |
stream | Boolean | 是 | 是否流式,目前只支持流式传输 | True |
extendData | Object | 是 | 补充信息 | {'instanceId':'68e00b6640e*****3e943332fee7','channelId':'123','sentenceId':'3',userData':'{"aaaa":"bbbb"}'} |
| String | 是 | 实例ID信息 | 68e00b6640e*****3e943332fee7 |
| String | 是 | 房间ID信息 | 123 |
| Int | 是 | 问答ID信息 说明 对于用户的同一次提问,智能体回答会使用相同的ID信息。 | 3 |
| String | 否 | 启动实例时您传入的UserData业务字段数据 | {"aaaa":"bbbb"} |
自定义LLM(OpenAI规范)Server
Python
import json
import time
from loguru import logger
from flask import Flask, request, jsonify, Response
app = Flask(__name__)
API_KEY = "YOURAPIKEY"
@app.route('/v1/chat/completions', methods=['POST'])
def chat_completion():
# 检查API密钥
auth_header = request.headers.get('Authorization')
if not auth_header or auth_header.split()[1] != API_KEY:
return jsonify({"error": "Unauthorized"}), 401
data = request.json
logger.info(f"data is {data}")
task_id = request.args.get('task_id')
room_id = request.args.get('room_id')
for header, value in request.headers.items():
logger.info(f"{header}: {value}")
# 打印查询参数
logger.info("\nQuery Parameters:")
for key, value in request.args.items():
logger.info(f"{key}: {value}")
logger.info(f"task_id: {task_id}, room_id: {room_id}")
stream = data.get('stream', False)
if stream:
return Response(generate_stream_response(data), content_type='text/event-stream')
else:
return jsonify(generate_response(data))
def generate_response(data):
response = "这是一个模拟的AI助手响应。实际应用中,这里应该调用真实的AI模型。"
return {
"id": "chatcmpl-123",
"object": "chat.completion",
"created": int(time.time()),
"model": data['model'],
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": response
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": sum(len(m['content']) for m in data['messages']),
"completion_tokens": len(response),
"total_tokens": sum(len(m['content']) for m in data['messages']) + len(response)
}
}
def generate_stream_response(data):
response = "这是一个模拟的AI助手流式响应。实际应用中,这里应该调用真实的AI模型。"
words = list(response)
for i, word in enumerate(words):
chunk = {
"id": "chatcmpl-123",
"object": "chat.completion.chunk",
"created": int(time.time()),
"model": data['model'],
"choices": [{
"index": 0,
"delta": {
"content": word
},
"finish_reason": None if i < len(words) - 1 else "stop"
}]
}
logger.info(chunk)
yield f"data: {json.dumps(chunk)}\n\n"
time.sleep(0.1) # 模拟处理时间
yield "data: [DONE]\n\n"
if __name__ == '__main__':
logger.info(f"Server is running with API_KEY: {API_KEY}")
app.run(port=8083, debug=True)
自研LLM标准接口(阿里规范)
您需要实现一个公网可访问的HTTP服务,按照规定的输入输出规范,封装好您的大语言模型,即可在工作流中使用您自研的LLM服务。
首先您需要在编排管理控制台中的LLM 大语言模型节点中,配置以下参数:
名称 | 类型 | 必填 | 描述 | 示例值 |
自研模型HTTPS地址 | String | 是 | 自研模型HTTPS接口地址 | https://www.abc.com |
Token | String | 否 | 服务校验令牌 | AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI |
在实时工作流运行期间,将按照以下格式,组装表单数据,通过POST请求访问您配置的自研模型HTTPS地址,获取相应结果,输入参数如下:
名称 | 类型 | 必填 | 描述 | 示例值 |
Message | String | 是 | 历史对话上下文,最多保留20条上下文记录,在数组中越靠前的位置,表示越早地提问或者回答。 | [{'role': 'user', 'content': '今天天气怎么样?'},{'role': 'assistant', 'content': '今天天气晴朗。'},{'role': 'user', 'content': '明天天气晴怎么样?'}] |
Token | String | 否 | 服务校验令牌 | AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI |
ExtendData | String | 是 | 提交自定义LLM拓展信息字段,会包含实例ID,以及启动实例时您传入的UserData业务字段数据。 | { "InstanceId": "68e00b6640e*****3e943332fee7", "UserData": "{\"aaaa\":\"bbbb\"}" } |
响应参数您需要组装成JSON返回给编排服务,参数如下:
名称 | 类型 | 必填 | 描述 | 示例值 |
Text | string | 是 | LLM大模型响应文本 | “今天天气晴朗。” |
示例如下:
{
"Text": "你好,我是您的人工智能助手。"
}
自定义LLM(阿里规范) Server
Python
import json
from aiohttp import web
async def handle(request):
data = await request.post()
message = data.get('Message', "")
token = data.get('Token', None)
extend_data = data.get('ExtendData', "")
print(f"message:{message}, token:{token}, extend_data:{extend_data}")
# TODO:1. 校验Token是否合法
# TODO:2. 处理Message获取LLM处理结果
result = "你好,我是您的人工智能助手。"
# 组装LLM节点期望结果
resp = {
"Text": result
}
return web.Response(text=json.dumps(resp))
app = web.Application()
app.add_routes([web.post('/', handle)])
if __name__ == '__main__':
web.run_app(app)