llm 基本案例实现
基于 Ollama本地部署调用方式
POST请求调用:
import requestsresponse = requests.post("http://localhost:11434/api/generate",json={"model": "qwen3","prompt": "你好,你是?","stream": False,}
)
print(response.json()['response'])
langchain 调用
from langchain_community.llms import Ollama# 配置远程 Ollama
llm = Ollama(base_url="http://localhost:11434", # 远程地址model="qwen3",temperature=0.7
)print(llm.invoke("你好"))
在线调用llm 实现
from openai import OpenAI
import os
from dotenv import load_dotenv# 1. 加载 .env 文件
load_dotenv() # 默认加载当前目录下的 .env 文件# 2. 读取 API Key
# 从当前.env 文件读取格式: API_KEY=xxx
api_key = os.getenv("API_KEY")
client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com")response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "system", "content": "You are a helpful assistant"},{"role": "user", "content": "Hello"},],stream=Falseprint(response.choices[0].message.content)# 运行结果:
Hello! How can I assist you today? 😊
主要参数说明:
主要参数用法:
model 指定模型名称
messages 对话列表
role 角色, system,user, assistant, 默认 assistant
system 系统角色 指导AI的行为
eg: {"role": "system", "content": "你是一位严谨的数学老师,用简洁的语言回答问题"}
user 用户角色 代表用户输入的指令,触发内容
assistant 助手角色 记录AI之前的回复,在多轮对话中用到 content 消息内容
stream 是否流式输出,默认否
max_token 限制响应的最大token 数量
temperature (0-2) 值越高越有创意,值越低越保守
top_p (0,1) 采样参数, 值越大越有创意,值越小越保守
(temperature和top_p二者关系: 先从 temperature 调整所有词的概率分布,再通过top_p中截取最有可能的候选词集合)
frequency_penalty (-2.0,2.0) 正值减少重复内容出现的概率
presence_penalty 正值增加谈论新话题的概率
多轮对话实现:
response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "user", "content": "10+10等于多少"},],
)answer1 = response.choices[0].message.contentresponse = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "user", "content": "10+10等于多少"},{"role": "user", "content": "再加10,输出总结果"},{"role": "assistant", "content": answer1},],
)
print(response.choices[0].message.content)
基本案例实现:
主要落尽: 检索本地文件文本 -> 增强信息提示 -> 大模型回答
from openai import OpenAI
import os
from dotenv import load_dotenv
from pathlib import Path# 1. 加载 .env 文件
load_dotenv() # 默认加载当前目录下的 .env 文件# 2. 读取 API Key
api_key = os.getenv("API_KEY")
client = OpenAI(api_key=api_key, base_url="https://api.deepseek.com")# 1. 检索
def retrieval(query):context = ""# 读文件path_list= list(Path("../knowledge_file").glob('*.txt'))for path in path_list:if path.stem in query:#找到相关内容context += path.read_text(encoding='utf-8')context += "\n"return context# 2. 结合上下文内容增强prompt提示
def augmented(query,context=""):if not context:return f"直接回答下面问题:{query}"prompt= f"""结合上下文信息来回答问题。如果不能判断,直接说:"我无法回答你的问题"上下文:{context}问题:{query}"""return prompt# llm 回答
def generation(prompt):response = client.chat.completions.create(model="deepseek-chat",messages=[{"role": "user", "content": prompt},],)print(response.choices[0].message.content)if __name__ == "__main__":query= "普通感冒"context=retrieval(query)prompt =augmented(query,context)response= generation(prompt)print(response)