agentV2 / model.py
drewli20200316's picture
AgentV2: Medical AI Agent with multi-route RAG
e45316c
import os
from openai import OpenAI
from langchain.embeddings.base import Embeddings
from dotenv import load_dotenv
# 加载 .env 文件中的环境变量, 隐藏 API Keys
load_dotenv()
# ============================================================
# 模型1: 嵌入模型, 采用 OpenAI text-embedding-3-small
# ============================================================
class OpenAIEmbeddings(Embeddings):
"""基于 OpenAI Embedding API 的自定义嵌入类"""
def __init__(self):
self.client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
def embed_documents(self, texts):
embeddings = []
for text in texts:
response = self.client.embeddings.create(
model="text-embedding-3-small",
input=[text],
)
embeddings.append(response.data[0].embedding)
return embeddings
def embed_query(self, text):
# 查询文档
return self.embed_documents([text])[0]
# ============================================================
# 模型2: 本地大语言模型, 通过 vLLM 服务 (OpenAI 兼容接口)
# 启动命令: vllm serve ./Qwen3-Next-80B-A3B-Thinking-AWQ-4bit --dtype auto --trust-remote-code --max-model-len 4096 --port 8000
# ============================================================
VLLM_MODEL_NAME = "./Qwen3-Next-80B-A3B-Thinking-AWQ-4bit"
VLLM_BASE_URL = "http://localhost:8000/v1"
def create_local_llm_client():
"""创建本地 vLLM 客户端 (OpenAI 兼容接口)"""
client = OpenAI(api_key="none", base_url=VLLM_BASE_URL)
return client
def generate_local_answer(client, question):
"""调用本地 vLLM 生成回答"""
response = client.chat.completions.create(
model=VLLM_MODEL_NAME,
messages=[
{"role": "system", "content": "你是一个能力非常强大的助手."},
{"role": "user", "content": question}
],
max_tokens=2048,
stream=False
)
return response.choices[0].message.content
# ============================================================
# 模型3: 远程大语言模型, 采用 ChatGPT (OpenAI API)
# ============================================================
def create_chatgpt_client():
"""创建 OpenAI ChatGPT 客户端"""
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
return client
def generate_chatgpt_answer(client, question):
"""调用 ChatGPT 生成回答"""
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是一个能力非常强大的助手."},
{"role": "user", "content": question}
],
stream=False
)
return response.choices[0].message.content
# ============================================================
# 测试入口
# ============================================================
if __name__ == "__main__":
# 测试本地 vLLM 模型
client = create_local_llm_client()
output = generate_local_answer(client, "你好啊,千与千寻")
print('-' * 50)
print(output)
# 测试远程 ChatGPT
#client = create_chatgpt_client()
#output = generate_chatgpt_answer(client, "你好啊,千与千寻")
#print('-' * 50)
#print(output)