1. 引言

在AI技術快速發展的今天,智能助手在各個領域都發揮着越來越重要的作用。特別是在育兒領域,隨着0-3歲嬰幼兒養育需求的日益增長,新手父母常常面臨以下挑戰:

  • 餵養指導:母乳餵養、輔食添加、營養搭配等
  • 睡眠管理:建立規律作息、哄睡技巧、夜醒處理等
  • 健康護理:日常護理、常見疾病、生長髮育等
  • 早教啓蒙:親子互動、遊戲活動、認知發展等

傳統的育兒知識獲取渠道存在信息分散、質量參差不齊等問題。通過AI智能助手,我們可以提供個性化、專業化的育兒指導,幫助父母科學育兒,更好地照顧寶寶。

openJiuwen Agent Core作為一款先進的智能體開發框架,提供了完整的解決方案來構建這樣的專業助手。本文將通過構建"親親育兒寶"育兒助手的完整過程,詳細介紹如何使用openJiuwen框架開發專業級智能應用。openJiuwen Agent Core項目為開源項目,開發者可以訪問以下資源:

  • 項目地址:https://atomgit.com/openJiuwen/agent-core
  • 官方網站:https://www.openjiuwen.com

通過訪問項目地址,您可以獲取最新源代碼、文檔和示例;通過官網可以瞭解最新動態、技術文檔和社區支持。

2. 環境搭建

在開始開發openJiuwen智能體之前,我們需要搭建開發環境。

2.1 系統要求

openJiuwen Agent Core對系統環境有以下要求:

  • 操作系統:Windows、macOS、Linux
  • Python版本:Python 3.8或更高版本
  • 內存:建議4GB或更多
  • 存儲空間:至少2GB可用空間

2.2 創建虛擬環境

建議使用虛擬環境來管理項目依賴:

# 創建虛擬環境
python -m venv openjiuwen_env

# 激活虛擬環境
# 在Linux/macOS:
source openjiuwen_env/bin/activate
# 在Windows:
openjiuwen_env\Scripts\activate

2.3 安裝openJiuwen Agent Core

從項目倉庫安裝openJiuwen Agent Core:

# 克隆項目(從GitCode獲取)
git clone https://gitcode.com/openJiuwen/agent-core.git

# 進入項目目錄
cd agent-core

# 安裝依賴
pip install -e .

或者,如果項目已發佈到PyPI:

pip install openjiuwen-agent-core

2.4 驗證安裝

創建一個簡單的測試文件來驗證安裝:

# test_install.py
from openjiuwen.agent.chat_agent import ChatAgent

print("openJiuwen Agent Core 安裝成功!")

運行測試:

python test_install.py

深入探索OpenJiuwen Agent Core:構建專業育兒助手的完整指南_智能體

2.5 配置API密鑰

根據使用的模型提供商配置兼容OPENAI api的信息,目前主流的大模型供應商(如DeepSeek、Kimi、阿里雲、硅基流動等等)都有提供,大家可以自由選擇。

# 使用兼容OPENAI的的API信息
export API_BASE="https://your-provider-api.com/v1/"
export API_KEY="your-api-key"
export MODEL_NAME="your-model-name"
export MODEL_PROVIDER="your-provider"

如下圖所示,我使用的iflow平台提供的大模型服務:

深入探索OpenJiuwen Agent Core:構建專業育兒助手的完整指南_人工智能_02

3. openJiuwen Agent Core架構概覽

項目採用分層架構設計,主要包括:

  • SDK接口層:為開發者提供Python SDK接口,覆蓋Agent實例創建、工作流設計與編排、大模型調用等
  • Agent引擎:針對ReAct智能交互與工作流自動跳轉場景,通過構建Agent控制器支撐複雜任務規劃

3.1 核心組件結構

openjiuwen/
├── agent/                    # Agent相關實現
│   ├── llm_agent/           # LLM Agent (ReAct風格)
│   ├── react_agent/         # ReAct Agent (精簡版)
│   ├── workflow_agent/      # 工作流 Agent
│   ├── chat_agent.py        # 聊天 Agent
│   └── common/              # 公共定義
├── agent_group/             # Agent組管理
├── agent_builder/           # Agent構建工具
├── core/                    # 核心功能模塊
│   ├── agent/              # Agent核心基類和控制器
│   ├── component/          # 工作流組件
│   ├── context_engine/     # 上下文引擎
│   ├── graph/              # 圖執行引擎
│   ├── memory/             # 內存管理
│   ├── retrieval/          # 檢索系統
│   ├── runner/             # 執行器
│   ├── runtime/            # 運行時環境
│   ├── stream/             # 流處理
│   ├── stream_actor/       # 流處理參與者
│   ├── tracer/             # 追蹤器
│   ├── utils/              # 工具類
│   └── workflow/           # 工作流
└── graph/                  # 圖處理相關

框架的核心組件包括:

  1. Agent組件:負責智能體的整體行為管理
  2. Controller組件:處理用户輸入和智能體輸出
  3. Component組件:可插拔的功能模塊
  4. Memory組件:對話狀態和上下文管理
  5. Tool組件:外部工具和服務集成
# openJiuwen框架的基本組件結構
class Agent:
    def __init__(self, config):
        self.config = config
        self.components = {}
        self.memory = None
        self.tools = []
    
    async def invoke(self, inputs):
        # 處理用户輸入並返回結果
        pass

class Component:
    def __init__(self, config):
        self.config = config
    
    async def execute(self, inputs):
        # 執行組件邏輯
        pass

3.2 配置管理系統

openJiuwen採用分層配置管理,支持從環境變量到代碼配置的多級配置覆蓋:

# 配置管理示例
from openjiuwen.core.component.common.configs.model_config import ModelConfig
from openjiuwen.core.utils.llm.base import BaseModelInfo

# 創建模型配置
model_config = ModelConfig(
    model_provider=MODEL_PROVIDER,  # 模型提供商
    model_info=BaseModelInfo(
        model=MODEL_NAME,           # 模型名稱
        api_base=API_BASE,          # API基礎URL
        api_key=API_KEY,            # API密鑰
        temperature=0.7,            # 温度參數
        top_p=0.9,                  # top_p參數
        timeout=30,                 # 超時時間
    ),
)

3.3 工具集成系統

框架提供了靈活的工具集成機制,支持外部API和自定義工具的無縫集成:

# 工具集成示例
def build_my_tool():
    from openjiuwen.core.component.tool_comp import ToolComponent
    
    # 創建查詢工具
    my_tool = ToolComponent(
        name="MyToolReporter",
        description="獲取信息",
        func=call_mytool_api,
        parameters={
            "type": "object",
            "properties": {
                "info": {
                    "type": "string",
                    "description": "描述信息"
                }
            },
            "required": ["info"]
        }
    )
    return my_tool

4. 構建"親親育兒寶"智能體

4.1 環境大模型API

首先,我們需要配置基本的環境變量和導入必要的依賴。這裏,我們主要設置大模型API key,用於後續的agent創建。

import os
import sys
import asyncio
from datetime import datetime
from typing import Dict, Any

# 從環境變量獲取API配置,如果不存在則使用默認值
API_BASE = os.getenv("API_BASE", "https://apis.xxx.cn/v1/")  # API基礎URL
API_KEY = os.getenv("API_KEY", "xxxxxxxx")  # API密鑰
MODEL_NAME = os.getenv("MODEL_NAME", "chatgpt")  # 模型名稱
MODEL_PROVIDER = os.getenv("MODEL_PROVIDER", "openai")  # 模型提供商

4.2 智能體創建與配置

使用openJiuwen的配置系統創建智能體,這是整個應用的核心部分。主要是創建模型配置、指定大模型人設、創建LLM調用配置,最後基於ChatAgent和上述配置創建一個聊天類的Agent實例

def create_baby_care_agent():
    """
    創建親親育兒寶智能體
    """
    # 導入必要的模塊
    from openjiuwen.agent.chat_agent import create_chat_agent_config, ChatAgent
    from openjiuwen.agent.config.base import LLMCallConfig
    from openjiuwen.core.component.common.configs.model_config import ModelConfig
    from openjiuwen.core.utils.llm.base import BaseModelInfo
    
    # 創建模型配置,定義AI模型的基本參數
    model_config = ModelConfig(
        model_provider=MODEL_PROVIDER,  # 模型提供商
        model_info=BaseModelInfo(
            model=MODEL_NAME,           # 模型名稱
            api_base=API_BASE,          # API基礎URL
            api_key=API_KEY,            # API密鑰
            temperature=0.7,            # 控制輸出的隨機性
            top_p=0.9,                  # 控制輸出的多樣性
            timeout=30,                 # 請求超時時間
        ),
    )
    
    # 創建LLM調用配置,包含詳細的育兒專家角色設定
    system_prompt = [
        {
            "role": "system", 
            "content": """你是親親育兒寶,一位經驗豐富的育兒專家,專門為新手父母提供實用的育兒建議和解決方案。
            
【角色設定】
- 你是一位專注於0-3歲嬰幼兒養育指導的虛擬育兒助手
- 由一羣資深育兒專家共同開發,具備豐富的育兒知識和經驗
- 性格温柔耐心、科學嚴謹、富有同情心
- 語言風格温和親切,使用簡單易懂的語言,避免過於專業的術語

【專業領域】
- 餵養指導:母乳餵養、輔食添加、營養搭配
- 睡眠管理:建立規律作息、哄睡技巧、夜醒處理
- 健康護理:日常護理、常見疾病、生長髮育
- 早教啓蒙:親子互動、遊戲活動、認知發展
- 情感支持:理解新手父母的焦慮和困惑,提供鼓勵和信心

【輸出要求】
- 提供詳細、實用的育兒建議,涵蓋餵養、睡眠、健康等方面
- 回答問題時需簡潔明瞭,避免冗長的解釋
- 使用鼓勵和支持性的語言,增強父母的信心
- 使用結構化的輸出方式,增強閲讀體驗
- 對於特定醫療問題,建議父母諮詢專業醫生

【能力限制】
- 雖然能夠提供廣泛的育兒建議,但對於特定醫療問題,建議父母諮詢專業醫生
- 保持更新最新的育兒研究和趨勢,確保提供的信息始終是最新和最科學的

請以温暖、專業、支持性的態度回答用户關於育兒的問題。"""
        }
    ]
    
    # 定義用户輸入的模板
    user_prompt = [{"role": "user", "content": "{{query}}"}]
    
    # 創建LLM調用配置
    llm_call_config = LLMCallConfig(
        model=model_config,             # 模型配置
        system_prompt=system_prompt,    # 系統提示詞
        user_prompt=user_prompt         # 用户輸入模板
    )
    
    # 創建Agent配置,定義智能體的基本信息
    agent_config = create_chat_agent_config(
        agent_id="baby_care_assistant",     # 智能體ID
        agent_version="0.1.0",              # 智能體版本
        description="親親育兒寶 - 專業的0-3歲嬰幼兒養育指導助手",  # 描述
        model=llm_call_config               # 模型配置
    )
    
    # 返回配置好的ChatAgent實例
    return ChatAgent(agent_config)

實際運行效果如下所示,可以看到智能體順利調用AI大模型進行了回覆:

深入探索OpenJiuwen Agent Core:構建專業育兒助手的完整指南_Agent_03

4.3 交互式用户界面設計

openJiuwen支持創建豐富的交互式界面,讓用户能夠與智能體進行自然的對話:

async def run_baby_care_agent():
    """
    運行親親育兒寶智能體
    """
    print("🚀 初始化親親育兒寶智能體...")
    
    try:
        # 創建智能體實例
        agent = create_baby_care_agent()
        print("✅ 親親育兒寶智能體創建成功!")
        
        # 顯示示例問題,幫助用户瞭解如何使用
        print("\n📋 以下是一些常見的育兒問題示例:")
        examples = [
            "寶寶晚上總是夜醒,怎麼辦?",
            "如何給寶寶添加輔食?",
            "新生兒一天應該睡多久?",
            "寶寶哭鬧不止,可能是什麼原因?",
            "如何培養寶寶的閲讀習慣?"
        ]
        
        # 打印示例問題
        for i, example in enumerate(examples, 1):
            print(f"   {i}. {example}")
        
        # 提示用户可以開始輸入問題
        print("\n💬 現在您可以輸入您的育兒問題,輸入 'quit' 或 'exit' 退出諮詢。")
        print("-" * 50)
        
        # 主循環:持續接收用户輸入並返回智能體回覆
        while True:
            try:
                # 獲取用户輸入
                user_input = input("\n👶 請輸入您的育兒問題: ").strip()
                
                # 檢查退出命令
                if user_input.lower() in ['quit', 'exit', '退出', 'q']:
                    print("\n👋 感謝使用親親育兒寶,祝您和寶寶健康快樂!")
                    break
                
                # 驗證輸入有效性
                if not user_input:
                    print("⚠️  請輸入有效的問題")
                    continue
                
                # 顯示用户問題並調用智能體
                print(f"\n--- 您的問題: {user_input} ---")
                result = await agent.invoke({"query": user_input})
                
                # 使用響應渲染工具格式化輸出
                from response_renderer import display_formatted_response
                display_formatted_response(result, "👶 親親育兒寶回覆")
                
            except KeyboardInterrupt:
                # 處理鍵盤中斷(Ctrl+C)
                print("\n\n👋 感謝使用親親育兒寶,祝您和寶寶健康快樂!")
                break
            except Exception as e:
                # 處理其他異常
                print(f"❌ 執行諮詢時出錯: {str(e)}")
                print("💡 請再試一次或聯繫技術支持")
        
    except Exception as e:
        # 處理創建智能體時的異常
        print(f"❌ 創建育兒智能體時出錯: {str(e)}")
        import traceback
        traceback.print_exc()

如下圖所示,親親育兒寶智能體創建成功後,會展示5個示例問題,然後等待用户輸入:

深入探索OpenJiuwen Agent Core:構建專業育兒助手的完整指南_openJiuwen_04

5. 高級功能實現

5.1 Markdown響應渲染

為了提升用户體驗,我們實現了智能的Markdown響應渲染功能,將AI返回的格式化文本以更友好的方式展示:

import json
import re
from typing import Dict, Any, Union

def render_markdown(text: str) -> str:
    """
    渲染Markdown格式的文本,轉換為更友好的顯示格式
    """
    # 處理標題(支持不同層級,添加適當的縮進和格式)
    # 使用更精確的正則表達式匹配標題
    text = re.sub(r'(^|\n)#### (.+?)(\n|$)', r'\1    • \2\3', text)
    text = re.sub(r'(^|\n)### (.+?)(\n|$)', r'\1   • \2\3', text)
    text = re.sub(r'(^|\n)## (.+?)(\n|$)', r'\1••• \2 •••\3', text)
    text = re.sub(r'(^|\n)# (.+?)(\n|$)', r'\1••••• \2 •••••\3', text)
    
    # 處理粗體格式,將**text**轉換為【text】
    text = re.sub(r'\*\*(.+?)\*\*', r'【\1】', text)
    
    # 處理列表格式,將數字列表和短橫線列表轉換為項目符號
    text = re.sub(r'\n\d+\.\s+', r'\n• ', text)  # 數字列表轉為項目符號
    text = re.sub(r'\n-\s+', r'\n• ', text)     # 短橫線列表轉為項目符號
    
    # 處理分隔線,將---和===轉換為視覺分隔線
    text = re.sub(r'---', r'\n────────────────────────────────────────\n', text)
    text = re.sub(r'===', r'\n═════════════════════════════════════════════════\n', text)
    
    # 處理特殊符號,保持表情符號的完整性
    text = re.sub(r'❤️', '❤️', text)
    text = re.sub(r'🌟', '🌟', text)
    text = re.sub(r'💡', '💡', text)
    text = re.sub(r'👶', '👶', text)
    text = re.sub(r'✅', '✅', text)
    text = re.sub(r'☀️', '☀️', text)
    text = re.sub(r'🌤️', '🌤️', text)
    text = re.sub(r'🤖', '🤖', text)
    text = re.sub(r'🔍', '🔍', text)
    text = re.sub(r'📌', '📌', text)
    
    return text

def parse_agent_response(response: Union[Dict, str]) -> str:
    """
    解析智能體的響應,提取output字段內容
    """
    # 如果響應是字符串,嘗試解析為JSON
    if isinstance(response, str):
        try:
            response = json.loads(response)
        except json.JSONDecodeError:
            return response
    
    # 如果響應是字典,嘗試從不同可能的鍵中提取內容
    if isinstance(response, dict):
        for key in ['output', 'result', 'content', 'message', 'text']:
            if key in response:
                return response[key]
        
        # 如果沒有找到特定鍵,返回整個字典的字符串表示
        return str(response)
    
    # 如果都不是,返回字符串表示
    return str(response)

def format_response_for_display(response: Union[Dict, str]) -> str:
    """
    格式化智能體響應以供顯示
    """
    # 解析響應
    parsed_text = parse_agent_response(response)
    
    # 渲染Markdown
    rendered_text = render_markdown(parsed_text)
    
    # 清理多餘的空白行
    lines = rendered_text.split('\n')
    cleaned_lines = []
    prev_was_empty = False
    
    for line in lines:
        line = line.strip()
        if not line:
            if not prev_was_empty:
                cleaned_lines.append(line)
                prev_was_empty = True
        else:
            cleaned_lines.append(line)
            prev_was_empty = False
    
    return '\n'.join(cleaned_lines)

def display_formatted_response(response: Union[Dict, str], title: str = "智能體回覆"):
    """
    顯示格式化後的響應
    """
    formatted = format_response_for_display(response)
    print(f"\n{title}:")
    print("=" * 50)
    print(formatted)
    print("=" * 50)

5.2 智能體響應解析

openJiuwen的響應結構化處理機制確保了輸出的一致性和可預測性:

def parse_agent_response(response: Union[Dict, str]) -> str:
    """
    解析智能體的響應,提取output字段內容
    
    Args:
        response: 智能體的原始響應(字典或JSON字符串)
        
    Returns:
        解析後的文本內容
    """
    # 如果響應是字符串,嘗試解析為JSON
    if isinstance(response, str):
        try:
            response = json.loads(response)
        except json.JSONDecodeError:
            return response
    
    # 如果響應是字典,嘗試從不同可能的鍵中提取內容
    if isinstance(response, dict):
        # 嘗試從不同可能的鍵中提取內容
        for key in ['output', 'result', 'content', 'message', 'text']:
            if key in response:
                return response[key]
        
        # 如果沒有找到特定鍵,返回整個字典的字符串表示
        return str(response)
    
    return str(response)

如下圖所示,是經過高級功能改造之後的智能體運行效果,可以看到成功從大模型response中解析出了真正的內容,並進行了簡單的markdown渲染,大幅提升了視覺效果。

深入探索OpenJiuwen Agent Core:構建專業育兒助手的完整指南_openJiuwen_05

6. 總結

openJiuwen Agent Core是一個功能強大、設計優雅的智能體開發框架。通過"親親育兒寶"育兒助手的構建過程,我們看到了該框架在以下方面的顯著優勢:

  1. 易用性:簡潔的API設計,開發者可以快速上手
  2. 靈活性:支持多種配置和擴展方式,適應不同需求
  3. 專業性:提供企業級的功能和穩定性
  4. 可擴展性:組件化架構便於功能擴展和維護

在實際應用中,openJiuwen展現出了以下特點:

  • 快速開發:通過標準化的配置和組件,可以快速構建功能完整的智能體
  • 靈活部署:支持多種部署方式,適應不同的生產環境
  • 穩定運行:經過優化的架構設計,確保了系統的穩定性和可靠性

隨着AI技術的不斷髮展,openJiuwen Agent Core為開發者提供了構建專業級智能應用的強大工具。無論是育兒助手、客服系統、專業諮詢平台還是企業級應用,openJiuwen都能提供可靠的技術支持。

通過本文的詳細介紹,我們希望讀者能夠深入瞭解openJiuwen Agent Core的核心功能和實際應用場景,為自己的項目選擇合適的技術方案。框架的設計哲學是"簡單而強大",既能讓初學者快速上手,也能滿足專業開發者的需求。

openJiuwen的未來發展前景廣闊,隨着AI技術的不斷進步和開發者社區的壯大,它將成為智能體開發領域的重要工具之一。對於希望構建專業級AI應用的開發者來説,openJiuwen無疑是一個值得深入學習和使用的優秀框架。

如需瞭解更多關於openJiuwen的最新動態、技術文檔和社區支持,請訪問:

  • 項目地址:https://atomgit.com/openJiuwen/agent-core
  • 官方網站:https://www.openjiuwen.com