基于小红书风格的城市图文介绍小助手

最近在学习Agent的一些知识,了解到了modelscop-Agent的开源框架。感觉还是蛮有意思,就基于此做了一个有趣的小助手。只要用户输入城市名称,该小助手便可以生成一篇该城市的小红书风格的图文介绍。

希望写下博客记录一下自己的学习历程,本人刚开始写博客,有很多疏漏,希望大家多多包容。后面会继续更新关于Agent的一些有趣小项目,希望对该方向比较感兴趣的同学,可以关注一波。

目录

前言 

主要功能

主要代码

环境配置:

环境变量的配置的方法

Linux系统

windows系统

Agent的配置

Agent初始化

回复逻辑

界面设计

结果

🌃 北京城市风光 —— 首都的魅力之旅

总结

附录——完整代码


前言 

关于modelscope-agent:

Modelscope-Agent是一个可定制的、可扩展的Agent代码框架。单Agent具有角色扮演、LLM调用、工具使用、规划、记忆等能力。 主要具有以下特点:

简单的 Agent 实现流程:仅需指定角色描述、 LLM 名称、工具名列表,即可实现一个 Agent 应用,框架内部自动实现工具使用、规划、记忆等工作流的编排。
丰富的模型和工具:框架内置丰富的 LLM 接口,例如 Dashscope Modelscope 模型接口, OpenAI 模型接口等。内置丰富的工具,例如 代码运行 天气查询 文生图 网页解析 等,方便定制专属 Agent
统一的接口和高扩展性:框架具有清晰的工具、 LLM 注册机制,方便用户扩展能力更加丰富的 Agent 应用。
低耦合性:开发者可以方便的直接使用内置的工具、 LLM 、记忆等组件,而不需要绑定更上层的 Agent

主要功能

用户只需输入想要了解的城市名称,该小助手即可生成小红书类似的图文介绍。当输入“北京”时,其效果如下:

主要代码

环境配置:

import os
import gradio as gr
from modelscope_agent.agents.role_play import RolePlay

ZHIPU_API_KEY = os.environ.get('ZHIPU_API_KEY')
DASHSCOPE_API_KEY = os.environ.get('DASHSCOPE_API_KEY')

首先需要去下载modelscope-Agent框架的代码,其链接为:https://github.com/modelscope/modelscope-agent

配置好环境,python的版本需要3.9以上,按照要求安装需要的库。去相应的平台上获取需要的API-KEY,我这里用的是智谱的API,新人用户会有2千万token的免费额度,当然阿里云的通义系列模型也可以,不过我由于之前已经用过,现在送的额度过期了。

环境变量的配置的方法

为了安全,建议将密钥添加到环境变量中,

Linux系统

可以通过以下命令:

# 用您的 DashScope API-KEY 代替 YOUR_DASHSCOPE_API_KEY
export DASHSCOPE_API_KEY="YOUR_DASHSCOPE_API_KEY"

该命令是对当前用户添加永久性环境变量,使得在该用户的新会话中也可以使用该环境变量。

或直接运行以下命令将上述命令语句添加到~/.bashrc中:

# 用您的 DashScope API-KEY 代替 YOUR_DASHSCOPE_API_KEY
echo "export DASHSCOPE_API_KEY='YOUR_DASHSCOPE_API_KEY'" >> ~/.bashrc

添加完成后,您可以运行以下命令使得环境变量生效:

source ~/.bashrc

您可以新建立一个会话,运行以下命令检查环境变量是否生效:

echo $DASHSCOPE_API_KEY
windows系统

可以使用CMD中的命令行添加DashScope的API-KEY为环境变量,当在CMD中为当前用户添加永久性环境变量时,可以运行以下命令:

# 用您的 DashScope API-KEY 代替 YOUR_DASHSCOPE_API_KEY
setx DASHSCOPE_API_KEY "YOUR_DASHSCOPE_API_KEY"

然后新建立一个会话,运行以下命令检查环境变量是否生效:

echo %DASHSCOPE_API_KEY%

Agent的配置

Agent初始化
#Agent的描述
role_template_city = '你是城市介绍小助手,可以根据提供的城市名称介绍任何城市,包括城市历史、城市文化、城市交通、城市生活、城市环境等方面。记住你仅仅只需要输出文字内容。'
role_template_picture = '你是城市图片生成小助手,可以调用图片生成工具,根据提供的城市描述生成2张图片,图片尺寸为 512*512。记住你仅仅只需要输出图片链接。'
role_template_redbook = '你是图文排版小助手,可以根据提供的城市描述和2张该城市图片,排版成图文格式,类似小红书风格的形式。'

# LLM配置
llm_config = {'model': 'GLM-4-0520', 'model_server': 'zhipu'}

# 工具列表
function_list = ['image_gen']

# 初始化Agent
city= RolePlay(llm=llm_config, instruction=role_template_city)
picture = RolePlay(llm=llm_config, instruction=role_template_picture , function_list=function_list)
redbook = RolePlay(llm=llm_config, instruction=role_template_redbook)

我一共设置了三个大模型,其实不需要设置这么多,我将任务进行了分解,可以更好的完成总任务。

回复逻辑
def chat(city1, history):
    history = history or []
    city_prompt = f'城市 {city1}'
    city_response_stream = city.run(city_prompt)
    city_response = ''
    for chunk in city_response_stream:
        city_response += chunk

    picture_prompt = f'{city1}城市描述为:{city_response}'
    picture_response_stream = picture.run(picture_prompt)
    picture_response = ''
    for chunk in picture_response_stream:
        picture_response += chunk

    message = f'{city1}城市描述为:{city_response},城市图片为:{picture_response}'
    response_generator = redbook.run(message)
    history.append((message, ""))
    for chunk in response_generator:
        history[-1] = (message, history[-1][1] + chunk)
        yield history
    return

界面设计

为了更好的与设计的Agent交互,设计一个简单的交互界面是比较主要的,可以使用gradio库,可以快速构建出一个交互界面。

代码为:

with gr.Blocks() as demo:
    gr.Markdown("# <center>基于小红书风格的城市介绍</center>")
    gr.Markdown("请输入城市,我将为你提供关于该城市的小红书风格介绍。")
    chatbot = gr.Chatbot(height=350)
    msg = gr.Textbox(label="输入您的问题")
    with gr.Row():
        submit = gr.Button("提交")
        clear_button = gr.Button("清除对话")

    msg.submit(chat, [msg, chatbot], [chatbot])
    submit.click(chat, [msg, chatbot], [chatbot])
    clear_button.click(clear_chat, outputs=[chatbot, msg])

def clear_chat():
    return None, ""

其结果为:

结果

当输入文本为“北京”时,小助手输出的结果为如下:

以下是北京城市的图文排版,类似小红书风格的格式:


🌃 北京城市风光 —— 首都的魅力之旅

📜 城市历史与文化
北京,这座拥有3000多年历史的古都,见证了中国的历史变迁。故宫、天坛、颐和园等地标性建筑,无不透露出深厚的历史文化底蕴。同时,作为文化中心,北京融合了传统与现代,798艺术区、国家大剧院等现代文化场所,让艺术在这里绽放。

🚗 城市交通
北京的交通网络四通八达,地铁、公交、道路系统完善。未来,城市副中心站综合交通枢纽的建设,将进一步提升交通的便捷性。

🏠 城市生活
在这里,国际化大都市的繁华与便利触手可及。尽管面临交通拥堵等挑战,但北京正通过智能交通系统等措施,让城市生活更加宜居。

🌳 城市环境
环境治理让北京的空气质量得到显著改善,绿化面积的增加,为居民提供了更好的生活环境。

以下是一些北京的城市风光:

📸 留下你的足迹
北京的每一条街道,每一个角落,都有故事等你来发现。不妨亲自走一走,感受这座城市的魅力。


这样的排版风格,既展示了北京的城市特色,也融入了温馨的旅游提示,非常适合在小红书等社交平台上分享。

总结

modelscope-agent比较易上手,功能也比较全面,对于刚了解agent的人来说,可以快速学习搭建自己的agent,后面会继续更新关于agent的一些有趣的小项目。

附录——完整代码

import os
import gradio as gr
from modelscope_agent.agents.role_play import RolePlay

ZHIPU_API_KEY = os.environ.get('ZHIPU_API_KEY')
DASHSCOPE_API_KEY = os.environ.get('DASHSCOPE_API_KEY')

#Agent的描述
role_template_city = '你是城市介绍小助手,可以根据提供的城市名称介绍任何城市,包括城市历史、城市文化、城市交通、城市生活、城市环境等方面。记住你仅仅只需要输出文字内容。'
role_template_picture = '你是城市图片生成小助手,可以调用图片生成工具,根据提供的城市描述生成2张图片,图片尺寸为 512*512。记住你仅仅只需要输出图片链接。'
role_template_redbook = '你是图文排版小助手,可以根据提供的城市描述和2张该城市图片,排版成图文格式,类似小红书风格的形式。'

# LLM配置
llm_config = {'model': 'GLM-4-0520', 'model_server': 'zhipu'}

# 工具列表
function_list = ['image_gen']

# 初始化Agent
city= RolePlay(llm=llm_config, instruction=role_template_city)
picture = RolePlay(llm=llm_config, instruction=role_template_picture , function_list=function_list)
redbook = RolePlay(llm=llm_config, instruction=role_template_redbook)


def chat(city1, history):
    history = history or []
    city_prompt = f'城市 {city1}'
    city_response_stream = city.run(city_prompt)
    city_response = ''
    for chunk in city_response_stream:
        city_response += chunk

    picture_prompt = f'{city1}城市描述为:{city_response}'
    picture_response_stream = picture.run(picture_prompt)
    picture_response = ''
    for chunk in picture_response_stream:
        picture_response += chunk

    message = f'{city1}城市描述为:{city_response},城市图片为:{picture_response}'
    response_generator = redbook.run(message)
    history.append((message, ""))
    for chunk in response_generator:
        history[-1] = (message, history[-1][1] + chunk)
        yield history
    return

def clear_chat():
    return None, ""

with gr.Blocks() as demo:
    gr.Markdown("# <center>基于小红书风格的城市介绍</center>")
    gr.Markdown("请输入城市,我将为你提供关于该城市的小红书风格介绍。")
    chatbot = gr.Chatbot(height=350)
    msg = gr.Textbox(label="输入您的问题")
    with gr.Row():
        submit = gr.Button("提交")
        clear_button = gr.Button("清除对话")

    msg.submit(chat, [msg, chatbot], [chatbot])
    submit.click(chat, [msg, chatbot], [chatbot])
    clear_button.click(clear_chat, outputs=[chatbot, msg])

demo.queue()
demo.launch()

  • 32
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值