请为hs公司的钻石礼品网站做网络营销沟通策划_预算是20万.,网站建设怎么申请域名,网站的更新与维护,重庆地方标准查询基于PaddleNLP使用DeepSeek-R1搭建智能体 最近在学习DeepSeek#xff0c;找到了PaddleNLP星河社区大模型#xff0c;跟着敲写了一遍。内容来源#xff1a;DeepSeek实战训练营#xff1a;从云端模型部署到应用开发 - 飞桨AI Studio星河社区-人工智能学习与实训社区 
本项目基…基于PaddleNLP使用DeepSeek-R1搭建智能体 最近在学习DeepSeek找到了PaddleNLP星河社区大模型跟着敲写了一遍。内容来源DeepSeek实战训练营从云端模型部署到应用开发 - 飞桨AI Studio星河社区-人工智能学习与实训社区 
本项目基于 Langchain 框架结合星河社区大模型 API 提供的词嵌入模型和 Milvus 向量服务器搭建向量知识库并使用 PaddleNLP 的 DeepSeek-R1 模型搭建杭创赛解说智能体旨在测试模型性能并帮助参赛者更好地了解比赛。 
来探索测试PaddleNLP中DeepSeek-R1所搭建的智能体使用RAG向量知识库的效果测试效果很不错 运行环境Tesla V00 32G飞桨星河社区每日运行项目就送8算力点所以大家可以放心运行哈 构建流程 环境配置 
PaddleNLP环境配置DeepSeek-R1 
飞桨官方已经为大家配置好在V100和A100环境下的依赖环境大家仅需使用解压即可使用。同时飞桨官方提供了环境安装命令方便复现安装本部分操作主要完成了以下任务 
自动卸载已安装的 PaddleNLP 库确保环境干净避免版本冲突。 
解压并安装了特定版本2025年1月24日的 develop 分支的 PaddleNLP同时创建了外部库目录用于存放安装的外部依赖以防止重启后库被清空。 
安装 paddlenlp_ops 的 CUDA 算子以提高 GPU 的利用率和运行速度。 
In [1] 
# 自动确认并卸载已安装的 paddlenlp 库
!pip uninstall paddlenlp -y
# 解压安装PaddleNLP文件来自PaddleNLP GitHub仓库 develop分支2025年1月24日
!tar -xf PaddleNLP-20250124-1801.tgz
# 创建一个名为 external-libraries 的目录用于存放安装的外部库星河平台默认安装库重启后会被清空所以需要将安装的库放到外部目录中
# 创建环境依赖库针对不同的GPU环境请使用者自行切换
# !mkdir -p /home/aistudio/external-libraries
!tar zxf external-libraries.tgz# !!! 依赖文件已经安装在external-libraries中无需再次安装, 选择性安装paddlenlp_ops算子即可 !!!
# 安装PaddleNLP
# !pip install --pre --upgrade paddlenlp3.0.0b3.post20250123 -f https://www.paddlepaddle.org.cn/whl/paddlenlp.html -t /home/aistudio/external-libraries
# 【选择性安装】安装paddlenlp_ops cuda算子, 提高GPU利用率加快运行速度
!cd /home/aistudio/PaddleNLP/csrc  python /home/aistudio/PaddleNLP/csrc/setup_cuda.py install知识库构建环境配置Langchian、milvus、ernie等 本部分操作安装了多个Python库包括langchain-community、langchain、tiktoken、langchain_openai、unstructured、erniebot-agent、openai、milvus客户端和docx2txt 
用于支持自然语言处理、文档处理和向量数据库操作等功能。 
In [2] 
!pip install langchain-community --user
!pip install langchain --user
!pip install tiktoken --user
!pip install langchain_openai --user
!pip install unstructured --user
!pip install erniebot-agent langchain --user
!pip install openai
!pip install milvus[client] --user
!pip install docx2txt --userIn [3] 
# 将自定义的外部库目录添加到系统路径中以便Python能够导入这些库中的模块
import sys 
# 添加包含已安装外部库的目录
sys.path.insert(0, /home/aistudio/external-libraries)
# 添加PaddleNLP项目的根目录到系统路径以便可以导入其模块和包
sys.path.insert(0, /home/aistudio/PaddleNLP)
import paddle
from llm.predict.predictor import PredictorArgument, ModelArgument, create_predictor
from paddlenlp.utils import is_paddlenlp_ops_availablepredictor_args  PredictorArgument(model_name_or_pathdeepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B,src_length1024,min_length32,max_length512,top_k0,top_p0.7,temperature0.95,repetition_penalty1.0,dtypefloat16,inference_model True if is_paddlenlp_ops_available() else False,
)paddle.set_default_dtype(predictor_args.dtype)
predictor  create_predictor(predictor_args, ModelArgument())In [4] 
input_text  解释一下温故而知新print(predictor.predict(input_text))RAG向量知识库搭建 
文档加载和切片 本代码片段使用 langchain_community 提供的文档加载器和文本分割器实现了对指定文件的加载和内容分割。 
首先根据文件扩展名.pdf、.txt、.docx选择合适的加载器加载文档内容随后使用 RecursiveCharacterTextSplitter 将文档内容分割成固定大小的片段以便后续处理。 
代码成功加载了位于 /home/aistudio/杭创赛收集信息.docx 的文档内容并将其分割成多个片段每个片段大小为200字符重叠部分为50字符。 
还打印了加载和分割的结果包括文档内容、切片数量和第11个切片的内容。 
In [9] 
!pip install langchain
from langchain.document_loaders import PyPDFLoader,Docx2txtLoader,TextLoader# 加载文档
file_name/home/aistudio/ttt.txtif file_name.endswith(.pdf):loader  PyPDFLoader(file_name)
elif file_name.endswith(.txt):loader  TextLoader(file_name)
elif file_name.endswith(.docx):loader  Docx2txtLoader(file_name)
else:raise BizException(目前只支持pdf文件与txt、docx文件)
dataloader.load()
print(文档加载成功)
print(data)
print(------------------------------------------分割线--------------------------------------------)
from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitterRecursiveCharacterTextSplitter(chunk_size200,chunk_overlap50,length_functionlen
)pagesloader.load_and_split(text_splittertext_splitter)
print(文档切片成功)
print(切片数量,len(pages))
print(pages[10].page_content)
print(------------------------------------------分割线--------------------------------------------)向量数据库构建 词嵌入函数定义 
词嵌入部分是为了将文本转换为向量形式向量形式可便于对于文档的检索和搜寻这里使用最新的ERNIE SDK进行词嵌入函数的定义可将文本向量化 
在自然语言处理NLP中向量知识库可以将文本转换为数值形式的向量这使得机器可以处理和比较文本数据嵌入向量能够捕捉文本的语义信息使得相似的词汇或句子在向量空间中更接近。 
本部分用于获取每段文本将前面切片好后的文档进行整理全部至于sections列表内sections是一个二维列表用于存储数据便于后续的文本向量化转换 
In [10] 
import os
from openai import OpenAI
access_token  
client_ernie  OpenAI(api_key,  # 含有 AI Studio 访问令牌的环境变量https://aistudio.baidu.com/account/accessToken,base_urlhttps://aistudio.baidu.com/llm/lmapi/v3,  # aistudio 大模型 api 服务域名
)
def ernie_embedding(text):embeddings  client_ernie.embeddings.create(modelembedding-v1,input[text])all_embeddings  [[float(val) for val in embedding.embedding] for embedding in embeddings.data]return all_embeddings
text pages[10].page_content
reernie_embedding(text)
if isinstance(re, list):# 假设re是一个嵌套列表计算其维度dimensions  [len(re)]  [len(sublist) for sublist in re]print(dimensions)print(re)
else:# 如果re不是列表直接打印shapeprint(re.shape)# 用于存储每个部分的内容
sections  []# 遍历文档中的段落
for page in pages:ttpage.page_contenttext  tt.strip()sections.append(text)
print(len(sections))
print(sections[11])向量数据库构建 
主要先进性初始化和配置 Milvus 向量数据库用于存储和检索向量化的文本数据首先尝试启动 Milvus 服务器并连接到本地运行的 Milvus 服务。 
接着定义了一个数据集合Collection的模式Schema包括字段 answer_id主键、answer文本内容和 answer_vector向量形式并创建了一个名为 qadb 的数据集合。 
在定义数据集合的模式后为 answer_vector 字段创建了一个索引使用了 IVF_FLAT 索引类型和 L2 距离度量参数 nlist 设置为 1024。 
这种索引配置适用于高效的向量检索任务能够快速找到与查询向量最相似的记录。代码还查询并打印了索引构建的进度信息确认索引构建状态。 
最后加载 qadb 数据集合确保其处于可查询状态通过多次调用 collection.load()确保数据集合被正确加载到内存中以便后续进行高效的向量相似性搜索操作。 from pymilvus import utility, Collection
from pymilvus import CollectionSchema, FieldSchema, DataType
from milvus import default_server
from pymilvus import connectionstry:default_server.start()
except:default_server.cleanup()default_server.start()# 尝试连接到 Milvus 服务器
try:connections.connect(host127.0.0.1, portdefault_server.listen_port)print(f成功连接到 Milvus 服务器端口为{default_server.listen_port})
except Exception as e:print(f连接失败{e})# id
answer_id  FieldSchema(nameanswer_id,dtypeDataType.INT64,is_primaryTrue,auto_idTrue
)
# 答案
answer  FieldSchema(nameanswer,dtypeDataType.VARCHAR,max_length1024,
)
# 答案向量形式
answer_vector  FieldSchema(nameanswer_vector,dtypeDataType.FLOAT_VECTOR,dim384
)
# 定义一个数据集合Collection的模式Schema-创建一个表
schema  CollectionSchema(fields[answer_id, answer, answer_vector],descriptionvector data
)
# 表名
collection_name  qadb
# 连接数据库
Collection(namecollection_name,schemaschema,usingdefault,shards_num2
)
collection  Collection(qadb)index_params  {metric_type:L2, # COSINEindex_type:IVF_FLAT,params:{nlist:1024}
}collection.create_index(field_nameanswer_vector, index_paramsindex_params
)progress_info  utility.index_building_progress(qadb)
# 获取并打印索引构建进度 {total_rows: 0, indexed_rows: 0, pending_index_rows: 0}
# total_rows集合中总行数或向量数为0。这表示集合中没有任何数据或者数据尚未被成功插入到集合中。
# indexed_rows已成功索引的行数或向量数为0。这表示还没有数据被索引。
# pending_index_rows待索引的行数或向量数为0。这表示没有数据正在等待被索引。print(progress_info)  # 打印进度信息
collection.load() 
collection  Collection(qadb)
collection.load()数据插入知识库 接着进行信息的插入这部分通过循环形式遍历前面处理好的sections数据列表将每条数据进行向量转换文本数据和向量数据均放于data列表内 
再通过insert形式进行数据的插入通过result.insert_count属性查看是否插入成功如果正常插入这里result.insert_count应该是1 
In [5] 
import time
from pymilvus import Collectioni  1
# 打开一个文件用于记录错误
with open(error.log, w) as error_log:for rly in sections[i:]:try:print(f这里是第{i}段)rlyEmbedding  ernie_embedding(rly)  # 假设这是一个将文本转换为向量的函数print(len(rlyEmbedding))data  [[rly],  # 文本数据rlyEmbedding  # 对应的向量数据]print(data)result  collection.insert(data)  # 插入数据并获取结果print(result)# 检查插入结果if result.insert_count  0:print(f成功插入 {result.insert_count} 条数据)else:print(插入操作失败没有成功插入数据)i  1time.sleep(0.5)except Exception as e:print(f插入操作异常{e})error_log.write(fIndex {i} failed with error: {str(e)}\n)continue检验是否构建成功 
主要进行两部分检验一个是检验数据是否插入另外一个是知识库查询检验这里的插入检验貌似会有延迟前面导入数据后这里如果响应慢不要紧可以先进行下面的知识库查询校验如果有数据可查询到代表无问题 
这段代码首先使用MilvusClient连接到Milvus服务器并获取名为qadb的集合的统计信息然后打印出集合中已插入的总数据量。 
接着定义一个函数get_collection_total_entities该函数通过访问集合的num_entities属性来查询集合中的总实体数并打印出这个数值。 
这里的查询校验使用Milvus数据库进行向量搜索通过将问题文本转换为向量使用ernie_embedding函数然后在集合qadb中查找与该向量最相似的向量基于欧几里得距离并输出最匹配的前两个答案的文本内容。 
这部分代码重点是两部分一个是查询参数的定义另外一个是向量查询这段代码中的search_params字典定义了在Milvus数据库中进行向量搜索时使用的参数。 
In [6] 
from pymilvus import MilvusClient# 设置 Milvus 客户端
client  MilvusClient(urihttp://localhost:19530, tokenroot:Milvus)# 获取集合的统计信息
stats  client.get_collection_stats(collection_nameqadb)
print(stats)# 检查 stats 是否不为空并且包含键 row_count
if stats and row_count in stats:total_entities  stats[row_count]print(f集合 qadb 中已经插入的总数据量为: {total_entities})
else:print(注意集合 qadb 不存在或为空)def get_collection_total_entities(collection):查询集合中的总实体数即总数据量:param collection: 向量集合对象:return: 总实体数# 直接访问集合的 num_entities 属性collection.load()print(collection.describe())  # 检查集合的元数据stats  collection.num_entitiesprint(stats)return stats# 调用函数并输出集合中的总数据量
print(f集合中的总数据量: {get_collection_total_entities(collection)})In [7] 
question  比赛参赛要求?
qEmbedding  ernie_embedding(question)search_params  {metric_type: L2,  # 使用余弦相似度  或者 COSINEoffset: 0, ignore_growing: False, params: {nprobe: 5}  # 增加 nprobe 值以提高检索范围
}# 定义要导出的集合名称
collection_name  qadb
collection  Collection(collection_name)results  collection.search(dataqEmbedding, anns_fieldanswer_vector, paramsearch_params,limit3,  # 查询 5 个结果exprNone,output_fields[answer],consistency_levelStrong
)# 打印所有返回的结果
for i, result in enumerate(results[0]):print(fResult {i  1}: {result.entity.get(answer)})# 获取第一个结果的 answer 字段
answer  results[0][0].entity.get(answer)
answer基于DeepSeek-R1构建智能体 本部分代码实现一个基于 PaddleNLP 的 DeepSeek-R1-Distill-Qwen-1.5B 模型的智能问答系统用于对用户输入的问题进行解答。 
代码首先配置了模型参数并创建了一个预测器实例。系统通过 Milvus 向量数据库检索与用户问题相关的文档内容并结合这些内容生成简洁的回答。 
代码定义了 get_data 函数用于将用户问题嵌入向量并通过 Milvus 搜索最相关的文档片段。 
检索到的内容被整合到提示词中提示词通过 jinja2 模板生成结合系统提示词和用户问题引导模型生成符合要求的回答。系统提示词要求回答简洁30字以内并结合检索到的信息。 
通过一个循环实现用户交互用户输入问题后系统调用 predictor.predict 方法生成回答并将回答添加到对话历史中。 
生成的回答会显示给用户直到用户输入“结束”为止。整个流程实现了从问题检索到回答生成的完整闭环为用户提供基于文档内容的智能解答。 
In [10] 
import paddle
from llm.predict.predictor import PredictorArgument, ModelArgument, create_predictor
from paddlenlp.utils import is_paddlenlp_ops_available
from jinja2 import Template
import os
import json
import asynciopredictor_args  PredictorArgument(model_name_or_pathdeepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B,src_length1024,min_length32,max_length512,top_k0,top_p0.7,temperature0.95,repetition_penalty1.0,dtypefloat16,inference_model True if is_paddlenlp_ops_available() else False,
)paddle.set_default_dtype(predictor_args.dtype)
predictor  create_predictor(predictor_args, ModelArgument())# 设置系统提示词
systemprompts  
比赛参赛要求?# 用于查询相关信息
def get_data(user_input):question  user_inputqEmbedding   ernie_embedding(question)search_params  {metric_type: L2, offset: 0, ignore_growing: False, params: {nprobe: 10}  # 提高 nprobe 的值}collection_name  qadbcollection  Collection(collection_name)results  collection.search(dataqEmbedding, anns_fieldanswer_vector, paramsearch_params,limit2,  # 查询 5 个结果exprNone,output_fields[answer],consistency_levelStrong)# 打印所有返回的结果answer  原文内容为\nfor i, result in enumerate(results[0]):answer  answer  result.entity.get(answer)return answermessages  [{role: system,content:systemprompts,}
]# 用于组合输入内容
def generate_prompt(text,user_input,system_prompt):# # 从 messages 中提取历史信息包括用户和AI的所有对话# history_info  str(messages)# 设置系统提示词模板_DEFAULT_RESULT_ZH  系统提示{{system_prompt}}与用户对话相关的你的宝典信息如下{{text}}本此来访人员的问题是 {{user_input}} template  Template(_DEFAULT_RESULT_ZH)prompt  template.render(system_promptsystem_prompt,texttext, user_inputuser_input)return promptIn [11] 
user_input  
while 结束 not in user_input:user_input  input(your)# 将用户问题信息添加到messages列表中# 向量查询拿到信息text  get_data(user_input)# print(text)# 提示词组合-信息问题prompt  generate_prompt(text,user_input,systemprompts)# print(prompt)# 形成用户提问,并添加到对话中messages.append({role: user, content: prompt})# 获取大模型回复# 调用 predictor.predict 获取结果ll  predictor.predict(str(messages))[0]messages.append({role: assistant, content: ll})print(f小助手{ll})print(\n)
else:print(结束1)DeepSeek-R1单独调用测试 
In [ ] 
import re# 假设 messages 是输入的提示
message  你是什么你的基础模型是什么# 调用 predictor.predict 获取结果
ll  predictor.predict(message)[0]# 确保 ll 是字符串类型
if not isinstance(ll, str):raise TypeError(fExpected a string, but got {type(ll)})# 移除 think 标签及其内容
cleaned_result  re.sub(rthink.*?/think, , ll, flagsre.DOTALL).strip()print(cleaned_result)参考文献 DeepSeek实战训练营从云端模型部署到应用开发 - 飞桨AI Studio星河社区-人工智能学习与实训社区 文章转载自: http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn http://www.morning.slfkt.cn.gov.cn.slfkt.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.jtcq.cn.gov.cn.jtcq.cn http://www.morning.rcww.cn.gov.cn.rcww.cn http://www.morning.ztrht.cn.gov.cn.ztrht.cn http://www.morning.gbwfx.cn.gov.cn.gbwfx.cn http://www.morning.owenzhi.com.gov.cn.owenzhi.com http://www.morning.hxgly.cn.gov.cn.hxgly.cn http://www.morning.fdfdz.cn.gov.cn.fdfdz.cn http://www.morning.jcfdk.cn.gov.cn.jcfdk.cn http://www.morning.bcjbm.cn.gov.cn.bcjbm.cn http://www.morning.shangwenchao4.cn.gov.cn.shangwenchao4.cn http://www.morning.ryjqh.cn.gov.cn.ryjqh.cn http://www.morning.errnull.com.gov.cn.errnull.com http://www.morning.xsjfk.cn.gov.cn.xsjfk.cn http://www.morning.ryqsq.cn.gov.cn.ryqsq.cn http://www.morning.rlpmy.cn.gov.cn.rlpmy.cn http://www.morning.wkmpx.cn.gov.cn.wkmpx.cn http://www.morning.frcxx.cn.gov.cn.frcxx.cn http://www.morning.lwgrf.cn.gov.cn.lwgrf.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.jfjqs.cn.gov.cn.jfjqs.cn http://www.morning.fbzyc.cn.gov.cn.fbzyc.cn http://www.morning.nxhjg.cn.gov.cn.nxhjg.cn http://www.morning.qnqt.cn.gov.cn.qnqt.cn http://www.morning.ryrpq.cn.gov.cn.ryrpq.cn http://www.morning.ylpwc.cn.gov.cn.ylpwc.cn http://www.morning.wnqfz.cn.gov.cn.wnqfz.cn http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn http://www.morning.rwdbz.cn.gov.cn.rwdbz.cn http://www.morning.rfhm.cn.gov.cn.rfhm.cn http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn http://www.morning.ksggr.cn.gov.cn.ksggr.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.fgsqz.cn.gov.cn.fgsqz.cn http://www.morning.nlhcb.cn.gov.cn.nlhcb.cn http://www.morning.qbxdt.cn.gov.cn.qbxdt.cn http://www.morning.fysdt.cn.gov.cn.fysdt.cn http://www.morning.bpxmw.cn.gov.cn.bpxmw.cn http://www.morning.fysdt.cn.gov.cn.fysdt.cn http://www.morning.qwpyf.cn.gov.cn.qwpyf.cn http://www.morning.txmlg.cn.gov.cn.txmlg.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.nkdmd.cn.gov.cn.nkdmd.cn http://www.morning.fpryg.cn.gov.cn.fpryg.cn http://www.morning.xgjhy.cn.gov.cn.xgjhy.cn http://www.morning.xnnpy.cn.gov.cn.xnnpy.cn http://www.morning.lzqnj.cn.gov.cn.lzqnj.cn http://www.morning.hpnhl.cn.gov.cn.hpnhl.cn http://www.morning.hyyxsc.cn.gov.cn.hyyxsc.cn http://www.morning.weitao0415.cn.gov.cn.weitao0415.cn http://www.morning.mhfbf.cn.gov.cn.mhfbf.cn http://www.morning.krqhw.cn.gov.cn.krqhw.cn http://www.morning.kzrbn.cn.gov.cn.kzrbn.cn http://www.morning.qkdcb.cn.gov.cn.qkdcb.cn http://www.morning.btjyp.cn.gov.cn.btjyp.cn http://www.morning.sthgm.cn.gov.cn.sthgm.cn http://www.morning.qggxt.cn.gov.cn.qggxt.cn http://www.morning.fksdd.cn.gov.cn.fksdd.cn http://www.morning.tqsmg.cn.gov.cn.tqsmg.cn http://www.morning.bwmq.cn.gov.cn.bwmq.cn http://www.morning.llcsd.cn.gov.cn.llcsd.cn http://www.morning.nbnq.cn.gov.cn.nbnq.cn http://www.morning.lphtm.cn.gov.cn.lphtm.cn http://www.morning.kbkcl.cn.gov.cn.kbkcl.cn http://www.morning.hrzky.cn.gov.cn.hrzky.cn http://www.morning.atoinfo.com.gov.cn.atoinfo.com http://www.morning.lgnrl.cn.gov.cn.lgnrl.cn http://www.morning.jxmjr.cn.gov.cn.jxmjr.cn http://www.morning.ymqfx.cn.gov.cn.ymqfx.cn http://www.morning.tjqcfw.cn.gov.cn.tjqcfw.cn http://www.morning.ydtdn.cn.gov.cn.ydtdn.cn http://www.morning.swlwf.cn.gov.cn.swlwf.cn http://www.morning.sgtq.cn.gov.cn.sgtq.cn http://www.morning.nkllb.cn.gov.cn.nkllb.cn http://www.morning.jzfxk.cn.gov.cn.jzfxk.cn http://www.morning.hhxpl.cn.gov.cn.hhxpl.cn http://www.morning.nyqxy.cn.gov.cn.nyqxy.cn