This commit is contained in:
2025-11-02 03:28:10 +08:00
parent 27ca869b55
commit 47e3cbe0de
3 changed files with 97 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
OPENAI_API_KEY=xxx
DASHSCOPE_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1

View File

@@ -0,0 +1,34 @@
import langchain_openai
from langchain_core.prompts import ChatPromptTemplate
import dotenv
import os
# 加载环境变量包含API密钥
dotenv.load_dotenv()
# 创建聊天模型
llm = langchain_openai.ChatOpenAI(
api_key=os.getenv("OPENAI_API_KEY"), # 从环境变量获取 API 密钥
base_url=os.getenv("DASHSCOPE_BASE_URL"), # 指定 API 端点
model="qwen-plus", # 使用通义千问 Plus 模型
temperature=0.7, # 控制回复的随机性0-1越高越有创意
streaming=True, # 启用流式模式
)
# 创建简单的提示词模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个友好的聊天助手。"), # 系统角色设定
("human", "{question}") # 用户输入占位符
])
# 创建处理链
chain = prompt | llm # 使用管道操作符连接组件
# 使用 stream() 实现流式输出
for chunk in chain.stream({"question": "你好"}):
print(chunk.content, end="", flush=True)
print() # 换行
# # 非流式输出
# response = chain.invoke({"question": "你好"})
# print(response.content)

View File

@@ -0,0 +1,61 @@
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain_community.chat_message_histories import ChatMessageHistory
# 加载 .env 中的 API 密钥等配置
load_dotenv()
# 初始化大模型
llm = ChatOpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url=os.getenv("DASHSCOPE_BASE_URL"),
model="qwen-plus",
temperature=0.7
)
# 定义带历史记录的提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个乐于助人的助手。"),
MessagesPlaceholder("history"), # 历史消息占位符
("human", "{input}") # 当前用户输入
])
# 创建基础链
chain = prompt | llm
# 内存存储:用字典模拟会话历史(仅用于演示)
store = {}
def get_session_history(session_id: str):
if session_id not in store:
store[session_id] = ChatMessageHistory()
return store[session_id]
# 包装成带记忆的链
chatbot = RunnableWithMessageHistory(
chain,
get_session_history,
input_messages_key="input",
history_messages_key="history",
)
def chat_with_agent(input_message, session_id):
print(f"用户: {input_message}")
print("助手: ", end="", flush=True)
for chunk in chatbot.stream(
{"input": input_message},
config={"configurable": {"session_id": session_id}} # 多轮对话(使用同一个 session_id
):
print(chunk.content, end="", flush=True)
print("\n\n---\n")
chat_with_agent(input_message='一句话解释下人工智能。', session_id="user_001")
chat_with_agent(input_message='我们都聊了什么?', session_id="user_001")
chat_with_agent(input_message='我们都聊了什么?', session_id="user_002")
chat_with_agent(input_message='我们都聊了什么?', session_id="user_001")