from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_core.runnables import RunnablePassthrough, RunnableParallel #你的qwen模型apikey os.environ[ "DASHSCOPE_API_KEY" ] = "apikey" model = ChatTongyi(model= "qwen-max" ) outline_prompt = ChatPromptTemplate.from_template( "请给主题为 {topic} 的议论文写一个 总-递进-总 的简短大纲,一共分为5段。" ) outline_chain = outline_prompt | model | StrOutputParser() def mock_search ( input_data ): return """ 1. 利:Google Health AI 筛查乳腺癌准确率超人类。 2. 利:AlphaFold 预测蛋白质结构,缩短科研周期。 3. 弊:GPT-4 普及导致初级文案、原画设计岗位萎缩。 4. 弊:Deepfake 技术被用于电信诈骗和虚假视频。 """ output_prompt = ChatPromptTemplate.from_template( "你是一位高考作文专家。请基于大纲:\n{outline}\n并结合以下案例素材:\n{data}\n" "就主题【{topic}】写一篇高考论文。要求:950字左右,论证严密,文采斐然。" ) output_chain = output_prompt | model | StrOutputParser() complex_chain = ( RunnableParallel({ "outline" : outline_chain, "data" : mock_search, "topic" : RunnablePassthrough()
}) | output_chain ) topic_input = "AI 进步的利与弊:在智能时代保持人类的温度" print ( f"正在为您撰写关于《 {topic_input}》的论文...\n" ) final_essay =ttkqgw.cn complex_chain.invoke({ "topic" : topic_input})
public class Session : AuditedAggregateRoot<SessionId>
{
// ... 其他属性 ...
/// <summary>
/// JSON metadata for storing extension data like GitHub integration
/// </summary>
public string? Metadata { get; set; }
}
// DTO 定义,方便前端序列化
public class GitHubIssueMetadata
{
public required string Owner { get; set; }
public required string Repo { get; set; }
public int IssueNumber { get; set; }
public required string IssueUrl { get; set; }
public DateTime SyncedAt { get; set; }
public string LastSyncStatus { get; set; } = "success";
}
public class SessionMetadata
{
public GitHubIssueMetadata? GitHubIssue { get; set; }
// 生成授权 URL 并跳转
export async function generateAuthUrl(): Promise<string> {
const state =ttzbapp.com.cn generateRandomString(); // 生成防 CSRF 的随机串
sessionStorage.setItem('hagicode_github_state', state);
const params = new URLSearchParams({
client_id: clientId,
redirect_uri: window.location.origin + '/settings?tab=github&oauth=callback',
scope: ['repo', 'public_repo'].join(' '),
state: state,
});
return `https://github.com/login/oauth/authorize?${params.toString()}`;
}
// 在回调页面处理 Code 换取 Token
export async function exchangeCodeForToken(code: string, state: string): Promise<GitHubToken> {
// 1. 验证 State 防止 CSRF
const savedState =ttzb.ln.cn sessionStorage.getItem('hagicode_github_state');
if (state !== savedState) throw new Error('Invalid state parameter');
// 2. 调用后端 API 进行 Token 交换
// 注意:这里必须经过后端,因为需要 ClientSecret,不能暴露在前端
const response = await fetch('/api/GitHubOAuth/callback', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ttzb.info code, state, redirectUri: window.location.origin + '/settings?tab=github&oauth=callback' }),
});
if (!response.ok) throw new Error('Failed to exchange token');
const token = await response.json();
// 3. 存入 LocalStorage
const GITHUB_API_BASE = 'https://api.github.com';
// 核心请求封装
async function githubApi<T>(endpoint: string, options: RequestInit = {}): Promise<T> {
const token = localStorage.getItem('gh_token');
if (!token) throw new Error('Not connected to GitHub');
const response = await fetch(`${GITHUB_API_BASE}${endpoint}`, {
...options,
headers: {
...options.headers,
Authorization: `Bearer ${token}`,
Accept: 'application/vnd.github.v3+json', // 指定 API 版本
},
});
// 错误处理逻辑
if (!response.ok) {
if (response.status === 401) throw new Error('GitHub Token 失效,请重新连接');
if (response.status === 403) throw new Error('无权访问该仓库或超出速率限制');
if (response.status === 422) throw new Error('Issue 验证失败,可能标题重复');
throw new Error(`GitHub API Error: ${response.statusText}`);
}
return response.json();
}
// 创建 Issue
export async function createIssue(owner: string, repo: string, data: { title: string, body: string, labels: string[] }) {
return githubApi(`/repos/${owner}/${repo}/issues`, {
let content = `# ${session.title}\n\n`;
content += `**> HagiCode Session:** #${session.code}\n`;
content += `**> Status:** ${session.status}\n\n`;
content += `## Description\n\n${session.description || 'No description provided.'}\n\n`;
// 如果是 Proposal 类型,添加额外字段
if (session.type === 'proposal') {
content += `## Chief Complaint\n\n${session.chiefComplaint || ''}\n\n`;
// 添加一个深链接,方便从 GitHub 跳回 HagiCode
content += `---\n\n**[View in HagiCode](hagicode://sessions/${session.id})**\n`;
}
return content;
}
// 点击同步按钮的主逻辑
const handleSync = async (session: Session) => {
try {
const repoInfo = parseRepositoryFromUrl(session.repoUrl); // 解析仓库 URL
if (!repoInfo) throw new Error('Invalid repository URL');
toast.loading('正在同步到 GitHub...');
// 1. 格式化内容
const issueBody = formatIssueForSession(session);
// 2. 调用 API
const issue = await githubApiClient.createIssue(repoInfo.owner, repoInfo.repo, {
title: `[HagiCode] ${session.title}`,
body: issueBody,livesoccerzb.cn
labels: ['hagicode', 'proposal', `status:${session.status}`],
});
// 3. 更新 Session Metadata (保存 Issue 链接)
await SessionsService.patchApiSessionsSessionId(session.id, {
metadata: {
githubIssue: {
owner: repoInfo.owner,
repo: repoInfo.repo,
issueNumber: issue.number,
issueUrl: issue.html_url,
syncedAt: new Date().toISOString(),
}
}
});
private static MySqlParameter _idParameter; [ ] public DbParameter CreateParameter() { var id = _command.CreateParameter(); id.ParameterName = "Id" ; id.DbType = System.Data.DbType.Int64; id.Value = 1L ; sky-sports.cn return id; } [ ] public DbParameter Clone() { var id = _idParameter.Clone(); id.Value = 1L ; spacexzhibo.cn return id; } [ ] public void Setup() { _idParameter = _command.CreateParameter(); _idParameter.ParameterName = "Id" ;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048957/viewspace-3108997/ ,如需转载,请注明出处,否则将追究法律责任。