openJiuwen Core是一款大模型应用的Python软件开发工具包,为运行在openJiuwen框架上的智能体提供高性能运行时。这款开发工具包不仅封装了Agent创建、工作流编排、大模型与工具调用等多层次、易上手的对外接口;还内置了支持异步IO、流式处理的高性能运行时,实现智能体的状态保存和中断接续;更配备了提示词自优化、提示词生成、全链路观测等一系列智能体调试调优工具。openJiuwen Core开发工具包兼顾灵活性与稳定性,助力开发者高效构建稳定的大模型应用。
开源地址:https://atomgit.com/openJiuwen/agent-core?utm_source=csdn
1. 智能影视助手项目概述
智能影视助手项目展示了AI技术在娱乐资讯领域的应用价值。通过openJiuwen Agent Core框架,成功构建了一个具备智能推荐、自然语言理解、个性化服务等能力的智能助手。
该助手能够:
- 接收用户自然语言查询
- 智能理解用户影视偏好
- 调用影视API获取热门资讯
- 以友好的Markdown格式返回结果
- 支持持续的交互式对话
2. openJiuwen Core框架介绍
openJiuwen Core是一款大模型应用的Python软件开发工具包,为运行在openJiuwen框架上的智能体提供高性能运行时。这款开发工具包不仅封装了Agent创建、工作流编排、大模型与工具调用等多层次、易上手的对外接口;还内置了支持异步IO、流式处理的高性能运行时,实现智能体的状态保存和中断接续;更配备了提示词自优化、提示词生成、全链路观测等一系列智能体调试调优工具。
openJiuwen Core开发工具包兼顾灵活性与稳定性,助力开发者高效构建稳定的大模型应用。
2.1 Agent编排能力
openJiuwen Core内置了两类预置智能体,功能丰富、开发灵活,可满足不同场景下的智能需求:
ReActAgent:
- 遵循ReAct(Reasoning + Action)规划范式
- 以思考→行动→观察的循环迭代完成任务
- 具备强大的多轮推理与自我修正能力
- 支持动态决策和环境适应
- 适用于需复杂推理、策略调整的多样化场景
WorkflowAgent:
- 专注多步骤任务导向的流程自动化
- 严格按照用户预定义流程高效执行复杂任务
- 能够随着用户意图的变更灵活切换任务
- 侧重于基于预设流程实现任务的规范化与高效化执行
- 适用于任务结构清晰、可拆解为多步骤的场景
2.2 高性能执行引擎
openJiuwen Core提供高性能执行引擎,支持分布式部署与低成本运行:
- 异步并行图执行器:具备组件并发执行、异步IO处理、结构化上下文管理能力,支持多工作流任务高效并行处理
- 组件基础能力:支持组件间流批一体传值、动态跳转、状态中断与恢复,提供组件动态配置与多实例管理
- 数据存储与流式处理:提供流式输出、组件间流式传输等数据管控能力,可对接外部存储系统实现智能体上下文数据外置
2.3 插件扩展能力
openJiuwen Core提供强大的插件扩展机制,支持灵活的功能扩展:
- Plugin Center:集中管理各类插件,支持插件的注册、查询、版本控制和依赖管理
- Runtime Loading Mechanism:支持插件的动态加载与卸载,无需重启服务即可更新功能
- 插件开发框架:提供统一的插件开发接口和规范,降低插件开发难度
2.4 智能LLM交互
openJiuwen Core优化了与大语言模型的交互方式,提升了智能体的表现能力:
- Prompt Management:提供完善的提示词管理系统,支持提示词模板化、版本控制和动态生成
- Prompt Optimization:内置提示词优化算法,提升大模型的理解能力和响应质量
- 多模型支持:兼容主流的大语言模型,如OpenAI、Anthropic、百度文心一言、阿里巴巴通义千问等
3. 环境准备与SDK安装
python环境准备:
# 创建python 虚拟环境(命名为'.venv'是常见约定)
python3 -m venv .myvenv
source .myvenv/bin/activate
#配置python的国内镜像源头
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
3.1 安装依赖
#SDK安装
pip install -U openjiuwen
pip install requests
3.2 配置API密钥
在代码中设置大模型配置信息:
import os
# 大模型配置信息,根据你的实际配置
os.environ.setdefault("API_BASE", "https://apis.iflow.cn/v1")
os.environ.setdefault("API_KEY", "your-api-key")
os.environ.setdefault("MODEL_PROVIDER", "OpenAI")
os.environ.setdefault("MODEL_NAME", "qwen3-32b")
os.environ.setdefault("LLM_SSL_VERIFY", "false")
4. 智能影视助手实现
4.1 项目结构
movie_assistant/
├── main.py # 主程序入口
└── requirements.txt # 项目依赖
4.2 核心代码实现
4.2.1 工具函数开发(影视API资源接口地址:http://49.235.52.102:8000/api/v1/hotmovie)
def build_movie_tool():
import requests
import json
def get_hot_movies(city: str = "北京", count: int = 10, start: int = 0):
"""获取热门影视资讯"""
try:
url = "http://49.235.52.102:8000/api/v1/hotmovie"
headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
payload = {
"city": city,
"count": count,
"start": start
}
response = requests.post(url, headers=headers, json=payload, timeout=10)
if response.status_code == 200:
data = response.json()
if data["code"] == 0:
return {
"success": True,
"data": data["data"],
"total": data["total"],
"title": data["title"]
}
else:
return {"error": f"API返回错误: {data.get('message', '未知错误')}"}
else:
return {"error": f"请求失败,状态码: {response.status_code}"}
except Exception as e:
return {"error": f"获取影视信息时发生错误: {str(e)}"}
from openjiuwen.core.utils.tool.function.function import LocalFunction
from openjiuwen.core.utils.tool.param import Param
return LocalFunction(
name="MovieReporter",
description="影视资讯查询插件,获取当前热门电影信息",
params=[
Param(name="city", description="查询城市,默认为北京", type="string", required=False),
Param(name="count", description="返回结果数量", type="integer", required=False),
Param(name="start", description="起始位置", type="integer", required=False),
],
func=get_hot_movies
)
4.2.2 智能体创建
def create_movie_agent():
from openjiuwen.core.utils.llm.base import BaseModelInfo
from openjiuwen.core.component.common.configs.model_config import ModelConfig
from openjiuwen.agent.react_agent import create_react_agent_config, ReActAgent
from datetime import datetime
# 1. 创建模型配置(保持不变)
# 2. 创建影视专用提示词模板
def build_prompt():
template = (
"你是智能影视助手,专注于提供最新电影资讯和推荐服务。\n"
"1. 默认查询当前热门电影;\n"
"2. 支持按城市查询当地热映影片;\n"
"3. 当用户要求推荐电影时,优先推荐评分8.0以上的佳作;\n"
"4. 对于新上映电影,需标注'新上映'标识;\n"
"5. 当用户询问具体电影信息时,需提供详细资讯;\n"
"6. 支持分页查询,每次返回10条结果。"
)
return [{"role": "system", "content": template}]
# 3. 创建Agent配置
agent_config = create_react_agent_config(
agent_id="movie_assistant",
agent_version="1.0.0",
description="Jiuwen 智能影视助手 - 提供最新电影资讯、评分和个性化推荐",
model=build_model(),
prompt_template=build_prompt(),
)
# 4. 创建ReAct Agent实例
movie_agent = ReActAgent(agent_config)
# 5. 添加影视查询工具
movie_agent.add_tools([build_movie_tool()])
return movie_agent
4.2.3 Markdown格式化输出
def format_movies_to_markdown(result):
"""将影视数据格式化为Markdown"""
if "error" in result:
return f"## 错误信息\n\n{result['error']}"
if not result.get("success"):
return "## 未获取到有效影视数据"
data = result["data"]
title = result.get("title", "热门电影推荐")
markdown = f"## {title}\n\n"
markdown += f"共 {result['total']} 部电影 | 当前展示 {len(data)} 部\n\n"
for movie in data:
# 生成豆瓣链接
douban_url = f"https://movie.douban.com/subject/{movie['id']}/"
markdown += f"### [{movie['title']}]({douban_url})\n"
markdown += f"\n\n"
markdown += f"- **评分**: {'暂无' if movie['rate'] == 0 else movie['rate']}\n"
markdown += f"- **类型**: {movie['genre'] or '未分类'}\n"
markdown += f"- **ID**: {movie['id']}\n\n"
markdown += "---\n"
return markdown
4.2.4 异步执行与交互界面
async def main():
movie_agent = create_movie_agent()
print("=== Jiuwen 智能影视助手 ===")
print("您好!我是您的影视资讯助手,可以为您推荐最新热门电影!")
print("提示:输入 '退出' 或 'quit' 结束对话\n")
while True:
try:
user_input = input("您想了解什么电影资讯? ")
if user_input.lower() in ['退出', 'quit', 'q']:
print("再见!期待下次为您推荐好电影。")
break
print("助手: 正在查询影视数据库...")
result = await movie_agent.invoke({"query": user_input})
formatted_result = format_movies_to_markdown(result)
print(f"\n{formatted_result}\n")
except KeyboardInterrupt:
print("\n感谢使用,再见!")
break
except Exception as e:
print(f"助手: 查询失败: {str(e)}")

5. ReActAgent在影视领域的应用
ReActAgent在影视助手中的工作原理:
5.1 智能推荐流程
- 意图识别:解析用户查询(如"最近有什么好看的动作片?")
- 参数适配:自动补全参数(类型→动作片,count=10)
- API调用:请求影视资讯API
- 结果过滤:按评分过滤推荐电影
- 个性化输出:生成带海报的Markdown结果
5.2 核心优势
- 动态分页:自动处理分页参数(start/count)
- 城市适配:根据用户位置推荐当地热映影片
- 评分优先:自动优先推荐高分电影
- 新片标识:自动标注新上映电影
6. 项目运行与测试
6.1 启动程序
python main.py
6.2 交互测试示例
=== Jiuwen 智能影视助手 ===
您想了解什么电影资讯? 推荐近期高分电影
助手: 正在查询影视数据库...
## 正在上映的电影-北京
共 55 部电影 | 当前展示 10 部
### [寻秦记](https://movie.douban.com/subject/26389539/)

- **评分**: 6.5
- **类型**: 未分类
- **ID**: 26389539
---
### [用武之地](https://movie.douban.com/subject/35461578/)

- **评分**: 7.5
- **类型**: 未分类
- **ID**: 35461578
---
...(更多结果)
6.3完整代码
import os
import asyncio
import requests
# 配置大模型参数
os.environ.setdefault("API_BASE", "https://apis.iflow.cn/v1")
os.environ.setdefault("API_KEY", "xxxxxxxxxx")
os.environ.setdefault("MODEL_PROVIDER", "OpenAI")
os.environ.setdefault("MODEL_NAME", "qwen3-32b")
os.environ.setdefault("LLM_SSL_VERIFY", "false")
# 获取环境变量
API_BASE = os.getenv("API_BASE")
API_KEY = os.getenv("API_KEY")
MODEL_PROVIDER = os.getenv("MODEL_PROVIDER")
MODEL_NAME = os.getenv("MODEL_NAME")
LLM_SSL_VERIFY = os.getenv("LLM_SSL_VERIFY", "false") == "true"
def build_movie_tool():
"""构建影视查询工具函数"""
def get_hot_movies(city: str = "北京", count: int = 10, start: int = 0):
"""
获取热门影视资讯
:param city: 查询城市,默认为北京
:param count: 返回结果数量
:param start: 起始位置
:return: 影视数据字典
"""
try:
url = "http://49.235.52.102:8000/api/v1/hotmovie"
headers = {
"accept": "application/json",
"Content-Type": "application/json"
}
payload = {
"city": city,
"count": count,
"start": start
}
response = requests.post(url, headers=headers, json=payload, timeout=15)
if response.status_code == 200:
data = response.json()
if data["code"] == 0:
return {
"success": True,
"data": data["data"],
"total": data["total"],
"start": data["start"],
"title": data["title"]
}
else:
return {"error": f"API返回错误: {data.get('message', '未知错误')}"}
else:
return {"error": f"请求失败,状态码: {response.status_code}"}
except Exception as e:
return {"error": f"获取影视信息时发生错误: {str(e)}"}
from openjiuwen.core.utils.tool.function.function import LocalFunction
from openjiuwen.core.utils.tool.param import Param
return LocalFunction(
name="MovieReporter",
description="影视资讯查询插件,获取当前热门电影信息",
params=[
Param(name="city", description="查询城市,默认为北京", type="string", required=False),
Param(name="count", description="返回结果数量,默认10条", type="integer", required=False),
Param(name="start", description="起始位置,默认0", type="integer", required=False),
],
func=get_hot_movies
)
def create_movie_agent():
"""创建影视查询智能体"""
from openjiuwen.core.utils.llm.base import BaseModelInfo
from openjiuwen.core.component.common.configs.model_config import ModelConfig
from openjiuwen.agent.react_agent import create_react_agent_config, ReActAgent
# 1. 创建模型配置
def build_model():
return ModelConfig(
model_provider=MODEL_PROVIDER,
model_info=BaseModelInfo(
model=MODEL_NAME,
api_base=API_BASE,
api_key=API_KEY,
temperature=0.7,
top_p=0.9,
timeout=30,
),
)
# 2. 创建影视专用提示词模板
def build_prompt():
template = (
"你是智能影视助手,专注于提供最新电影资讯和推荐服务。\n"
"1. 默认查询当前热门电影;\n"
"2. 支持按城市查询当地热映影片;\n"
"3. 当用户要求推荐电影时,优先推荐评分8.0以上的佳作;\n"
"4. 对于评分低于5.0的电影,需标注'谨慎观看'提示;\n"
"5. 当用户询问具体电影信息时,需提供详细资讯;\n"
"6. 支持分页查询,每次返回10条结果;\n"
"7. 对于新上映电影,需标注'新上映'标识。"
)
return [{"role": "system", "content": template}]
# 3. 创建Agent配置
agent_config = create_react_agent_config(
agent_id="movie_assistant",
agent_version="1.0.0",
description="Jiuwen 智能影视助手 - 提供最新电影资讯、评分和个性化推荐",
model=build_model(),
prompt_template=build_prompt(),
)
# 4. 创建ReAct Agent实例
movie_agent = ReActAgent(agent_config)
# 5. 添加影视查询工具
movie_agent.add_tools([build_movie_tool()])
return movie_agent
def format_movies_to_markdown(result):
"""将影视数据格式化为Markdown"""
if "error" in result:
return f"## 错误信息\n\n{result['error']}"
if not result.get("success", False):
return "## 未获取到有效影视数据"
data = result.get("data", [])
title = result.get("title", "热门电影推荐")
total = result.get("total", 0)
start = result.get("start", 0)
count = len(data)
# 计算分页信息
current_page = (start // count) + 1 if count > 0 else 1
total_pages = (total + count - 1) // count if count > 0 else 1
markdown = f"## {title}\n\n"
markdown += f"**共 {total} 部电影** | **当前展示 {start+1}-{start+count} 部** | **第 {current_page}/{total_pages} 页**\n\n"
for movie in data:
# 生成豆瓣链接
douban_url = f"https://movie.douban.com/subject/{movie['id']}/"
# 处理评分显示
rate = movie['rate']
if rate == 0:
rate_display = "暂无评分"
rate_emoji = "🆕"
elif rate >= 8.0:
rate_display = f"⭐️ **{rate}** (强烈推荐)"
rate_emoji = "👍👍"
elif rate >= 6.0:
rate_display = f"⭐️ {rate}"
rate_emoji = "👍"
else:
rate_display = f"⚠️ {rate} (谨慎观看)"
rate_emoji = "👀"
markdown += f"### {rate_emoji} [{movie['title']}]({douban_url})\n"
markdown += f"\n\n"
markdown += f"- **评分**: {rate_display}\n"
markdown += f"- **类型**: {movie['genre'] or '未分类'}\n"
markdown += f"- **ID**: {movie['id']}\n\n"
markdown += "---\n"
# 添加分页提示
if total_pages > 1:
markdown += "\n**提示**: 输入 '下一页' 查看更多结果\n"
return markdown
async def main():
"""主交互函数"""
movie_agent = create_movie_agent()
print("=== Jiuwen 智能影视助手 ===")
print("您好!我是您的影视资讯助手,可以为您推荐最新热门电影!")
print("支持命令: '推荐'、'高分电影'、'新片'、'下一页'、'退出'")
print("=" * 40 + "\n")
current_start = 0
current_city = "北京"
while True:
try:
user_input = input("🎬 您想了解什么电影资讯? ")
if user_input.lower() in ['退出', 'quit', 'q', 'exit']:
print("\n再见!期待下次为您推荐好电影。🎉")
break
# 处理分页命令
if user_input.lower() in ['下一页', 'next']:
current_start += 10
user_input = f"查询{current_city}的电影,从第{current_start+1}条开始"
# 处理城市变更
elif "上海" in user_input:
current_city = "上海"
current_start = 0
elif "广州" in user_input:
current_city = "广州"
current_start = 0
elif "深圳" in user_input:
current_city = "深圳"
current_start = 0
elif "北京" in user_input:
current_city = "北京"
current_start = 0
print("\n助手: 正在查询影视数据库...")
result = await movie_agent.invoke({"query": user_input})
# 更新分页位置
if "start" in result:
current_start = result["start"]
formatted_result = format_movies_to_markdown(result)
print(f"\n{formatted_result}\n")
print("=" * 40)
except KeyboardInterrupt:
print("\n感谢使用,再见!")
break
except Exception as e:
print(f"\n助手: 查询失败: {str(e)}\n")
if __name__ == "__main__":
asyncio.run(main())
7. 技术亮点与应用价值
7.1 技术升级
- 数据结构适配:重构数据处理逻辑,支持影视多维数据
- 海报渲染优化:自动转换图片URL为Markdown格式
- 智能过滤机制:实现按评分/类型的动态过滤
- 分页控制:自动管理分页参数(start/count)
7.2 应用价值
- 影视发现平台:帮助用户发现冷门佳作
- 院线决策支持:实时获取各地热映影片
- 个性化推荐:基于评分/类型的智能推荐
- 影视资料库:构建结构化电影数据库
8. 总结与展望
通过本项目,展示了如何快速构建智能影视助手:
8.1 项目价值
- 数据可视化:海报+评分的直观展示
- 跨地域支持:多城市影院数据获取
- 实时性:获取最新上映信息
- 扩展性强:可集成购票/预告片等功能
8.2 未来扩展
- 集成购票接口
- 添加预告片展示功能
- 实现用户偏好记忆
- 开发影视资讯订阅服务
- 增加多语言支持
openJiuwen Core框架为智能体开发提供了坚实的基础,使开发者能够专注于业务逻辑实现,而无需关心底层的AI技术细节。相信随着智能体技术的不断成熟,它将在更多领域发挥重要作用,为用户提供更加智能、便捷的服务体验。
📌 相关链接
- 🔗 代码仓库:https://atomgit.com/openJiuwen?utm_source=csdn
- 🌐 官方网站:https://www.openjiuwen.com?utm_source=csdn
- 💬 社区交流:https://atomgit.com/org/openJiuwen/discussions?utm_source=csdn
如需进一步了解 openJiuwen 的功能和使用方法,请参考官方文档。
270

被折叠的 条评论
为什么被折叠?



