大模型发展如火如荼,我也一直在琢磨,这玩意除了日常知识问答和辅助写代码,还能对我的项目需求有啥助力。
最近,有一个做知识社区的 PM 找到我,说最近有人把一些项目文档、述职报告发在公开的社区里了,希望能有一些自动化发现和处理的方法。
这不就是瞌睡了就有枕头吗?用大模型做 这事儿再合适不过了。
我在自己的老 Mac 上装了 ollama,跑了 Deepseek r1 1.5b + nomic-embed-text,用 langchain 框架做实验。
踩坑点:每次执行新RAG任务却召回了老内容,怎么办?
第一次用来执行RAG 任务,发现当我在第一轮的 content 和 prompt 结束之后,再次提交新的 content 和 prompt,模型会召回上一次的content。问了claude 才知道,原来文件向量是持久化存在向量库里的,只要每次执行新任务时清理一遍,就不会发生召回前一次 content 的尴尬事了。
def store_in_chroma(doc_splits,clear_old=True):
try:
if clear_old and os.path.exists(DB_DIR):
import shutil
shutil.rmtree(DB_DIR)
print("已清除旧的向量数据库")
embedding_function = OllamaEmbeddings(model=EMBEDDING_MODEL,base_url="http://127.0.0.1:11434")
vectorstore = Chroma.from_documents(doc_splits, embedding_function, persist_directory=DB_DIR)
print("数据已成功存入 ChromaDB!")
return vectorstore
except Exception as e:
print(f"存入 ChromaDB 失败: {e}")
return None
关键点:prompt 是关键,选对模型更是关键中的关键。
为了能让模型很好的理解我的意图,我努力地用结构化的语言描述自己的需求。
|
我用从公司内网扒拉下来的10 篇文章做测试,发现自己本机模型的正确率只有 60%。
后来,我直接怼到了公司自研的一个大参数模型接口,也不用 RAG 了,把内容和问题都作为prompt 提交给模型,正确率竟然达到了 90%。
看来,小参数模型就是瞎玩玩,正经的生产任务还得是满血版。
稍微修改了一下 prompt。
prompt = f"""
你是一个信息安全专家,负责识别文档中的敏感信息。
敏感内容识别规则:
1.包含了产品设计、安全要求、产品策略、技术架构设计的内容,是敏感信息;
2.包含了财务指标、产品定价的内容,是敏感信息;
3.包含了员工述职报告、日报、周报、项目进展、项目总结、工作规划、部门规划、团队运营计划的内容,是敏感信息;
4.品牌无关,只要包含了安全漏洞、安全事件、安全报告、安全规则、安全设计、安全策略的内容,都是敏感信息;
5.不符合 1-4 规则的内容,则不是敏感信息。
任务:
1、根据上述“敏感内容识别规则”,识别当前文本是否为敏感信息。
2、如果是敏感信息,最终结果直接用文本格式输出:"TRUE"即可。
3、如果不是敏感信息,最终结果直接用文本格式输出:"FALSE"即可。
文档内容:
{content}
注意:
我导入的是一篇完整的文章,你看到的“一”、“二”、“三”等汉字数字代表的是文章正文的章节,仅此而已。
"""
到了 90%我已经很满意了,再提高精度就是加大实验量,不断调整 prompt 的过程了。实验做到这个份上,已经可以作为一个正式的需求配合运营方案拿出来评审了。
又是进步的一天。
作者:阿飞 or 韭不黄,都是同一个人。十余年来一直混迹于信息安全行业,扛过设备,卖过服务,做过审计,查过黑客,反过欺诈,岁月神偷带走了我的苹果肌,留下了一肚子的瘫软,貌似我将要成为一个油腻的中年男人,不过依然对世界充满好奇,依然是一颗嫩绿的韭菜~
原文始发于微信公众号(思想花火):学习笔记 | 用大模型来判断文档是否敏感
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论