1. 環境変数を変更する1.1 リモートアクセスを構成するollamaをローカルにデプロイすると、ローカルアクセスのみサポートされます。環境変数を変更することで、他のユーザーがリモートからアクセスできるようになります。 Windows コンピューターに環境変数を追加します。 OLLAMA_HOST 0.0.0.0:11434 1.2 ローカルモデルパスを構成する1.2.1 ローカルモデルのデフォルトパス Windows のローカル モデルのデフォルト パスは、C:\Users\%username%\.ollama\models です。 ここで、%username% は現在ログインしているユーザー名です。例えば、ユーザー名が Smqnz の場合、モデルファイルのデフォルトの保存パスは C:\Users\Smqnz\.ollama\models になります。 たとえば、私のコンピューター: C:\Users\admin\.ollama\models 1.2.2 ローカルモデルのデフォルトパスを変更する Windows で環境変数を追加します。 OLLAMA_MODELS 你想要存放的路径 以下は変更例です。 変更後、ollama を再起動します。 1.3 許可されたHTTPリクエストソースを構成する OLLAMA_ORIGINS は、Ollam の環境変数で、クロスオリジンリソース共有 (CORS) の設定に使用されます。この変数は、Ollam が提供する API サービスにアクセスできるソース (ドメイン、IP アドレスなど) を指定します。 任意のソース (IP) からの HTTP リクエストを受け入れるようにしたい場合は、* に設定する必要があります。 OLLAMA_ORIGINS * 上記で変更した環境変数名は大文字にする必要があることに注意することが重要です。勝手に変更しないでください。 II. よく使われるOllama APIリクエスト通常は、コマンドライン ウィンドウを開いて直接通信できます。 しかし、この方法は開発者にとって現実的ではありません。一般的に、OllamaのAPIを介してアクセスし、開発を行う必要があります。この記事では、Ollamaの一般的なAPIについて詳しく説明します。 2.1 テキスト生成API Ollamaは豊富なテキスト生成インターフェースを提供しており、ユーザーはローカルにデプロイされたモデルを簡単に操作できます。以下は、Ollamaの主なテキスト生成インターフェースと機能の紹介です。 API パス: POST /api/generate 機能: モデルにプロンプトを送信し、テキスト応答を生成します。 リクエストパラメータ: model: モデル名(例:「deepseek-r1:7b」)。 prompt: 入力されたプロンプトテキスト。 stream: ストリーミング出力を有効にするかどうか。デフォルトは false です。 オプション: オプションのパラメータ。以下が含まれます: temperature: 生成されるテキストの多様性を制御します。その値は通常 0 から 1 の間です。 max_tokens: 生成できるトークンの最大数。 top_p: Top-p サンプリング パラメータ。 import requests # Ollama 服务的URL url = "http://localhost:11434/api/generate" # 请求数据data = { "model": "deepseek-r1:8b", # 指定模型名称"prompt": "你好,请简单介绍一下Python语言的特点。", # 输入的提示词"stream": False, # 是否启用流式响应"options": { # 可选参数"temperature": 0.7, # 温度参数,控制生成内容的随机性"max_tokens": 100 # 最大生成长度} } # 发送POST 请求response = requests.post(url, jsnotallow=data) # 检查响应状态if response.status_code == 200: result = response.json() print("生成的文本:", result.get("response")) else: print("请求失败,状态码:", response.status_code) print("错误信息:", response.text) 2.2 会話型チャットAPI APIパス: POST /api/chat 機能: マルチターンダイアログをサポートし、モデルはコンテキストを記憶します。 リクエストパラメータ: model: モデル名。 メッセージ: ユーザー入力とモデル応答を含むメッセージのリスト。形式は {"role": "user", "content": "user input content"} です。 stream: ストリーミング出力を有効にするかどうか。デフォルトは false です。 options: テキスト生成インターフェースに似たオプションのパラメーター。 import requests import json # 设置请求的URL和端口url = "http://localhost:11434/api/chat" # 设置请求的数据data = { "model": "deepseek-r1:8b", # 模型名称"messages": [ {"role": "system", "content": "你现在是一名合格的售票员,你还可以随意生成一些航班路线提供给用户,请扮演好您的角色。"}, {"role": "user", "content": "你好,我想订一张机票。"}, {"role": "assistant", "content": "好的,请问您要去哪里?"}, {"role": "user", "content": "我要去北京。"}, {"role": "user", "content": "有哪些航班可选?"} ], "stream": False # 是否启用流式输出} # 设置请求头headers = { "Content-Type": "application/json" } # 发送POST请求response = requests.post(url, headers=headers, data=json.dumps(data)) # 检查响应状态码if response.status_code == 200: # 解析响应内容result = response.json() # 输出模型的回复内容print("模型回复:", result.get("message").get("content")) else: # 打印错误信息print(f"请求失败,状态码:{response.status_code}") print("错误信息:", response.text) III. OllamaとOpenAIのリクエストの互換性 3.1 シングルターンダイアログfrom openai import OpenAI client = OpenAI( base_url="http://localhost:11434/v1", # Ollama默认API地址api_key="test" # 必填字段但会被忽略,随便填写即可) response = client.chat.completions.create( model="deepseek-r1:8b", # 替换为已下载的模型名称messages=[ {"role": "system", "content": "你是一个有帮助的助手"}, {"role": "user", "content": "用50字解释量子计算"} ], temperature=0.7, max_tokens=1024 ) print(response.choices[0].message.content)
3.2 複数ラウンドの対話from openai import OpenAI def run_chat_session(): client = OpenAI( base_url="http://localhost:11434/v1/", api_key="test" # 必填但会被忽略) chat_history = [] while True: user_input = input("用户:") if user_input.lower() == "exit": print("AI:对话结束") break chat_history.append({"role": "user", "content": user_input}) try: response = client.chat.completions.create( messages=chat_history, model="deepseek-r1:8b" # 替换成你安装的模型名称) ai_response = response.choices[0].message.content print(f"AI:{ai_response}") chat_history.append({"role": "assistant", "content": ai_response}) except Exception as e: print(f"错误:{e}") if __name__ == "__main__": run_chat_session()
ご覧のとおり、マルチターンのダイアログでは、質問と回答のリストを維持することで、コンテキストの意味を効果的に理解できます。 |