石筋 發表於 2025-12-4 00:09:00

python调用大模型api来进行对话

<p>一、Openai的接口调用</p>
<p>pip包下载</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">pip install openai
</pre>
</div>
<p>  </p>
<p>配置sk,url</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">OPENAI_API_KEY = sk-xxxxx
OPENAI_BASE_URL = https://api.openai.com/v1
</pre>
</div>
<p>  </p>
<p>  </p>
<p>接口调用</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">import os
from flask import Flask, jsonify
from openai import OpenAI

config = configparser.ConfigParser()
config.read("config.cfg", encoding="utf-8")

OPENAI_API_KEY = config.get("default", "OPENAI_API_KEY", fallback=None)
OPENAI_BASE_URL = config.get("default", "OPENAI_BASE_URL", fallback=None)

@app.route("/gpt_test")
def gpt_test():
    """
    简单调用一次 GPT,返回一个固定问题的回答
    """
    if not OPENAI_API_KEY:
      return jsonify({"error": "OPENAI_API_KEY 未配置"}), 500

    try:
      # 这里用的是 chat.completions.create 风格
      resp = client.chat.completions.create(
            model="gpt-4.1-mini",# 或者你有的任意模型,比如 gpt-4.1, gpt-4o 等
            messages=[
                {"role": "system", "content": "你是一个简洁回答的助手。"},
                {"role": "user", "content": "简单用一句话介绍一下你自己。"},
            ],
      )
      answer = resp.choices.message.content
      return jsonify({"answer": answer})
    except Exception as e:
      print("GPT 调用异常:", repr(e))
      return jsonify({"error": str(e)}), 500
</pre>
</div>
<p>  </p>
<p>  </p>
<p>&nbsp;二、阿里通义</p>
<p>安装官方sdk</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">pip install dashscope
</pre>
</div>
<p>  </p>
<p>使用dashscope.Generation.call基本可以复用</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">ALIYUN_API_KEY = config.get("default", "ALIYUN_API_KEY", fallback=None)
    @app.route("/llm_test/")
    def llm_test():
      """测试与大模型的对话功能"""
      try:
            messages = [
                {'role': 'system', 'content': 'You are a helpful assistant.'},
                {'role': 'user', 'content': '你是谁?'}
            ]
            answer = chat_with_model(messages)
            return jsonify({"answer": answer})
      except Exception as e:
            print("LLM error:", repr(e))
            return jsonify({"error": str(e)}), 500
</pre>
</div>
<p>  </p>
<p>  </p>
<p>&nbsp;这里有几类模型id都可以使用:</p>
<ul>
<li>qwen3-max</li>
<li><span data-spm-anchor-id="a2c4g.11186623.0.i6.6c2e47f8VkFggo">qwen-plus</span></li>
<li><span data-spm-anchor-id="a2c4g.11186623.0.i6.6c2e47f8VkFggo"><span data-spm-anchor-id="a2c4g.11186623.0.i7.6c2e47f8VkFggo">qwen-turbo</span></span></li>
</ul>
<p>参考:阿里云百炼</p>
<p>如果需要使用到prompt,比如我们有路径app/prompt_store/底下的prompt文件:doc-llm-latest.md</p>
<p>首先按照字符串处理的思路,先读取出来:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">from pathlib import Path

# run.py 所在目录
BASE_DIR = Path(__file__).resolve().parent
PROMPT_DIR = BASE_DIR / "app" / "prompt_store"
PROMPT_LATEST_FILE = PROMPT_DIR / "doc-llm-latest.md"


def load_latest_prompt() -&gt; str | None:
    """读取 doc-llm-latest.md 的内容"""
    try:
      with PROMPT_LATEST_FILE.open("r", encoding="utf-8") as f:
            return f.read()
    except FileNotFoundError:
      print(f" Prompt file not found: {PROMPT_LATEST_FILE}")
      return None
    except Exception as e:
      print(f" Failed to read prompt: {e!r}")
      return None
</pre>
</div>
<p> </p>
<p>然后message格式补充</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">@app.route("/llm_with_prompt/")
def llm_with_prompt():
        """使用最新的Prompt与大模型对话"""
        prompt = load_latest_prompt()
        if not prompt:
                return jsonify({"error": "No prompt available"}), 500
        try:
                messages = [
                        {
                                'role': 'system',
                                'content': prompt
                        },
                        {
                                'role': 'user',
                                'content': "请用一两句话,概括一下这个文档测试规范的核心目标。"
                        }
                ]
                answer = chat_with_model(messages)
                return jsonify({"answer": answer})
       
        except Exception as e:
                print("LLM with prompt error:", repr(e))
                return jsonify({"error": str(e)}), 500
</pre>
</div>
<p>  </p>
<p>我们将llm对话能力函数封装起来,提供一个类或者函数来调用</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;"># 统一管理大模型调用,提供配置
import configparser
from pathlib import Path
import dashscope

BASE_DIR = Path(__file__).resolve().parent.parent
CONFIG_FILE = BASE_DIR / "config.cfg"

config = configparser.ConfigParser()
config.read(CONFIG_FILE, encoding="utf-8")

ALIYUN_API_KEY = config.get("default", "ALIYUN_API_KEY", fallback=None)
ALIYUN_MODEL = config.get("default", "ALIYUN_MODEL")


def init_llm():
    """在Flask启动时调用一次,设置api_key"""
    if not ALIYUN_API_KEY:
      print(" No ALIYUN_API_KEY configured in config.cfg")
    dashscope.api_key = ALIYUN_API_KEY


def chat_with_model(messages: list) -&gt; str:
    """调用大模型进行对话

    Args:
      messages (list): 消息列表,格式参考OpenAI Chat API

    Returns:
      str: 模型回复内容
    """
    if not ALIYUN_API_KEY:
      raise ValueError("No ALIYUN_API_KEY configured")

    response = dashscope.Generation.call(
      model=ALIYUN_MODEL,
      messages=messages,
    )
    print(f"raw response: {response}")
    answer = response["output"]["choices"]["message"]["content"]
    return answer
</pre>
</div>
<p>  </p>
<p>  </p>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/xiaojp65536/p/19304439
頁: [1]
查看完整版本: python调用大模型api来进行对话