2025.8.6学习日记
一、RAG
RAG 工作流程
1.文档收集与切割
包括文档收集,文档预处理,文档切割三个步骤,文档切割这里会分割成片段(chunks)

2.向量转换与存储
向量转换:使用Embedding模型,一般是预训练的语义模型。
向量存储:将生成的向量和对应文本存入向量数据库

3. 文档过滤与检索
查询处理:将用户数据也转换为Token
过滤机制:基于meta data,keyword,等规则进行过滤
相似度搜索:使用相似度搜索算法,例如使用余弦相似度、欧式距离等
上下文组装:将多个chunks组装

4. 查询增强与关联
提示词组装:将文档与用户问题组合,用于增强提示
上下文融合:基于增强提示回答问题
源引用:回答中添加信息来源
后处理:格式化优化最终输出
RAG实战
这里是官方文档,请按照官方文档的准备工作进行操作.本操作将在百炼平台上进行,百炼平台提供模型和应用服务,通过调用API与使用相应平台(Python,JAVA,NodeJs)的SDK可以新建你所需要的服务
1.准备工作
准备工作分为3步,获取API_KEY->配置API_KEY到环境变量(在测试阶段可以硬编码到代码中),安装SDK(这里选择PythonSDK)
- 获取API KEY
第一步前往密钥管理界面创建,下一步可以通过在第三方工具中调用APIKEY,也可以通过代码调用 - 配置环境变量
这里请注意配置完环境变量后,使用命令行提示符CMD和PowerShell显示环境变量的方法不同.CMD:echo %DASHSCOPE_API_KEY%,PowerShell:echo $env:DASHSCOPE_API_KEY
2.模型-对话-通义千问
采用通义千问模型,在实验时使用pythonSDK即可,python在3.5版本的时候内置了http,可以不用pip安装.
一共分为10个demo,比较复杂的是关于工具调用demo,需要有创建工具,创建tools,创建message,创建模型并获得response,获取工具调用输出,更新message,重新获取response
3.应用-RAG
应用RAG被放在了Assistant部分,
- 知识库创建
- 知识库检索
二、xiaozhi-server
工作流
app.py创建三个task,和一个main协程

websocket.py中的__init__()方法->modules_initialize.py中的init..modules方法

【注1】:在core.utils中使用了一种叫工厂模式的方法,在core.utils中引入provider文件夹下的模块,创建LLMProvider等Provider实例。core.utils是工厂,core.provider是工人
【注2】:在使用intent.provider是function_call和nointent的使用貌似完全没有区别,llm_intent才有明显区别wensocket.py中的start方法->_handle_connection私有方法

connection.py文件中的ConnectionHandler类创建handler实例,调用其中的handle_connection方法->_route_message方法
这里我新增了一个日志,用于打印要发送的hello消息,这个hello消息在config文件中有写
【注1】:需要介绍一下xiaozhi-esp32/main/protocols,协议的内容主要被写在了头文件中,而协议的调用主要被写在了源文件中源文件中,也是类似于工厂模式?
【注2】:被包装成task的协程内部如果使用await,可以不必在外部显式定义await,task会被自动纳入事件循环Event Loop中等待调用
【注3】:await 好像无法接普通函数,或者内置函数,需要使用async def重新包装一下
【注4】:可以在ESP-IDF终端中,使用idf.py -p PORT monitor来监视工程的运行情况
async def say_hello_world():
await asprint("hello world")
- ->
textHandle.py中的HandleTextMessage协程,在hello阶段,服务端收到客户端的消息,调用helloHandle.py中的handleHelloMessage协程,创建两个任务send_mcp_initialize_message,send_mcp_tools_list_request->

浙公网安备 33010602011771号