Micropython

1 使用一个micropython设备使用UART 通过外接设备一个micropython设备 实现repl,
读取命令到变量command上 ,按下enter后将命令通过UART发送给MPY设备,UART读取返回信息,打印。
文档编辑:将文件通过UART获取到本地,然后打开,对其修改,然后上传到设备。
那么如何通过获取文件呢?因为本设备和MPY设备有一个UART通道用于命令交互,那么如何获取文件呢?

PLAN FOR AI

  1. 发代码时一次性把脚本贴进去;
  2. 远端在 raw-REPL 里执行完后把 stdout+stderr 统一回传;
  3. 文件内容用 uzlib + base64 流式打包,避免内存炸,也兼容二进制。

2 本地一块MIcropython设备,使用 os.dupterm() FBConsole来实现,其中命令行交互 无问题,Ctrl+c +x 之类 使用发送字符 ,
问题一:文件文本编辑需要 行字符串编辑 ,内存先全部读取,然后显示,一行,一行编辑,体验不好。

附加16进制控制符

十六进制十进制缩写名称十六进制十进制缩写名称
0x000NUL空字符0x1016DLE数据链路转义
0x011SOH标题开始0x1117DC1设备控制1
0x022STX正文开始0x1218DC2设备控制2
0x033ETX正文结束 Ctrl+C0x1319DC3设备控制3
0x044EOT传输结束 Ctrl+D0x1420DC4设备控制4
0x055ENQ询问0x1521NAK拒绝接收
0x066ACK收到通知0x1622SYN同步空闲
0x077BEL0x1723ETB传输块结束
0x088BS退格0x1824CAN取消 Ctrl+X
0x099HT水平制表符0x1925EM介质中断
0x0A10LF换行键0x1A26SUB替换
0x0B11VT垂直制表符0x1B27ESC换码
0x0C12FF换页键0x1C28FS文件分隔符
0x0D13CR回车键0x1D29GS组分隔符
0x0E14SO移出0x1E30RS记录分离符
0x0F15SI移入0x1F31US单元分隔符
组合键十六进制十进制组合键十六进制十进制组合键十六进制十进制
Ctrl+A0x011Ctrl+J0x0A10Ctrl+S0x1319
Ctrl+B0x022Ctrl+K0x0B11Ctrl+T0x1420
Ctrl+C0x033Ctrl+L0x0C12Ctrl+U0x1521
Ctrl+D0x044Ctrl+M0x0D13Ctrl+V0x1622
Ctrl+E0x055Ctrl+N0x0E14Ctrl+W0x1723
Ctrl+F0x066Ctrl+O0x0F15Ctrl+X0x1824
Ctrl+G0x077Ctrl+P0x1016Ctrl+Y0x1925
Ctrl+H0x088Ctrl+Q0x1117Ctrl+Z0x1A26
Ctrl+I0x099Ctrl+R0x1218Ctrl+[0x1B27
发表在 None | 留下评论

llamaindex 研究关键词 sqlite多文件插入

chunk_size = 1024
chunk_overlap = 200
默认1024长度 重叠200

文档类型推荐 chunk_sizeoverlap额外技巧
制度/规章(段落长、条款多)1 024–2 048200–400以“## 标题”为分隔符,保证条款完整
接口文档(URL/错误码表格)512–1 024100–200一级标题 + 二级标题拼一起,别把表格拦腰砍断
会议记录/周报(短片段)256–51250–100按“—-”或“## 周次”切,避免把多周拼一起
超长 RFC/设计文档2 048–4 096400先按“##”切,再对子章节二次切,做双层摘要索引

关键词

A whoosh+jieba 10万段 chunck 约2000篇

# pip install whoosh jieba llama-index-core llama-index-retrievers-whoosh

from llama_index.core import SimpleDirectoryReader
from llama_index.retrievers.whoosh import WhooshRetriever
from llama_index.core.query_engine import RetrieverQueryEngine

# 1. 读取文档
documents = SimpleDirectoryReader("data").load_data()

# 2. 建/载 whoosh 倒排
whoosh_retriever = WhooshRetriever(
    index_dir="./whoosh_idx",
    docs=documents,
    top_k=5
)

# 3. 纯关键词查询引擎
query_engine = RetrieverQueryEngine(whoosh_retriever)

# 4. 交互
if __name__ == "__main__":
    print("=== Whoosh 纯关键词查询 ===")
    while True:
        q = input("\n问题 (q退出): ").strip()
        if q.lower() == "q":
            break
        resp = query_engine.query(q)
        print("答:", resp)

混合查询 关键词 +向量

pip install llama-index-core llama-index-llms-ollama llama-index-embeddings-ollama

# 关键词方案二选一
pip install llama-index-retrievers-whoosh     # 路线① Whoosh

代码

vector_index = VectorStoreIndex.from_documents(documents)
//向量
from llama_index.retrievers.whoosh import WhooshRetriever

keyword_retriever = WhooshRetriever(
    index_dir="./whoosh_idx",
    docs=documents,
    top_k=5
)

//混合关键词 +向量
from llama_index.core.retrievers import QueryFusionRetriever

hybrid_retriever = QueryFusionRetriever(
    retrievers=[
        vector_index.as_retriever(similarity_top_k=5),
        keyword_retriever,
    ],
    retriever_weights=[0.7, 0.3],   # 向量权重高一点,可按场景调
    similarity_top_k=5,             # 最终只给 LLM 前 5 段
    num_queries=1,                  # 不对用户问题做改写
)

//查询
from llama_index.core.query_engine import RetrieverQueryEngine
//导入混合
query_engine = RetrieverQueryEngine(hybrid_retriever)

if __name__ == "__main__":
    print("=== 向量 + 关键词 联合召回 ===")
    while True:
        q = input("\n问题 (q退出): ").strip()
        if q.lower() == "q":
            break
        resp = query_engine.query(q)
        print("答:", resp)


SQLITE 补充 多次document插入 列表后向量化

使用列表来实现多文件插入,先读取多个文件到documents列表中 documents.extend(SimpleDirectoryReader(afile).load_data())之后再index = VectorStoreIndex.from_documents(documents)实现一次性的向量化

documents = []                       # 1. 先弄空列表
for _, afile, _ in bk:               # 2. 循环取路径
    if not os.path.isfile(afile):
        print(f'跳过不存在文件:{afile}')
        continue
    documents.extend(                # 3. 把每个文件拆出的文档追加进来
        SimpleDirectoryReader(afile).load_data()
    )

if not documents:                    # 4. 保险:确实读到东西了
    raise SystemExit('没有有效文档,无法构建索引!')

index = VectorStoreIndex.from_documents(documents)   # 5. 一次向量化
发表在 None | 留下评论

llama factory安装

miniconda即可

conda create -n llama_factory python=3.10
conda activate llama_factory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

llamafactory-cli env             # 查看 PyTorch、CUDA、transformers 等版本  
llamafactory-cli version         # 只看自身版本号


 llamafactory-cli webui          # 默认 127.0.0.1:7860  
# 如果想让外网也能访问  
 llamafactory-cli webui --share
发表在 None | 留下评论

夸克网盘

【夸克网盘】夸克网盘PC网页版端入口 (quark.cn)

https://www.quark.cn/

发表在 None | 留下评论

thinkphp 的value可取单值 $a??0 || 三元 ?:0

  $leaseArea = PropertyOneModel::alias('a')
        ->join('lease b', 'b.po_id=a.id AND b.delete_time IS NULL')
        ->where($where)
        ->value('SUM(b.area)') ?? 0;

如果只取一个值可以用value() 省区写field find 但是多个不行

?? null 判断 ,数据库查询专属

$a=$a??0;

如果$a为null 那么赋值0

?: 三元简写
$a=$a?:0;
如果$a为False那么赋值0

发表在 None | 留下评论