我用 Flowise + 本地 InternLM-3 搭了个兼职筛选 Agent,踩了三个坑差点放弃
我用 Flowise + 本地 InternLM-3 搭了个兼职筛选 Agent,踩了三个坑差点放弃
上周我在某平台刷了将近两个小时的兼职信息,最后发现有将近一半是"先交押金"或者"先买设备"的变种骗局,另外三分之一月薪写着"面议",私信过去直接石沉大海。
剩下那几条看起来正常的,点进去发现要么是"日结 50 元"的体力活,要么描述语焉不详,根本判断不了靠不靠谱。
两个小时,换来零条有效信息。
我当时就想——这事儿能不能让 AI 替我干?
不是那种"你帮我写一段话"的简单用法,而是真正意义上的:我把一批兼职信息丢给它,它帮我过滤、打标、总结,最后给我一张干净的清单。
想法有了,接下来就是选方案。我考虑过直接调商业 API,但有三个顾虑:
1. 隐私:兼职信息里可能涉及我的求职偏好、薪资预期,不太想全部上传到云端
2. 成本:如果每天都要跑,长期下来费用不好控制
3. 可控性:本地部署可以随时调整模型和 Prompt,不受服务商策略变化影响
于是我选了 Flowise + 本地 InternLM-3 这个组合,花了大概三天时间把它跑通了。
这篇文章就是这三天的踩坑实录。
---
整体方案:先看懂架构,再看坑在哪里
在讲踩坑之前,先说清楚整个系统是怎么设计的,不然后面的报错你看不懂上下文。
整个数据流可以理解成一条流水线:
[原始兼职信息输入]
↓
[Flowise 工作流编排]
- 文本预处理节点
- Prompt 组装节点
- 分块处理节点(坑三的解法)
↓
[InternLM-3 本地推理]
- 理解信息内容
- 判断风险等级
- 输出结构化结果
↓
[JSON 格式输出]
→ is_legit / risk_level / reason
用更直白的类比:Flowise 是流水线的传送带,负责把原材料(兼职信息)按顺序送到各个工位;InternLM-3 是核心工人,负责真正理解和判断内容;最后的 JSON 输出是成品检验报告。
两者的分工非常清晰:Flowise 不做理解,只做编排;InternLM-3 不管流程,只管推理。
硬件配置说明(这是大家最关心的): | 配置项 | 我的环境 | | GPU | RTX 3060 12GB 显存 | | 内存 | 32GB DDR4 | | 系统 | Ubuntu 22.04 | | 模型 | InternLM-3 8B Instruct(量化版 Q4_K_M) | | 推理框架 | Ollama(提供本地 OpenAI 兼容接口) |⚠️ 显存门槛:InternLM-3 8B 量化版大约需要 6-7GB 显存,12GB 的卡跑起来比较舒服。如果你只有 8GB 显存,建议开启显存优化参数,或者直接用 API 方案(后面会说)。
---
三个坑,一个比一个让我崩溃
坑一:InternLM-3 接入 Flowise,第一步就报错
踩坑经过按照 Flowise 的文档,新建一个 ChatOpenAI 节点,填入本地地址,以为就完事了。
结果 Flowise 的日志直接给我一个:
Error: Connection refused - http://localhost:11434/v1/chat/completions
AxiosError: connect ECONNREFUSED 127.0.0.1:11434
我检查了半天,Ollama 服务明明是跑着的,curl http://localhost:11434 也能正常返回。
Flowise 的 ChatOpenAI 节点默认走的是 https://api.openai.com/v1,即使你填了 base_url,它在某些版本里会忽略你填的地址,强行走默认端点。
另外还有一个更隐蔽的问题:Ollama 的本地接口路径是 /api/chat,而 OpenAI 兼容格式的路径是 /v1/chat/completions。这两个不一样,但 Ollama 同时支持两种——你必须显式告诉 Flowise 用哪个。
在 Flowise 里不要用默认的 ChatOpenAI 节点,改用 ChatOpenAI Custom 节点(或者叫 Custom LLM),然后按这样配置:
# Flowise 中 InternLM-3 的 API 适配配置
base_url: "http://localhost:11434/v1"
model: "internlm3:8b-instruct-q4_K_M"
api_key: "ollama" # 随便填,但不能为空,否则 Flowise 会报鉴权错误
⚠️ 注意:model 名称必须和你 ollama pull 下来的名称完全一致
⚠️ api_key 填 "ollama" 是 Ollama 官方的约定写法,不是真实密钥
改完之后,再跑一次,终端里出现了第一条正常的推理输出。那一刻感觉还挺爽的,以为后面会顺利——然后坑二来了。
---
坑二:Prompt 写得"太聪明",模型开始自由发挥
踩坑经过第一版 Prompt 我写得很"自然",觉得越接近人话模型理解越好:
请分析这条兼职信息,告诉我它是否靠谱,
给出你的判断和理由,以及风险等级。
结果模型给我输出了这个:
这条兼职信息看起来存在一定风险。首先,"先交押金"这种要求
在正规兼职中极为少见,通常是诈骗的前兆。其次,联系方式只
留了微信,没有公司信息,可信度存疑。
综合来看,我认为这条信息的风险等级属于中高风险,建议谨慎
对待。如果您有进一步的问题,欢迎继续咨询。
另外,关于如何识别兼职诈骗,我有几点建议……(后面跟了
500 字的防骗科普)
问题很明显:输出格式完全不可解析,模型把它当成了一次普通对话,给我写了篇小作文。我后续需要用代码处理这些结果,这种格式根本没法用。
根本原因开放式 Prompt 给了模型太大的自由度。InternLM-3 是一个经过对话微调的模型,它的"本能"就是给出详尽、友好的回答——你不约束它,它就会按对话习惯输出,而不是按你的程序需求输出。
解决方案Prompt 要做两件事:明确禁止它输出 JSON 以外的内容,明确规定 JSON 的结构。
// 修复前(导致输出格式崩塌)
"请分析这条兼职信息,告诉我它是否靠谱,给出你的看法"
// 修复后(强制结构化输出)
"你是一个兼职信息风险评估助手。请严格按照以下 JSON 格式输出分析结果,
不要输出任何 JSON 以外的内容,不要加解释,不要加 markdown 代码块标记:
{\"is_legit\": true 或 false, \"risk_level\": \"低\" 或 \"中\" 或 \"高\", \"reason\": \"一句话说明核心判断依据\"}
待分析的兼职信息如下:
{{input}}"
有几个细节值得注意:
- "不要加 markdown 代码块标记" 这句话很关键。很多模型会把 JSON 包在
`json`里,导致解析失败 - reason 限制"一句话",防止模型在这个字段里塞一篇文章
- 把禁止项说清楚,比"请输出 JSON"更有效
改完之后,输出变成了干净的:
{"is_legit": false, "risk_level": "高", "reason": "要求先交500元押金,正规兼职不会有此要求"}
可以直接 JSON.parse(),完美。
💡 你有没有遇到过坑二这种情况?评论区说说你是怎么解决的。
---
坑三:上下文窗口撑不住,长帖子判断开始漂移
踩坑经过前两个坑解决之后,我开始用真实数据测试。单条短信息跑得很好,但当我把某些字数较多的兼职帖(比如附带了详细的"公司介绍"和"岗位职责",加起来 1500+ 字)丢进去的时候,模型的判断开始出问题。
一条明显是骗局的信息(要求先交培训费,但在第 800 字之后才提到),被模型判断为"低风险"。
根本原因InternLM-3 8B 量化版的有效上下文窗口在本地推理时大约是 2048 token(约 1500 汉字)。加上 Prompt 本身占用的 token,留给正文内容的空间其实不多。
更关键的是:模型对靠近末尾的信息注意力会衰减。骗局的关键信息("先交培训费")藏在长文本的后半段,模型"没看仔细",就给出了错误判断。
解决方案在 Flowise 里加一个文本分块节点,把长文本切成 400-500 字的块,每块单独送给模型判断,最后取风险等级最高的那个结果作为最终输出。
# 分块处理的核心逻辑(Flowise Function 节点中的伪代码)
def process_long_text(text, chunk_size=400):
chunks = split_text(text, chunk_size, overlap=50)
results = []
for chunk in chunks:
result = llm.invoke(prompt.format(input=chunk))
results.append(parse_json(result))
# 取最高风险等级作为最终判断
final_risk = max(results, key=lambda x: risk_priority[x['risk_level']])
return final_risk
risk_priority = {"低": 0, "中": 1, "高": 2}
overlap=50 是为了防止关键信息刚好落在分块的边界上被切断。
加了这个处理之后,那条"先交培训费"的骗局信息被正确识别为高风险。
---
跑通之后,它实际表现怎么样?
三个坑全部填完,系统终于稳定运行。我用 10 条真实感兼职信息做了一次测试:
| # | 信息类型 | Agent 判断 | 是否正确 | | 1 | 正规平台认证的数据标注兼职 | 低风险 ✅ | ✅ | | 2 | "先交 500 元押金"的快递分拣 | 高风险 ✅ | ✅ | | 3 | 月薪"面议"、无公司信息 | 中风险 ✅ | ✅ | | 4 | 要求下载陌生 App 刷单 | 高风险 ✅ | ✅ | | 5 | 正规连锁餐厅收银员兼职 | 低风险 ✅ | ✅ | | 6 | 暗语型骗局("内部渠道") | 中风险 ⚠️ | ❌(应为高风险)| | 7 | 正规家教信息 | 低风险 ✅ | ✅ | | 8 | 以"实习"名义要求无偿工作 | 中风险 ✅ | ✅ | | 9 | 虚假刷单(描述隐晦) | 中风险 ⚠️ | ❌(应为高风险)| | 10 | 正规超市促销员兼职 | 低风险 ✅ | ✅ | 10 条样本,8 条判断正确,2 条误判。误判的两条都有一个共同特点:使用了隐晦的行业暗语("内部渠道""轻松日结"之类),没有明显的骗局关键词,模型没有足够的上下文去推断。
时间对比方面:手动筛选 10 条大约需要 15-20 分钟(包括点进去看详情、搜索公司背景等),Agent 跑完 10 条大约需要 40-50 秒。
不过度吹嘘:这个系统是有用的,但别期望完美。对于明显骗局,它的识别率很高;对于精心设计的隐晦骗局,它和普通人一样容易被骗。
---
想自己搭?给你一份避坑清单
把上面踩过的坑提炼成 Checklist,直接收藏备用:
环境配置- [ ] Ollama 版本 ≥ 0.1.29(低版本的 OpenAI 兼容接口有 bug)
- [ ] Flowise 版本 ≥ 1.8.0(低版本的 Custom LLM 节点不稳定)
- [ ] 确认
ollama serve正常运行后再启动 Flowise - [ ] 用
curl http://localhost:11434/v1/models验证接口可访问
- [ ] 8B 参数量化版是性价比最高的起点(显存 6-8GB)
- [ ] 优先选择有 Instruct 后缀的版本(专门针对指令跟随优化)
- [ ] 如果判断准确率不够,换 14B 或接在线 API 效果更好
- [ ] 明确禁止输出 JSON 以外的内容
- [ ] 明确禁止输出 markdown 代码块标记
- [ ] 把每个字段的取值范围写清楚(比如 risk_level 只能是"低/中/高")
- [ ] 用 Few-shot 示例(给 1-2 个输入输出的例子)效果会更稳定
- [ ] 超过 800 字的文本必须分块处理
- [ ] 分块时设置 50 字左右的重叠区间
- [ ] 最终结果取所有块中风险等级最高的那个
---
有读者可能会问:我的电脑显卡不够,跑不起来本地模型怎么办?
其实 Flowise 支持直接对接任何兼容 OpenAI 格式的在线 API。我自己测试过,把本地的 InternLM-3 换成在线推理接口之后,响应速度快了大概 3-4 倍,而且不用担心显存不够的问题。
如果你想跳过本地部署这道门槛,直接用 API 跑起来同款 Agent,可以试试 [api.884819.xyz](https://api.884819.xyz)——支持 Deepseek R1/V3、通义千问 Qwen3、Kimi K2.5 等主流国产模型,按量计费,新用户注册即送 5 元体验额度,即日起新注册用户系统自动送 50 万 token,想要更多可以通过工单联系客服申请,再手动赠送 200 万 token。
拿来跑这个兼职筛选 Agent 绰绰有余。配置方式和本地版完全一样,只需要换一个 base_url:
base_url: "https://api.884819.xyz/v1"
api_key: "你的key"
model: "deepseek-r1" # 或者换成 qwen3-72b,推理能力更强,识别暗语型骗局效果更好
没有月租,没有订阅,用多少付多少,国产模型完全免费。
---
最后
当我看到 Agent 把那条"先交 500 元培训费"的信息标记为 【高风险-疑似诈骗】 的时候,我感觉之前踩的那三个坑都值了。
但这个系统目前还有一个很明显的局限:它只能被动地"喂给它信息让它判断",我还得手动去各个平台复制粘贴。
下一步我想让它主动去抓取信息——接入 Flowise 的 Web Scraper 节点,定时爬取几个固定的兼职频道,自动筛选完直接推送给我。
这里面有一个很有意思的问题:当 Agent 要自己上网"找活儿"的时候,怎么防止它抓到一堆垃圾信息把自己搞崩?
下篇写这个,感兴趣的先关注,不然可能找不到了。👀
---
本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。#AI Agent #Flowise #本地部署 #InternLM #AI工具 #LLM应用 #8848AI #AI教程