不知是不是网上错误代码多的原因,导致AI 被污染,我用 AI 写代码总是出错。遇到这种情况,还是建议直接看官方 文档 ,详细明了。
下面的代码提供了两个方案:一是构造 POST 请求;二是直接把官方文档中 curl 命令包裹起来执行。
由于我处理的是批量工单数据,所以单次聊天、非流式输出就够用了。
# 用 Python 代码发送 POST 请求
def ollama_chat1(prompt):
import requests
# 定义API的URL
url = "http://localhost:11434/api/generate"
# 定义请求的数据
data = {
"model": "qwen2:0.5b",
"prompt": prompt,
"stream": False
}
# 发送POST请求
response = requests.post(url, json=data)
# 处理响应
if response.status_code == 200:
# print("------------------")
# print(response.json()["response"])
return response.json()["response"]
else:
print(f"Error: {response.status_code}")
return ""
# 直接运行 curl 命令
def ollama_chat2():
# 运行命令
import subprocess,json
curl_command = """
curl http://localhost:11434/api/generate -d '{
"model": "Qwen1.5-14B",
"prompt":"给我讲讲量子计算的基本原理。",
"stream": false
}'
"""
curl_command = """
curl http://localhost:11434/api/chat -d '{
"model": "qwen2:0.5b",
"messages": [
{ "role": "user", "content": "why is the sky blue?" }
],
"stream": false
}'
"""
process = subprocess.run(curl_command, shell=True, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 检查命令是否成功执行
if process.returncode == 0:
# 获取命令的标准输出
response = process.stdout
else:
# 获取命令的错误输出
response = process.stderr
# 打印结果
print("打印输出结果:")
data = json.loads(response)
response = data["response"]
# 打印提取的内容
print(response)
顺带谈一下工单检查任务中我写 prompt 的一些经验。
1、考虑到成本问题,像 deepseek 之类的带 CoT 就没必要了。输入10个字,输出1000字,很浪费时间。我是用 Qwen1.5 做第一遍过滤,Qwen2.5 做进一步思考,这样整个流程会快一些。
2、Qwen1.5 这种不带 CoT 的,prompt 不能写的太隐晦。最好是易于理解的,用直白的话让 LLM 像查词典一样知道该怎么做决定。比如符合什么条件的,就视为合格。还有数字处理问题,可以把60分、90分换成“合格”、“优秀”之类的词汇。需要复杂分析的,可以交给 Qwen2.5 之类带 CoT 的。
3、不带 CoT 的提示词如果过长,可以参考该文章优化。更像人脑的新型注意力机制,Meta让大模型自动屏蔽任务无关信息,准确率提高27%...
带 CoT 的提示词的写法可以参考微信公众号 澄然prompter 的文章:Deepseek学会人性本恶后太狠了!连律师都沉默