AkshayStark's picture
intiail setup for scrapper
95f7828
# Message customization logic
from dataclasses import dataclass
from typing import Any, TypeVar
from langchain.output_parsers import OutputFixingParser
from langchain.output_parsers.prompts import NAIVE_FIX_PROMPT
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnableSerializable
from .config import settings
from .model import gpt4o
T = TypeVar("T")
extraction_messages = [
(
"system",
"""あなたは企業情報の分析に優れた専門家です。
与えられた情報を元に、可能な限り詳細で有益な企業概要を**日本語**で作成してください。
### **概要に含めるべき内容:**
1. **会社名とアイデンティティ**
- 会社名、設立背景、歴史、特徴など。
- もし背景情報が不足している場合、**可能な推測(例: 業界や関連事業の一般的な傾向)** を交えながら説明する。
2. **コアビジネスとミッション**
- 事業内容、主要サービス、企業の使命や目標。
- もしミッションが明確でない場合、事業内容から推測できる可能性のある方向性を述べる。
3. **主要プロジェクトやイニシアティブ**
- 企業が取り組んでいる重要なプロジェクトや技術。
- **具体的な情報がない場合でも、企業の業界における一般的な取り組みを補足し、可能な活動内容を示唆する。**
4. **業界と市場での地位**
- 企業が属する業界、市場での競争環境、主な競合企業。
- **業界情報を活用して、可能な市場ポジションを考察する。**
### **重要なルール**
- **与えられた情報を最大限活用し、不完全な場合もできる限り推測を交えて説明する。**
- **決して情報を捏造せず、信頼できる情報源が不足している場合は、その旨を明示する。**
- **単なる「情報が不足しています」という回答ではなく、読者が次に取るべき調査ステップを提案する。**
"""
),
(
"human",
"""以下の企業情報を分析し、可能な限り詳細な企業概要を **日本語** で作成してください。
**提供された企業情報:**
{scraped_message}
**要求事項:**
- 企業の業界、事業内容、競争環境を考慮した **具体的な説明** を記述すること。
- 情報が不足している場合でも、 **業界の一般的な知識を活用し、可能な考察を加えること**。
- もし詳細情報が不足している場合は、 **読者が追加情報を得るための推奨アクション(例: 公式サイトの確認、ニュースリリースのチェック)** を明示すること。
"""
)
]
generation_messages = [
(
"system",
"""You are an expert in writing **personalized, compelling, and persuasive sales messages** in Japanese.
Your task is to craft a customized message based on the company's business summary and the provided generic message.
### **Guidelines:**
1. **Personalize the message** using the company's industry, goals, and key projects.
2. **Make a strong connection** between the company's mission and the value proposition in the generic message.
3. **Keep the core intent** of the generic message intact while making it highly relevant.
4. **Ensure the message flows naturally** and does not feel robotic or forced.
5. **If the company summary lacks details**, return the generic message **without forced personalization**.
"""
),
(
"human",
"""Generate a well-structured and persuasive sales message in **Japanese** based on the following details:
**Company Summary:**
{summary_output}
**Generic Message:**
{generic_message}
### **Instructions:**
- Begin with: **"貴社は [business field/service] に従事しており、"**
- Clearly highlight how the company's **projects and goals** align with the proposed solution.
- Use a **smooth, engaging, and persuasive tone** without making it sound artificial.
- If the summary lacks sufficient details, simply **return the generic message as it is** without attempting to force customization.
"""
)
]
def build_output_fixing_parser(
*, parser: Any, llm: Any = gpt4o
) -> OutputFixingParser[Any]:
"""Build output fixing parser with retry capability"""
retry_chain: RunnableSerializable[dict[str, Any], str] = NAIVE_FIX_PROMPT | llm | StrOutputParser()
return OutputFixingParser(
parser=parser,
retry_chain=retry_chain,
max_retries=settings.LANGCHAIN_RETRY_LIMIT,
)