首页 / 文章 / 在 Ollama 上使用无云密钥时也会出现同样的聊天循环问题。

在 Ollama 上使用无云密钥时也会出现同样的聊天循环问题。

对本地模型运行类似OpenAI的消息处理路径,以便教程可在离线环境下使用。

852 词

可将此内容视为对“第5部分——在Ollama上运行相同循环(无需API密钥,使用OpenAI方言)”中理念的面向操作人员的重构版本:清晰的阶段划分、有序的代码模块,以及便于交接时参考的恢复说明。将概览视为可度量的框架使用效果最佳;在扩大范围之前,先记录一份理想的执行日志、一个失败案例以及回滚说明。应将此阶段视为输入与经过验证的输出之间的契约:为相关成果命名,明确成功标准,杜绝默许的半完成状态。

from openai import OpenAI

# Part 2's SDK, different address
client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama",  # required, unused
)

resp = client.chat.completions.create(
    model="llama3.2",
    messages=[
        {
            "role": "system",
            "content": "You are a concise "
                       "assistant.",
        },
        {
            "role": "user",
            "content": "Where are you running "
                       "right now?",
        },
    ],
    temperature=0,
)
print(resp.choices[0].message.content)
msgs = [{
    "role": "system",
    "content": "You are a concise assistant.",
}]

def ask(text: str) -> str:
    msgs.append(
        {"role": "user", "content": text}
    )
    resp = client.chat.completions.create(
        model="llama3.2",
        messages=msgs,  # full history
        temperature=0,
    )
    reply = resp.choices[0].message.content
    msgs.append({
        "role": "assistant",
        "content": reply,
    })
    return reply

print(ask("Define a context window."))
print(ask("Now for a five-year-old."))
print(ask("Which answer was shorter?"))
# one-time: install from ollama.com, then
ollama pull llama3.2

pip install -r requirements.txt
python examples/part05_ollama.py

操作检查清单

在处理操作检查清单时,首先需明确契约内容:所需输入、成功信号,以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改保持一致性。

应优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤出错时,故障应指向单一责任模块,而非复杂的处理流程。

每次调用时都要记录请求ID、模型ID以及延迟时间。没有这些记录,间歇性的服务端错误就会被视为应用程序的缺陷。

锁定依赖版本的编号,并记录用于运行演示的图像摘要。可重复性比经验知识更为重要。

将此阶段视为输入与经过验证的输出之间的契约。为相关成果命名,明确成功标准,拒绝默许不完整的处理结果。

每次调用时都要记录请求ID、模型ID以及延迟时间。没有这些记录,间歇性的服务端错误就会被视为应用程序的缺陷。

在推广该技术栈之前,应先冻结版本,为关键流程记录标准输出日志,并明确回滚步骤。共享环境需要设置速率限制、租户验证机制,以及明确的密钥轮换负责人。与其展示花哨的一次性演示,不如注重扎实的可靠性。

关于25763587d271的批量处理说明:请将提供商密钥移出代码仓库,设定单次会话的令牌上限,并将日志存储在评估用示例文件旁,以便后续模型更换时保持对比性。

针对强化措施0,应在修改代码之前明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。相比庞大的脚本,更应优先使用小型且可测试的单元。当某一步骤失败时,故障原因应能明确指向某个具体责任方,而非整个复杂的流程链。

加固细节 0/681:为该笔记测量运行时间、错误类型以及代币消耗情况,然后依据固定的问题清单而非个人经验来判断是否保留该更改。

在处理加固笔记1时,首先写下合约的必要输入参数、成功信号以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改更加规范。在功能结果旁记录时间以及代币或查询成本,提前了解成本情况可以避免从演示环境过渡到共享环境时出现意外费用。

加固细节 1/681:为该笔记测量运行时间、错误类型以及代币消耗情况,然后依据固定的问题清单而非个人经验来判断是否保留该更改。

强化措施2作为可度量的表面来处理时效果最佳。在扩大范围之前,先记录一个成功的案例、一个故障案例以及回滚说明。 同时记录正常流程和恢复流程。重试机制、人工审核环节以及死信处理都是产品本身的组成部分,而非后续补充的内容。

强化措施细节2/681:为该措施测量处理时间、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

对于强化措施3,在修改代码之前需明确输入参数、该步骤的负责人以及完成标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 将此阶段视为输入与验证后输出之间的契约。为相关成果命名,定义成功检查标准,并拒绝默许的半完成状态。

强化措施细节 3/681:测量该记录的墙时、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来决定是否保留该变更。