hello agents 学习记录
·
hello agents 学习
本博客仅为个人学习记录与理解分享,非商业用途,所有代码与文档版权归原项目及其贡献者所有。github开源项目
一、FirstAgentTest——简化版ReAct
1.执行路线

2.重点理解
2.1 system_prompt
系统提示词非常重要,输出格式要求与后续编写代码判断是否调用工具,调用哪个工具,是否结束任务息息相关;
AGENT_SYSTEM_PROMPT = """
你是一个智能旅行助手。你的任务是分析用户的请求,并使用可用工具一步步地解决问题。
# 可用工具:
- `get_weather(city: str)`: 查询指定城市的实时天气。
- `get_attraction(city: str, weather: str)`: 根据城市和天气搜索推荐的旅游景点。
# 输出格式要求:
你的每次回复必须严格遵循以下格式,包含一对Thought和Action:
Thought: [你的思考过程和下一步计划]
Action: [你要执行的具体行动]
Action的格式必须是以下之一:
1. 调用工具:function_name(arg_name="arg_value")
2. 结束任务:Finish[最终答案]
# 重要提示:
- 每次只输出一对Thought-Action
- Action必须在同一行,不要换行
- 当收集到足够信息可以回答用户问题时,必须使用 Action: Finish[最终答案] 格式结束
请开始吧!
"""
2.2 user_prompt
用户提示词要按步骤写清晰:第一步:先查询天气,第二步:再根据天气推荐景点;
user_prompt = "你好,请帮我查询一下今天武汉的天气,然后根据天气推荐一个合适的旅游景点。"
2.3 prompt_history
- prompt_history是使用列表.append()方法来实现短期记忆的,后续长期记忆要通过向量数据库 + 嵌入检索(RAG)实现;
- 注意,prompt_history要存大模型自己的输出,这里有Thought,指导后面怎么做;还要存工具输出结果,逐步完善答案。
prompt_history.append(llm_output) # 添加大模型输出的结果
prompt_history.append(observation_str) # 添加工具调用的返回结果
2.4 输出结果
- 从Thought可以看出LLM将目标拆解为可执行的子任务的规划过程。
- 要存llm_output(Thought、Action),原因(qwen3-max说的):“ReAct 论文显示,加入 Thought 可使复杂任务准确率提升 30%+”。
- 每次循环只会执行一个工具,两个的工具使用有一个顺序关系。

二、赛博小镇
1.配置问题
- 在config.py文件中加上下面两行,加载所有配置,这样LLM(仅限当前config.py文件)、qdrant、neo4j都可以读到.env文件中的配置。
"""配置文件"""
import os
from typing import Optional
"""加上这两行"""
from dotenv import load_dotenv
load_dotenv()
class Settings:
"""应用配置"""
- 代码中有两处是无参调用LLM的:
self.llm = HelloAgentsLLM(),因为HelloAgentsLLM源码无参情况下会优先查询是否属于openai的模型,不会优先读取环境变量LLM_API_KEY等,而我的openai环境变量配置的还是百炼平台的(直接删或者修改都要重启电脑才生效),所以决定直接将所有无参调用的地方都改为有参的。需要修改的有两处:batch_generator.py和agents.py初始化代码处。
batch_generator.py
from config import settings
class NPCBatchGenerator:
"""批量生成NPC对话的生成器
核心思路: 一次LLM调用生成所有NPC的对话,降低API成本和延迟
"""
def __init__(self):
"""初始化批量生成器"""
print("🎨 正在初始化批量对话生成器...")
try:
# 显式传参
llm_config = {
"model": settings.LLM_MODEL_ID,
"api_key": settings.LLM_API_KEY,
"base_url": settings.LLM_BASE_URL,
"provider": "modelscope"
}
self.llm = HelloAgentsLLM(**llm_config)
agents.py
from config import settings
class NPCAgentManager:
"""NPC Agent管理器 - 支持记忆功能"""
def __init__(self):
"""初始化所有NPC Agent"""
print("🤖 正在初始化NPC Agent系统...")
try:
llm_config = {
"model": settings.LLM_MODEL_ID,
"api_key": settings.LLM_API_KEY,
"base_url": settings.LLM_BASE_URL,
"provider": "modelscope"
}
self.llm = HelloAgentsLLM(**llm_config)
- 嵌入模型选择local,先要安装sentence-transformers工具库,再在python中下载all-MiniLM-L6-v2嵌入模型。
pip install sentence-transformers
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
- 注意:main.py启动时,all-MiniLM-L6-v2嵌入模型会自动向
https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2/resolve/main/processor_config.json发送检查更新,要把它关了,在.env文件中添加TRANSFORMERS_OFFLINE=1配置。
TRANSFORMERS_OFFLINE=1 # 跳过所有网络检查步骤,添加此行
EMBED_MODEL_TYPE="local"
解决完这些配置,就可以正常运行了
02:56:49 - 💬 对话开始: 王五 <-> 玩家
02:56:49 - ============================================================
02:56:49 - 📝 玩家消息: 你好啊
02:56:49 - 💖 当前好感度: 50.0/100 (友好)
Batches: 100%|███████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 3.81it/s]
02:56:50 - 🧠 检索到0条相关记忆
02:56:50 - 🤖 正在生成回复...
02:57:14 - 💬 王五回复: 你好呀!我刚把最后一处细节打磨好,来这儿小憩。这杯咖啡的香气刚好,要一起坐会儿吗?
02:57:14 - 📊 正在分析好感度变化...
02:57:28 - 📈 好感度变化: 50.0 -> 52.0 (+2.0)
02:57:28 - 原因: 友好问候
02:57:28 - 情感: positive
💾 对话已保存到王五的记忆中
02:57:28 - 💾 对话已保存到王五的记忆中
02:57:28 - ============================================================
02:57:28 - ✅ 对话完成
2.执行路线
更多推荐


所有评论(0)