网站备案主办单位性质,杭州移动公司网站,软件技术外包是什么行业,中国十大建筑设计院Cogito 3B实战教程#xff1a;Ollama中启用logprobs进行输出可信度评估 想不想知道AI模型在回答问题时#xff0c;它自己到底有多“自信”#xff1f;当它告诉你“地球是圆的”时#xff0c;是斩钉截铁#xff0c;还是犹犹豫豫#xff1f;今天#xff0c;我们就来解锁一…Cogito 3B实战教程Ollama中启用logprobs进行输出可信度评估想不想知道AI模型在回答问题时它自己到底有多“自信”当它告诉你“地球是圆的”时是斩钉截铁还是犹犹豫豫今天我们就来解锁一个实用技能在Ollama中使用Cogito 3B模型时如何开启logprobs功能来评估模型输出的可信度。这就像给AI的回答加上了一个“信心指数”让你能一眼看出哪些回答靠谱哪些需要打个问号。Cogito v1预览版是Deep Cogito推出的一个混合推理模型系列。简单来说它很聪明而且知道自己是怎么思考的。官方数据显示它在大多数标准测试中都超过了同级别3B参数规模的其他开源模型比如LLaMA、DeepSeek和Qwen的兄弟们。这个模型既可以直接回答问题也能在回答前先“自我反思”一番就像一个会打草稿的学霸。它特别擅长编程、理科问题并且支持超过30种语言。我们今天要用的cogito-v1-preview-llama-3B就是其中的一个轻量但强大的代表。1. 为什么需要评估输出可信度在把AI模型用于实际工作比如自动生成报告、回答客户问题或者辅助决策时我们最怕的就是它“一本正经地胡说八道”。模型可能会生成一些看起来流畅、但事实上错误或毫无根据的内容。传统的使用方式是我们输入问题模型输出文本我们只能凭经验或额外查证来判断对错。这种方式效率低而且不可靠。启用logprobs之后情况就不同了。logprobs对数概率是模型在生成每一个词token时分配给它的一个“信心分数”。通过分析这些分数我们可以发现低置信度回答如果模型在生成某个关键信息时犹豫不决概率很低那么这个信息就值得怀疑。比较不同答案的可信度对于开放式问题模型可能会给出多个备选答案通过比较它们的整体概率可以选出最靠谱的一个。构建更可靠的AI应用在自动化流程中可以设置一个概率阈值自动过滤掉低可信度的输出避免错误传播。接下来我们就手把手教你如何在Ollama中玩转这个功能。2. 环境准备与模型拉取2.1 确保Ollama已安装并运行本教程假设你已经在本地或服务器上安装并运行了Ollama。如果还没有可以前往Ollama官网下载安装非常简单。打开你的终端命令行输入以下命令检查Ollama是否正常运行ollama --version如果能看到版本号说明准备就绪。2.2 拉取Cogito 3B模型Ollama的模型库中已经收录了Cogito模型。我们直接在终端拉取它ollama pull cogito:3b这个命令会从Ollama的服务器下载cogito:3b模型。3B参数规模的模型相对较小下载速度会比较快。等待终端显示“success”之类的提示就表示模型拉取成功了。3. 基础对话与开启Logprobs3.1 如何进行一次基础对话首先我们看看不用logprobs的普通对话是怎么进行的。你可以使用ollama run命令ollama run cogito:3b运行后会进入一个交互式对话界面提示符通常为你可以直接输入问题例如 法国的首都是哪里模型会很快回答“巴黎”。这种方式和我们使用大多数聊天AI一样。但这样我们看不到模型背后的“心理活动”。要看到logprobs我们需要换一种调用方式。3.2 通过API调用并启用LogprobsOllama提供了一个本地API默认通常在http://localhost:11434。我们可以通过向这个API发送请求来获得更详细的输出。使用curl命令进行API调用 打开一个新的终端窗口输入以下命令curl http://localhost:11434/api/generate -d { model: cogito:3b, prompt: 法国的首都是哪里, stream: false, options: { temperature: 0.7 } }这会返回一个JSON格式的响应包含了模型的回答。但此时还没有logprobs信息。启用logprobs的关键一步 在请求的options字段里加入raw: true这个选项。注意raw模式会改变输入输出的处理方式通常需要更精确的提示但对于获取底层生成数据是必要的。同时我们明确要求返回logprobscurl http://localhost:11434/api/generate -d { model: cogito:3b, prompt: \n\nHuman: 法国的首都是哪里\n\nAssistant:, stream: false, options: { raw: true, temperature: 0.1 } }提示这里我们使用了类ChatML的对话格式Human:和Assistant:这在raw模式下有时能获得更稳定的表现。temperature调低是为了减少随机性让概率评估更清晰。执行这个命令后响应JSON中就会包含一个logprobs字段可能是一个列表里面就是每个生成token的对数概率。4. 实战解析Logprobs评估回答可信度理论说了不少我们来点实际的。我们设计几个问题看看Cogito 3B的信心指数如何变化。4.1 案例一简单事实性问题我们问一个确凿无疑的事实。请求curl -s http://localhost:11434/api/generate -d { model: cogito:3b, prompt: \n\nHuman: 太阳从哪个方向升起\n\nAssistant:, stream: false, options: {raw: true, temperature: 0.1} } | python3 -m json.tool | grep -A 5 -B 5 logprobs\|response这里用了grep来过滤输出方便查看关键信息预期与解析 对于“太阳从东方升起”这个答案模型在生成“东”这个字时赋予它的logprob值会非常高负数的绝对值很小例如-0.05因为这是一个极其确定的事实。同时其他竞争选项如“西”、“南”的概率会极低。这表明模型对这个答案信心十足。4.2 案例二具有争议或不确定性的问题我们问一个可能有多解或不确定的问题。请求curl -s http://localhost:11434/api/generate -d { model: cogito:3b, prompt: \n\nHuman: 十年后最畅销的科技产品会是什么\n\nAssistant:, stream: false, options: {raw: true, temperature: 0.1} } | python3 -m json.tool | grep -A 10 logprobs预期与解析 对于这种预测性问题模型生成的答案比如“AI个人助手”、“脑机接口设备”等所对应的logprobs值通常会比事实性问题低负数的绝对值更大例如-2.3。并且在生成答案开头的几个词时概率波动可能就很大。这直观地反映了模型对预测性内容的不确定性。作为使用者看到这样的低概率就应该对这个预测结论持保留态度。4.3 案例三模型可能“编造”的内容我们试探一下模型是否会产生“幻觉”。请求curl -s http://localhost:11434/api/generate -d { model: cito:3b, prompt: \n\nHuman: 请告诉我关于名为‘量子波动速读法’的诺贝尔奖获奖成果的详细信息。\n\nAssistant:, stream: false, options: {raw: true, temperature: 0.1} }注意“量子波动速读法”是一个广为人知的伪科学概念并无诺贝尔奖。预期与解析 如果模型开始编造一个不存在的获奖成果和细节那么在生成那些具体的、虚构的专有名词比如一个编造的科学家名字、一个编造的理论名称时logprobs值会异常地低。你可能会观察到一串非常低的概率值。这是一个强烈的危险信号提示你模型正在进入“胡编乱造”模式其生成的内容完全不可信。5. 编写一个简单的可信度评估脚本手动解析JSON太麻烦。我们可以写一个简单的Python脚本来自动化这个过程并给出一个直观的可信度评分。创建一个名为check_confidence.py的文件写入以下代码import requests import json import sys def get_response_with_logprobs(prompt): url http://localhost:11434/api/generate payload { model: cogito:3b, prompt: f\n\nHuman: {prompt}\n\nAssistant:, stream: False, options: { raw: True, temperature: 0.1, num_predict: 50 # 限制生成长度 } } try: response requests.post(url, jsonpayload) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f请求出错: {e}) return None def analyze_confidence(data): if not data or response not in data: print(未获取到有效响应。) return response_text data[response] print(f模型回答: {response_text}\n) # 注意Ollama API返回的logprobs字段结构可能需要调整 # 这里假设logprobs是一个包含每个token概率的列表 logprobs data.get(logprobs, []) if logprobs: # 将对数概率转换为线性概率近似并计算平均置信度 total_logprob sum(logprobs) avg_logprob total_logprob / len(logprobs) if len(logprobs) 0 else 0 # 平均对数概率的绝对值越小说明平均置信度越高 avg_confidence min(100, max(0, (1 - min(abs(avg_logprob), 10)/10) * 100)) print(f生成Token数量: {len(logprobs)}) print(f平均对数概率: {avg_logprob:.4f}) print(f估算平均置信度: {avg_confidence:.1f}%) # 提供一个简单的信心等级 if avg_confidence 80: confidence_level 高 elif avg_confidence 60: confidence_level 中 else: confidence_level 低 print(f信心等级: {confidence_level}) # 找出置信度最低的3个位置可能有问题的地方 if len(logprobs) 3: sorted_indices sorted(range(len(logprobs)), keylambda i: logprobs[i])[:3] print(\n置信度最低的Token位置可能需警惕:) for idx in sorted_indices: # 这里无法直接获取对应token仅展示位置和概率 print(f 位置{idx}: 对数概率 {logprobs[idx]:.4f}) else: print(本次响应未包含logprobs信息。) if __name__ __main__: if len(sys.argv) 1: user_prompt .join(sys.argv[1:]) else: user_prompt input(请输入您的问题: ) result get_response_with_logprobs(user_prompt) analyze_confidence(result)如何使用这个脚本确保Ollama服务正在运行。在终端运行脚本并直接提问python3 check_confidence.py “水的化学式是什么”脚本会输出模型的回答并给出一个估算的置信度百分比和等级同时标出生成序列中置信度最低的几个点供你重点审查。这个脚本只是一个起点。你可以基于logprobs开发更复杂的逻辑比如设定阈值自动拒绝低置信回答或者对长文本进行分段置信度分析。6. 总结与进阶建议通过本教程你已经掌握了在Ollama中使用Cogito 3B模型并启用logprobs来评估其输出可信度的方法。我们从“为什么需要”讲到“怎么实现”并提供了实战案例和自动化脚本。核心要点回顾logprobs是模型自信心的量化指标负值绝对值越小信心越足。通过Ollama API的raw模式可以获取到这些底层数据。事实性问题通常伴随高置信度而预测性、创造性或模型未知的内容则置信度较低。我们可以利用这些数据过滤不可靠信息构建更健壮的AI应用。进阶使用建议结合temperature参数temperature调低如0.1会让概率分布更“尖锐”logprobs的差异更明显适合用于评估。调高则会平滑分布增加创造性但让概率评估变难。关注概率分布而非单个值有时模型整体概率都不高但某个错误答案的概率相对最高它依然会被选中。查看整个词表上的概率分布比只看选中词的概率更有信息量。用于提示工程优化如果你发现模型对某个指令的理解始终置信度低可能意味着你的提示词需要修改得更清晰。注意性能返回logprobs会增加计算和传输开销在生产环境中需权衡利弊。给AI模型装上“信心监测仪”能让我们从被动接受输出变为主动评估和利用输出。希望这个技巧能帮助你在使用Cogito 3B乃至其他模型时更加得心应手。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。