知识库
知识库组件(KnowledgeBase)
简介
知识库组件(KnowledgeBase)是对线上知识库操作的组件,可以通过SDK实现创建知识库、添加知识文档、查询知识库文档、删除知识文档等操作,可在平台console中查看结果。
功能介绍
对console端知识库进行操作,可以通过SDK实现创建知识库、添加知识文档、查询知识库文档、删除知识文档等操作,可在平台console中查看结果。
特色优势
和console端知识库操作一致,可实现快速创建、查询、删除等操作。
应用场景
通过SDK代码实现console端知识库操作。
Python基本用法
1、新建知识库
KnowledgeBase().create_knowledge_base(name: str, description: str, type: str, clusterId: str, esUserName: str, esPassword: str, location: str) -> KnowledgeBaseDetailResponse
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
name | string | 是 | 希望创建的知识库名称 | "我的知识库" |
description | string | 否 | 知识库描述 | "我的知识库" |
type | string | 是 | 知识库托管资源选择 可选值: public: AppBuilder共享资源 bes:百度Elasticsearch vdb:百度向量数据库VectorDB |
"public" |
clusterId | string | type=bes 和 vdb 时填写 | 集群/实例 ID 请在bes、vdb控制台中查看。 |
"clusterId" |
esUserName | string | type=bes 和 vdb 时填写 | 用户名/账号 请在bes、vdb控制台中查看。 |
"username" |
esPassword | string | type=bes 和 vdb 时填写 | 密码/API密钥 请在bes、vdb控制台中查看。 |
"password" |
location | string | type=bes 和 vdb 时填写 | 托管资源的区域 可选值: bj:北京 bd:保定 sz:苏州 gz:广州 |
"bj" |
方法返回值
KnowledgeBaseDetailResponse
类定义如下:
1class KnowledgeBaseDetailResponse(BaseModel):
2 id: str = Field(..., description="知识库ID")
3 name: str = Field(..., description="知识库名称")
4 description: Optional[str] = Field(None, description="知识库描述")
5 config: Optional[KnowledgeBaseConfig] = Field(..., description="知识库配置")
衍生类KnowledgeBaseConfig
定义如下:
1class KnowledgeBaseConfig(BaseModel):
2 index: Optional[KnowledgeBaseConfigIndex] = Field(..., description="索引配置")
衍生类KnowledgeBaseConfigIndex
定义如下:
1class KnowledgeBaseConfigIndex(BaseModel):
2 type: str = Field(..., description="索引类型", enum=["public", "bes", "vdb"])
3 clusterId: Optional[str] = Field(None, description="集群/实例 ID")
4 username: Optional[str] = Field(None, description="bes用户名")
5 password: Optional[str] = Field(None, description="bes密码")
6 location: Optional[str] = Field(None, description="托管资源的区域", enum=["bj", "bd", "sz", "gz"])
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5knowledge = appbuilder.KnowledgeBase()
6resp = knowledge.create_knowledge_base(
7 name="my_knowledge",
8 description="my_knowledge",
9 type="public",
10 )
11print("新建的知识库ID: ", resp.id)
12print("新建的知识库名称: ", resp.name)
13
14# 新建的知识库ID: da51a988-cbe7-4b24-aa5b-768985e8xxxx
15# 新建的知识库名称: my_knowledge
2、实例化已创建的知识库
KnowledgeBase(knowledge_id: str)
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledge_id | string | 是 | 线上知识库ID | "正确的知识库ID" |
方法返回值
参数名称 | 参数类型 | 必然存在 | 描述 | 示例值 |
---|---|---|---|---|
KnowledgeBase | class KnowledgeBase | 是 | 实例化的知识库类 | - |
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8
9# 知识库ID: your_knowledge_base_id
3、获取知识库详情
get_knowledge_base_detail(knowledge_base_id: Optional[str] = None) -> KnowledgeBaseDetailResponse
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledge_id | string | 是 | 线上知识库ID | "正确的知识库ID" |
方法返回值
KnowledgeBaseDetailResponse
类定义如下:
1class KnowledgeBaseDetailResponse(BaseModel):
2 id: str = Field(..., description="知识库ID")
3 name: str = Field(..., description="知识库名称")
4 description: Optional[str] = Field(None, description="知识库描述")
5 config: Optional[KnowledgeBaseConfig] = Field(..., description="知识库配置")
衍生类KnowledgeBaseConfig
定义如下:
1class KnowledgeBaseConfig(BaseModel):
2 index: Optional[KnowledgeBaseConfigIndex] = Field(..., description="索引配置")
衍生类KnowledgeBaseConfigIndex
定义如下:
1class KnowledgeBaseConfigIndex(BaseModel):
2 type: str = Field(..., description="索引类型", enum=["public", "bes", "vdb"])
3 esUrl: Optional[str] = Field(..., description="ES地址")
4 username: Optional[str] = Field(None, description="ES用户名")
5 password: Optional[str] = Field(None, description="ES密码")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5knowledge = appbuilder.KnowledgeBase()
6resp = knowledge.get_knowledge_base_detail("da51a988-cbe7-4b24-aa5b-768985e8xxxx")
7print("新建的知识库ID: ", resp.id)
8print("新建的知识库名称: ", resp.name)
9
10# 新建的知识库ID: da51a988-cbe7-4b24-aa5b-768985e8xxxx
11# 新建的知识库名称: my_knowledge
4、 获取知识库列表
get_knowledge_base_list(knowledge_base_id: Optional[str] = None, maxKeys: int = 10, keyword: Optional[str] = None) -> KnowledgeBaseGetListResponse
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledge_base_id | string | 否 | 起始位置,知识库id | "正确的知识库ID" |
maxKeys | int | 否 | 数据大小,默认10,最大值100 | 10 |
keyword | string | 否 | 搜索关键字 | "测试" |
方法返回值
KnowledgeBaseGetListResponse
类定义如下:
1class KnowledgeBaseGetListResponse(BaseModel):
2 requestId: str = Field(..., description="请求ID")
3 data: list[KnowledgeBaseDetailResponse] = Field([], description="知识库详情列表")
4 marker: str = Field(..., description="起始位置")
5 nextMarker: str = Field(..., description="下一页起始位置")
6 maxKeys: int = Field(10, description="返回文档数量大小,默认10,最大值100")
7 isTruncated: bool = Field(..., description="是否有更多结果")
衍生类KnowledgeBaseDetailResponse
定义如下:
1class KnowledgeBaseDetailResponse(BaseModel):
2 id: str = Field(..., description="知识库ID")
3 name: str = Field(..., description="知识库名称")
4 description: Optional[str] = Field(None, description="知识库描述")
5 config: Optional[KnowledgeBaseConfig] = Field(..., description="知识库配置")
衍生类KnowledgeBaseConfig
定义如下:
1class KnowledgeBaseConfig(BaseModel):
2 index: Optional[KnowledgeBaseConfigIndex] = Field(..., description="索引配置")
衍生类KnowledgeBaseConfigIndex
定义如下:
1class KnowledgeBaseConfigIndex(BaseModel):
2 type: str = Field(..., description="索引类型", enum=["public", "bes", "vdb"])
3 esUrl: Optional[str] = Field(..., description="ES地址")
4 username: Optional[str] = Field(None, description="ES用户名")
5 password: Optional[str] = Field(None, description="ES密码")
方法示例:
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5knowledge = appbuilder.KnowledgeBase()
6resp = knowledge.get_knowledge_base_list("da51a988-cbe7-4b24-aa5b-768985e8xxxx",10)
7print("获取到的知识库列表: ", resp)
5、修改知识库
modify_knowledge_base(knowledge_base_id: Optional[str] = None, name: Optional[str] = None, description: Optional[str] = None)
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledge_base_id | string | 是 | 起始位置,知识库id | "正确的知识库ID" |
name | string | 否 | 修改后的知识库名称 | "new_name" |
description | string | 否 | 修改后的知识库描述 | "测试" |
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5knowledge = appbuilder.KnowledgeBase()
6knowledge.modify_knowledge_base("da51a988-cbe7-4b24-aa5b-768985e8xxxx", name="new_name", description="测试")
6、 删除知识库
delete_knowledge_base(knowledge_base_id: Optional[str] = None)
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledge_base_id | string | 是 | 知识库的id | "正确的知识库ID" |
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5knowledge = appbuilder.KnowledgeBase()
6knowledge.delete_knowledge_base("da51a988-cbe7-4b24-aa5b-768985e8xxxx")
7、 导入知识库
create_documents(id: Optional[str] = None, contentFormat: str = "", source: DocumentSource = None, processOption: DocumentProcessOption = None)
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
id | string | 是 | 知识库id | "正确的知识库ID" |
contentFormat | string | 是 | 文档格式:rawText (允许配置后续分割策略), qa(不支持配置后续分割策略) | "rawText" |
source | DocumentSource | 是 | 数据来源 | |
processOption | DocumentProcessOption | 当contentFormat参数配置为rawText时必传 | 文档处理策略 |
DocumentSource
类定义如下:
1class DocumentSource(BaseModel):
2 type: str = Field(..., description="数据来源类型", enum=["bos", "web"])
3 urls: list[str] = Field(None, description="文档URL")
4 urlDepth: int = Field(None, description="url下钻深度,1时不下钻")
DocumentProcessOption
类及衍生类定义如下:
1class DocumentProcessOption(BaseModel):
2 template: str = Field(
3 ...,
4 description="模板类型,ppt:模版配置—ppt幻灯片, resume:模版配置—简历文档, paper:模版配置—论文文档, custom:自定义配置—自定义切片, default:自定义配置—默认切分",
5 enum=["ppt", "paper", "qaPair", "resume", " custom", "default"],
6 )
7 parser: Optional[DocumentChoices] = Field(None, description="解析方法(文字提取默认启动,参数不体现,layoutAnalysis版面分析,ocr光学字符识别,pageImageAnalysis文档图片解析,chartAnalysis图表解析,tableAnalysis表格深度解析,按需增加)")
8 knowledgeAugmentation: Optional[DocumentChoices] = Field(
9 None, description="知识增强,faq、spokenQuery、spo、shortSummary按需增加。问题生成:faq、spokenQuery,段落摘要:shortSummary,三元组知识抽取:spo"
10 )
11 chunker: Optional[DocumentChunker] = Field(None, description="分段器类型")
12
13class DocumentChoices(BaseModel):
14 choices: list[str] = Field(..., description="选择项")
15
16class DocumentChunker(BaseModel):
17 choices: list[str] = Field(..., description="使用哪些chunker方法 (separator | pattern | onePage),separator:自定义切片—标识符,pattern:自定义切片—标识符中选择正则表达式,onePage:整文件切片")
18 prependInfo: list[str] = Field(
19 None,
20 description="chunker关联元数据,可选值为title (增加标题), filename(增加文件名)",
21 )
22 separator: Optional[DocumentSeparator] = Field(None, description="分隔符配置")
23 pattern: Optional[DocumentPattern] = Field(None, description="正则表达式")
24
25class DocumentSeparator(BaseModel):
26 separators: list[str] = Field(..., description="分隔符列表,可以使用分页符")
27 targetLength: int = Field(..., description="分段最大长度")
28 overlapRate: float = Field(..., description="分段重叠最大字数占比,推荐值0.25")
29
30class DocumentPattern(BaseModel):
31 markPosition: str = Field(
32 ..., description="命中内容放置策略, head:前序切片, tail:后序切片, drop:匹配后丢弃", enum=["head", "tail", "drop"]
33 )
34 regex: str = Field(..., description="正则表达式")
35 targetLength: int = Field(..., description="分段最大长度")
36 overlapRate: float = Field(..., description="分段重叠最大字数占比,推荐值0.25")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5knowledge_base_id = "your_knowledge_base_id"
6knowledge = appbuilder.KnowledgeBase()
7knowledge.create_documents(
8 id=knowledge_base_id,
9 contentFormat="rawText",
10 source=appbuilder.DocumentSource(
11 type="web",
12 urls=["https://baijiahao.baidu.com/s?id=1802527379394162441"],
13 urlDepth=1,
14 ),
15 processOption=appbuilder.DocumentProcessOption(
16 template="custom",
17 parser=appbuilder.DocumentChoices(
18 choices=["layoutAnalysis", "ocr"]
19 ),
20 chunker=appbuilder.DocumentChunker(
21 choices=["separator"],
22 separator=appbuilder.DocumentSeparator(
23 separators=["。"],
24 targetLength=300,
25 overlapRate=0.25,
26 ),
27 prependInfo=["title", "filename"],
28 ),
29 knowledgeAugmentation=appbuilder.DocumentChoices(choices=["faq"]),
30 ),
31)
8、 上传文档到知识库
upload_documents(file_path: str, content_format: str = "rawText", id: Optional[str] = None, processOption: DocumentProcessOption = None)
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
file_path | string | 是 | 文件路径 | "正确的文件路径" |
content_format | string | 否 | 文档格式:rawText (允许配置后续分割策略), qa(不支持配置后续分割策略) | "rawText" |
id | string | 是 | 知识库ID | "正确的知识库ID" |
processOption | DocumentProcessOption | 是 | 文档处理策略 |
DocumentProcessOption
类及衍生类定义如下:
1class DocumentProcessOption(BaseModel):
2 template: str = Field(
3 ...,
4 description="模板类型,ppt: 模版配置—ppt幻灯片, resume:模版配置—简历文档, paper:模版配置—论文文档, custom:自定义配置—自定义切片, default:自定义配置—默认切分",
5 enum=["ppt", "paper", "qaPair", "resume", " custom", "default"],
6 )
7 parser: Optional[DocumentChoices] = Field(None, description="解析器类型")
8 knowledgeAugmentation: Optional[DocumentChoices] = Field(
9 None, description="知识增强,faq、spokenQuery、spo、shortSummary按需增加。问题生成:faq、spokenQuery,段落摘要:shortSummary,三元组知识抽取:spo"
10 )
11 chunker: Optional[DocumentChunker] = Field(None, description="分段器类型")
12
13class DocumentChoices(BaseModel):
14 choices: list[str] = Field(..., description="选择项")
15
16class DocumentChunker(BaseModel):
17 choices: list[str] = Field(..., description="使用哪些chunker方法 (separator | pattern | onePage), separator:自定义切片—标识符,pattern:自定义切片—标识符中选择正则表达式,onePage:整文件切片")
18 prependInfo: list[str] = Field(
19 ...,
20 description="chunker关联元数据,可选值为title (增加标题), filename(增加文件名)",
21 )
22 separator: Optional[DocumentSeparator] = Field(..., description="分段符号")
23 pattern: Optional[DocumentPattern] = Field(None, description="正则表达式")
24
25class DocumentSeparator(BaseModel):
26 separators: list[str] = Field(..., description="分段符号")
27 targetLength: int = Field(..., description="分段最大长度")
28 overlapRate: float = Field(..., description="分段重叠最大字数占比,推荐值0.25")
29
30class DocumentPattern(BaseModel):
31 markPosition: str = Field(
32 ..., description="命中内容放置策略, head:前序切片, tail:后序切片, drop:匹配后丢弃", enum=["head", "tail", "drop"]
33 )
34 regex: str = Field(..., description="正则表达式")
35 targetLength: int = Field(..., description="分段最大长度")
36 overlapRate: float = Field(..., description="分段重叠最大字数占比,推荐值0.25")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5knowledge_base_id = "your_knowledge_base_id"
6knowledge = appbuilder.KnowledgeBase()
7knowledge.upload_documents(
8 id=knowledge_base_id,
9 content_format="rawText",
10 file_path="./python/tests/data/qa_appbuilder_client_demo.pdf",
11 processOption=appbuilder.DocumentProcessOption(
12 template="custom",
13 parser=appbuilder.DocumentChoices(
14 choices=["layoutAnalysis", "ocr"]
15 ),
16 chunker=appbuilder.DocumentChunker(
17 choices=["separator"],
18 separator=appbuilder.DocumentSeparator(
19 separators=["。"],
20 targetLength=300,
21 overlapRate=0.25,
22 ),
23 prependInfo=["title", "filename"],
24 ),
25 knowledgeAugmentation=appbuilder.DocumentChoices(choices=["faq"]),
26 ),
27)
9、从知识库删除文档
KnowledgeBase().delete_document()->KnowledgeBaseDeleteDocumentResponse
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
document_id | string | 是 | 待删除的文档ID | '5e0eb279-7688-4100-95d1-241f3d19xxxx' |
方法返回值
方法返回 KnowledgeBaseDeleteDocumentResponse
, 该类的定义是
1class KnowledgeBaseDeleteDocumentResponse(BaseModel):
2 request_id: str = Field(..., description="请求ID")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8
9upload_res = my_knowledge.upload_file("./test.txt")
10print("文件上传结果: ",upload_res)
11
12add_res = my_knowledge.add_document(content_type='raw_text', file_ids=[upload_res.id])
13print("添加文档结果: ",add_res)
14
15delete_res = my_knowledge.delete_document(document_id=add_res.document_ids[0])
16print("删除文档结果: ",delete_res)
17
18# 知识库ID: da51a988-cbe7-4b24-aa5b-768985e8xxxx
19# 文件上传结果: request_id='255eec22-ec87-4564-bdeb-3e5623eaxxxx' id='ef12119b-d5be-492a-997c-77f8e84axxxx' name='test.txt'
20# 添加文档结果: request_id='412e1630-b570-47c9-a042-caf3cd9dxxxx' knowledge_base_id='da51a988-cbe7-4b24-aa5b-768985e8xxxx' document_ids=['5e0eb279-7688-4100-95d1-241f3d19xxxx']
21# 删除文档结果: request_id='ba0e8bc0-b799-45b5-bdac-0d4c50e2xxxx'
10、获取知识库的文档列表
KnowledgeBase().get_documents_list()->KnowledgeBaseGetDocumentsListResponse
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
limit | int | 否 | 单次请求列表获得的文档数量,最大100 | 10 |
after | str | 否 | 用于分页的游标。after 是一个文档的id,它定义了在列表中的位置。例如,如果你发出一个列表请求并收到 10个对象,以 app_id_123 结束,那么你后续的调用可以包含 after=app_id_123 以获取列表的下一页数据。默认为空 | '5e0eb279-7688-4100-95d1-241f3d19xxxx' |
before | str | 否 | 用于分页的游标。与after相反,填写它将获取前一页数据,如果和after都传,两个参数都会起到分页效果,默认为空 | '5e0eb279-7688-4100-95d1-241f3d19xxxx' |
方法返回值
方法返回类KnowledgeBaseGetDocumentsListResponse
,定义为
1class KnowledgeBaseGetDocumentsListResponse(BaseModel):
2 request_id: str = Field(..., description="请求ID")
3 data: list[Document] = Field([], description="文档信息列表")
衍生类Document
以及DocumentMeta
定义为:
1class Document(BaseModel):
2 id: str = Field(..., description="文档ID")
3 name: str = Field(..., description="文档名称")
4 created_at: str = Field(..., description="文档创建时间")
5 word_count: int = Field(..., description="文档字数")
6 enabled: bool = Field(True, description="文档是否可用")
7 meta: Optional[DocumentMeta] = Field(..., description="文档元信息,包括source、file_id")
8
9class DocumentMeta(BaseModel):
10 source: str = Field("", description="文档来源")
11 file_id: str = Field("", description="文档对应的文件ID")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8
9list_res = my_knowledge.get_documents_list()
10print("文档列表: ", list_res)
11
12# 知识库ID: da51a988-cbe7-4b24-aa5b-768985e8xxxx
13# 文档列表: request_id='f66c2193-6035-4022-811b-c4cd7743xxxx' data=[{'id': '8f388b10-5e6a-423f-8acc-dd5fdc2fxxxx', 'name': 'test.txt', 'created_at': 1719988868, 'word_count': 16886, 'enabled': True, 'meta': {'source': 'upload_file', 'file_id': '0ebb03fb-ea48-4c49-b494-cf0cec11xxxx'}}, {'id': '5e0eb279-7688-4100-95d1-241f3d19xxxx', 'name': 'test.txt', 'created_at': 1719987921, 'word_count': 16886, 'enabled': True, 'meta': {'source': 'upload_file', 'file_id': '059e2ae2-1e3c-43ea-8b42-5d988f93xxxx'}}]
11、获取知识库全部文档
KnowledgeBase().get_all_documents()->list
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledge_base_id | string | 是 | 线上知识库ID | "正确的知识库ID" |
方法返回值
list 数据类型list[Document]
衍生类Document
以及DocumentMeta
定义为:
1class Document(BaseModel):
2 id: str = Field(..., description="文档ID")
3 name: str = Field(..., description="文档名称")
4 created_at: str = Field(..., description="文档创建时间")
5 word_count: int = Field(..., description="文档字数")
6 enabled: bool = Field(True, description="文档是否可用")
7 meta: Optional[DocumentMeta] = Field(..., description="文档元信息,包括source、file_id")
8
9class DocumentMeta(BaseModel):
10 source: str = Field("", description="文档来源")
11 file_id: str = Field("", description="文档对应的文件ID")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8
9doc_list = my_knowledge.get_all_documents(my_knowledge_base_id)
10for message in doc_list:
11 print(message)
12. 创建切片
create_chunk(documentId: str, content: str) -> CreateChunkResponse
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledgeBaseId | string | 是 | 知识库ID | |
documentId | string | 是 | 文档ID | "正确的文档ID" |
content | string | 是 | 切片内容 | "内容" |
方法返回值
CreateChunkResponse
类定义如下:
1class CreateChunkResponse(BaseModel):
2 id: str = Field(..., description="切片ID")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8resp = my_knowledge.create_chunk("your_document_id", "content", knowledgebase_id=knowledge_base_id)
9print("切片ID: ", resp.id)
10chunk_id = resp.id
13. 修改切片信息
modify_chunk(chunkId: str, content: str, enable: bool)
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledgeBaseId | string | 是 | 知识库ID | |
chunkId | string | 是 | 文档ID | "正确的切片ID" |
content | string | 是 | 切片内容 | "内容" |
enable | bool | 是 | 是否用该切片 | True |
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8my_knowledge.modify_chunk("your_chunk_id", "content", True, knowledgebase_id=my_knowledge_base_id)
14. 删除切片
delete_chunk(chunkId: str)
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledgeBaseId | string | 是 | 知识库ID | |
chunkId | string | 是 | 文档ID | "正确的切片ID" |
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8my_knowledge.delete_chunk("your_chunk_id", knowledgebase_id=my_knowledge_base_id)
15. 获取切片信息
describe_chunk(chunkId: str)
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledgeBaseId | string | 是 | 知识库ID | |
chunkId | string | 是 | 文档ID | "正确的切片ID" |
方法返回值
DescribeChunkResponse
类定义如下:
1class DescribeChunkResponse(BaseModel):
2 id: str = Field(..., description="切片ID")
3 type: str = Field(..., description="切片类型")
4 knowledgeBaseId: str = Field(..., description="知识库ID")
5 documentId: str = Field(..., description="文档ID")
6 content: str = Field(..., description="文档内容")
7 enabled: bool = Field(..., description="是否启用")
8 wordCount: int = Field(..., description="切片内字符数量")
9 tokenCount: int = Field(..., description="切片内token数量")
10 status: str = Field(..., description="切片状态")
11 statusMessage: str = Field(..., description="切片状态信息")
12 imageUrls: list[str] = Field(..., description="图片地址")
13 createTime: int = Field(..., description="创建时间")
14 updateTime: int = Field(None, description="更新时间")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8resp = my_knowledge.describe_chunk("your_chunk_id", knowledgebase_id=my_knowledge_base_id)
9print("切片详情:")
10print(resp)
16. 获取切片列表
describe_chunks(documentId: str, marker: str = None, maxKeys: int = None, type: str = None) -> DescribeChunksResponse
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
knowledgeBaseId | string | 是 | 知识库ID | |
documentId | string | 是 | 文档ID | "正确的文档ID" |
marker | string | 否 | 起始位置,切片ID | "正确的切片ID" |
maxKeys | string | 否 | 返回文档数量大小,默认10,最大值100 | 10 |
type | string | 否 | 根据类型获取切片列表(RAW、NEW、COPY),RAW:原文切片,NEW:新增切片,COPY:复制切片 | "RAW" |
方法返回值
DescribeChunksResponse
类定义如下:
1class DescribeChunksResponse(BaseModel):
2 data: list[DescribeChunkResponse] = Field(..., description="切片列表")
3 marker: str = Field(..., description="起始位置")
4 isTruncated: bool = Field(
5 ..., description="true表示后面还有数据,false表示已经是最后一页"
6 )
7 nextMarker: str = Field(..., description="下一页起始位置")
8 maxKeys: int = Field(..., description="本次查询包含的最大结果集数量")
衍生类DescribeChunkResponse
定义如下:
1class DescribeChunkResponse(BaseModel):
2 id: str = Field(..., description="切片ID")
3 type: str = Field(..., description="切片类型")
4 knowledgeBaseId: str = Field(..., description="知识库ID")
5 documentId: str = Field(..., description="文档ID")
6 content: str = Field(..., description="文档内容")
7 enabled: bool = Field(..., description="是否启用")
8 wordCount: int = Field(..., description="切片内字符数量")
9 tokenCount: int = Field(..., description="切片内token数量")
10 status: str = Field(..., description="切片状态")
11 statusMessage: str = Field(..., description="切片状态信息")
12 imageUrls: list[str] = Field(..., description="图片地址")
13 createTime: int = Field(..., description="创建时间")
14 updateTime: int = Field(None, description="更新时间")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5my_knowledge_base_id = "your_knowledge_base_id"
6my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
7print("知识库ID: ", my_knowledge.knowledge_id)
8resp = my_knowledge.describe_chunks("your_document_id", knowledgebase_id=my_knowledge_base_id)
9print("切片列表:")
10print(resp)
17. 知识库检索
query_knowledge_base(query: str, knowledgebase_ids: list[str], type: Optional[data_class.QueryType] = None, metadata_filters: data_class.MetadataFilter = None,pipeline_config: data_class.QueryPipelineConfig = None, rank_score_threshold: Optional[float] = 0.4, top: int = 6, skip: int = None) -> data_class.QueryKnowledgeBaseResponse
方法参数
参数名称 | 参数类型 | 是否必传 | 描述 | 示例值 |
---|---|---|---|---|
query | string | 是 | 检索query,最长为1024字符,超过自动截断 | 民法典第三条 |
knowledgebase_ids | list[str] | 是 | 指定知识库的id集合 | ["kb-1", "kb-2"] |
type | string | 否 | 检索策略。 可选值: fulltext,全文检索 semantic,语义检索 hybird,混合检索 |
"fulltext" |
metadata_filters | data_class.MetadataFilters | 否 | 元数据过滤条件,详细见MetadataFilters | - |
pipeline_config | data_class.QueryPipelineConfig | 否 | 检索配置,详细见QueryPipelineConfig | - |
rank_score_threshold | float | 否 | 重排序匹配分阈值,只有rank_score大于等于该分值的切片重排序时才会被筛选出来。 当且仅当,pipeline_config中配置了ranking节点时,该过滤条件生效。 取值范围: [0, 1]。 默认0.4 |
0.4 |
top | int | 否 | 返回前多少的条目。 默认值6。 如果检索结果的数量未达到top值,则按实际检索到的结果数量返回 |
6 |
skip | int | 否 | 跳过条目数(通过top和skip可以实现类似分页的效果,比如top 10 skip 0,取第一页的10个,top 10 skip 10,取第二页的10个) | 0 |
data_class.MetadataFilters
类定义如下:
1class MetadataFilters(BaseModel):
2 filters: list[MetadataFilter] = Field(..., description="过滤条件")
3 condition: str = Field(..., description="文档组合条件。and:与,or:或")
data_class.MetadataFilter
类定义如下:
1class MetadataFilter(BaseModel):
2 operator: str = Field(..., description="操作符名称。==:等于,in:在数组中,not_in:不在数组中")
3 field: str = Field(None, description="字段名,目前支持doc_id")
4 value: Union[str, list[str]] = Field(
5 ..., description="字段值,如果是in操作符,value为数组"
6 )
data_class.QueryPipelineConfig
类定义如下:
1class QueryPipelineConfig(BaseModel):
2 id: str = Field(
3 None, description="配置唯一标识,如果用这个id,则引用已经配置好的QueryPipeline"
4 )
5 pipeline: list[Union[ElasticSearchRetrieveConfig, RankingConfig, VectorDBRetrieveConfig, SmallToBigConfig]] = Field(
6 None, description="配置的Pipeline,如果没有用id,可以用这个对象指定一个新的配置"
7 )
data_class.ElasticSearchRetrieveConfig
类定义如下:
1class ElasticSearchRetrieveConfig(BaseModel): # 托管资源为共享资源 或 BES资源时使用该配置
2 name: str = Field(..., description="配置名称")
3 type: str = Field(None, description="elastic_search标志,该节点为es全文检索")
4 threshold: float = Field(None, description="得分阈值,默认0.1")
5 top: int = Field(None, description="召回数量,默认400")
data_class.RankingConfig
类定义如下:
1class RankingConfig(BaseModel):
2 name: str = Field(..., description="配置名称")
3 type: str = Field(None, description="ranking标志,该节点为ranking节点")
4 inputs: list[str] = Field(
5 ...,
6 description='输入的节点名,如es检索配置的名称为pipeline_001,则该inputs为["pipeline_001"]',
7 )
8 model_name: str = Field(None, description="ranking模型名(当前仅一种,暂不生效)")
9 top: int = Field(None, description="取切片top进行排序,默认20,最大400")
data_class.VectorDBRetrieveConfig
类定义如下:
1class VectorDBRetrieveConfig(BaseModel):
2 name: str = Field(..., description="该节点的自定义名称。")
3 type: str = Field("vector_db", description="该节点的类型,默认为vector_db。")
4 threshold: Optional[float] = Field(0.1, description="得分阈值。取值范围:[0, 1]", ge=0.0, le=1.0)
5 top: Optional[int] = Field(400, description="召回数量。取值范围:[0, 800]", ge=0, le=800)
6 pre_ranking: Optional[PreRankingConfig] = Field(None, description="粗排配置")
data_class.PreRankingConfig
类定义如下:
1class PreRankingConfig(BaseModel):
2 bm25_weight: float = Field(
3 None, description="粗排bm25比重,取值范围在 [0, 1],默认0.75"
4 )
5 vec_weight: float = Field(
6 None, description="粗排向量余弦分比重,取值范围在 [0, 1],默认0.25"
7 )
8 bm25_b: float = Field(
9 None, description="控制文档长度对评分影响的参数,取值范围在 [0, 1],默认0.75"
10 )
11 bm25_k1: float = Field(
12 None,
13 description="词频饱和因子,控制词频(TF)对评分的影响,常取值范围在 [1.2, 2.0],默认1.5",
14 )
15 bm25_max_score: float = Field(
16 None, description="得分归一化参数,不建议修改,默认50"
17 )
方法返回值
data_class.QueryKnowledgeBaseResponse
类定义如下:
1class QueryKnowledgeBaseResponse(BaseModel):
2 requestId: str = Field(None, description="请求ID")
3 code: str = Field(None, description="状态码")
4 message: str = Field(None, description="状态信息")
5 chunks: list[Chunk] = Field(..., description="切片列表")
6 total_count: int = Field(..., description="切片总数")
衍生类Chunk
定义如下:
1class Chunk(BaseModel):
2 chunk_id: str = Field(..., description="切片ID")
3 knowledgebase_id: str = Field(..., description="知识库ID")
4 document_id: str = Field(..., description="文档ID")
5 document_name: str = Field(None, description="文档名称")
6 meta: dict = Field(None, description="文档元数据")
7 chunk_type: str = Field(..., description="切片类型")
8 content: str = Field(..., description="切片内容")
9 create_time: datetime = Field(..., description="创建时间")
10 update_time: datetime = Field(..., description="更新时间")
11 retrieval_score: float = Field(..., description="粗检索得分")
12 rank_score: float = Field(..., description="rerank得分")
13 locations: ChunkLocation = Field(None, description="切片位置")
14 children: List[Chunk] = Field(None, description="子切片")
方法示例
1import os
2import appbuilder
3os.environ["APPBUILDER_TOKEN"] = "your_appbuilder_token"
4
5knowledge = appbuilder.KnowledgeBase()
6client = appbuilder.KnowledgeBase()
7res = client.query_knowledge_base(
8 query="民法典第三条",
9 type="fulltext",
10 knowledgebase_ids=["70c6375a-1595-41f2-9a3b-e81bc9060b7f"],
11 top=5,
12 skip=0,
13 metadata_filters=data_class.MetadataFilters(filters=[], condition="or"),
14 pipeline_config=data_class.QueryPipelineConfig(
15 id="pipeline_001",
16 pipeline=[
17 {
18 "name": "step1",
19 "type": "elastic_search",
20 "threshold": 0.1,
21 "top": 400,
22 "pre_ranking": {
23 "bm25_weight": 0.25,
24 "vec_weight": 0.75,
25 "bm25_b": 0.75,
26 "bm25_k1": 1.5,
27 "bm25_max_score": 50,
28 },
29 },
30 {
31 "name": "step2",
32 "type": "ranking",
33 "inputs": ["step1"],
34 "model_name": "ranker-v1",
35 "top": 20,
36 },
37 ],
38 ),
39)
40chunk_id = res.chunks[0].chunk_id
41for chunk in res.chunks:
42 print(chunk.content)
Java基本用法
方法及各方法入参/出参
参考 python KnowledgeBase
接口文档
示例代码
1public class KnowledgebaseTest {
2 @Before
3 public void setUp() {
4 System.setProperty("APPBUILDER_TOKEN","");
5 System.setProperty("APPBUILDER_LOGLEVEL", "DEBUG");
6 }
7
8 @Test
9 public void testDocument() throws IOException, AppBuilderServerException {
10 // 实例化Knowledgebase
11 String knowledgeBaseId = "";
12 Knowledgebase knowledgebase = new Knowledgebase();
13
14 // 获取知识库文档列表
15 DocumentListRequest listRequest = new DocumentListRequest();
16 listRequest.setKonwledgeBaseId(knowledgeBaseId);
17 listRequest.setLimit(10);
18 Document[] documents = knowledgebase.getDocumentList(listRequest);
19
20 // 从知识库删除文档
21 DocumentDeleteRequest deleteRequest = new DocumentDeleteRequest();
22 deleteRequest.setKonwledgeBaseId(knowledgeBaseId);
23 deleteRequest.setDocumentId("期望删除的DocumentId");
24 knowledgebase.deleteDocument(deleteRequest);
25 }
26
27 @Test
28 public void testCreateKnowledgebase() throws IOException, AppBuilderServerException {
29 Knowledgebase knowledgebase = new Knowledgebase();
30 KnowledgeBaseDetail request = new KnowledgeBaseDetail();
31 request.setName("test_knowledgebase");
32 request.setDescription("test_knowledgebase");
33
34 // 创建知识库
35 KnowledgeBaseConfig.Index index = new KnowledgeBaseConfig.Index("public",
36 "", "", "", "");
37 KnowledgeBaseConfig config = new KnowledgeBaseConfig(index);
38 request.setConfig(config);
39 KnowledgeBaseDetail response = knowledgebase.createKnowledgeBase(request);
40 String knowledgeBaseId = response.getId();
41 System.out.println(knowledgeBaseId);
42 assertNotNull(response.getId());
43
44 // 获取知识库详情
45 KnowledgeBaseDetail detail = knowledgebase.getKnowledgeBaseDetail(knowledgeBaseId);
46 System.out.println(detail.getId());
47 assertNotNull(detail.getId());
48
49 // 获取知识库列表
50 KnowledgeBaseListRequest listRequest =
51 new KnowledgeBaseListRequest(knowledgeBaseId, 10, null);
52 KnowledgeBaseListResponse knowledgeBases = knowledgebase.getKnowledgeBaseList(listRequest);
53 System.out.println(knowledgeBases.getMarker());
54 assertNotNull(knowledgeBases.getMarker());
55
56 // 更新知识库
57 KnowledgeBaseModifyRequest modifyRequest = new KnowledgeBaseModifyRequest();
58 modifyRequest.setKnowledgeBaseId(knowledgeBaseId);
59 modifyRequest.setName("test_knowledgebase2");
60 modifyRequest.setDescription(knowledgeBaseId);
61 knowledgebase.modifyKnowledgeBase(modifyRequest);
62
63 // 导入知识库
64 DocumentsCreateRequest.Source source = new DocumentsCreateRequest.Source("web",
65 new String[] {"https://baijiahao.baidu.com/s?id=1802527379394162441"}, 1);
66 DocumentsCreateRequest.ProcessOption.Parser parser =
67 new DocumentsCreateRequest.ProcessOption.Parser(
68 new String[] {"layoutAnalysis", "ocr"});
69 DocumentsCreateRequest.ProcessOption.Chunker.Separator separator =
70 new DocumentsCreateRequest.ProcessOption.Chunker.Separator(new String[] {"。"}, 300,
71 0.25);
72 DocumentsCreateRequest.ProcessOption.Chunker chunker =
73 new DocumentsCreateRequest.ProcessOption.Chunker(new String[] {"separator"},
74 separator, null, new String[] {"title", "filename"});
75 DocumentsCreateRequest.ProcessOption.KnowledgeAugmentation knowledgeAugmentation =
76 new DocumentsCreateRequest.ProcessOption.KnowledgeAugmentation(
77 new String[] {"faq"});
78 DocumentsCreateRequest.ProcessOption processOption =
79 new DocumentsCreateRequest.ProcessOption("custom", parser, chunker,
80 knowledgeAugmentation);
81 DocumentsCreateRequest documentsCreateRequest =
82 new DocumentsCreateRequest(knowledgeBaseId, "rawText", source, processOption);
83 knowledgebase.createDocuments(documentsCreateRequest);
84
85 // 上传文档
86 String filePath = "src/test/java/com/baidubce/appbuilder/files/test.pdf";
87 DocumentsCreateRequest.Source source2 =
88 new DocumentsCreateRequest.Source("file", null, null);
89 DocumentsCreateRequest documentsCreateRequest2 =
90 new DocumentsCreateRequest(knowledgeBaseId, "rawText", source2, processOption);
91 knowledgebase.uploadDocuments(filePath, documentsCreateRequest2);
92
93 // 删除知识库
94 knowledgebase.deleteKnowledgeBase(knowledgeBaseId);
95 }
96
97 @Test
98 public void testCreateChunk() throws IOException, AppBuilderServerException {
99 String documentId = "";
100 // 知识库ID
101 String knowledgeBaseId = "";
102 // Appbuilder Token
103 String secretKey = "";
104 Knowledgebase knowledgebase = new Knowledgebase(knowledgeBaseID, secretKey);
105 // 创建切片
106 String chunkId = knowledgebase.createChunk(documentId, "test");
107 // 修改切片
108 knowledgebase.modifyChunk(chunkId, "new test", true);
109 // 获取切片详情
110 knowledgebase.describeChunk(chunkId);
111 // 获取切片列表
112 knowledgebase.describeChunks(documentId, chunkId, 10, null);
113 // 删除切片
114 knowledgebase.deleteChunk(chunkId);
115 }
116}
Go基本用法
方法及各方法入参/出参
参考 python KnowledgeBase
接口文档
示例代码
1package appbuilder
2
3import (
4 "fmt"
5 "os"
6 "testing"
7)
8
9func TestKnowledgeBase(t *testing.T) {
10 os.Setenv("APPBUILDER_LOGLEVEL", "DEBUG")
11 os.Setenv("APPBUILDER_LOGFILE", "")
12
13 // 实例化KnowledgeBase
14 knowledgeBaseID := ""
15 config, err := NewSDKConfig("", "")
16 if err != nil {
17 t.Fatalf("new http client config failed: %v", err)
18 }
19
20 client, err := NewKnowledgeBase(config)
21 if err != nil {
22 t.Fatalf("new Knowledge base instance failed")
23 }
24
25 // 获取知识库中的文档列表
26 documentsRes, err := client.GetDocumentList(GetDocumentListRequest{
27 KnowledgeBaseID: knowledgeBaseID,
28 })
29 if err != nil {
30 t.Fatalf("create document failed: %v", err)
31 }
32 fmt.Println(documentsRes)
33
34 // 从知识库中删除文档
35 err = client.DeleteDocument(DeleteDocumentRequest{
36 KnowledgeBaseID: knowledgeBaseID,
37 DocumentID: "期望删除的DocumentID"})
38 if err != nil {
39 t.Fatalf("delete document failed: %v", err)
40 }
41}
42
43func TestCreateKnowledgeBase(t *testing.T) {
44 os.Setenv("APPBUILDER_LOGLEVEL", "DEBUG")
45 os.Setenv("APPBUILDER_TOKEN", "")
46 config, err := NewSDKConfig("", "")
47 if err != nil {
48 t.Fatalf("new http client config failed: %v", err)
49 }
50
51 client, err := NewKnowledgeBase(config)
52 if err != nil {
53 t.Fatalf("new Knowledge base instance failed")
54 }
55
56 // 创建知识库
57 createKnowledgeBaseRes, err := client.CreateKnowledgeBase(KnowledgeBaseDetail{
58 Name: "test-go",
59 Description: "test-go",
60 Config: &KnowlegeBaseConfig{
61 Index: KnowledgeBaseConfigIndex{
62 Type: "public",
63 },
64 },
65 })
66 if err != nil {
67 t.Fatalf("create knowledge base failed: %v", err)
68 }
69 knowledgeBaseID := createKnowledgeBaseRes.ID
70 fmt.Println(knowledgeBaseID)
71
72 // 获取知识库详情
73 getKnowledgeBaseRes, err := client.GetKnowledgeBaseDetail(knowledgeBaseID)
74 if err != nil {
75 t.Fatalf("get knowledge base failed: %v", err)
76 }
77 fmt.Println(getKnowledgeBaseRes)
78
79 // 获取知识库列表
80 knowledgeBaseListRes, err := client.GetKnowledgeBaseList(
81 GetKnowledgeBaseListRequest{
82 Marker: knowledgeBaseID,
83 },
84 )
85 if err != nil {
86 t.Fatalf("get knowledge base list failed: %v", err)
87 }
88 fmt.Println(knowledgeBaseListRes)
89
90 // 导入知识库
91 err = client.CreateDocuments(CreateDocumentsRequest{
92 ID: knowledgeBaseID,
93 ContentFormat: "rawText",
94 Source: DocumentsSource{
95 Type: "web",
96 Urls: []string{"https://baijiahao.baidu.com/s?id=1802527379394162441"},
97 UrlDepth: 1,
98 },
99 ProcessOption: &DocumentsProcessOption{
100 Template: "custom",
101 Parser: &DocumentsProcessOptionParser{
102 Choices: []string{"layoutAnalysis", "ocr"},
103 },
104 Chunker: &DocumentsProcessOptionChunker{
105 Choices: []string{"separator"},
106 Separator: &DocumentsProcessOptionChunkerSeparator{
107 Separators: []string{"。"},
108 TargetLength: 300,
109 OverlapRate: 0.25,
110 },
111 PrependInfo: []string{"title", "filename"},
112 },
113 KnowledgeAugmentation: &DocumentsProcessOptionKnowledgeAugmentation{
114 Choices: []string{"faq"},
115 },
116 },
117 })
118 if err != nil {
119 t.Fatalf("create documents failed: %v", err)
120 }
121
122 // 上传知识库文档
123 err = client.UploadDocuments("./files/test.pdf", CreateDocumentsRequest{
124 ID: knowledgeBaseID,
125 ContentFormat: "rawText",
126 Source: DocumentsSource{
127 Type: "file",
128 },
129 ProcessOption: &DocumentsProcessOption{
130 Template: "custom",
131 Parser: &DocumentsProcessOptionParser{
132 Choices: []string{"layoutAnalysis", "ocr"},
133 },
134 Chunker: &DocumentsProcessOptionChunker{
135 Choices: []string{"separator"},
136 Separator: &DocumentsProcessOptionChunkerSeparator{
137 Separators: []string{"。"},
138 TargetLength: 300,
139 OverlapRate: 0.25,
140 },
141 PrependInfo: []string{"title", "filename"},
142 },
143 KnowledgeAugmentation: &DocumentsProcessOptionKnowledgeAugmentation{
144 Choices: []string{"faq"},
145 },
146 },
147 })
148 if err != nil {
149 t.Fatalf("upload documents failed: %v", err)
150 }
151
152 // 修改知识库
153 name := "test-go"
154 description := "22"
155 err = client.ModifyKnowledgeBase(ModifyKnowlegeBaseRequest{
156 ID: knowledgeBaseID,
157 Name: &name,
158 Description: &description,
159 })
160 if err != nil {
161 t.Fatalf("modify knowledge base failed: %v", err)
162 }
163
164 // 删除知识库
165 err = client.DeleteKnowledgeBase(knowledgeBaseID)
166 if err != nil {
167 t.Fatalf("delete knowledge base failed: %v", err)
168 }
169}
170
171func TestChunk(t *testing.T) {
172 os.Setenv("APPBUILDER_LOGLEVEL", "DEBUG")
173 os.Setenv("APPBUILDER_TOKEN", "")
174 documentID := ""
175 knowledgeBaseID := "";
176 config, err := NewSDKConfig("", "")
177 if err != nil {
178 t.Fatalf("new http client config failed: %v", err)
179 }
180
181 client, err := NewKnowledgeBaseWithKnowledgeBaseID(knowledgeBaseID, config)
182 if err != nil {
183 t.Fatalf("new Knowledge base instance failed")
184 }
185 // 创建切片
186 chunkID, err := client.CreateChunk(CreateChunkRequest{
187 DocumentID: documentID,
188 Content: "test",
189 })
190 if err != nil {
191 t.Fatalf("create chunk failed: %v", err)
192 }
193 fmt.Println(chunkID)
194
195 // 修改切片
196 err = client.ModifyChunk(ModifyChunkRequest{
197 ChunkID: chunkID,
198 Content: "new test",
199 Enable: true,
200 })
201 if err != nil {
202 t.Fatalf("modify chunk failed: %v", err)
203 }
204
205 // 获取切片详情
206 describeChunkRes, err := client.DescribeChunk(chunkID)
207 if err != nil {
208 t.Fatalf("describe chunk failed: %v", err)
209 }
210 fmt.Println(describeChunkRes)
211
212 // 获取切片列表
213 describeChunksRes, err := client.DescribeChunks(DescribeChunksRequest{
214 DocumnetID: documentID,
215 Marker: chunkID,
216 MaxKeys: 10,
217 })
218 if err != nil {
219 t.Fatalf("describe chunks failed: %v", err)
220 }
221 fmt.Println(describeChunksRes)
222
223 // 删除切片
224 err = client.DeleteChunk(chunkID)
225 if err != nil {
226 t.Fatalf("delete chunk failed: %v", err)
227 }
228}