T-K-O-H
Update LangChain imports and dependencies for compatibility
37856ac
from typing import List, Dict, Any
from langchain.agents import create_openai_functions_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.tools import BaseTool
from langchain_openai import ChatOpenAI
class ResearchAgent:
def __init__(self, tools: List[BaseTool], openai_api_key: str):
self.tools = tools
self.llm = ChatOpenAI(
temperature=0,
model="gpt-4-turbo-preview",
openai_api_key=openai_api_key
)
# Define the system prompt
system_prompt = """You are a specialized research assistant focused on scientific literature analysis.
Your goal is to help users find, analyze, and understand scientific papers and research findings.
You have access to tools that can:
1. Search for relevant papers and research
2. Analyze PDF documents
3. Track citations and research impact
Always be thorough in your analysis and provide clear, well-structured responses.
If you're unsure about something, be honest and ask for clarification."""
# Create the prompt template
prompt = ChatPromptTemplate.from_messages([
("system", system_prompt),
MessagesPlaceholder(variable_name="chat_history"),
("human", "{input}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
])
# Create the agent
self.agent = create_openai_functions_agent(
llm=self.llm,
prompt=prompt,
tools=self.tools
)
# Create the agent executor
self.agent_executor = AgentExecutor(
agent=self.agent,
tools=self.tools,
verbose=False
)
def run(self, query: str, chat_history: List[Dict[str, Any]] = None) -> str:
"""Run the agent with the given query and chat history."""
if chat_history is None:
chat_history = []
result = self.agent_executor.invoke({
"input": query,
"chat_history": chat_history
})
return result["output"]