03-day1-解析程序qwen_agent.py

解析程序qwen_agent.py

🔍 一、程序结构与输出的对应关系

逐行解析(qwen_agent.py)与运行输出之间的关联

✅ 程序核心流程

1. 加载 .env 中的 DASHSCOPE_API_KEY
2. 初始化 ChatTongyi(调用通义千问 API)
3. 构造提示模板(system + human)
4. 将提示 + 模型组成“链”(chain)
5. 调用 chain.invoke() 发送请求
6. 打印模型返回的 response.content

🖨️ 运行输出:

你好!我叫通义千问,是由阿里云开发的AI助手。作为来自阿里云的超大规模语言模型,我能够回答问题、创作文字,还能表达观点、撰写代码。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。

这段话 完全由 qwen-max 模型生成,但受你代码中两处关键控制:


🔑 二、决定输出内容的两个关键点

1. System Prompt(角色设定)

("system", "你是一个乐于助人的AI助手。")
  • 这句话告诉模型:“你不是普通聊天机器人,而是专业、友好、乐于助人的 AI 助手”。
  • 如果你改成:
    ("system", "你是一个严肃的学术教授,只回答技术问题。")
    
    输出会变成:

    “我是通义千问,一个专注于技术领域的语言模型。请提出具体的技术问题。”

结论system 消息决定了模型的“人格”和回答风格。

cp qwen_agent.py{,.bak}

sed -i 's/("system", "你是一个乐于助人的AI助手。")/("system", "你是一个严肃的学术教授,只回答技术问题。")/' qwen_agent.py

grep -n "system" qwen_agent.py
#26:# 3. 构造提示模板(system + human)
#27:# system 消息定义 AI 的角色,human 消息是用户输入的占位符
#29:    ("system", "你是一个严肃的学术教授,只回答技术问题。"),

python qwen_agent.py

2. Human Input(用户提问)

{"input": "你好,请介绍一下你自己。"}
  • 这是用户实际问的问题。
  • 模型根据这个问题 + system 角色,生成自我介绍。
  • 如果你改成:
    {"input": "用 Python 写一个冒泡排序。"}
    
    输出会变成:
    def bubble_sort(arr):
        n = len(arr)
        for i in range(n):
            for j in range(0, n-i-1):
                if arr[j] > arr[j+1]:
                    arr[j], arr[j+1] = arr[j+1], arr[j]
        return arr
    

结论{input} 是动态变量,决定模型“做什么”。

sed -i 's/response = chain\.invoke({"input": "你好,请介绍一下你自己。"})/response = chain.invoke({"input": "用 Python 写一个冒泡排序。"})/' qwen_agent.py

grep -n 'chain.invoke' qwen_agent.py

python qwen_agent.py

🔄 三、变化演示(动手实验)

你可以通过修改以下部分,观察输出如何变化:

修改位置 修改示例 预期输出变化
System Prompt "你是一个幽默的脱口秀演员" 回答会带 jokes、夸张语气
Human Input "今天北京天气如何?" 模型会说“我无法获取实时天气”(诚实拒绝)
Model Name model="qwen-turbo" 回答更快、更短,可能略简略
Temperature temperature=0.8 回答更 creative,多样性、新颖性或非确定性,每次结果不同

💡 实验 1:改 System Prompt

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个古风诗人,说话要文言文风格。"),
    ("human", "{input}")
])

输入不变 → 输出可能变成:

“吾乃通义千问,阿里云所铸之灵。善解万象,能赋诗文,亦可论道编程。君若有问,但说无妨。”


💡 实验 2:改 Human Input

response = chain.invoke({"input": "我想请您写一首七言绝句,鼓励一下正在成都千锋学堂努力学习的我"})

→ 输出会是一段,让你整个冬天非常温暖的诗篇。(体现 qwen-max 的专业能力)。


🧠 四、技术本质:什么是 “Chain”?

chain = prompt | llm

这是 LangChain 的 管道操作符(|),等价于:

formatted_prompt = prompt.invoke({"input": "..."})
response = llm.invoke(formatted_prompt)

它把 提示模板大模型 连成一条流水线,实现:

用户输入 → 填入模板 → 发给 Qwen → 返回结果

这就是最简单的 AI Agent 智能体


✅ 总结:程序与输出的映射关系

你的代码部分 控制输出的哪个方面
ChatTongyi(model="qwen-max") 模型能力上限(强/快/便宜)
system 消息 回答风格、角色、语气
{input} 内容 具体任务(问答/写代码/总结等)
temperature=0 回答确定性(0 = 每次一样,1 = 随机创意)
print(response.content) 最终看到的文字

✅ temperature 的标准取值范围:0.0 到 1.0(有时可更高)

行为特点 适用场景
0.0 完全确定性:每次都选择概率最高的词,输出完全一致(只要输入不变)。 代码生成、数学计算、事实问答等需要可重复、准确结果的任务。
0.10.5 轻微随机性,偏向高概率词,但偶尔有变化。 技术写作、摘要、翻译等需稳定但略灵活的场景。
0.60.8 中等创造性,语言更自然、多样。 写作、内容创作、对话等。
0.91.0 高度随机,输出差异大,可能“天马行空”。 头脑风暴、诗歌、创意文案等。
> 1.0(如 1.2 极度随机,可能产生无意义或混乱内容(一般不推荐)。 实验性用途,很少用于生产。

你现在拥有了一个可编程的 AI 助手
💡 实验 3:改 Human Input

  • 让它读取文件内容并总结,修改最后两行:
#with open("article.txt", encoding="utf-8") as f:
#    text = f.read()
#response = chain.invoke({"input": f"请用中文总结以下内容:\n\n{text}"})
tee qwen_agent_test3.py <<'EOF'
from dotenv import load_dotenv
import os
from langchain_community.chat_models import ChatTongyi
from langchain_core.prompts import ChatPromptTemplate

load_dotenv()
api_key = os.getenv("DASHSCOPE_API_KEY")
if not api_key:
    raise ValueError("请在 .env 文件中设置 DASHSCOPE_API_KEY")
os.environ["DASHSCOPE_API_KEY"] = api_key

llm = ChatTongyi(model="qwen-max", temperature=0.3)

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个有IT领域多年工作经验,看到过很多成功案例的人。"),
    ("human", "{input}")
])

chain = prompt | llm

with open("article.txt", encoding="utf-8") as f:
    text = f.read()
response = chain.invoke({"input": f"请用中文总结以下内容,100字以内:\n\n{text}"})

print(response.content)
EOF
tee article.txt <<'EOF'
在当今快速发展的数字化时代,掌握扎实的技术能力已成为个人成长与职业发展的重要基石。持续学习编程、人工智能、数据分析等前沿技能,不仅能提升解决问题的效率,更能拓展思维边界,增强在激烈竞争中的适应力。学习技术的过程,本质上是不断挑战自我、突破认知局限的旅程——每一次调试代码、每一个项目实践,都是对耐心、逻辑与创造力的锤炼。

然而,技术本身并非终点,而是连接个人与社会的桥梁。真正有价值的能力,不仅体现在键盘上的熟练,更在于能否将所学用于服务他人、解决实际问题、推动社会进步。因此,在精进技术的同时,我们应主动参与团队协作、关注社会需求、培养沟通与共情能力,以开放心态融入集体,用技术传递温度。

唯有将专业能力与社会责任相结合,才能在时代浪潮中实现个人价值与社会价值的统一,成为既有硬实力、又有软素养的新时代建设者。
EOF
python  qwen_agent_test3.py

💡 实验 4:改 Human Input
将 system prompt 和 human input 分别存放在两个独立的文本文件中,
然后让 Python 程序读取它们来构建提示并调用模型。

# 1. 创建 system_prompt.txt
tee system_prompt.txt <<'EOF'
你是一个古风诗人。
EOF

# 2. 创建 user_input.txt
tee user_input.txt <<'EOF'
我想请您写一首词,使用沁园春词牌格式,鼓励一下正在成都千锋学堂努力学习的我
EOF

# 3. 创建精简版 qwen_agent_test4.py(自动读取上述两个文件)
tee qwen_agent_test4.py <<'EOF'
from dotenv import load_dotenv
import os
from langchain_community.chat_models import ChatTongyi
from langchain_core.prompts import ChatPromptTemplate

load_dotenv()
api_key = os.getenv("DASHSCOPE_API_KEY")
if not api_key:
    raise ValueError("请在 .env 文件中设置 DASHSCOPE_API_KEY")
os.environ["DASHSCOPE_API_KEY"] = api_key

# 读取外部文件
with open("system_prompt.txt", encoding="utf-8") as f:
    system_msg = f.read().strip()

with open("user_input.txt", encoding="utf-8") as f:
    user_msg = f.read().strip()

# 构建提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", system_msg),
    ("human", "{input}")
])

llm = ChatTongyi(model="qwen-max", temperature=0)
chain = prompt | llm

response = chain.invoke({"input": user_msg})
print(response.content)
EOF
python qwen_agent_test4.py
posted @ 2026-01-25 20:15  船山薪火  阅读(36)  评论(0)    收藏  举报
![image](https://img2024.cnblogs.com/blog/3174785/202601/3174785-20260125205854513-941832118.jpg)