Skip to content

Commit

Permalink
update readme.md
Browse files Browse the repository at this point in the history
  • Loading branch information
guru4elephant committed Dec 19, 2023
1 parent 1a77d2a commit a7ce265
Showing 1 changed file with 123 additions and 6 deletions.
129 changes: 123 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,20 @@
AppBuilder SDK面向开发者提供AI原生应用一站式开发工具,包括基础云资源、AI能力引擎、千帆大模型以及相关能力组件,提升AI原生应用开发效率。

[![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](LICENSE)
[![Version](https://img.shields.io/github/baidubce/app-builder/app-builder.svg)](https://github.com/baidubce/app-builder/releases)
![Supported Python versions](https://img.shields.io/badge/python-3.8+-orange.svg)
![Supported OSs](https://img.shields.io/badge/os-linux%2C%20win%2C%20mac-yellow.svg)

</div>

## 版本信息

* **v0.1.0**
* 2023.12.19初始版本发布,基础云组件支持包括BES;AI能力引擎语音、视觉类10个能力,大模型相关RAG、文本生成能力19个。

## 教程与文档

* **预备步骤**
* [认证鉴权](./docs/authentication.md)
* [认证鉴权](https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6)
* [组件总览](./docs/components.md)
* **API文档**
* [API Docs](./docs/api_reference/)
Expand All @@ -30,7 +34,7 @@ pip install --upgrade appbuilder-sdk

## 快速使用

使用AppBuilder SDK之前,请首先申请并设置鉴权参数。具体请参考[认证鉴权](./docs/authentication.md)
使用AppBuilder SDK之前,请首先申请并设置鉴权参数。具体请参考[认证鉴权](https://cloud.baidu.com/doc/AppBuilder/s/Olq6grrt6)

``` python
# 设置环境中的TOKEN,以下示例略
Expand Down Expand Up @@ -68,9 +72,51 @@ print(similar_q(input))

```

#### 对话式问答(Chat RAG)
#### 检索增强问答(Chat RAG)
```python
import appbuilder
from pathlib import Path

cluster_id = "your_bes_cluster_id"
username = "your_bes_cluster_username"
password = "your_bes_cluster_password"

# 基于doc_parser和doc_splitter解析file_path文件为若干个段落
def parse_file(file_path, doc_parser, doc_splitter):
input_msg = appbuilder.Message(str(file_path))
doc_parser_result = doc_parser(input_msg, return_raw=True)
doc_splitter_result = doc_splitter(doc_parser_result)
return [f"{file_path.name}+{para['text'][:384]}"
for para in doc_splitter_result.content["paragraphs"]]

# 文档切分的分块大小,每个分块最大340个字符
chunk_size = 340
# 声明文档解析和文档切分组件
doc_parser = appbuilder.DocParser()
doc_splitter = appbuilder.DocSplitter(splitter_type="split_by_chunk", max_segment_length=chunk_size)

file_dir = "./files"
# 批量解析,形成段落切片列表
paragraphs = [para_text for file in Path(file_dir).iterdir() if file.is_file()
for para_text in parse_file(file, doc_parser, doc_splitter)]

# 默认使用erniebot-embedding-v1
embedding = appbuilder.Embedding()

# 将段落切片列表入库到BESVectorStoreIndex,这里面用到的Baidu Elastic Search服务
segments = appbuilder.Message(resume_paragraphs)
vector_index = appbuilder.BESVectorStoreIndex.from_segments(
segments=segments, cluster_id=cluster_id, user_name=username,
password=password, embedding=embedding)

# 在线检索部分
retriever = vector_index.as_retriever()

input_msg = appbuilder.Message("appbuilder是什么?")
result_list = retriever(query=input_msg, top_k=3)
mrc = appbuilder.MRC()
rag_result = mrc(input_msg, context_out_list=[item["text"] for item in result_list])

```

#### AI能力引擎(AI Engine)
Expand All @@ -86,7 +132,6 @@ with open(asr_path, "rb") as f:
inp = appbuilder.Message(content={"raw_audio": f.read()})
asr_out = asr(inp)
print(out.content)

```

## 应用服务化
Expand All @@ -111,6 +156,78 @@ agent = appbuilder.AgentBase(component=component)
agent.chainlit_demo(port=8091)
```

## 二次开发
当前面向开发者提供开放的数据结构,包括Message和Component,方便开发者融入个人已有的大模型应用程序。此部分仍在不断建设中。

### 消息(Message)
- 构建大模型应用的统一数据结构,基于Pydantic构建,在不同的Component之间流动。Message几类的默认字段是content,类型是Any。
```python
from appbuilder import Message
input_dict = Message({"query": "红烧肉怎么做"})
input_list = Message(["text1", "text2", "text3"])
input_str = Message("红烧肉怎么做")
```

### 组件(Component)
- 所有能力单元的标准结构,以Message结构作为输入输出,内部执行逻辑可在本地执行或调用云端服务,以下是官方组件的实现示例。
```python
class SimilarQuestionMeta(ComponentArguments):
""" SimilarQuestionMeta
"""
message: Message = Field(...,
variable_name="query",
description="输入消息,用于模型的输入,一般为问题。")


class SimilarQuestion(CompletionBaseComponent):
""" 基于输入的问题, 挖掘出与该问题相关的类似问题。广泛用于客服、问答等场景。
Examples:
.. code-block:: python
import os
import appbuilder
os.environ["APPBUILDER_TOKEN"] = "..."
qa_mining = appbuilder.SimilarQuestion(model="eb-turbo-appbuilder")
msg = "我想吃冰淇淋,哪里的冰淇淋比较好吃?"
msg = appbuilder.Message(msg)
answer = qa_mining(msg)
print("Answer: \n{}".format(answer.content))
"""
name = "similar_question"
version = "v1"
meta = SimilarQuestionMeta

def __init__(self, model=None):
"""初始化SimilarQuestionMeta任务。
Args:
model (str|None): 模型名称,用于指定要使用的千帆模型。
Returns:
None
"""
super().__init__(SimilarQuestionMeta, model=model)

def run(self, message, stream=False, temperature=1e-10):
"""
给定输入(message)到模型运行,同时指定运行参数,并返回结果。
参数:
message (obj:`Message`): 输入消息,用于模型的主要输入内容。这是一个必需的参数。
stream (bool, 可选): 指定是否以流式形式返回响应。默认为 False。
temperature (float, 可选): 模型配置的温度参数,用于调整模型的生成概率。取值范围为 0.0 到 1.0,其中较低的值使生成更确定性,较高的值使生成更多样性。默认值为 1e-10。
返回:
obj:`Message`: 模型运行后的输出消息。
"""
return super().run(message=message, stream=stream, temperature=temperature)
```

## License

AppBuilder-SDK遵循Apache-2.0开源协议。

0 comments on commit a7ce265

Please sign in to comment.