借助VectorDB与千帆AppBuilder构建DeepSeek手册知识库
概述
本文展示使用 AppBuilder,VectorDB,DeepSeek-R1,基于清华大学出品的《DeepSeek:从入门到精通》手册,构建你自己的DeepSeek手册知识库。
准备环境
向量数据库环境
1、创建百度向量数据库实例,当前每个新用户都有免费试用实例,抓紧申请吧。
地址:https://console.bce.baidu.com/vdb/#/vdb/instance/create
2、创建成功后,通过实例详情页查看访问的地址信息和账号信息,用于访问操作向量数据库。如例子截图,访问信息如下:
# 访问地址格式:http://${IP}:${PORT}
访问地址:http://192.168.20.4:5287
账号:root
密钥:xxxx
开通 AppBuilder
AppBuilder 目前不收费不会产生费用 1、登录 AppBuilder ,访问“密钥管理”->“新增密钥”,获取密钥信息
开通 ModelBuilder
(1)登录千帆ModelBuilder控制台。
登录千帆ModelBuilder控制台,点击用户账号 >安全认证,进入Access Key管理界面。
(2)获取安全认证Access Key/Secret Key。
在安全认证/Access Key 页面,查看Access Key(即安全认证AK)、Secret Key(即安全认证SK)。
注意:安全认证Access Key/Secret Key,和应用API Key/和 Secret Key不同。安全认证Access Key/Secret Key,更多介绍请参考如何获取AK/SK。
(3)保证 DeepSeek-R1 模型权限开通,https://console.bce.baidu.com/qianfan/ais/console/onlineService
安装SDK
执行如下命令,快速安装Python语言的最新版本AppBuilder-SDK,支持 Python >= 3.9版本。
pip install --upgrade appbuilder-sdk
pip install qianfan
知识库管理
创建知识库
import os
import appbuilder
os.environ["APPBUILDER_TOKEN"] = "bce-v3/ALTAK-********************************" # appbuilder_token
knowledge = appbuilder.KnowledgeBase()
resp = knowledge.create_knowledge_base(
name="vdb_knowledge",
description="vdb_knowledge",
type="vdb",
clusterId='vdb-xx-xxxxxxx', # vdb实例ID,例如:vdb-bd-xxxxx
esUserName='root', # vdb账号
esPassword='**********', # vdb账号对应的password
location='bd'
)
print("新建的知识库ID: ", resp.id)
print("新建的知识库名称: ", resp.name)
my_knowledge_base_id = resp.id
新建的知识库ID: 2d9f9ef0-****-****-****-************
新建的知识库名称: vdb_knowledge
在控制台查看所创建的知识库
地址:https://console.bce.baidu.com/ai_apaas/personalSpace/knowledgeBase
上传文档至知识库
详细的文档解析参数见:https://cloud.baidu.com/doc/AppBuilder/s/Olz18mbpq
import os
import appbuilder
from appbuilder.core.console.knowledge_base import data_class
os.environ["APPBUILDER_TOKEN"] = "bce-v3/ALTAK-********************************" # appbuilder_token
my_knowledge_base_id = "2d9f9ef0-****-****-****-************" # 知识库ID
my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
print("知识库ID: ", my_knowledge.knowledge_id)
upload_document_resp = my_knowledge.upload_documents(
content_format="rawText", # rawText:文本文档数据
file_path="./DeepSeek从入门到精通.pdf",
processOption=data_class.DocumentProcessOption(
template='custom',
parser=appbuilder.DocumentChoices(
choices=['layoutAnalysis']
),
chunker=appbuilder.DocumentChunker(
choices=["separator"],
separator=appbuilder.DocumentSeparator(
separators=["。", ",", "!", "?"],
targetLength=300,
overlapRate=0.25,
),
prependInfo=["title", "filename"],
),
knowledgeAugmentation=appbuilder.DocumentChoices(
choices=["faq"]
)
)
)
document_id = upload_document_resp.documentId
print("文档ID: ", document_id)
文档ID: dd1a5b81-****-****-****-************
检查文档是否可以使用
在控制台查看上传的文档
地址:https://console.bce.baidu.com/ai_apaas/personalSpace/knowledgeBase/detail/{my_knowledge_base_id}
当文档的状态为可用时,便可以对该文档发起知识库检索
使用sdk检查文档状态
详细的参数见:获取知识库的文档列表
import os
import appbuilder
os.environ["APPBUILDER_TOKEN"] = "bce-v3/ALTAK-********************************" # appbuilder_token
knowledge_base_ID = "2d9f9ef0-****-****-****-************" # 知识库ID
document_ID = "dc75bbd3-****-****-****-************" # 文档ID
my_knowledge = appbuilder.KnowledgeBase(my_knowledge_base_id)
doc_is_ready = False
doc_list = my_knowledge.get_all_documents(my_knowledge_base_id)
for doc in doc_list:
if doc.id == document_id:
doc_is_ready = (doc.word_count != 0 and doc.enabled)
break
doc_status = "可用" if doc_is_ready else "处理中"
print(f'文档可用状态:{doc_status}')
文档可用状态:处理中
构建本地问答知识库
详细的查询参数见:https://cloud.baidu.com/doc/AppBuilder/s/ym4wo8a0p
import os
import appbuilder
from appbuilder.core.console.knowledge_base import data_class
from qianfan import Qianfan
os.environ["QIANFAN_ACCESS_KEY"] = "****************************" # modelbuilder_ak
os.environ["QIANFAN_SECRET_KEY"] = "****************************" # modelbuilder_sk
os.environ["APPBUILDER_TOKEN"] = "bce-v3/ALTAK-********************************" # appbuilder_token
PROMPT_TEMPLATE = """
参考以下信息回答我的问题:
{context}
---
我的问题或指令:
{question}
---
请根据上述参考信息回答我的问题或回复我的指令。前面的参考信息可能有用,也可能没用,你需要从我给出的参考信息中选出与我的问题最相关的那些,来为你的回答提供依据。回答一定要忠于原文,简洁但不丢信息,不要胡乱编造。我的问题或指令是什么语种,你就用什么语种回复,
你的回复:
"""
knowledge_base_ID = "2d9f9ef0-****-****-****-************" # 知识库ID
document_ID = "dc75bbd3-****-****-****-************" # 文档ID
knowledge = appbuilder.KnowledgeBase()
def answer(question):
res = knowledge.query_knowledge_base(
query=question,
type=data_class.QueryType.HYBRID,
knowledgebase_ids=[knowledge_base_ID],
top=2,
skip=0,
metadata_filters=data_class.MetadataFilters(
filters=[
],
condition="or"
),
pipeline_config=data_class.QueryPipelineConfig(
pipeline=[
data_class.VectorDBRetrieveConfig(
name="step1",
pre_ranking=data_class.PreRankingConfig(
bm25_b=0.75,
bm25_weight=0.25,
vec_weight=0.75,
bm25_k1=1.5,
bm25_max_score=50,
)
),
data_class.RankingConfig(
name="step2",
type="ranking",
inputs=["step1"],
model_name="ranker-v1",
top=20,
),
data_class.SmallToBigConfig(
name="step3",
type="small_to_big"
)
],
),
)
context = ""
for id, chunk in enumerate(res.chunks):
context = context + f'{chunk.content}' + "\n"
# 使用deepseek-r1模型来总结从知识库检索中的结果
client = Qianfan()
completion = client.chat.completions.create(
model="deepseek-r1", # 指定deepseek-r1模型
messages=[
{'role': 'user', 'content': PROMPT_TEMPLATE.format(context=context, question=question)},
]
)
return completion.choices[0].message.content
if __name__ == "__main__":
while True:
question = input("输入你的问题(输入 exit 退出对话):")
if question.lower() == 'exit':
break
ret = answer(question)
print(f'回答:{ret} \n')
输入你的问题(输入 exit 退出对话):deepseek 能做什么
回答:
根据参考信息,DeepSeek能够:
- 处理复杂任务且支持免费商用
- 在数学、代码、自然语言推理等任务上展现优秀性能
- 通过强化学习技术提升模型推理能力,性能可比肩OpenAI-o1正式版
其开源推理模型DeepSeek-R1主要应用于通用人工智能领域的大模型研发与应用。
输入你的问题(输入 exit 退出对话):该如何使用合适的提示语
回答:
根据参考信息,使用合适提示语的步骤如下:
1. **个人化体验设计**
- 要求描述具体经历细节(如[个人经历])
- 需包含情感变化过程
- 通过真实故事增强温度感
2. **情感共鸣构建**
- 使用温暖的情感化语言
- 采用故事化表达手法
- 重点突出引发共鸣的关键点
3. **互动引导设计**
- 在结尾添加号召性语句
- 明确请求互动形式(点赞/评论/分享)
- 使用"鼓励"等引导性动词增强传播性
4. **提示词工程应用**
- 先设定明确生成目标(如获取信息/生成文本)
- 给AI分配特定身份角色
- 将复杂任务分步拆解说明
需注意:所有提示语需包含具体场景上下文,情感表达要贯穿内容始终,最终需落脚到明确的互动引导诉求。
输入你的问题(输入 exit 退出对话):文案写作的要注意哪些提示语
回答:
根据参考信息,文案写作需重点注意以下提示语设计要点:
1. **信息传递框架**
- 确保信息层次清晰(需明确分层指令)
- 表达简洁精准(限定关键词或字数)
- 结构逻辑严密(说明信息点间的关联)
- 强化受众针对性(包含受众特征描述)
- 突出记忆点(重复或变换表达核心信息)
2. **差异化设计**
- 塑造真实感(避免过度修饰)
- 体现专业性(加入数据/用户反馈)
- 保持种草自然度(文案与图片配合流畅)
- 增加互动引导(鼓励评论/点赞)
3. **文案结构要求**
- 开篇吸引力(直接点明亮点)
- 个人经验铺垫(增强亲和力)
- 方法说明与效果总结(避免空洞描述)
- 购买建议实际化(避免强硬推销)
4. **标题设计**
- 包含关键词、数据/方法、价值承诺
- 语气亲和专业(禁用过度营销词)
- 创新性(分析竞品结构/用词差异)
(以上要点均来自表格中关于信息传递特质、差异化要求、文案结构和标题设计的核心规则)
输入你的问题(输入 exit 退出对话):