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
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平台提供的大模型服務:
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/ # 圖處理相關
框架的核心組件包括:
- Agent組件:負責智能體的整體行為管理
- Controller組件:處理用户輸入和智能體輸出
- Component組件:可插拔的功能模塊
- Memory組件:對話狀態和上下文管理
- 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大模型進行了回覆:
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個示例問題,然後等待用户輸入:
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渲染,大幅提升了視覺效果。
6. 總結
openJiuwen Agent Core是一個功能強大、設計優雅的智能體開發框架。通過"親親育兒寶"育兒助手的構建過程,我們看到了該框架在以下方面的顯著優勢:
- 易用性:簡潔的API設計,開發者可以快速上手
- 靈活性:支持多種配置和擴展方式,適應不同需求
- 專業性:提供企業級的功能和穩定性
- 可擴展性:組件化架構便於功能擴展和維護
在實際應用中,openJiuwen展現出了以下特點:
- 快速開發:通過標準化的配置和組件,可以快速構建功能完整的智能體
- 靈活部署:支持多種部署方式,適應不同的生產環境
- 穩定運行:經過優化的架構設計,確保了系統的穩定性和可靠性
隨着AI技術的不斷髮展,openJiuwen Agent Core為開發者提供了構建專業級智能應用的強大工具。無論是育兒助手、客服系統、專業諮詢平台還是企業級應用,openJiuwen都能提供可靠的技術支持。
通過本文的詳細介紹,我們希望讀者能夠深入瞭解openJiuwen Agent Core的核心功能和實際應用場景,為自己的項目選擇合適的技術方案。框架的設計哲學是"簡單而強大",既能讓初學者快速上手,也能滿足專業開發者的需求。
openJiuwen的未來發展前景廣闊,隨着AI技術的不斷進步和開發者社區的壯大,它將成為智能體開發領域的重要工具之一。對於希望構建專業級AI應用的開發者來説,openJiuwen無疑是一個值得深入學習和使用的優秀框架。
如需瞭解更多關於openJiuwen的最新動態、技術文檔和社區支持,請訪問:
- 項目地址:https://atomgit.com/openJiuwen/agent-core
- 官方網站:https://www.openjiuwen.com