1. 什么是元器?

“腾讯元器”是基于腾讯混元大模型的一站式智能体制作平台,支持通过下述能力对大模型进行增强:

  • 提示词,包含详细设定(system prompt),开场白,建议引导问题。
  • 插件(外部API),目前支持勾选多个插件。官方插件包含网页解析、混元生图、图片理解等,也支持用户自定义插件。
  • 知识库,当前版本支持doc、docx、txt、PDF四种格式。
  • 工作流,一种“流程图”式的低代码编辑工具,可以用来做一个“高级版”插件。在工作流里,可以任意编排插件、知识库、大模型节点的工作顺序和调用传参,从而精确控制智能体中部分任务的运行逻辑。

通过元器平台制作的智能体,目前支持32k token上下文长度(某次回答过程中的提示词+机器回答的token长度,一个token约为1.8个中文字符)。工作流的超时运行时间为240s。智能体的回复上限时间是240s。

2. 发布元器智能体

调用API需要先创建一个对应的智能体。关于智能体的创建,可以参考官方文档

创建智能体后,还需要进行发布。发布时,可以指定智能体的公开范围:

  • 所有人可用:该智能体会展示在腾讯元器和元宝App内,可以被用户通过站内搜索搜到;
  • 仅通过分享链接进入者可用:无法被元器和元宝的搜索搜到该智能体,但是可以通过链接分享给朋友使用;
  • 仅自己可用,只有你的账号自己可用该智能体

发布后,就可以通过API调用该智能体了。

3. 调用智能体API

API接口文档可以从这里找到。

3.1 定义请求参数

// File 结构体表示文件信息,包含类型和URL
type File struct {
	Type string `json:"type"`
	URL  string `json:"url"`
}

// MessageContent 结构体表示消息内容,包含类型、文本和文件URL
type MessageContent struct {
	Type    string `json:"type"`
	Text    string `json:"text"`
	FileURL File   `json:"file_url"`
}

// RequestMessage 结构体表示请求消息,包含角色和内容列表
type RequestMessage struct {
	Role    string           `json:"role"`
	Content []MessageContent `json:"content"`
}

// Request 结构体表示请求,包含助手ID、用户ID、是否流式传输和消息列表
type Request struct {
	AssistantID string           `json:"assistant_id"`
	UserID      string           `json:"user_id"`
	Stream      bool             `json:"stream"`
	Messages    []RequestMessage `json:"messages"`
}

// Yuanqi 结构体表示Yuanqi对象,包含token
type Yuanqi struct {
	token string
}

// Usage 结构体表示使用情况,包含提示tokens、完成tokens和总tokens
type Usage struct {
	PromptTokens     int `json:"prompt_tokens"`
	CompletionTokens int `json:"completion_tokens"`
	TotalTokens      int `json:"total_tokens"`
}

// Step 结构体表示步骤,包含角色、内容、工具调用ID、工具调用列表、使用情况和时间成本
type Step struct {
	Role       string     `json:"role"`
	Content    string     `json:"content"`
	ToolCallID string     `json:"tool_call_id"`
	ToolCalls  []ToolCall `json:"tool_calls"`
	Usage      Usage      `json:"usage"`
	TimeCost   int        `json:"time_cost"`
}

// ToolCall 结构体表示工具调用,包含ID、类型和函数
type ToolCall struct {
	ID       string   `json:"id"`
	Type     string   `json:"type"`
	Function Function `json:"function"`
}

// Function 结构体表示函数,包含名称、描述、类型和参数
type Function struct {
	Name      string `json:"name"`
	Desc      string `json:"desc"`
	Type      string `json:"type"`
	Arguments string `json:"arguments"`
}

// ResponseMessage 结构体表示响应消息,包含角色、内容和步骤列表
type ResponseMessage struct {
	Role    string `json:"role"`
	Content string `json:"content"`
	Steps   []Step `json:"steps"`
}

// Delta 结构体表示增量,包含角色、内容、工具调用ID、工具调用列表和时间成本
type Delta struct {
	Role       string     `json:"role"`
	Content    string     `json:"content"`
	ToolCallID string     `json:"tool_call_id"`
	ToolCalls  []ToolCall `json:"tool_calls"`
	TimeCost   int        `json:"time_cost"`
}

// Choice 结构体表示选择,包含索引、完成原因、审核级别、消息和增量
type Choice struct {
	Index           int             `json:"index"`
	FinishReason    string          `json:"finish_reason"`
	ModerationLevel string          `json:"moderation_level"`
	Message         ResponseMessage `json:"message"`
	Delta           Delta           `json:"delta"`
}

// Response 结构体表示响应,包含ID、创建时间、选择列表、助手ID和使用情况
type Response struct {
	ID          string   `json:"id"`
	Created     int      `json:"created"`
	Choices     []Choice `json:"choices"`
	AssistantID string   `json:"assistant_id"`
	Usage       Usage    `json:"usage"`
}

3.2 构建http请求

// Build 方法构建并返回一个http.Request对象,给定指定的参数
func (y *Yuanqi) Build(ctx context.Context, method, url string, request any) (req *http.Request, err error) {
	// Check if request data is nil.
	if request == nil {
		req, err = http.NewRequestWithContext(ctx, method, url, nil)
	} else {
		//Marshal the request data using Sonic marshaler.
		requestBytes, err := sonic.Marshal(request)
		if err != nil {
			return nil, errors.Wrap(err, "marshal request error")
		}
		//Use the marshaled bytes to create a new request with the specified context, method and URL.
		req, err = http.NewRequestWithContext(ctx, method, url, bytes.NewBuffer(requestBytes))
		if err != nil {
			return nil, errors.Wrap(err, "create http request error")
		}
	}

	// Add the required headers to the request.
	req.Header.Set("Authorization", "Bearer "+y.token)
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("X-source", "openapi")
	return
}

完整代码可以在这里找到。


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意

腾讯云开发者社区:孟斯特