rag.md•9.82 kB
# console端RAG操作工具(RAG)
## 简介
RAG是基于线上RAG应用的问答组件,可以使用该组件利用线上RAG应用进行问答。<br>
<span style="color:red">
⚠️本组件仅适用于2024-04-02之前创建的历史RAG应用,最新创建的AgentBuilder应用,请参考[AppBuilder应用](../../../BasisModule/Platform/Application/appbuilder_client.md)
进行调用。
</span>
### 功能介绍
利用线上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)}) |
#### 调用示例
```python
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> | 事件内容 | |
#### 示例代码
```java
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 | 事件内容 | |
#### 示例代码
```go
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)
}
}
```