
用 HelloAgents 框架從零構建智能故事生成器基于《從零開始構建智能體》項目實戰指南【免費下載鏈接】hello-agents 《從零開始構建智能體》——從零開始的智能體原理與實踐教程項目地址: https://gitcode.com/GitHub_Trending/he/hello-agents本文以開源倉庫《從零開始構建智能體》hello-agents中的共創項目「laoyouf-aistory」為藍本完整講解如何基于 HelloAgents 框架搭建一個支持小說 / 劇本 / 詩歌三種文體、自定義主題與風格的故事生成智能體。讀完本文你將掌握SimpleAgent、HelloAgentsLLM、Tool、ToolParameter、ToolRegistry五個核心組件的使用方式理解定義工具 → 注冊工具 → 裝配智能體 → 交互生成的完整開發鏈路并能獨立復現或擴展出一個屬于自己的創作類 Agent。一、項目定位與核心能力laoyouf-aistory 是 hello-agents 倉庫中的共創項目之一其定位是一個智能故事小說 / 劇本 / 詩歌生成器。根據項目 README 的描述它解決的核心問題是根據用戶輸入的文體、主題、風格生成對應文體的故事內容特色功能是支持自定義文體、主題與風格三要素的自由組合適用場景為娛樂創作。項目本體由三個文件組成文件作用README.md項目簡介、技術棧與快速開始說明main.ipynb核心實現內含快速演示與完整版五步流程requirements.txt依賴聲明hello-agents[all]0.2.7從技術架構上看這是一個典型的單 Agent 單工具范式Agent 本身不直接調用大模型寫故事而是通過一個自定義的StoryGeneratorTool工具把用戶傳入的文體、主題、風格三要素組裝成提示詞再交給HelloAgentsLLM完成生成。這種把能力封裝為工具、由 Agent 統一調度的設計正是 HelloAgents 框架的核心思想。二、環境準備與快速開始2.1 環境要求根據 README.md 與 notebook 內核信息本項目運行環境要求如下Python 3.10notebook 實際使用內核為 Python 3.10.19Jupyter Lab / Notebook用于運行main.ipynb一個兼容 OpenAI 接口的 LLM 服務項目示例使用 ModelScope 的 Qwen 模型2.2 安裝依賴項目依賴極簡僅有一個核心聲明pip install -r requirements.txt其中 requirements.txt 的內容為# 核心依賴 hello-agents[all]0.2.7即安裝hello-agents框架的完整功能集[all]extra版本不低于 0.2.7。2.3 配置 API 密鑰README 建議通過.env文件管理密鑰# 創建.env文件 cp .env.example .env # 編輯.env文件填入你的API密鑰需要說明的是當前倉庫的 aistory 目錄中并未包含.env.example文件目錄下僅有 README、main.ipynb、requirements.txt 三個文件因此需要你根據下面介紹的環境變量自行創建。HelloAgents 框架遵循參數優先、環境變量兜底的設計見 core/llm.py本項目用到的核心環境變量有四個環境變量含義本項目取值示例LLM_MODEL_ID模型名稱Qwen/Qwen2.5-72B-InstructLLM_API_KEYAPI 密鑰以ms-開頭的 ModelScope 密鑰請務必替換為你自己的密鑰LLM_BASE_URL服務地址https://api-inference.modelscope.cn/v1/LLM_TIMEOUT請求超時秒默認 6060?? 注意notebook 中明文寫入了示例密鑰這是演示用途的寫法。真實使用時應將密鑰放入.env文件或系統環境變量切勿在公開代碼中硬編碼密鑰。LLM_API_KEY如果以ms-開頭框架會自動識別為 ModelScope 提供商見 core/llm.py 的 provider 自動檢測邏輯。2.4 運行項目# 啟動Jupyter Notebook jupyter lab # 打開main.ipynb并運行打開 main.ipynb 后有兩種體驗路徑快速體驗只運行「第 0 部分」通過交互式輸入完成一次故事生成完整功能依次運行第 14 部分體驗完整的故事生成流程在第 4 部分修改generate_story()的參數嘗試不同故事類型。三、快速演示三行輸入生成一個故事第 0 部分面向想快速了解項目能力的讀者流程分四步。第一步交互式收集三要素。notebook 使用input()依次詢問故事類型、主題與風格# 選擇故事類型小說/劇本/詩歌 story_type input(請輸入故事類型小說/劇本/詩歌: ) # 輸入故事主題 theme input(請輸入故事主題: ) # 選擇故事風格 style input(請輸入故事風格: )第二步導入庫并配置 LLM 環境變量配置項見 2.3 節代碼略SimpleAgent、HelloAgentsLLM均從hello_agents包導入工具相關類從hello_agents.tools導入。第三步定義并注冊故事生成工具、創建 Agentfrom hello_agents import ToolRegistry quick_registry ToolRegistry() quick_registry.register_tool(StoryGeneratorTool()) # 創建智能體 agent SimpleAgent( name故事生成助手, llmHelloAgentsLLM(), system_prompt你是經驗豐富的故事創作者能夠根據用戶提供的參數生成不同類型的故事內容。請確保故事符合要求的類型、主題和風格并保持內容的連貫性和創意性。, tool_registryquick_registry )第四步調用 Agent 生成故事story agent.run(f請根據以下參數生成一個故事\n- 類型{story_type}\n- 主題{theme}\n- 風格{style}) print(story)可見快速版與完整版共享同一套組件區別僅在于快速版把系統提示詞寫為一行字符串而完整版提供了結構更豐富、包含文體指導細則的多行系統提示詞。這也印證了 HelloAgents 中SimpleAgent的system_prompt是塑造 Agent 行為的關鍵旋鈕這一設計取向。四、完整版拆解五步構建故事生成智能體完整版以第 1 部分第 5 部分的漸進結構展開下面逐部分解讀。4.1 第 1 部分環境配置與快速版相同通過os.environ寫入LLM_MODEL_ID、LLM_API_KEY、LLM_BASE_URL、LLM_TIMEOUT四個環境變量。這是 HelloAgents 框架的標準化配置入口——HelloAgentsLLM在初始化時若不顯式傳參會自動從這些環境變量讀取模型、密鑰、服務地址與超時時間。4.2 第 2 部分定義故事生成工具這是全項目的核心。StoryGeneratorTool繼承自框架的Tool抽象基類需要實現run()與get_parameters()兩個抽象方法# 定義故事生成工具 class StoryGeneratorTool(Tool): def __init__(self): super().__init__(namestory_generator, description根據用戶輸入生成不同類型的故事內容) def run(self, parameters: Dict[str, Any]) - str: # 獲取用戶輸入參數 story_type parameters.get(type, 小說) theme parameters.get(theme, 奇幻冒險) style parameters.get(style, 輕松幽默) # 構造提示詞 prompt f生成一個{story_type}主題是{theme}風格為{style}。 # 添加類型特定的指導 if story_type 小說: prompt 請使用小說格式以第三人稱敘述包含完整的情節發展和人物描寫。 elif story_type 劇本: prompt 請使用劇本格式包含場景描述、角色對話和動作指示。 elif story_type 詩歌: prompt 請使用詩歌格式注意押韻和節奏感。 # 調用LLM生成故事 llm HelloAgentsLLM() response llm.generate_text(prompt, max_tokens1024) return response def get_parameters(self) - List[ToolParameter]: return [ ToolParameter(nametype, typestring, description故事類型小說/劇本/詩歌, requiredTrue), ToolParameter(nametheme, typestring, description故事主題, requiredTrue), ToolParameter(namestyle, typestring, description故事風格, requiredTrue) ]這段實現體現了一個值得借鑒的技巧工具內部做文體分派。它沒有讓 LLM 自行猜測小說該怎么寫而是由代碼顯式地為每種文體追加格式約束小說用第三人稱敘述、劇本要場景與動作指示、詩歌講押韻節奏從而大幅提升輸出格式的穩定性。這是提示工程中結構化約束優于自由發揮原則的典型應用。從框架層面看ToolParameter是一個 Pydantic 模型字段包括name參數名、type類型、description描述、required是否必填默認True、default默認值見 tools/base.py。Tool基類還額外提供了validate_parameters()校驗必填參數是否齊全與to_dict()轉為字典便于序列化或生成工具描述兩個實用方法見 tools/base.py。4.3 第 3 部分創建智能體完整版將系統提示詞升級為多行版本把任務拆解為四條指令并給出文體細則system_prompt 你是一位經驗豐富的故事創作者能夠根據用戶提供的參數生成不同類型的故事內容。 你的任務是 1. 根據用戶指定的故事類型小說/劇本/詩歌生成相應格式的內容 2. 確保故事符合用戶指定的主題和風格 3. 保持故事的連貫性和創意性 4. 根據需要使用預設的故事元素庫 生成故事時請注意 - 小說以第三人稱敘述包含完整的情節發展和人物描寫 - 劇本使用標準劇本格式包含場景描述、角色對話和動作指示 - 詩歌注意押韻和節奏感使用生動的意象和比喻 請直接輸出生成的故事內容無需添加任何額外說明或解釋。 # 導入工具注冊表 from hello_agents import ToolRegistry # 創建工具注冊表 tool_registry ToolRegistry() tool_registry.register_tool(StoryGeneratorTool()) # 創建智能體 agent SimpleAgent( name智能故事生成器, llmHelloAgentsLLM(), system_promptsystem_prompt, tool_registrytool_registry )這里有兩層值得說明的機制ToolRegistry 是 Agent 的能力清單。在 HelloAgents 的實現中ToolRegistry內部維護_toolsTool 對象與_functions函數式工具兩個字典支持register_tool()、register_function()、get_tool()、execute_tool()、list_tools()、get_tools_description()等操作注冊同名工具時會有已存在將被覆蓋的警告見 tools/registry.py。SimpleAgent 會自動看見工具。當 Agent 配置了tool_registry且enable_tool_callingTrue時_get_enhanced_system_prompt()會把注冊表中的工具描述追加到系統提示詞中并同時注入工具調用格式說明見 agents/simple_agent.py。這意味著你每多注冊一個工具Agent 的系統提示詞都會同步膨脹一份能力清單——工具即能力注冊即曝光。4.4 第 4 部分生成并展示三類故事完整版把生成動作封裝為generate_story()函數參數以字典形式傳入并拼裝為用戶消息def generate_story(agent, parameters): # 生成故事 story agent.run(f請根據以下參數生成一個故事\n{, .join([f- {k}: {v} for k, v in parameters.items()])}) # 返回故事內容 return story隨后分別用三組參數驗證三種文體# 小說參數 novel_parameters { type: 小說, theme: 魔法森林中的冒險, style: 輕松幽默 } print( 生成小說示例 ) novelStory generate_story(agent, novel_parameters) print(novelStory) # 劇本參數 script_parameters { type: 劇本, theme: 拯救被困的朋友, style: 懸疑緊張 } # ...生成并打印劇本... # 詩歌參數 poem_parameters { type: 詩歌, theme: 彩虹山的美景, style: 浪漫溫馨 } # ...生成并打印詩歌...三個示例恰好覆蓋了三要素的不同取值組合小說/劇本/詩歌 × 冒險/營救/美景 × 幽默/懸疑/浪漫驗證了任意文體、主題、風格自由組合的項目核心能力。4.5 第 5 部分總結與展望notebook 以一份開發復盤收尾可作為后續迭代路線圖已實現的功能? 環境配置與 LLM 模型設置? 小說 / 劇本 / 詩歌三種故事類型生成? 根據用戶指定主題和風格定制故事內容? 交互式參數輸入和故事生成遇到的挑戰確保不同故事類型格式的準確性和合適的文本內容量字數處理不同風格故事的語言特點未來改進方向擴展故事元素庫增加更多角色、地點和情節支持用戶自定義故事元素添加故事優化功能如語法檢查和風格統一實現多語言故事生成支持添加故事可視化功能如場景圖或角色關系圖五、源碼級原理Agent 是如何把寫故事跑起來的前面提到本項目的 Agent 被注入了story_generator工具。要理解整條鏈路可以回到 HelloAgents 的SimpleAgent.run()實現見 agents/simple_agent.py組裝消息把增強后的系統提示詞含工具描述與調用格式、歷史消息、當前用戶消息按system / user / assistant順序構造成消息列表調用 LLMself.llm.invoke(messages)得到模型回復解析工具調用_parse_tool_calls()用正則\[TOOL_CALL:([^:]):([^\]])\]掃描回復中的工具調用標記執行工具_execute_tool_call()從注冊表取出 Tool 對象經_parse_tool_parameters()完成參數解析與類型轉換支持 JSON、keyvalue逗號分隔、單參數直傳三種形式見 agents/simple_agent.py后調用tool.run(param_dict)回填結果繼續對話工具執行結果以工具執行結果為前綴拼入消息繼續下一輪迭代直到模型不再輸出工具調用為止默認最大max_tool_iterations3輪。映射到本項目就是用戶說生成一個小說主題是魔法森林中的冒險風格為輕松幽默 → Agent 決定調用story_generator→ 工具把三要素組裝成提示詞并追加文體指導 →HelloAgentsLLM生成故事文本 → 結果回填給 Agent → Agent 輸出最終故事。此外HelloAgents 的工具執行層還內置了參數容錯機制ToolRegistry.execute_tool()會嘗試多種方式解析參數——JSON 直通、尾部多余]的容錯、數組包裹對象、錯位尾括號、括號匹配提取首個 JSON 對象等見 tools/registry.py并在工具只有一個必填參數時自動把原始文本映射到該參數。這些兜底設計顯著降低了 LLM 輸出格式漂移導致的工具調用失敗率也是本項目StoryGeneratorTool可以穩定被調用的底層保障。六、LLM 接入的靈活性不止于 ModelScope雖然本項目示例使用 ModelScope 的Qwen/Qwen2.5-72B-Instruct但 HelloAgents 的HelloAgentsLLM是兼容 OpenAI 接口的統一客戶端。從源碼core/llm.py可以看到其支持的 provider 類型包括openai、deepseek、qwen、modelscope、kimi、zhipu、ollama、vllm、local、autoprovider 的識別順序為特定提供商環境變量如OPENAI_API_KEY、DASHSCOPE_API_KEY、MODELSCOPE_API_KEY等→ API 密鑰格式ms-開頭識別為 ModelScope→ base_url 判斷 → 默認通用配置見 core/llm.py。因此如果你想改用其他模型通常只需調整四個LLM_*環境變量即可無縫切換例如本地部署時可將 base_url 指向 Ollama 或 vLLM 的服務地址。這意味著本項目的工具 提示詞資產可以低成本復用到不同模型上方便做生成質量的橫向對比實驗。七、總結從本項目能帶走什么laoyouf-aistory 是一個麻雀雖小、五臟俱全的 HelloAgents 入門范例它完整演示了框架開發的核心閉環一個自定義工具通過繼承Tool實現run()與get_parameters()把生成故事這一領域能力封裝成可被 Agent 調度的原子操作一次注冊裝配ToolRegistry.register_tool()SimpleAgent(tool_registry...)一行注冊、一處裝配一份精心設計的提示詞系統提示詞承擔角色定義與文體規范工具內提示詞承擔格式約束雙層提示協同保證輸出質量一次交互驗證用小說、劇本、詩歌三組參數跑通全鏈路。對于想進一步實踐 HelloAgents 的讀者可以參考倉庫中更完整的框架實現YYHDBL-HelloCodeAgentCli含 SimpleAgent 完整實現、工具注冊表、統一 LLM 接口以及 code/chapter4 中的經典范式代碼。在此基礎上你可以沿著 notebook 第 5 部分列出的方向繼續演進——增加故事元素庫、支持用戶自定義元素、添加多語言支持甚至把工具從生成擴展為生成 潤色 配圖的多工具協作從而逐步搭建一個功能更完整的創作型 Agent 平臺?!久赓M下載鏈接】hello-agents 《從零開始構建智能體》——從零開始的智能體原理與實踐教程項目地址: https://gitcode.com/GitHub_Trending/he/hello-agents創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考