before_agent guideline
This commit is contained in:
parent
be264884a2
commit
bf9a49ecd8
@ -8,15 +8,10 @@ from typing import Any, Callable
|
|||||||
from langchain_core.callbacks import BaseCallbackHandler
|
from langchain_core.callbacks import BaseCallbackHandler
|
||||||
from langchain_core.outputs import LLMResult
|
from langchain_core.outputs import LLMResult
|
||||||
import logging
|
import logging
|
||||||
|
import re
|
||||||
|
|
||||||
logger = logging.getLogger('app')
|
logger = logging.getLogger('app')
|
||||||
|
|
||||||
class ThinkingCallbackHandler(BaseCallbackHandler):
|
|
||||||
"""自定义回调处理器,用于将模型响应内容转换为thinking格式"""
|
|
||||||
def on_llm_end(self, response: LLMResult, **kwargs) -> None:
|
|
||||||
"""在LLM调用结束后处理响应,将内容转换为thinking格式"""
|
|
||||||
logger.info("Successfully converted response content to thinking format")
|
|
||||||
|
|
||||||
class GuidelineMiddleware(AgentMiddleware):
|
class GuidelineMiddleware(AgentMiddleware):
|
||||||
def __init__(self, bot_id: str, model:BaseChatModel, prompt: str, robot_type: str, language: str, user_identifier: str):
|
def __init__(self, bot_id: str, model:BaseChatModel, prompt: str, robot_type: str, language: str, user_identifier: str):
|
||||||
self.model = model
|
self.model = model
|
||||||
@ -98,16 +93,16 @@ Action: Provide concise, friendly, and personified natural responses.
|
|||||||
|
|
||||||
guideline_prompt = self.get_guideline_prompt(convert_to_openai_messages(state['messages']))
|
guideline_prompt = self.get_guideline_prompt(convert_to_openai_messages(state['messages']))
|
||||||
|
|
||||||
# 创建回调处理器实例
|
|
||||||
thinking_handler = ThinkingCallbackHandler()
|
|
||||||
|
|
||||||
# 使用回调处理器调用模型
|
# 使用回调处理器调用模型
|
||||||
response = self.model.invoke(
|
response = self.model.invoke(
|
||||||
guideline_prompt,
|
guideline_prompt,
|
||||||
config={"callbacks": [thinking_handler]}
|
config={"callbacks": [BaseCallbackHandler()]}
|
||||||
)
|
)
|
||||||
|
|
||||||
response.additional_kwargs["thinking"] = response.content
|
# 提取<think>与</think>之间的内容作为thinking
|
||||||
|
|
||||||
|
match = re.search(r'<think>(.*?)</think>', response.content, re.DOTALL)
|
||||||
|
response.additional_kwargs["thinking"] = match.group(1).strip() if match else response.content
|
||||||
|
|
||||||
messages = state['messages']+[response]
|
messages = state['messages']+[response]
|
||||||
return {
|
return {
|
||||||
@ -123,16 +118,12 @@ Action: Provide concise, friendly, and personified natural responses.
|
|||||||
# 使用回调处理器调用模型
|
# 使用回调处理器调用模型
|
||||||
response = await self.model.ainvoke(
|
response = await self.model.ainvoke(
|
||||||
guideline_prompt,
|
guideline_prompt,
|
||||||
config={"callbacks": [ThinkingCallbackHandler()]}
|
config={"callbacks": [BaseCallbackHandler()]}
|
||||||
)
|
)
|
||||||
|
|
||||||
# 提取<think>与</think>之间的内容作为thinking
|
# 提取<think>与</think>之间的内容作为thinking
|
||||||
import re
|
|
||||||
match = re.search(r'<think>(.*?)</think>', response.content, re.DOTALL)
|
match = re.search(r'<think>(.*?)</think>', response.content, re.DOTALL)
|
||||||
if match:
|
response.additional_kwargs["thinking"] = match.group(1).strip() if match else response.content
|
||||||
response.additional_kwargs["thinking"] = match.group(1).strip()
|
|
||||||
else:
|
|
||||||
response.additional_kwargs["thinking"] = response.content
|
|
||||||
|
|
||||||
messages = state['messages']+[response]
|
messages = state['messages']+[response]
|
||||||
return {
|
return {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user