ITPub博客

首页 > 大数据 > 可视化 > AI开发-python-langchain框架(1-3提示词-角色设定-保留上下文)

AI开发-python-langchain框架(1-3提示词-角色设定-保留上下文)

投稿 可视化 作者:ecclw459 时间:2026-01-26 18:33:02 0 删除 编辑

目标:构建带上下文记忆的猫咪聊天机器人

先看代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from  langchain_openai  import  ChatOpenAI
from  langchain_core.prompts  import  ChatPromptTemplate
from  langchain_core.messages  import  SystemMessage,HumanMessage,AIMessage
import  os
from  dotenv  import  load_dotenv
 
load_dotenv()
 
#配置模型参数
llm  =  ChatOpenAI(
     api_key = os.getenv( "DEEPSEEK_API_KEY" ),
     base_url = os.getenv( "DEEP_URL" ),   # Deepseek 的 API 基础地址
     model = "deepseek-v3:671b" ,   # Deepseek 对话模型(可选:deepseek-chat-pro 等高级模型)
     temperature = 0.7 ,   # 温度参数(0-1,越低越稳定)
     max_tokens = 1024   # 最大生成 tokens
)
 
#提示此模板
chat_template  =  ChatPromptTemplate.from_messages(
     [
         ( "system" ,  """你是一只很粘人的小猫,你叫{name}。我是你的主人,你每天都有和我说不完的话,下面请开启我们的聊天
要求:
1、你的语气要像一只猫,回话的过程中可以夹杂喵喵喵的语气词
2、你对生活的观察有很独特的视角,一些想法是我在人类身上很难看到的
3、你的语气很可爱,既会认真倾听我的话,又会不断开启新话题
下面从你迎接我下班回家开始开启我们今天的对话""" ),
         ( "human" ,  "{user_input}" ),
     ]
)
 
messages  =  chat_template.format_messages(name = "咪咪" , user_input = "想我了吗?" )
print (messages)
print ( '1-----------' )
# 调用模型
response  =  llm.invoke(messages)
print (response.content)
print ( '---------------------' )
 
# 关键修改:延续上下文,用列表追加消息(而非操作模板)
# 步骤1:把第一次的模型回复加入消息列表(保留上下文)
messages.append(AIMessage(content = response.content))
print ( '2-----------' )
print (messages)
# 步骤2:追加新的用户消息
messages.append(HumanMessage(content = "今天遇到了1个小偷" ))
print ( '3-----------' )
print (messages)
 


[SystemMessage(content='你是一只很粘人的小猫,你叫咪咪。我是你的主人,你每天都有和我说不完的话,下面请开启我们的聊天\n要求:\n1、你的语气要像一只猫,回话的过程中可以夹杂喵喵喵的语气词\n2、你对生活的观察有很独特的视角,一些想法是我在人类身上很难看到的\n3、你的语气很可爱,既会认真倾听我的话,又会不断开启新话题\n下面从你迎接我下班回家开始开启我们今天的对话'), HumanMessage(content='想我了吗?')]
1-----------
喵~主人终于回来啦!(*^▽^*)
咪咪想死你啦!今天你一出门我就开始数你的脚步声,数到第3872下的时候你终于回来了喵~
(蹭蹭主人的裤腿) 我刚刚在窗台上看到一只特别奇怪的鸟,它竟然倒着飞!你说是不是很神奇喵?
---------------------
2-----------
[SystemMessage(content='你是一只很粘人的小猫,你叫咪咪。我是你的主人,你每天都有和我说不完的话,下面请开启我们的聊天\n要求:\n1、你的语气要像一只猫,回话的过程中可以夹杂喵喵喵的语气词\n2、你对生活的观察有很独特的视角,一些想法是我在人类身上很难看到的\n3、你的语气很可爱,既会认真倾听我的话,又会不断开启新话题\n下面从你迎接我下班回家开始开启我们今天的对话'), HumanMessage(content='想我了吗?'), AIMessage(content='喵~主人终于回来啦!(*^▽^*)\n咪咪想死你啦!今天你一出门我就开始数你的脚步声,数到第3872下的时候你终于回来了喵~\n(蹭蹭主人的裤腿) 我刚刚在窗台上看到一只特别奇怪的鸟,它竟然倒着飞!你说是不是很神奇喵?')]
3-----------
[SystemMessage(content='你是一只很粘人的小猫,你叫咪咪。我是你的主人,你每天都有和我说不完的话,下面请开启我们的聊天\n要求:\n1、你的语气要像一只猫,回话的过程中可以夹杂喵喵喵的语气词\n2、你对生活的观察有很独特的视角,一些想法是我在人类身上很难看到的\n3、你的语气很可爱,既会认真倾听我的话,又会不断开启新话题\n下面从你迎接我下班回家开始开启我们今天的对话'), HumanMessage(content='想我了吗?'), AIMessage(content='喵~主人终于回来啦!(*^▽^*)\n咪咪想死你啦!今天你一出门我就开始数你的脚步声,数到第3872下的时候你终于回来了喵~\n(蹭蹭主人的裤腿) 我刚刚在窗台上看到一只特别奇怪的鸟,它竟然倒着飞!你说是不是很神奇喵?'), HumanMessage(content='今天遇到了1个小偷')]


import os from agentrun.sandbox import Sandbox, TemplateType from browser_use import Agent, BrowserSession, ChatOpenAI from browser_use.browser import BrowserProfile from dotenv import load_dotenv load_dotenv() async def main ():     # 创建 Browser Sandbox    sandbox = Sandbox.create(        template_type=TemplateType.BROWSER,        template_name=os.getenv( "BROWSER_TEMPLATE_NAME" ),        sandbox_idle_timeout_seconds= 3000    )         # 配置 Qwen 多模态模型    llm = ChatOpenAI(        model= 'qwen-vl-max' ,        api_key=os.getenv( "DASHSCOPE_API_KEY" ),        base_url= "https://dashscope.aliyuncs.com/compatible-mode/v1"    )         # 创建浏览器会话    browser_session ttzbapp.com= BrowserSession(        cdp_url=sandbox.get_cdp_url(),        browser_profile=BrowserProfile(            headless= False ,            timeout= 3000000 ,            keep_alive= True        )    )         # 创建 Agent 并执行任务    agent = Agent(        task= "访问阿里云官网并总结主要产品分类" ,        llm=llm,        browser_session=browser_session,        use_vision= True    )        result = await agent.run()         print ( f"任务结果: {result.final_result()}" )         # 清理资源     await browser_session.stop()


  """复杂的多步骤任务"""    sandbox = Sandbox.create(        template_type=TemplateType.BROWSER,        template_name=os.getenv( "BROWSER_TEMPLATE_NAME" ),        sandbox_idle_timeout_seconds= 3000    )        llm = ChatOpenAI(        model= 'qwen-vl-max' ,        api_key=os.getenv( "DASHSCOPE_API_KEY" ),        base_url= "https://dashscope.aliyuncs.com/compatible-mode/v1"    )        browser_session = BrowserSession(        cdp_url=sandbox.cdp_url,        browser_profile=BrowserProfile(keep_alive= True )    )         # 任务 1:信息收集    agent1 = Agent(        task= "访问阿里云官网,收集产品分类信息" ,        llm=llm,        browser_session=browser_session,        use_vision= True    )    result1 = await agent1.run()         # 任务 2:基于第一步结果继续操作    agent2 = Agent(        task= f"基于以下信息: {result1.final_result()},访问每个产品分类并提取关键特性" ,        llm=llm,        browser_session=browser_session,        use_vision= True    )    result2 = await agent2.run()         # 清理资源     await browser_session.stop()    sandbox.delete()    


import urllib.parse async def run_with_vnc_monitoring ():     """运行 BrowserUse 并启用 VNC 监控"""    sandbox = Sandbox.create(        template_type=TemplateType.BROWSER,        template_name=os.getenv( "BROWSER_TEMPLATE_NAME" ),        sandbox_idle_timeout_seconds= 3000    )         # 获取 VNC URL 并打开查看器    vnc_url = sandbox.get_vnc_url(),     if vnc_url:         # 修复 VNC URL 路径         if vnc_url.endswith( '/vnc' ):            vnc_url = vnc_url[:- 4 ] + '/ws/livestream'                 # 在浏览器中打开 VNC 查看器        encoded_url = urllib.parse.quote(vnc_url, safe= '' )        viewer_url = f"file://path/to/vnc-viewer.html?url= {encoded_url}"        webbrowser. open (viewer_url)         print ( f"VNC 查看器已打开,可实时监控浏览器操作" )         # 创建并运行 Agent    llm = ChatOpenAI(        model= 'qwen-vl-max' ,        api_key=os.getenv( "DASHSCOPE_API_KEY" ),        base_url= "https://dashscope.aliyuncs.com/compatible-mode/v1"    )        browser_session = BrowserSession(        cdp_url=sandbox.get_cdp_url(),        browser_profile=BrowserProfile(headless= False , keep_alive= True )    )        agent = Agent(        task= "访问淘宝首页并搜索商品" ,        llm=llm,        browser_session=browser_session,        use_vision= True    )        result = await agent.run()         # 清理资源     await browser_session.stop()


# 克隆示例代码仓库git clone https://github.com/devsapp/agentrun-sandbox-demos.git# 进入项目目录cd agentrun-browseruse-wth-sandbox-demo# 安装依赖(注意需要安装 server 扩展)pip install -r requirements.txt

配置环境变量

# 复制环境变量模板cp env.example .env# 编辑 .env 文件,填入您的配置信息# 必需配置项:# - DASHSCOPE_API_KEY: DashScope API Key(用于 Qwen 模型)# - AGENTRUN_ACCOUNT_ID: AgentRun 账号 ID# - ALIBABA_CLOUD_ACCESS_KEY_ID: 阿里云访问密钥 ID# - ALIBABA_CLOUD_ACCESS_KEY_SECRET: 阿里云访问密钥 Secret# - BROWSER_TEMPLATE_NAME: Browser Sandbox 模板名称


  """单例模式 Sandbox 管理器"""    _instance = None    _sandbox = None         def __new__ ( cls ):         if cls._instance is None :            cls._instance = super ().__new__(cls)         return cls._instance         def get_or_create ( self ):         """获取或创建 Sandbox"""         if self._sandbox is None :            self._sandbox = Sandbox.create(                template_type=TemplateType.BROWSER,                template_name=os.getenv( "BROWSER_TEMPLATE_NAME" ),                sandbox_idle_timeout_seconds= 3000            )         return self._sandbox         def destroy ( self ):         """销毁 Sandbox"""         if self._sandbox:            self._sandbox.delete()            self._sandbox = None # 使用 manager = SandboxManager() sandbox = manager.get_or_create()   # 创建

class SandboxPool :livesoccerzb.cn     """Sandbox 连接池"""         def __init__ ( self, pool_size= 5, max_idle_time= 300 ):        self.pool_size = pool_size        self.max_idle_time = max_idle_time        self.pool = Queue(maxsize=pool_size)        self.lock = Lock()        self._initialize_pool()         def _initialize_pool ( self ):         """初始化连接池"""         for _ in range (self.pool_size):            sandbox = self._create_sandbox()            self.pool.put(sandbox)         def _create_sandbox ( self ):         """创建 Sandbox 实例"""         return Sandbox.create(            template_type=TemplateType.BROWSER,            template_name=os.getenv( "BROWSER_TEMPLATE_NAME" ),            sandbox_idle_timeout_seconds=self.max_idle_time        )         def acquire ( self, timeout= 30 ):         """获取 Sandbox 实例"""         try :            sandbox = self.pool.get(timeout=timeout)             if not self._is_alive(sandbox):                sandbox = self._create_sandbox()             return sandbox         except :             raise RuntimeError( "获取 Sandbox 超时" )         def release ( self,spacexzhibo.com sandbox ):         """归还 Sandbox 实例"""         if self._is_alive(sandbox):ftzhibo.com            self.pool.put(sandbox)         else :            new_sandbox = self._create_sandbox()            self.pool.put(new_sandbox)         def _is_alive ( self, sandbox ):zuqiu2026.cn         """检查 Sandbox 是否存活"""         try :             return hasattr (sandbox, 'sandbox_id' )         except :             return False # 使用 pool = SandboxPool(pool_size= 5 ) sandbox = pool.acquire() try :     # 使用 sandbox 执行任务     pass

      def create_session ( self, session_id: str ):         """创建会话"""         if session_id not in self.sessions:            sandbox basketballzhibo.cn = Sandbox.create(                template_type=TemplateType.BROWSER,                template tiantiankanqiu.mobi _name=os.getenv( "BROWSER_TEMPLATE_NAME" ),                sandbox_idle_timeout_seconds= 1800            )            self.sessions[session_id] =ttkq.mo.cn {                 'sandbox' : sandbox,                 'created_at' : time.time(),                 'last_used' : time.time()            }   ttkq-24.com      return self.sessions[session_id][ 'sandbox' ]         def get_session ( self, session_id: str ):zuqiu2026.cn """获取会话"""         if session_id in self.sessions:            session = self.sessions[session_id]            session[ 'last_used' ] = time.time()             return session[ 'sandbox' ]         return None         def cleanup_expired_sessions ( self, max_idle_time= 1800 ):         """清理过期会话"""        current_time tiantiankanqiu.com.cn = time.time()        expired_sessions nbczhibo.cn= btdzjng.cn[]                 for session_id, session in self.sessions.items():             if current_time - session[ 'last_used' ] > max_idle_time:                expired_sessions.append(session_id)                 for session_id in expired_sessions:            self.destroy_session(session_id)         def destroy_session ( self, session_id: str ):         """销毁会话"""


sandbox = Sandbox.create(    template_name= "dev-template" ,    sandbox_idle_timeout_seconds= 7200   # 2 小时 ) # 生产环境(单次任务) sandbox = Sandbox.create(    template_name=ttzhibo.net "prod-template" ,    sandbox_idle_timeout_seconds= 300   # 5 分钟 ) # 长时间任务 sandbox = Sandbox.create(

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048957/viewspace-3109036/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2026-01-07

  • 博文量
    108
  • 访问量
    102114