Skip to content

Latest commit

 

History

History
219 lines (172 loc) · 9.59 KB

File metadata and controls

219 lines (172 loc) · 9.59 KB

console端RAG操作工具(RAG)

简介

RAG是基于线上RAG应用的问答组件,可以使用该组件利用线上RAG应用进行问答。
⚠️本组件仅适用于2024-04-02之前创建的历史RAG应用,最新创建的AgentBuilder应用,请参考AppBuilder应用 进行调用。

功能介绍

利用线上RAG应用进行问答

特色优势

与线上应用联动,利用线上RAG应用进行问答

应用场景

使用SDK利用线上RAG应用进行问答

基本用法

以下是使用SDK进行问答的示例代码

Python

组件初始化参数

参数名称 参数类型 描述 示例值
app_id string 线上RAG应用的ID "正确的应用ID"

run方法入参

参数名称 参数类型 是否必须 描述 示例值
query Message 提问的内容 Message(content="北京的面积多大")
stream bool 是否流式返回,默认False False
conversation_id string 不传默认新建会话 ""

run方法出参

参数名称 参数类型 描述 示例值
result Message 返回结果 Message(name=msg, content=北京市的面积是16410.54平方公里^[2]^。, mtype=dict, extra={'search_baidu': [{'id': '1', 'content': '北京,简称“京”,是中华人民共和国的首都,是全国的政治中心、文化中心,是世界著名古都和现代化国际...', 'type': 'web', 'from': 'search_baidu', 'title': '北京概况_首都之窗_北京市人民政府门户网站', 'url': 'https://www.beijing.gov.cn/renwen/bjgk/?eqid=b987a5f000085b6700000002642e204d'}, 'id', 'content', 'type', 'from', 'title', 'url']}, conversation_id=5a247540-e8cf-402a-a630-8015c24904f5)})

调用示例

import appbuilder
import os

# 请前往千帆AppBuilder官网创建密钥,流程详见:https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6#1%E3%80%81%E5%88%9B%E5%BB%BA%E5%AF%86%E9%92%A5
# 设置环境变量
os.environ["APPBUILDER_TOKEN"] = '...'

app_id = '...'  # 线上RAG应用ID,可在console端查看
conversation_id = '...'  # 会话ID,可选参数,不传默认新建会话
rag_app = appbuilder.console.RAG(app_id)
query = "中国的首都在哪里"
answer = rag_app.run(appbuilder.Message(query))  # 新建会话
print(answer.content)  # 获取结果内容
conversation_id = answer.conversation_id  # 获取会话ID,可用于下次会话
print(conversation_id)
query = "它有哪些旅游景点"
answer = rag_app.run(appbuilder.Message(query), conversation_id)  # 接上次会话
print(answer.content)  # 获取结果内容
print(answer.extra)  # 获取结果来源

Java

组件初始化参数

参数名称 参数类型 描述 示例值
appID String 线上RAG应用的ID "正确的应用ID"

Run方法入参

参数名称 参数类型 是否必须 描述 示例值
query string query内容 "汽车性能参数怎么样"
conversationID String 若为空字符串服务端会自动创建新的会话ID,若不为空则继续上次对话内容
stream boolean 为true时则流式返回,为false时则一次性返回所有内容, 推荐设为true,降低首token时延

Run方法出参

参数名称 参数类型 描述 示例值
RAGIterator RAGIterator 回答迭代器,流式/非流式均统一返回该类型,每次迭代返回RAGResponse类型

迭代RAGIterator

参数名称 参数类型 描述 示例值
code int 响应状态码
message String 响应信息
result RAGResult 响应结果
+answer String 回答结果
+conversationId String 会话id
+events []EventContent 事件流
+events[0] EventContent 具体事件
++eventType String 事件类型
++eventStatus String 事件状态
++outputs Map<String, Object> 事件内容

示例代码

class RAGDemo {
    public static void main(String[] args) throws IOException, AppBuilderServerException {
        // 填写自己的APPBUILDER_TOKEN
        System.setProperty("APPBUILDER_TOKEN", "填写秘钥");
        // 填写创建好的appId
        String appId = "填写线上创建好的appId";
        
        RAG rag = new RAG(appId);

        RAGIterator itor = rag.run("我想了解附近的房产价格,你能帮我查询吗?", "", true);
        System.out.println("输出结果:");
        // itor.hasNext()返回false时,表示流式调用结束
        while (itor.hasNext()) {
            RAGResponse response = itor.next();
            System.out.print(response.getResult().getAnswer());
        }
    }
}

Go

组件初始化参数

参数名称 参数类型 描述 示例值
app_id string 线上RAG应用的ID "正确的应用ID"
config SDKConfig SDK配置信息

Run方法入参

参数名称 参数类型 是否必须 描述 示例值
conversationID 会话ID 若为空字符串服务端会自动创建新的会话ID,若不为空则继续上次对话内容
query string query内容 "汽车性能参数怎么样"
stream bool 为true时则流式返回,为false时则一次性返回所有内容, 推荐设为true,降低首token时延

Run方法出参

参数名称 参数类型 描述 示例值
RAGIterator RAGIterator 回答迭代器,流式/非流式均统一返回该类型
error error 存在错误时error不为nil,反之

迭代RAGIterator

参数名称 参数类型 描述 示例值
Answer string query答案
ConversationID string 会话ID
Events []RAGEvent RAG事件流
+Event string 事件名
EventStatus string 事件状态
EventType string 事件类型
Text json.RawMessage 事件内容

示例代码

package main

import (
	"errors"
	"fmt"
	"io"
	"os"

	"github.com/baidubce/app-builder/go/appbuilder"
)

func main() {
	// 设置APPBUILDER_TOKEN、GATEWAY_URL环境变量
	os.Setenv("APPBUILDER_TOKEN", "请设置正确的应用密钥")
	// 默认可不填,默认值是 https://appbuilder.baidu.com
	os.Setenv("GATEWAY_URL", "")
	config, err := appbuilder.NewSDKConfig("", "")
	if err != nil {
		fmt.Println("new config failed: ", err)
		return
	}
	// 初始化RAG实例
	appID := "请填写正确的应用ID"
	rag, err := appbuilder.NewRAG(appID, config)
	if err != nil {
		fmt.Println("new rag instance failed:", err)
		return
	}
	// 执行流式对话
	i, err := rag.Run("", "", true)
	if err != nil {
		fmt.Println("run failed:", err)
		return
	}
	completedAnswer := ""
	// 迭代返回结果
	var answer *appbuilder.RAGAnswer
	for answer, err = i.Next(); err == nil; answer, err = i.Next() {
		completedAnswer = completedAnswer + answer.Answer
	}
	// 迭代正常结束err应为io.EOF
	if errors.Is(err, io.EOF) {
		fmt.Println("run success")
		fmt.Println("RAG智能体回答内容: ", completedAnswer)
	} else {
		fmt.Println("run failed:", err)
	}
}